Пример аналогичной функции ЗначенияРеквизитовОбъектов в БСП для табличных частей

28.02.25

Разработка - БСП (Библиотека стандартных подсистем)

Столкнулся с тем, что в БСП не смог найти функцию аналогичной функции из общего модуля ОбщегоНазначения, которая бы вернула значения полей определенной табличной части.

Добрый день! 

Работаю с конфигурацией ЗУП 3.1 на этапе внедрения. Столкнулся с одной задачей. Необходимо было разработать печатную форму для документа Кадровый перевод. Многие кадровики знают, что документ обладает большим количеством условий. Это и перевод на другую должность/подразделение, смена вида занятости, смена источника финансирования и т.д.

Также есть его многострочный вариант Кадровый перевод списком. Здесь для каждого сотрудника заводится строка в табличной части Сотрудники. И те же условия хранятся уже в не как реквизиты документа, а виде полей табличной части.

Так вот при формировании печатной формы, мне было необходимо проанализировать все возможные условия перед печатью. Для документа Кадровый перевод я воспользовался очень удобной функцией из общего модуля ОбщегоНазначения "ЗначенияРеквизитовОбъекта".

После, когда печатная форма была адаптирована для документа "Кадровый перевод", необходимо, чтобы эта печатная форма запустилась и через документ "Кадровый перевод списком". И вот тут столкнулся с тем, что аналогичной функции в БСП нет. Не могу утверждать на 100%, но вот в подсистеме базовой функциональности я не нашел.

Пришлось на скорую руку написать свою функцию. Пример кода приведен ниже:

На первом этапе мы формируем список реквизитов/полей и затем через условие передаем в ту или иную функцию в зависимости от типа документа. Тут конечно есть что доработать, по части поиска конкретной табличной части  документа через методы БСП , но увы, я не обнаружил, поэтому пока оставлю все как есть.

СписокКомандИзменить = "ИзменитьПодразделениеИДолжность,ИзменитьТерриторию
	                   |,ИзменитьГрафикРаботы,ИзменитьНачисления,ИзменитьЕжегодныеОтпуска
					   |,ИзменитьСведенияОДоговореКонтракте
					   |,ИзменитьВидЗанятости,ИзменитьДистанционнуюРаботу";
	
	Если ДанныеДетальныхЗаписей.СсылкаНаОбъект.Метаданные().ТабличныеЧасти.Найти("Сотрудники") <> Неопределено Тогда 
		ВидИзменитьПолеКоллекция = ПолучитьРеквизитыТЧСписочногоДокумента(ДанныеДетальныхЗаписей.СсылкаНаОбъект.Сотрудники,СписокКомандИзменить);
	Иначе
		ВидИзменитьПолеКоллекция = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ДанныеДетальныхЗаписей.СсылкаНаОбъект,СписокКомандИзменить);
	КонецЕсли;	

Здесь уже представлена сама функция поиска и отбора конкретных полей табличной части документа.

Функция ПолучитьРеквизитыТЧСписочногоДокумента(ТЧ, Реквизиты);
	
	РеквизитыПоТЧ = Новый Соответствие;
	
	МассивРеквизитов = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Реквизиты,",",Истина,Истина);
	
	Для каждого СтрокаТЧ Из ТЧ Цикл
		
		СтруктураЗначений = Новый Структура;
		
		Для каждого СтрокаМассива Из МассивРеквизитов Цикл
			СтруктураЗначений.Вставить(СтрокаМассива,СтрокаТЧ[СтрокаМассива]);
		КонецЦикла;
	 	
		РеквизитыПоТЧ.Вставить(СтрокаТЧ.Сотрудник, СтруктураЗначений); 
	
	КонецЦикла;
		
		Возврат РеквизитыПоТЧ;
		
КонецФункции	

Конечно, нет предела совершенству, но в любом случае, вопрос я закрыл и печатная форма взлетела и для документа "Кадровый перевод списком".  

В целом надеюсь что в перспективе разработчики БСП внесут аналогичный метод и для табличных частей объектов, как и для реквизитов.

