В современных редакциях 1С:ЗУП 3.1 архитектура документов изменилась по сравнению с версией 2.5. Многие разработчики, привыкшие к вызову простых методов менеджера, сталкиваются с тем, что автоматическое заполнение документов требует более сложного подхода с использованием общих модулей. Давайте разберем, как реализовать этот процесс программно.
В отличие от старых версий, где логика заполнения была инкапсулирована непосредственно в объекте, в 1С:ЗУП 3.1 разработчики вынесли функционал в общие модули с суффиксами Расширенный или КлиентСервер. Это сделано для того, чтобы обеспечить корректную работу в многопользовательском режиме и интеграцию с учетом НДФЛ и страховых взносов.
Для решения задачи нам необходимо подготовить структуру параметров, передать ее в соответствующий модуль и заполнить табличные части документа данными, полученными от системы. Рассмотрим пошаговый алгоритм реализации.
ПараметрыДляЗаполненияТаблицДокумента.ДанныеДляЗаполненияТаблицДокумента из модуля ОтражениеЗарплатыВБухучетеРасширенный.ДополнитьТаблицу.Ниже приведен пример серверной процедуры, которая позволяет программно заполнить документ. Обратите внимание, что мы используем методы модуля ОбщегоНазначенияКлиентСервер для корректной передачи данных в коллекции строк:
Процедура ТестЗаполненияДокументаНаСервере()
// Инициализация объекта документа
Документ = Документы.ОтражениеЗарплатыВБухучете.НайтиПоНомеру("00ЗК-000010", НачалоМесяца(ТекущаяДата)).ПолучитьОбъект();
Документ.Дата = ТекущаяДата;
Документ.ПериодРегистрации = НачалоМесяца(Документ.Дата);
Документ.Организация = Организация;
Документ.Ответственный = ПараметрыСеанса.ТекущийПользователь;
Документ.Записать(РежимЗаписиДокумента.Запись);
// Подготовка параметров заполнения
ПараметрыЗаполнения = ОтражениеЗарплатыВБухучетеРасширенный.ПараметрыДляЗаполненияТаблицДокумента;
ЗаполнитьЗначенияСвойств(ПараметрыЗаполнения, Документ);
ПараметрыЗаполнения.ДокументСсылка = Документ.Ссылка;
// Получение данных от системы
ДанныеДляЗаполнения = ОтражениеЗарплатыВБухучетеРасширенный.ДанныеДляЗаполненияТаблицДокумента(ПараметрыЗаполнения);
// Наполнение табличных частей
ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(ДанныеДляЗаполнения.НачисленнаяЗарплатаИВзносы, Документ.НачисленнаяЗарплатаИВзносы);
ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(ДанныеДляЗаполнения.НачисленныйНДФЛ, Документ.НачисленныйНДФЛ);
ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(ДанныеДляЗаполнения.УдержаннаяЗарплата, Документ.УдержаннаяЗарплата);
ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(ДанныеДляЗаполнения.ВыплатаОтпусковЗаСчетРезерва, Документ.ВыплатаОтпусковЗаСчетРезерва);
// Дополнительные расчеты
ОтражениеЗарплатыВБухучете.ЗаполнитьРегистрациюВНалоговомОрганеВКоллекцииСтрок(Документ.Организация, Документ.ПериодРегистрации, Документ.НачисленныйНДФЛ);
Документ.Записать(РежимЗаписиДокумента.Запись);
КонецПроцедуры
При использовании данного метода учитывайте следующие нюансы:
Актуальность данных: Перед запуском программного заполнения убедитесь, что все документы-источники (например, Начисление зарплаты и взносов) проведены. Если данные не актуализированы, документ отражения останется пустым.
Производительность: Если объем данных в организации велик, заполнение может занять значительное время. В типовых конфигурациях для этих целей часто используется механизм ДлительныеОперации.ЗапуститьВыполнениеВФоне, чтобы не блокировать интерфейс пользователя. При разработке собственных обработок рекомендуем также предусматривать фоновое выполнение для тяжелых операций.
Обновляемость: Имена функций в общих модулях 1С могут меняться при выходе новых релизов конфигурации. Всегда используйте отладчик для проверки актуальности вызовов в текущей версии вашей конфигурации. Этот метод является наиболее надежным способом поддержки кода в актуальном состоянии при переходе на новые версии ЗУП.