Как объединить данные из нескольких типовых отчетов в 1С 7.7?

Программист 1С v7.7 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

При разработке учетных задач для бухгалтерии нередко возникает потребность свести в одну результирующую таблицу показатели, которые в стандартной конфигурации формируются в разных отчетах — например, в отчетах Анализ счета и Анализ счета по субконто. Разберем, можно ли решить эту задачу путем программного управления существующими экранными формами и как правильно извлекать учетные данные средствами встроенного языка 1С 7.7.

Ограничения программного вызова типовых отчетов через ОткрытьФорму

Попытка передать параметры через метод ОткрытьФорму и программно «нажать» кнопки в стандартном отчете сталкивается с архитектурными ограничениями платформы 1С 7.7:

  1. Отсутствие прямого доступа к элементам управления чужой формы: В 1С 7.7 невозможно из внешнего модуля обратиться к элементам диалога другой открытой формы или симулировать действия пользователя.
  2. Типовые отчеты не рассчитаны на автозапуск: Процедура ПриОткрытии() стандартных отчетов конфигурации не содержит логики обработки входящих параметров из Форма.Параметр с последующим автоматическим формированием и закрытием.
  3. Сложность возврата данных: Чтобы передать результат формирования отчета обратно в вызывающую обработку, потребовалось бы снимать типовую конфигурацию с поддержки и переписывать код каждого используемого отчета.

Поэтому правильным и надежным путем является создание собственной внешней обработки или отчета, который напрямую запрашивает нужные показатели из базы данных.

Решение: Прямое получение данных через объект БухгалтерскиеИтоги

Все типовые бухгалтерские отчеты платформы 1С 7.7 строятся на базе универсального объекта БухгалтерскиеИтоги. Вместо перехвата готовых печатных форм обратимся к итогам напрямую. Это обеспечивает максимальное быстродействие, исключает лишние экранные формы и позволяет получить точные цифры за заданный период.

Разберем по шагам алгоритм получения оборотов между счетами 90 («Продажи») и 41.1 («Товары на складах»), а также детализации по конкретному субсчету и субконто.

  1. Инициализация объекта: Создаем экземпляр объекта БухгалтерскиеИтоги через функцию СоздатьОбъект().
  2. Установка фильтров по аналитике: При необходимости отбора по субконто (например, номенклатуре, ставкам НДС или статьям затрат) вызываем метод ИспользоватьСубконто() до выполнения запроса.
  3. Выполнение запроса: Вызываем метод ВыполнитьЗапрос() с указанием периода, основного счета и счета корреспонденции.
  4. Чтение результатов: Получаем дебетовые и кредитовые обороты методами ДО(), КО() или осуществляем обход дерева итогов.

Пример программного кода для выборки данных

Посмотрим на пример процедуры, которая рассчитывает требуемые показатели и сводит их в единую таблицу значений:


Процедура СформироватьСводныйОтчет()
    Перем БИ, ТЗ;
    Перем Счет90, Счет41_1, Счет90_2_1;
    
    Счет90 = СчетПоКоду("90");
    Счет41_1 = СчетПоКоду("41.1");
    Счет90_2_1 = СчетПоКоду("90.2.1");
    
    // Создаем результирующую таблицу для вывода пользователю
    ТЗ = СоздатьОбъект("ТаблицаЗначений");
    ТЗ.НоваяКолонка("Показатель", "Строка");
    ТЗ.НоваяКолонка("Сумма", "Число", 15, 2);
    
    // Шаг 1: Получаем оборот Дт 90 - Кт 41.1 (общий анализ счета)
    БИ = СоздатьОбъект("БухгалтерскиеИтоги");
    БИ.ВыполнитьЗапрос(ВыбДатаНач, ВыбДатаКон, Счет90, Счет41_1, , 3, , "С");
    
    ТЗ.НоваяСтрока();
    ТЗ.Показатель = "Оборот Дт 90 - Кт 41.1 (Всего)";
    ТЗ.Сумма = БИ.ДО();
    
    // Шаг 2: Получаем оборот Дт 90.2.1 - Кт 41.1 с детализацией по субконто
    БИ2 = СоздатьОбъект("БухгалтерскиеИтоги");
    // Если требуется отбор по конкретному субконто:
    Если ПустоеЗначение(ВыбСубконто) = 0 Тогда
        БИ2.ИспользоватьСубконто(ВидыСубконто.Номенклатура, ВыбСубконто, 2);
    КонецЕсли;
    
    БИ2.ВыполнитьЗапрос(ВыбДатаНач, ВыбДатаКон, Счет90_2_1, Счет41_1, , 3, , "С");
    
    ТЗ.НоваяСтрока();
    ТЗ.Показатель = "Оборот Дт 90.2.1 - Кт 41.1 (Себестоимость без НДС)";
    ТЗ.Сумма = БИ2.ДО();
    
    // Выводим полученную таблицу значений в форму или отчет
    ТЗ.ВыбратьСтроку();
КонецПроцедуры

Преимущества создания отдельного отчета

Проанализируем плюсы такого подхода по сравнению с вызовом стандартных отчетов:

  1. Автономность: Внешний отчет (файл с расширением .ert) работает без изменения конфигурации и не создает проблем при последующих обновлениях типовой 1С:Бухгалтерии 7.7.
  2. Скорость выполнения: Прямой запрос к таблицам итогов выполняется значительно быстрее, чем формирование и отрисовка двух полноценных типовых макетов со сложной иерархией.
  3. Гибкость представления: Полученные цифры можно вывести в печатную форму любого вида, выгрузить в Microsoft Excel или отобразить в интерактивной таблице на форме обработки.
← На главную