Статья написана впервые. Опыт работы с редактором на начальном уровне, но есть чем делиться с сообществом, поэтому по мере возможности будут оттачивать навыки публикации статей.

Пример кода ЗУП 3.1 БСП доработки

См. также

БСП (Библиотека стандартных подсистем) Программист Платные (руб)

Синтакс-помощник БСП - cправочник по библиотекам стандартных подсистем и электронных документов. В состав справочника входит описание экспортных процедур и функций, размещенных в областях кода ПрограммныйИнтерфейс БСП и БЭД.

1800 руб.

21.11.2024    5067    20    17    

24

БСП (Библиотека стандартных подсистем) Программист Платформа 1С v8.3 Россия Бесплатно (free)

Как создать внешнюю печатную форму для конфигураций на базе БСП с желанной всеми разработчиками фишкой - автоматическим открытием обработки в конфигураторе с остановкой отладчика внутри процедуры Печать() при выполнении интерактивной команды печати.

24.03.2025    940    GeraltSnow    4    

23

БСП (Библиотека стандартных подсистем) Программист Платформа 1С v8.3 Бесплатно (free)

Добавим метки в новый документ средствами БСП.

10.02.2025    4689    John_d    24    

49

БСП (Библиотека стандартных подсистем) Программист Платформа 1С v8.3 Бесплатно (free)

Расскажу, как использовать полезный функционал - инструментарий разработчика «1С:Библиотека стандартных подсистем» (БСП) в своих объектах метаданных. Статья будет полезна как шпаргалка при написании собственных объектов метаданных.

27.12.2024    5119    PROSTO-1C    16    

49

БСП (Библиотека стандартных подсистем) Программист Бесплатно (free)

Синтакс-помощник БСП - справочник по Библиотеке Стандартных Подсистем, профессиональный инструмент разработчика с интуитивно понятным интерфейсом. Читайте в статье как использовать все возможности справочника и сделать работу с БСП более комфортной и эффективной.

11.12.2024    4818    gorenski    0    

8

БСП (Библиотека стандартных подсистем) Менеджеры внешних отчетов Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление холдингом Абонемент ($m)

За последние лет 5 несколько раз сталкиваюсь с проблемой на разных проектах (в конфигурациях 1С:ERP, 1С:ERP УХ и многих других, основанных на БСП), когда много пользователей (около 30 тысяч) в информационной базе, время добавления доступа для пользователей занимает значительное время. Открытие списка занимает от 10 до 15 секунд, и каждое изменение списка еще примерно столько же.

1 стартмани

10.12.2024    1315    Iaskeliainen    2    

8

БСП (Библиотека стандартных подсистем) Программист Платформа 1С v8.3 Бесплатно (free)

Некоторые нюансы, если вы захотите создавать свои расширения. Доработка отчета "Связанные документы" для отражения документов расширения. Печатные формы с шаблоном Word.

20.11.2024    4081    milkers    3    

14
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. romandredan 28.02.25 17:16 Сейчас в теме
Подождите, а в наименовании поля указать "Товары.Номенклатура" не удается?
asg.aleks; +1 Ответить
2. ONLYTILT 23 03.03.25 23:11 Сейчас в теме
ВидИзменитьПолеКоллекция = ПолучитьРеквизитыТЧСписочногоДокумента(ДанныеДетальныхЗаписей.СсылкаНаОбъект.Сотрудники,СписокКомандИзменить);

Обращение к свойствам ссылки (в данном примере к табличной части) через точку повлечет полное получение объекта из бд если его нет в кэше, включая все реквизиты и табличные части. По этому табличную часть по хорошему читать так же с помощью ЗначениеРеквизитаОбъекта:
ТаблицаЗначений = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ДанныеДетальныхЗаписей.СсылкаНаОбъект, "Сотрудники").Выгрузить() // получение таблицы значений
МассивСтруктур = ОбщегоНазначения.ТаблицаЗначенийВМассив(ТаблицаЗначений); // Это если надо вернуть в тонкий клиент
Cmapnep; VyacheslavShilov; +2 Ответить
Оставьте свое сообщение