Как автоматизировать сравнение типового отчета «Анализ взносов» и кастомного отчета по РСВ в 1С:ЗУП 3.1

Программист 1С v8.3 (Управляемые формы) 1С:Зарплата и Управление Персоналом Налоговый учет IT и автоматизация бизнеса
← На главную

При работе в 1С:Зарплата и управление персоналом (ЗУП) 3.1 часто возникает задача сравнения данных, которые выдает типовой отчет (например, «Анализ взносов в фонды»), с данными кастомных запросов или регламентированного отчета РСВ. Ручная сверка в Excel — трудозатратный процесс, который хочется автоматизировать. В этой статье мы разберем технические способы соединения типовых механизмов ЗУП с самописными запросами так, чтобы решение было устойчивым к обновлениям программы.

Понимание механизма «Представлений» в ЗУП 3.1

Прежде чем приступать к написанию кода, проанализируем, как формируются отчеты в ЗУП. Большинство типовых отчетов используют механизм «представлений» Библиотеки зарплаты и кадров (БЗК). Если мы откроем текст запроса в СКД типового отчета, мы увидим конструкции вида Представления_КадровыеДанныеФизическихЛиц. Это не реальные таблицы в базе данных, а шаблоны.

Рассмотрим, как это работает программно. Перед выполнением запроса система вызывает специальный метод ЗарплатаКадрыОбщие.СоздатьЗапросИзТекстаЗапросаСПредставлениями(). Этот метод парсит текст, ищет ключевые слова и заменяет их на огромные вложенные запросы, учитывающие срезы последних, кадровые переводы и права доступа.

Важный вывод: просто скопировать текст запроса из СКД в консоль запросов не получится — он не выполнится. Нам нужно либо использовать типовой механизм обработки текста, либо подключаться к результату работы типового отчета.

Способ 1: Использование СКД с двумя наборами данных

Проанализируем наиболее «чистый» вариант, который минимизирует влияние обновлений конфигурации. Мы можем создать внешний отчет, в котором схема компоновки данных (СКД) будет содержать два набора данных.

  1. Первый набор данных (Объект): Сюда мы будем программно передавать таблицу значений, полученную из типового отчета.
  2. Второй набор данных (Запрос): Здесь будет располагаться ваш самописный запрос по данным РСВ.

Для реализации этого метода рассмотрим пример программного получения данных из типового макета:


// Получаем макет типового отчета
СхемаКомпоновкиДанных = Отчеты.АнализВзносовВФонды.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");

// Настраиваем компоновщик и выполняем отчет в таблицу значений
КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных;
КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);

// Устанавливаем параметры периода
ПараметрПериод = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("Период");
ПараметрПериод.Значение = Новый СтандартныйПериод(НачалоКвартала(Объект.Период), КонецКвартала(Объект.Период));
ПараметрПериод.Использование = Истина;

КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.Настройки, , , Тип("ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений"));

ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);

ТаблицаРезультатТиповой = Новый ТаблицаЗначений;
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
ПроцессорВывода.УстановитьОбъект(ТаблицаРезультатТиповой);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);

После этого мы соединяем полученную ТаблицаРезультатТиповой с результатом нашего запроса по РСВ через связи наборов данных в СКД внешнего отчета. Это позволяет автоматически вычислять разницы в колонках.

Способ 2: Использование расширений с директивой &ИзменениеИКонтроль

Если вы хотите встроиться прямо в типовой механизм, можно использовать расширение. Рассмотрим вариант с заимствованием модуля, где формируется текст запроса. Использование &ИзменениеИКонтроль удобно тем, что при обновлении 1С, если фирма «1С» изменит логику типового запроса, расширение выдаст ошибку при проверке возможности применения. Это и будет той самой «триггерной точкой», о которой говорилось в обсуждении.

Разберем пример структуры кода в расширении:


&ИзменениеИКонтроль("СформироватьТекстЗапроса")
Функция Расш1_СформироватьТекстЗапроса()
    // Здесь сохраняется оригинальный текст запроса
    // Мы можем дописать объединение (UNION ALL) со своим запросом
    // Или поместить результат во временную таблицу для последующего сравнения
КонецФункции

Однако помните, что работа с запросами в ЗУП осложнена тем, что они собираются динамически. Иногда проще перехватить данные в процедуре ПриКомпоновкеРезультата, где коллекция данных уже готова к выводу.

Способ 3: Программный анализ через СхемуЗапроса

Для продвинутых разработчиков существует объект СхемаЗапроса. Проанализируем ситуацию: нам нужно добавить колонку из РСВ в существующий сложный запрос. Вместо того чтобы «крыжить» строки вручную, мы можем программно модифицировать дерево запроса.

Выясним, как это реализовать:

  1. Получаем текст запроса, прошедший через процессор представлений БЗК.
  2. Загружаем этот текст в объект СхемаЗапроса.
  3. Добавляем новое левое соединение к нужной временной таблице или источнику.
  4. Выгружаем измененный текст обратно и выполняем его.

Этот путь сложен в реализации, но он дает максимальную гибкость, позволяя не переписывать отчет целиком, а лишь «подмешивать» свои данные к типовым.

Важные нюансы при работе с РСВ

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

Рекомендуемый подход:

Вместо написания своего запроса «с нуля», попробуйте извлекать данные из уже сформированного документа «Регламентированный отчет». В нем данные хранятся в скрытых табличных частях в удобном для анализа виде. Вы можете программно прочитать эти данные и сравнить их с результатом Анализа взносов по ключевым полям: ФизическоеЛицо, СНИЛС, Месяц.

Заключение

Мы рассмотрели несколько стратегий автоматизации сверки. Самым стабильным и рекомендуемым является создание внешнего отчета на СКД, который программно вызывает типовой отчет и соединяет его данные с вашим запросом. Это избавляет бухгалтера от необходимости «крыжить» Excel и гарантирует актуальность алгоритмов при обновлениях системы.

← На главную