Как получить тип документа и отфильтровать выборку в 1С 7.7?

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

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

Определяем вид документа в выборке

Когда мы работаем с выборкой, созданной через объект Документ, нам часто нужно знать, с каким именно видом документа мы работаем в данный момент. Ошибочно пытаться искать «идентификатор» в свойствах объекта. Для решения этой задачи в 1С 7.7 существуют специальные методы.

Если нам необходимо получить системное имя вида документа (например, для проверки в коде или условий), используем метод Вид(). Рассмотрим пример:


СписокВозвратов = СоздатьОбъект("Документ.ВозвратСсуды");
СписокВозвратов.ВыбратьДокументы(НачДата, КонДата);
Пока СписокВозвратов.ПолучитьДокумент() = 1 Цикл
    ТипДокумента = СписокВозвратов.Вид();
    // Теперь переменная ТипДокумента содержит строку "ВозвратСсуды"
КонецЦикла;

Если же наша задача — вывести на экран или в отчет понятное пользователю название документа, воспользуемся методом ПредставлениеВида(). Это позволит получить красиво оформленное имя, заданное в конфигураторе, например «Возврат ссуды».

Фильтрация документов в выборке

Часто возникает вопрос: как исключить из уже созданной выборки документы, которые не соответствуют нашим критериям? Важно понимать, что объект Документ в 1С 7.7 — это итератор, который последовательно считывает записи из базы данных. У него нет встроенной команды «удалить строку из выборки».

Рассмотрим два основных подхода для решения этой задачи:

Способ 1: Условная фильтрация в цикле

Самый простой и понятный путь — использовать оператор Продолжить внутри цикла. Мы анализируем текущий документ, и если он не подходит под наши условия (например, сумма меньше или больше определенного значения), мы просто пропускаем его обработку.


Пока СписокВозвратов.ПолучитьДокумент() = 1 Цикл
    // Проверяем условие
    Если СписокВозвратов.Сумма < 1000 Тогда
        Продолжить; // Пропускаем этот документ и переходим к следующему
    КонецЕсли;
    
    // Здесь выполняем действия с документами, которые прошли фильтрацию
    // Например, расчеты или запись в другую таблицу
КонецЦикла;

Способ 2: Использование запросов

Если критериев отбора много и они сложные, перебор всех документов может быть медленным. В таких случаях лучше использовать Запрос. Язык запросов 1С 7.7 позволяет отобрать документы непосредственно на уровне базы данных, используя условия фильтрации. Это делает код более профессиональным и производительным.

Рекомендации по работе со списками

Если в процессе обработки выборки вам нужно отобрать документы для дальнейшего использования в других частях программы, рекомендуем использовать дополнительные структуры данных:

  1. СписокЗначений: отлично подходит, если нужно просто сохранить ссылки на подходящие документы.
  2. ТаблицаЗначений: удобна, если вместе со ссылкой на документ нужно сохранить дополнительные данные (например, промежуточные итоги или статусы).

Пример использования промежуточной таблицы:


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

Пока СписокВозвратов.ПолучитьДокумент() = 1 Цикл
    Если ПроверкаУсловий(СписокВозвратов) = 1 Тогда
        ТаблицаОтфильтрованных.НоваяСтрока();
        ТаблицаОтфильтрованных.Документ = СписокВозвратов.ТекущийДокумент();
    КонецЕсли;
КонецЦикла;

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

← На главную