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