При подготовке регламентированной отчетности, в частности единого «Расчета по страховым взносам», бухгалтеры нередко сталкиваются с ситуацией, когда отдельные показатели не заполняются автоматически типовым механизмом конфигурации. Характерный пример — строка 230 подраздела 3.2 («в том числе по гражданско-правовым договорам»). Если на предприятии работают сотни сотрудников по договорам ГПХ, ручной ввод становится физически невозможным. Разберем причины такого поведения системы и рассмотрим надежные программные способы автоматического дозаполнения данных без снятия конфигурации с поддержки.
Прежде чем вмешиваться в код или корректировать сохраненный отчет, выясним причину, по которой типовой механизм отчета пропускает данные:
ОсновныеНачисленияОрганизаций или ДополнительныеНачисленияОрганизаций) у начислений по договорам подряда должен быть указан вид дохода для страховых взносов именно как договоры гражданско-правового характера. Если начисление настроено как обычная оплата труда, суммы попадут в общую базу (строка 220), но строка 230 останется пустой.УчетДоходовДляИсчисленияСтраховыхВзносов. Если документы были проведены некорректно или правились вручную, аналитика по договорам ГПХ может быть утеряна.Рассмотрим вариант, выбранный автором обсуждения. Интерактивная работа с открытой формой отчета крайне неудобна: в Разделе 3 данные распределены постранично по каждому застрахованному лицу, и программно переключать визуальные страницы через табличный документ неэффективно. Правильный подход — работать напрямую с данными сохраненного документа РегламентированныйОтчет.
Все показатели отчета хранятся в специальном реквизите документа ДанныеОтчета, имеющем тип ХранилищеЗначения. Внутри хранится развернутая структура показателей и таблиц. Разберем по шагам алгоритм создания внешней обработки для пакетного заполнения:
РегламентированныйОтчет и извлекает сохраненные показатели.УчетДоходовДляИсчисленияСтраховыхВзносов за отчетный период с отбором по видам доходов ГПХ в разрезе физических лиц.Посмотрим на пример кода внешней обработки, выполняющей подобную модификацию:
ДокументОбъект = ВыбранныйОтчет.ПолучитьОбъект();
// Извлекаем сохраненную структуру показателей
СтруктураДанных = ДокументОбъект.ДанныеОтчета.Получить();
Если ТипЗнч(СтруктураДанных) = Тип("Структура") Тогда
// Получаем таблицу показателей по Разделу 3 (имя ключа зависит от редакции формы)
Если СтруктураДанных.Свойство("Показатели_Раздел3") Тогда
ТаблицаРаздел3 = СтруктураДанных.Показатели_Раздел3;
// Обходим строки структуры и подставляем рассчитанные суммы ГПХ
Для Каждого СтрокаОтчета Из ТаблицаРаздел3 Цикл
// Поиск соответствия физлица или СНИЛС
СуммаГПХ = НайтиСуммуГПХПоСотруднику(СтрокаОтчета.СНИЛС);
Если СуммаГПХ > 0 Тогда
СтрокаОтчета.П000320023001 = СуммаГПХ; // Код показателя строки 230
КонецЕсли;
КонецЦикла;
КонецЕсли;
// Помещаем обновленные данные обратно в хранилище и сохраняем документ
ДокументОбъект.ДанныеОтчета = Новый ХранилищеЗначения(СтруктураДанных, СтепеньСжатия.Оптимальная);
ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);
КонецЕсли;
Проанализируем альтернативный и наиболее рекомендуемый с точки зрения архитектуры способ. Вместо пакетной перезаписи уже сохраненного отчета можно скорректировать сам алгоритм формирования показателей. В 1С:УПП предусмотрен штатный механизм внешних форм регламентированной отчетности:
РегламентированныеОтчеты, найдем нужный расчет и выгрузим его типовую форму в файл внешней обработки с расширением .erf.РегламентированныеОтчеты переключим переключатель использования формы на «Использовать внешнюю форму», указав путь к файлу.Преимущество этого способа заключается в том, что при последующих обновлениях конфигурации внешняя форма не затрется, а бухгалтеру не потребуется запускать дополнительные обработки — штатная кнопка «Заполнить» сразу рассчитает корректные цифры.
При использовании программной корректировки показателей важно учитывать следующие технические особенности платформы:
ДанныеОтчета разрешается исключительно при закрытом документе у всех пользователей. Если документ открыт на клиентском месте, последующее нажатие пользователем кнопки «Сохранить» или закрытие формы перезапишет данные базы текущим содержимым экрана.