Добрый день!
Работаю с конфигурацией ЗУП 3.1 на этапе внедрения. Столкнулся с одной задачей. Необходимо было разработать печатную форму для документа Кадровый перевод. Многие кадровики знают, что документ обладает большим количеством условий. Это и перевод на другую должность/подразделение, смена вида занятости, смена источника финансирования и т.д.
Также есть его многострочный вариант Кадровый перевод списком. Здесь для каждого сотрудника заводится строка в табличной части Сотрудники. И те же условия хранятся уже в не как реквизиты документа, а виде полей табличной части.
Так вот при формировании печатной формы, мне было необходимо проанализировать все возможные условия перед печатью. Для документа Кадровый перевод я воспользовался очень удобной функцией из общего модуля ОбщегоНазначения "ЗначенияРеквизитовОбъекта".
После, когда печатная форма была адаптирована для документа "Кадровый перевод", необходимо, чтобы эта печатная форма запустилась и через документ "Кадровый перевод списком". И вот тут столкнулся с тем, что аналогичной функции в БСП нет. Не могу утверждать на 100%, но вот в подсистеме базовой функциональности я не нашел.
Пришлось на скорую руку написать свою функцию. Пример кода приведен ниже:
На первом этапе мы формируем список реквизитов/полей и затем через условие передаем в ту или иную функцию в зависимости от типа документа. Тут конечно есть что доработать, по части поиска конкретной табличной части документа через методы БСП , но увы, я не обнаружил, поэтому пока оставлю все как есть.
СписокКомандИзменить = "ИзменитьПодразделениеИДолжность,ИзменитьТерриторию
|,ИзменитьГрафикРаботы,ИзменитьНачисления,ИзменитьЕжегодныеОтпуска
|,ИзменитьСведенияОДоговореКонтракте
|,ИзменитьВидЗанятости,ИзменитьДистанционнуюРаботу";
Если ДанныеДетальныхЗаписей.СсылкаНаОбъект.Метаданные().ТабличныеЧасти.Найти("Сотрудники") <> Неопределено Тогда
ВидИзменитьПолеКоллекция = ПолучитьРеквизитыТЧСписочногоДокумента(ДанныеДетальныхЗаписей.СсылкаНаОбъект.Сотрудники,СписокКомандИзменить);
Иначе
ВидИзменитьПолеКоллекция = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ДанныеДетальныхЗаписей.СсылкаНаОбъект,СписокКомандИзменить);
КонецЕсли;
Здесь уже представлена сама функция поиска и отбора конкретных полей табличной части документа.
Функция ПолучитьРеквизитыТЧСписочногоДокумента(ТЧ, Реквизиты);
РеквизитыПоТЧ = Новый Соответствие;
МассивРеквизитов = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Реквизиты,",",Истина,Истина);
Для каждого СтрокаТЧ Из ТЧ Цикл
СтруктураЗначений = Новый Структура;
Для каждого СтрокаМассива Из МассивРеквизитов Цикл
СтруктураЗначений.Вставить(СтрокаМассива,СтрокаТЧ[СтрокаМассива]);
КонецЦикла;
РеквизитыПоТЧ.Вставить(СтрокаТЧ.Сотрудник, СтруктураЗначений);
КонецЦикла;
Возврат РеквизитыПоТЧ;
КонецФункции
Конечно, нет предела совершенству, но в любом случае, вопрос я закрыл и печатная форма взлетела и для документа "Кадровый перевод списком".
В целом надеюсь что в перспективе разработчики БСП внесут аналогичный метод и для табличных частей объектов, как и для реквизитов.
Статья написана впервые. Опыт работы с редактором на начальном уровне, но есть чем делиться с сообществом, поэтому по мере возможности будут оттачивать навыки публикации статей.