В процессе разработки на платформе 1С:Предприятие 7.7 часто возникают задачи, связанные с обработкой списков документов. Разработчики сталкиваются с вопросами идентификации объектов метаданных и управления выборками. Давайте разберем по шагам, как правильно определять вид документа и как эффективно фильтровать данные при переборе. Для выполнения типовых массовых операций без написания кода можно использовать готовое приложение для групповой обработки документов.
Когда мы работаем с выборкой, созданной через объект Документ, нам часто нужно знать, с каким именно видом документа мы работаем в данный момент. Ошибочно пытаться искать «идентификатор» в свойствах объекта. Для решения этой задачи в 1С 7.7 существуют специальные методы.
Если нам необходимо получить системное имя вида документа (например, для проверки в коде или условий), используем метод Вид(). Рассмотрим пример:
СписокВозвратов = СоздатьОбъект("Документ.ВозвратСсуды");
СписокВозвратов.ВыбратьДокументы(НачДата, КонДата);
Пока СписокВозвратов.ПолучитьДокумент() = 1 Цикл
ТипДокумента = СписокВозвратов.Вид();
// Теперь переменная ТипДокумента содержит строку "ВозвратСсуды"
КонецЦикла;
Если же наша задача — вывести на экран или в отчет понятное пользователю название документа, воспользуемся методом ПредставлениеВида(). Это позволит получить красиво оформленное имя, заданное в конфигураторе, например «Возврат ссуды».
Часто возникает вопрос: как исключить из уже созданной выборки документы, которые не соответствуют нашим критериям? Важно понимать, что объект Документ в 1С 7.7 — это итератор, который последовательно считывает записи из базы данных. У него нет встроенной команды «удалить строку из выборки».
Рассмотрим два основных подхода для решения этой задачи:
Самый простой и понятный путь — использовать оператор Продолжить внутри цикла. Мы анализируем текущий документ, и если он не подходит под наши условия (например, сумма меньше или больше определенного значения), мы просто пропускаем его обработку.
Пока СписокВозвратов.ПолучитьДокумент() = 1 Цикл
// Проверяем условие
Если СписокВозвратов.Сумма < 1000 Тогда
Продолжить; // Пропускаем этот документ и переходим к следующему
КонецЕсли;
// Здесь выполняем действия с документами, которые прошли фильтрацию
// Например, расчеты или запись в другую таблицу
КонецЦикла;
Если критериев отбора много и они сложные, перебор всех документов может быть медленным. В таких случаях лучше использовать Запрос. Язык запросов 1С 7.7 позволяет отобрать документы непосредственно на уровне базы данных, используя условия фильтрации. Это делает код более профессиональным и производительным.
Если в процессе обработки выборки вам нужно отобрать документы для дальнейшего использования в других частях программы, рекомендуем использовать дополнительные структуры данных:
Пример использования промежуточной таблицы:
ТаблицаОтфильтрованных = СоздатьОбъект("ТаблицаЗначений");
ТаблицаОтфильтрованных.НоваяКолонка("Документ", "Документ");
Пока СписокВозвратов.ПолучитьДокумент() = 1 Цикл
Если ПроверкаУсловий(СписокВозвратов) = 1 Тогда
ТаблицаОтфильтрованных.НоваяСтрока();
ТаблицаОтфильтрованных.Документ = СписокВозвратов.ТекущийДокумент();
КонецЕсли;
КонецЦикла;
Подводя итог, можно сказать, что работа с документами в 1С 7.7 требует четкого понимания того, что вы работаете с итератором. Всегда старайтесь минимизировать количество проходов по базе, используя либо точные условия в Запросе, либо эффективные алгоритмы фильтрации в цикле с использованием промежуточных объектов.