Как настроить отбор по организации при выгрузке данных из 1С 7.7

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

При переносе данных из конфигурации «1С:Торговля и Склад 7.7» в «1С:Бухгалтерию» с помощью правил, созданных в конфигурации «Конвертация данных 2.1», разработчики часто сталкиваются с необходимостью отфильтровать выгружаемые документы. Стандартная колонка «Отбор» в обработке выгрузки V77Exp.ert имеет существенные ограничения, не позволяя интерактивно задавать сложные условия вроде «Не равно» или «В списке».

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

Ограничения стандартного механизма отбора в V77Exp.ert

В платформе «1С:Предприятие 7.7» отсутствуют Система компоновки данных и Построитель отчета, знакомые разработчикам по платформе 1С 8. Механизм интерактивного отбора в V77Exp.ert работает исключительно на базе платформенного признака «Отбор по реквизиту», заданного в метаданных конфигуратора. По этой причине штатный отбор предоставляет только один тип сравнения — точное равенство («Равно») одному конкретному значению. Построить логические цепочки «ИЛИ», указать список значений или инвертировать условие («Не равно») через стандартное табличное поле невозможно.

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

Специфика загрузки кода правил в 1С 7.7: в отличие от восьмой версии платформы, где программный код правил выгрузки может компилироваться динамически прямо из XML-файла, в 7.7 все обработчики событий должны быть физически встроены в модуль обработки. При выгрузке правил из «Конвертации данных» создаются два файла: файл правил с расширением XML и текстовый файл модуля выгрузки (обычно МодульВыгрузки.txt). Чтобы написанный код обработчиков вступил в силу, необходимо открыть V77Exp.ert в Конфигураторе 7.7 и обновить текст модуля содержимым созданного файла, иначе возникнет ошибка отсутствия функции ПКО_....

Способ 1. Использование параметра типа «СписокЗначений» с диалогом

Рассмотрим универсальный вариант, позволяющий пользователю перед запуском выгрузки самостоятельно выбирать одну или несколько фирм, а также задавать логику отбора. Настроим параметры в «Конвертации данных» и напишем условие в обработчике.

  1. Откроем «Конвертацию данных», перейдем в форму нужной конвертации на вкладку «Параметры».
  2. Создадим новый параметр со следующими свойствами:

    Имя: СписокФирм

    Тип данных: СписокЗначений

    Флаг: взводим флаг «Диалог» (это позволит отобразить параметр в форме обработки V77Exp.ert).

  3. Для выбора режима фильтрации создадим еще один числовой параметр РежимОтбора (с флагом «Диалог»), где 1 будет означать «Только выбранные», а 2 — «Исключать выбранные».
  4. Перейдем в соответствующее Правило конвертации объектов (ПКО) нужного документа и в обработчике «Перед выгрузкой» пропишем алгоритм проверки:
    
    Если Параметры.СписокФирм.РазмерСписка() > 0 Тогда
        ВходитВСписок = Параметры.СписокФирм.Принадлежит(Источник.Фирма);
        
        // Режим 1: Выгружать только те, что в списке
        Если (Параметры.РежимОтбора = 1) И (ВходитВСписок = 0) Тогда
            Отказ = 1;
        КонецЕсли;
        
        // Режим 2: Выгружать все, кроме выбранных (условие "НЕ РАВНО")
        Если (Параметры.РежимОтбора = 2) И (ВходитВСписок = 1) Тогда
            Отказ = 1;
        КонецЕсли;
    КонецЕсли;
    
    Если Источник.ПометкаУдаления() = 1 Тогда
        Отказ = 1;
    КонецЕсли;
    
  5. Сохраним правила, выполним выгрузку в файлы правил и модуля, а затем обновим текст модуля обработки V77Exp.ert в Конфигураторе 7.7.

Обратите внимание: в синтаксисе встроенного языка 1С 7.7 флаг отказа устанавливается числовым значением Отказ = 1;, а проверка на пометку удаления выполняется через метод ПометкаУдаления().

Способ 2. Выборка через произвольный алгоритм в ПВД (для больших баз)

Проанализируем производительность предыдущего способа. При установке флага Отказ = 1 в событии «Перед выгрузкой» ПКО обработка последовательно перебирает абсолютно все документы базы за указанный период и только затем отсекает лишние. На базах с большим документооборотом это приводит к существенному замедлению выгрузки.

Чтобы ускорить процесс, переведем выборку данных на уровень Правил выгрузки данных (ПВД) с использованием штатных механизмов выборки 1С 7.7:

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

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

Способ 3. Доработка диалоговой формы внешней обработки V77Exp.ert

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

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

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

← На главную