Решение задачи по переносу данных расчета НДФЛ в 1С:ЗУП. Короткий путь.
Привет! Решил поделиться с вами одной задачей и ее решением, которая прилетела сегодня.
У клиента сотрудники работают в двух местах: по основному месту работы и в обособленном подразделении. Клиент пытается сдать отчетность 2-НДФЛ, крайний срок сдачи понедельник 1 марта 2021. Оказалось, что по части сотрудников в системе неправильно начислили НДФЛ по основному месту работы и обособленному подразделению и требуется корректировка данных по которым заполняется документ "Справка 2-НДФЛ для передачи в налоговый орган".
Мы имеем ограниченный срок решения задачи. Можно конечно попробовать перезаполнить все начисления и пересчитать во всех документах правильно заполняя нужны данные. Но это будет долго и дорого. Мы пойдем как я люблю по сокращенному пути.
Как решать такую задачу. Нужно найти короткий путь.
- Определить на основании каких данных заполняется отчетность. В данном случае тут речь о нескольких регистрах накопления, которые имеют реквизит "РегистрацияВНалоговомОргане".
Например этот регистр:
Далее вы ищете все регистры с этим реквизитом в которых лежат данные в базе по нужным вам людям, по которым требуется корректировка. Тут просто -используете консоль запросов и просто меняете имя регистра.
Научитесь писать запросы без конструктора и тогда вам по сути придется просто подменять имя регистра, оставляя один и тот же отбор по физическому лицу и например периоду.
Например такой запрос в консоли легко меняется заменой имени регистра на другой (желтое выделение)
символ * позволяет не париться что структура полей каждый раз разная и запрос будет выполняться (вы просто меняете имя)
Итак мы выявляем все регистры и получаем нужные нам в которых требуется подмена значения поля "РегистрацияВНалоговомОргане" для каких-то строк регистраторов.
Подмену значения этого поля мы будем делать обработкой, но ее нам нужно написать красиво и быстро только для одной цели - замены одного поля в нужных строках записей регистра конкретных документов.
2.Решаем задачу быстрого создания обработки.
Обработка должна иметь следующие поля:
- Имя регистра (строковое значение где мы будем указывать имя как в запросах которые написаны выше)
- Период (поле стандартного периода с датой начала и датой окончания) для отбора нужных нам регистраторов
- Таблица с записями для замены значения поля регистра.
На пункте 3 я сначала пошел длинным путем и пытался повторить таблицу каждого регистра накопления.
Я пытался сделать универсальную табличную часть, которая бы содержала все возможные типы реквизитов всех нужных мне регистров.
Типа такой как на рисунке ниже
Потом я понял что это способ не оптимальный :выгрузка всех записей нужных мне регистров в одну и ту же таблицу.
Но кусок кода выгрузки решил все таки привести ниже
Далее еще немного подумал - мне ведь нужно менять только значения одного реквизита в нужных мне записях регистра.
Что делает уникальным запись регистра конкретного регистратора. Правильно номер строки.
Номер строки выбирается и в запросе (рисунок ниже). Также я привел список нужных мне полей в табличной части обработки для работы
Здесь есть пара "регистратор, номерстроки " для получения ключа строки в котором мы будем делать замену. Поле "Физическое лицо" на всякий случай, чтобы видеть в таблице, что мы выбрали то, что нужно и поле "РегистрацияВНалоговомОргане"
Также может потребоваться дополнительно поле "Сумма" чтобы уж наверняка понимать что мы меняем в правильных строках.
Суммы правда в разных регистрах называются по разному, ничего нам не мешает программно формировать тексты запросов в зависимости от имени регистра и оставить в табличной части все возможный суммы
В итоге в табличной части я оставил все возможные поля сумм и еще поле "месяц налогогопериода" и "период". В моей задаче мне важно ориентироваться к каким периодам относятся нужные мне записи.
Остается дело за малым сделать команду замены записей табличной части обработки в нужных записях регистрах накопления.
Если поставите достаточное количество лайков этой статье здесь или напишите каких-то интересных комментариев в телеге я допишу ее и приложу обработку после того как работа будет закончена.
STAY TUNED!
P.S Решение этой задачи универсально и может пригодиться в любой из ваших задач.