Документ Перенос данных в конфигурациях «Зарплата и кадры государственного учреждения» (ЗКГУ) и «Зарплата и управление персоналом» (ЗУП) является уникальным и в то же время сложным инструментом. Он предназначен для ручного ввода или корректировки движений по практически любым регистрам системы. Часто разработчики сталкиваются с трудностью: на форме документа отображаются таблицы с данными, но в метаданных объекта соответствующих табличных частей нет. Разберем подробно, как устроена эта механика и как правильно обращаться к данным этого документа программно.
Проанализируем ситуацию: когда мы открываем документ Перенос данных, мы видим кнопку «Настроить список регистров». После выбора нужных регистров на форме появляются закладки, которые выглядят как обычные табличные части. Однако, если мы заглянем в конфигуратор, то обнаружим, что у документа есть только одна служебная табличная часть — ТаблицаРегистров.
Выясним причину такого поведения. На самом деле то, что пользователь видит на форме под названием «Таблица расчетов» или именами конкретных регистров, — это динамически создаваемые элементы формы. Они визуализируют наборы записей регистров, для которых данный документ является регистратором. Программа не хранит эти данные в табличных частях самого документа; она считывает их напрямую из таблиц движений (регистров накопления или сведений) и отображает на форме.
Поскольку физически «вложенной ТЧ» не существует, обращаться нужно к коллекции движений документа. Рассмотрим алгоритм действий для программного изменения данных:
ТаблицаРегистров. В колонку Имя записывается полное имя регистра (например, РегистрНакопления.СведенияОДоходахНДФЛ).Движения объекта документа.Посмотрим на пример кода, который демонстрирует, как программно добавить данные в регистр через документ Перенос данных:
// Предположим, ОбъектДокумента — это полученный объект "Перенос данных"
// 1. Указываем документу, что он работает с регистром НДФЛ
НоваяСтрокаРегистра = ОбъектДокумента.ТаблицаРегистров.Добавить();
НоваяСтрокаРегистра.Имя = "РегистрНакопления.СведенияОДоходахНДФЛ";
// 2. Обращаемся к коллекции движений
ДвиженияНДФЛ = ОбъектДокумента.Движения.СведенияОДоходахНДФЛ;
// Читаем существующие движения, если нужно их дополнить или изменить
ДвиженияНДФЛ.Прочитать();
// 3. Добавляем новую запись или правим существующие
НоваяЗапись = ДвиженияНДФЛ.Добавить();
НоваяЗапись.Период = ТекущаяДата();
НоваяЗапись.Регистратор = ОбъектДокумента.Ссылка;
// Заполняем остальные измерения и ресурсы...
НоваяЗапись.Активность = Истина;
НоваяЗапись.Организация = Справочники.Организации.НайтиПоНаименованию("Наша Организация");
// 4. Обязательно устанавливаем флаг записи движений
ДвиженияНДФЛ.Записывать = Истина;
// 5. Записываем сам документ
ОбъектДокумента.Записать();
Если ваша задача — добавить данные так, чтобы они моментально появились на форме без предварительной записи объекта в базу, нужно работать с ДаннымиФормы. В модуле формы документа при выборе регистра динамически создаются реквизиты. Обратиться к ним можно через контекст формы, зная имя регистра. Однако этот путь сложнее и менее надежен, чем прямая работа с объектом и его движениями. Рекомендуем выполнять заполнение в фоновом задании или через обработку, которая создает/модифицирует объект и затем открывает его пользователю.
Разберем конкретный кейс автора темы: в середине года сменился налоговый орган (ИФНС), и данные в отчете 6-НДФЛ «разрываются» или подтягиваются некорректно. Автор хотел использовать Перенос данных, чтобы массово заменить регистрацию в налоговом органе в движениях регистров НДФЛ.
Проанализируем ситуацию с точки зрения методологии учета. В 1С:ЗКГУ отчетность 6-НДФЛ формируется в разрезе связки ОКТМО + КПП + Регистрация в налоговом органе. Здесь возможны два варианта решения:
Если при смене налоговой инспекции у вашей организации не изменились коды ОКТМО и КПП (такое часто бывает при реорганизации самих инспекций или переподчинении), то вносить изменения в движения регистров не нужно. Достаточно зайти в справочник Регистрации в налоговом органе и в карточке текущей регистрации просто исправить «Код налогового органа» и «Название». Поскольку ссылка на элемент справочника в регистрах останется прежней, программа увидит обновленный код во всех отчетах за весь год автоматически.
Если же изменился КПП или ОКТМО, вам действительно придется переносить данные на новую регистрацию. В этом случае использование документа Перенос данных оправдано. Вам необходимо скорректировать два ключевых регистра накопления:
СведенияОДоходахНДФЛ — отвечает за суммы дохода и исчисленного налога.РасчетыНалогоплательщиковСБюджетомПоНДФЛ — отвечает за удержанный налог.Пример логики для массовой замены регистрации в налоговом органе:
Для Каждого Запись Из ОбъектДокумента.Движения.СведенияОДоходахНДФЛ Цикл
Если Запись.РегистрацияВНалоговомОргане = СтараяРегистрация Тогда
Запись.РегистрацияВНалоговомОргане = НоваяРегистрация;
КонецЕсли;
КонецЦикла;
ОбъектДокумента.Движения.СведенияОДоходахНДФЛ.Записывать = Истина;
Работая с документом Перенос данных, помните о следующих правилах:
КатегорияДохода), система не выдаст ошибку при проведении, но отчеты (6-НДФЛ, справки 2-НДФЛ) будут формироваться неверно.ТаблицаРегистров присутствуют все те регистры, по которым вы делаете движения. Если вы запишете движения программно, но не добавите строку в ТаблицаРегистров, то при ручном переоткрытии и сохранении документа пользователем эти «незадекларированные» движения могут быть удалены платформой.Запись.Регистратор = СсылкаНаВашДокумент.Таким образом, мы рассмотрели, что обращение к «вложенной ТЧ» в документе Перенос данных — это на самом деле работа с коллекцией Движения. Понимание этого механизма позволяет гибко управлять данными системы, обходя ограничения стандартных экранных форм.