Счет из плана счетов может иметь несколько субконто. Если надо вывести на форму поля для их ввода, то надо решить вопрос о скрытии лишних полей субконто (на случай если счет не имеет субконто), определит соответствующий тип субконто и задать заголовок для поля, в котором отобразить тип вводимого субконто.
Например, у документа есть реквизиты:
- Счет - тип ПланСчетовСсылка.ОсновнойПланСчетов. В плане счетов определено, что субконто может быть только 2.
- Субконто1 - тип Характеристика.ВидыСубконто
- Субконто2 - тип Характеристика.ВидыСубконто
В свойствах реквизитов Субконто1 и Субконто2 настраиваем связь по типу. Это свойство позволяет определить тип вводимого значения если реквизит имеет составной тип. У нас Характеристика.ВидыСубконто имеет составной тип.
Так как у счета 2 субконто, то в свойстве "Связь по типу" для субконто1 настраиваем "Элемент связи по типу" = 1, а для субконто2 значение 2. Это свяжет соответствующие реквизиты с аналитикой счета по нужному субконто.
Разместим реквизиты документа на форме. Наша задача, при выборе счета, настроить отображение полей для ввода субконто.
На событии "При изменении" поля Счет повесим процедуру:
&НаКлиенте
Процедура СчетПриИзменении(Элемент)
ВыбиратьТипСубконто();
УстановитьВидимостьСубконто();
КонецПроцедуры
&НаСервере
Процедура ВыбиратьТипСубконто()
ЧислоСубконто = Объект.Счет.ВидыСубконто.Количество();
Для Сч = 1 По ЧислоСубконто Цикл
ТипСубконто = Объект.Счет.ВидыСубконто[Сч - 1].ВидСубконто.ТипЗначения;
Элементы["Субконто" + Сч].ВыбиратьТип = (ТипСубконто.Типы().Количество() > 1);
Если ТипСубконто.ПривестиЗначение(Объект["Субконто" + Сч])
<> Объект["Субконто" + Сч] Тогда
Объект["Субконто" + Сч] =
ТипСубконто.ПривестиЗначение(Объект["Субконто" + Сч]);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура УстановитьВидимостьСубконто()
Для НомерСубконто = 1 по 2 Цикл
Если (НомерСубконто <= Объект.Счет.ВидыСубконто.Количество()) и (НЕ Объект.Счет.Пустая()) Тогда
Элементы["Субконто"+НомерСубконто].Заголовок = Строка(Объект.Счет.ВидыСубконто[НомерСубконто-1].ВидСубконто);
Элементы["Субконто"+НомерСубконто].Видимость = Истина;
Иначе
Элементы["Субконто"+НомерСубконто].Видимость = Ложь;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Как это работает:
ВыбиратьТипСубконто()
Сначала для выбранного счета определяем количество типов субконто.
Далее в цикле обходим все субконто счета:
1. Определяем тип субконто:
ТипСубконто = Объект.Счет.ВидыСубконто[Сч - 1].ВидСубконто.ТипЗначения;
2. Если тип субконто составной, то у соответствующего элемента покажем кнопку выбора типа:
Элементы["Субконто" + Сч].ВыбиратьТип = (ТипСубконто.Типы().Количество() > 1);
3.Приводим значение субконто к типу субконто если значение типа субконто не соответствует типу:
Если ТипСубконто.ПривестиЗначение(Объект["Субконто" + Сч]) <> Объект["Субконто" + Сч] Тогда
Объект["Субконто" + Сч] = ТипСубконто.ПривестиЗначение(Объект["Субконто" + Сч]);
КонецЕсли;
УстановитьВидимостьСубконто()
Обходим в цикле элементы, отображающие значения субконто.
Если счет заполнен и у него есть субконто (Если (НомерСубконто <= Объект.Счет.ВидыСубконто.Количество()) и (НЕ Объект.Счет.Пустая()) Тогда), то устанавливаем видимость и заголовок.
|