В процессе разработки на платформе 1С:Предприятие 7.7 многие специалисты сталкиваются с необходимостью оптимизации алгоритмов. Один из частых вопросов — как быстро определить количество записей (движений), созданных конкретным документом в регистре, не прибегая к перебору элементов в цикле.
В архитектуре платформы 1С 7.7, в отличие от более современных версий (8.х), движения документа не представлены в виде коллекции объектов с собственным свойством Количество(). Физически движения хранятся в таблицах регистров, и доступ к ним организован через объект Регистр, который поддерживает методы последовательного чтения: ВыбратьДвиженияДокумента() и ПолучитьДвижение(). Стандартного метода, который бы мгновенно возвращал общее число записей для документа, в языке не предусмотрено.
Если нам необходимо получить количество движений без циклического обхода, мы можем использовать штатный механизм запросов 1С. В языке запросов существует агрегатная функция Счётчик(), которая позволяет подсчитать количество строк в выборке по заданному условию.
Рассмотрим, как реализовать этот подход на практике. Нам необходимо обратиться к регистру и отфильтровать записи по конкретному документу-регистратору.
Пример кода для выполнения запроса:
// Предположим, что ДокументОбъект - это наш документ
ТекстЗапроса =
"//{{ЗАПРОС(КоличествоДвижений)
|Период с ДокументОбъект.ДатаДок по ДокументОбъект.ДатаДок;
|ОбрабатыватьДокументы Проведенные;
|Рег = Регистр.НашРегистр;
|Функция Кол = Счётчик();
|Условие (Рег.ТекущийДокумент = ДокументОбъект);
|Группировка ДокументОбъект;
|//}}ЗАПРОС";
Запрос = СоздатьОбъект("Запрос");
Если Запрос.Выполнить(ТекстЗапроса) = 1 Тогда
Если Запрос.Группировка(1) = 1 Тогда
КоличествоДвижений = Запрос.Кол;
КонецЕсли;
КонецЕсли;
Счётчик() является стандартным инструментом языка. Она успешно работает как в файловом (DBF), так и в SQL-варианте базы данных.1С++. Она позволяет выполнять прямые запросы к SQL-таблицам, что часто оказывается производительнее стандартного движка запросов 1С, особенно при необходимости работы с большими объемами данных регистра.Хотя в 1С 7.7 нет прямого метода для получения количества движений, использование запросов с функцией Счётчик() является наиболее корректным и стандартизированным способом решения этой задачи. Это позволяет избежать «тяжелого» перебора записей в цикле и сделать код более лаконичным и быстрым.