Рассмотрим ситуацию, с которой сталкиваются многие разработчики и бухгалтеры: пользователи хотят видеть в расчетном листке период, за который выплачивается заработная плата, а не только дату самого факта выплаты. Часто это требование возникает из-за специфики бизнес-процессов, когда сроки выплат сдвигаются или требуется строгая сверка начислений и выплат по периодам.
Прежде чем приступать к доработке кода, важно проанализировать, почему типовой расчетный листок работает именно так, и какие риски несет попытка изменить его логику напрямую.
В конфигурациях 1С, таких как 1С:Зарплата и Управление Персоналом, учет взаиморасчетов ведется на основе регистра накопления ВзаиморасчетыССопутрудниками. Этот регистр фиксирует состояние задолженности на конкретную дату. Основная сложность заключается в том, что программа закрывает задолженность по методу ФИФО (первым пришел — первым ушел) или по конкретному документу-основанию.
Когда мы пытаемся заставить типовой отчет показывать период начисления в разделе выплат, мы сталкиваемся с тем, что одна ведомость может закрывать задолженность за разные периоды (например, если сотруднику выплачивается часть аванса, часть зарплаты или происходит перерасчет за прошлые месяцы). Изменение логики типового запроса неизбежно приведет к тому, что отчет перестанет сходиться с данными бухгалтерского учета, что вызовет вопросы у аудиторов.
Прежде чем «ковырять» 4000 строк кода в запросе, давайте выясним, для чего именно бухгалтерии нужна эта информация:
ЗарплатаКВыплате.Анализ зарплаты по сотрудникам (помесячно).Ведомость, где поле Период заполняется формально или некорректно.Это самый профессиональный и безопасный путь. Вместо модификации типового отчета, который является сложной структурой на СКД (Система компоновки данных), мы создадим отдельный инструмент. Это позволит сохранить целостность типовых данных для отчетности и предоставить бухгалтерам удобный инструмент для анализа.
Для создания такого отчета нам потребуется использовать данные регистра ЗарплатаКВыплате. Рассмотрим пример того, как можно получить данные в запросе для вашего отчета:
ВЫБРАТЬ
ДанныеВзаиморасчетов.Период КАК ДатаВыплаты,
ДанныеВзаиморасчетов.Регистратор КАК ДокументВыплаты,
ДанныеВзаиморасчетов.Сумма КАК СуммаВыплаты,
ДанныеВзаиморасчетов.ПериодВзаиморасчетов КАК ПериодНачисления
ИЗ
РегистрНакопления.ВзаиморасчетыССопутрудниками КАК ДанныеВзаиморасчетов
ГДЕ
ДанныеВзаиморасчетов.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
Используя данный подход, мы выводим в отчет именно те колонки, которые требуют пользователи: ПериодНачисления (за какой месяц платят) и ДатаВыплаты. Этот отчет можно сохранить как внешний и подключить через механизм дополнительных отчетов.
Часто нужную информацию можно получить без программирования. Попробуем проанализировать типовой отчет Анализ зарплаты по сотрудникам (помесячно). В настройках отчета можно:
Документу-основанию или Периоду взаиморасчетов.Подведем итоги нашей работы:
СКД на основе регистра ВзаиморасчетыССопутрудниками — лучшее решение для бизнеса.Таким образом, мы решаем проблему бухгалтерии, сохраняя при этом работоспособность и чистоту типовой конфигурации. Такой подход гарантирует, что при обновлении программы отчет не сломается, а данные всегда будут соответствовать первичным документам.