Как определить количество строк и проверить наличие параметра в регламентированных отчетах 1С 7.7?

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

При передаче или получении данных из регламентированных отчетов в 1С 7.7 через параметры формы разработчики часто сталкиваются со специфическим поведением объекта СписокЗначений. Данные табличных частей отчетов передаются в виде параметров с пронумерованными именами (представлениями), например: DOD5T1R000001G2, DOD5T1R000002G2 и так далее.

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

  1. Параметр присутствует в списке, но его значение не заполнено (пустая строка или 0).
  2. Параметр с таким именем вовсе отсутствует в списке (строки табличной части закончились).

Рассмотрим подробнее доступные способы решения этой задачи и разберем наиболее эффективные подходы.

Способ 1. Полный обход списка по индексу с анализом представлений

Вместо того чтобы обращаться к элементам по имени с помощью метода Получить() в цикле по предполагаемому счетчику, проанализируем весь список значений за один проход по его элементам. Для этого используем метод ПолучитьЗначение(), который позволяет одновременно извлечь и значение элемента, и имя его параметра (представление).

Разберем пример кода, где проверяются все элементы списка:


Перем ИмяПараметра;

Для К = 1 По Сп.РазмерСписка() Цикл
    Значение Элемента = Сп.ПолучитьЗначение(К, ИмяПараметра);
    
    // Проверяем, относится ли параметр к нужной табличной части
    Если Лев(ИмяПараметра, 6) = "DOD5T1" Тогда
        // Извлекаем номер строки или обрабатываем показатель
        Сообщить("Параметр: " + ИмяПараметра + " = " + ЗначениеЭлемента);
    КонецЕсли;
КонецЦикла;

Такой подход гарантирует, что мы не пропустим незаполненные показатели и точно узнаем, сколько строк содержат данные регламентированного отчета.

Способ 2. Загрузка параметров в Таблицу Значений

Если требуется выполнять частый поиск или группировку показателей отчета по строкам и графам, перегрузим данные из объекта СписокЗначений в объект ТаблицаЗначений.

Посмотрим на алгоритм реализации данного метода:


ТЗ = СоздатьОбъект("ТаблицаЗначений");
ТЗ.НоваяКолонка("ИмяПараметра", "Строка");
ТЗ.НоваяКолонка("Значение");

Перем ИмяПараметра;

Для К = 1 По Сп.РазмерСписка() Цикл
    ЗначениеЭлемента = Сп.ПолучитьЗначение(К, ИмяПараметра);
    ТЗ.НоваяСтрока();
    ТЗ.ИмяПараметра = ИмяПараметра;
    ТЗ.Значение = ЗначениеЭлемента;
КонецЦикла;

// Сортируем таблицу для удобного быстрого поиска
ТЗ.Сортировать("ИмяПараметра");

После перегрузки в таблицу значений мы сможем легко определить максимальный номер строки в нужной секции регламентированного отчета или применить метод Найти().

Способ 3. Использование сохраненных данных регламентированных отчетов

Выясним еще одну важную деталь работы регламентированной отчетности 1С 7.7. Во многих случаях нет необходимости обращаться напрямую к параметрам формы. Регламентированные отчеты при сохранении записывают свои данные во внутренние структуры (таблицы значений и списки).

В процедурах восстановления отчета данные табличных частей уже разделены по отдельным объектам, где количество строк можно узнать напрямую через стандартный метод КоличествоСтрок() или РазмерСписка(). Если отчет уже был сохранен пользователем, целесообразно использовать механизмы чтения сохраненного контекста отчета.

← На главную