Сообщение
Andrew » 05 апр 2013, 10:32
Добрый день!
Итак, имеем задачу: есть заявка, и есть вкладка "Программные комплексы". Комплексы разные, и у них разные свои АРМЫ. Нужно "надати-скасувати" (выдать-забрать) определенные из них.
На первый взгляд хочется сделать так как вы описали - "Выбрали в одном поле одну запись, в зависимости от нее заполняется список армов" - это возможно, но крайне тяжело на практике, придется программировать зависимости и т.п.
Вместо этого есть другой подход:
1) Мы создаем базовый тип документа "Программный комплекс базовый":
-создаем тип документа "Программный комплекс базовый". В него не добавляем никаких полей.
-ставим свойство "Абстрактная" в "Истина" на вкладке объект у него - чтобы пользователи не могли его создавать
-Удаляем объект скрипта на данном типе документа (см.вкладку "Скрипты").
-В базовом типе документа должно быть поле "Надати-скасувати"
-В базовом типе документа должно быть поле "Армы". Оно справочное, но этот справочник реально применяться НЕ будет.
2) Мы создаем типы документа "Программный комплекс A", "Программный комплекс Б" (делаете свои правильные имена)
3) Каждый тип документа-комплекс наследуете от "Программный комплекс базовый"
(копировать-вставить ссылку на тип документа "Программный комплекс базовый" в ветку "Родительские категории" в ваш тип документа).
4) Чтобы сделать РАЗНОЕ поле "Армы" для каждого типа комплекса, нам нужно применить хитрость: создайте в каждом типе свое поле "Армы", на свой справочник.
Потом, откройте свойства поля "Армы" у БАЗОВОГО типа комплекса, и скопируйте себе "Идентификатор свойства" (он будет иметь вид шест.числа 0x8054). Также скопируйте "Уникальное имя" (оно будет, скорее всего "Армы").
Теперь идем на свое поле "Армы" уже в реальном комплексе, и идем на вкладку "Объект" поля, а далее -- заменяем "Идентификатор свойства" на тот, что в базовом,
и меняем если нужно "Уникальное имя".
Для чего это мы делали: FossDoc считает одинаковыми поля если у них один тег и одинаковое уникальное имя. В базовом "Программный комплекс базовый" у нас есть поле-заглушка "Армы", но мы должны придерживаться стиля - а именно иметь такое же поле в "реальных" типах документа, которые НАСЛЕДОВАНЫ от базового.
5) поле в Заявке "Программные комплексы" (по типу "Дочерние документы") делаете с таким расчетом, чтобы оно "хранило" в себе "Программный комплекс базовый".
В результате: когда человек нажмет "Создать" на вкладке "Программные комплексы", ему будет предложен ВЫБОР из списка, какой тип дочернего документа создавать. А именно: "Программный комплекс А" или "Программный комплекс Б". В каждом из ваших типов комплексов уже будет поле "Надати-скасувати" (оно пройдет по наследованию). Также, в каждом типе должно быть "свое" перекрытое поле "Армы", смотрящее на свой справочник, но имеющее одинаковый с базовым идентификатор тега и уникальное имя.
Теперь, когда ваши люди выбирают , скажем "Программный комплекс А", то у них просто не будет возможности выбрать НЕ тот вариант в поле "Армы", учитывая что поле в этом типе документа свое и смотрит на правильный справочник.