Часто в процессе работы бухгалтера возникает необходимость визуального сравнения двух отчетов, например, двух оборотно-сальдовых ведомостей (ОСВ) по счету за разные периоды или для разных организаций. В типовых конфигурациях, таких как БП 3.0 КОРП, стандартный интерфейс не всегда позволяет удобно расположить два табличных документа для детального анализа. Разберем, как решить эту задачу программно и какие альтернативные подходы существуют.
Если задача требует именно вывода двух ведомостей в одном печатном документе, мы можем воспользоваться механизмом манипуляции объектом ТабличныйДокумент. Суть метода заключается в создании результирующего документа и последовательном переносе областей из исходных отчетов.
Рассмотрим пример кода, который позволяет вывести две ОСВ по горизонтали:
// Сначала формируем две ОСВ по счету как отдельные табличные документы
ТабДок = ОбъединитьДваТабличныхДокумента(ТабДокОСВПоСчету1, ТабДокОСВПоСчету2);
ВысотаТабДок = ТабДок.ВысотаТаблицы;
НачалоОбластиТаблицы2 = 0;
// Ищем разделитель между двумя таблицами, ориентируясь на наименование организации
Для ПерваяСтрока = 2 По ВысотаТабДок Цикл
ТекущаяСтрокаТабДока = ТабДок.Область("R" + ПерваяСтрока + "C1");
Если ТекущаяСтрокаТабДока.Текст = РеквизитФормыВЗначение("Объект").Организация.НаименованиеСокращенное Тогда
НачалоОбластиТаблицы2 = ТекущаяСтрокаТабДока.Верх;
Прервать;
КонецЕсли;
КонецЦикла;
ОкончаниеОбластиТаблицы1 = НачалоОбластиТаблицы2 - 1;
// Переносим первую таблицу
Для i = 1 По ОкончаниеОбластиТаблицы1 Цикл
ДокументРезультат.ВставитьОбласть(ТабДок.Область(i, 1, i, 9), ДокументРезультат.Область(i, 1, i, 9));
КонецЦикла;
// Переносим вторую таблицу в соседние колонки
НомерСтрокиПриемника = 1;
Для i = НачалоОбластиТаблицы2 По ВысотаТабДок Цикл
ДокументРезультат.ВставитьОбласть(ТабДок.Область(i, 1, i, 9), ДокументРезультат.Область(НомерСтрокиПриемника, 11, НомерСтрокиПриемника, 19));
НомерСтрокиПриемника = НомерСтрокиПриемника + 1;
КонецЦикла;
Важно отметить, что метод ВставитьОбласть() позволяет точно позиционировать данные. При работе с ТабличныйДокумент также можно использовать метод Присоединить(), который является более производительным для объединения двух документов, если их структура это позволяет.
Прежде чем приступать к разработке сложных обработок, стоит вспомнить, что платформа 1С:Предприятие 8.3 имеет встроенные механизмы для работы с окнами:
Этот способ является наиболее быстрым и не требует написания кода, если целью является просто визуальное сравнение данных «глаза в глаза».
Часто возникает соблазн выгрузить данные в Excel и использовать формулы для сверки, например, по счетам 76.АВ и 62.02. Однако при автоматизации сверки стоит учитывать критические риски:
GUID (ссылки), а в Excel они будут выглядеть одинаковыми строками, что приведет к ложным результатам.Вместо выгрузки в сторонние программы, мы рекомендуем создавать специализированный отчет на СКД (системе компоновки данных). Используя запрос к виртуальным таблицам ОстаткиИОбороты регистра бухгалтерии, вы можете объединить данные по контрагентам, договорам и документам расчетов внутри самой 1С. Это обеспечит корректное сравнение по уникальным идентификаторам объектов, исключая ошибки идентификации, свойственные таблицам Excel.
Если ваши бухгалтеры настаивают на наглядности «двух обороток рядом», лучше разработать отчет, который выводит таблицу с заранее рассчитанными отклонениями. В такую таблицу можно включить колонки: Контрагент, Сумма аванса, НДС расчетный, НДС фактический и Отклонение. Это превратит процесс «крыжения» (ручной сверки) в автоматизированную проверку, что значительно повысит эффективность работы финансового отдела.