February 26, 2021

Решение задачи по переносу данных расчета НДФЛ в 1С:ЗУП. Короткий путь.

Привет! Решил поделиться с вами одной задачей и ее решением, которая прилетела сегодня.

У клиента сотрудники работают в двух местах: по основному месту работы и в обособленном подразделении. Клиент пытается сдать отчетность 2-НДФЛ, крайний срок сдачи понедельник 1 марта 2021. Оказалось, что по части сотрудников в системе неправильно начислили НДФЛ по основному месту работы и обособленному подразделению и требуется корректировка данных по которым заполняется документ "Справка 2-НДФЛ для передачи в налоговый орган".

Мы имеем ограниченный срок решения задачи. Можно конечно попробовать перезаполнить все начисления и пересчитать во всех документах правильно заполняя нужны данные. Но это будет долго и дорого. Мы пойдем как я люблю по сокращенному пути.

Как решать такую задачу. Нужно найти короткий путь.

  1. Определить на основании каких данных заполняется отчетность. В данном случае тут речь о нескольких регистрах накопления, которые имеют реквизит "РегистрацияВНалоговомОргане".

Например этот регистр:

Далее вы ищете все регистры с этим реквизитом в которых лежат данные в базе по нужным вам людям, по которым требуется корректировка. Тут просто -используете консоль запросов и просто меняете имя регистра.

Научитесь писать запросы без конструктора и тогда вам по сути придется просто подменять имя регистра, оставляя один и тот же отбор по физическому лицу и например периоду.

Например такой запрос в консоли легко меняется заменой имени регистра на другой (желтое выделение)

символ * позволяет не париться что структура полей каждый раз разная и запрос будет выполняться (вы просто меняете имя)

Итак мы выявляем все регистры и получаем нужные нам в которых требуется подмена значения поля "РегистрацияВНалоговомОргане" для каких-то строк регистраторов.

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

2.Решаем задачу быстрого создания обработки.

Обработка должна иметь следующие поля:

  1. Имя регистра (строковое значение где мы будем указывать имя как в запросах которые написаны выше)
  2. Период (поле стандартного периода с датой начала и датой окончания) для отбора нужных нам регистраторов
  3. Таблица с записями для замены значения поля регистра.

На пункте 3 я сначала пошел длинным путем и пытался повторить таблицу каждого регистра накопления.

Я пытался сделать универсальную табличную часть, которая бы содержала все возможные типы реквизитов всех нужных мне регистров.

Типа такой как на рисунке ниже

вся таблица на экран не поместилась

Потом я понял что это способ не оптимальный :выгрузка всех записей нужных мне регистров в одну и ту же таблицу.

Но кусок кода выгрузки решил все таки привести ниже

Далее еще немного подумал - мне ведь нужно менять только значения одного реквизита в нужных мне записях регистра.

Что делает уникальным запись регистра конкретного регистратора. Правильно номер строки.

Номер строки выбирается и в запросе (рисунок ниже). Также я привел список нужных мне полей в табличной части обработки для работы

Здесь есть пара "регистратор, номерстроки " для получения ключа строки в котором мы будем делать замену. Поле "Физическое лицо" на всякий случай, чтобы видеть в таблице, что мы выбрали то, что нужно и поле "РегистрацияВНалоговомОргане"

Также может потребоваться дополнительно поле "Сумма" чтобы уж наверняка понимать что мы меняем в правильных строках.

Суммы правда в разных регистрах называются по разному, ничего нам не мешает программно формировать тексты запросов в зависимости от имени регистра и оставить в табличной части все возможный суммы

В итоге в табличной части я оставил все возможные поля сумм и еще поле "месяц налогогопериода" и "период". В моей задаче мне важно ориентироваться к каким периодам относятся нужные мне записи.

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

Если поставите достаточное количество лайков этой статье здесь или напишите каких-то интересных комментариев в телеге я допишу ее и приложу обработку после того как работа будет закончена.

STAY TUNED!

P.S Решение этой задачи универсально и может пригодиться в любой из ваших задач.