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

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

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

Разбор синтаксиса «черных запросов» в 1С 7.7

Проанализируем пример кода, который вызвал недоумение у автора темы. Этот фрагмент представляет собой типичный алгоритм выгрузки данных из базы 7.7 с использованием объекта Запрос. В среде «семерочников» такие запросы часто называли «черными», в отличие от «прямых» SQL-запросов, которые реализовывались через внешние компоненты.

Разберем структуру объекта Запрос по шагам:

  1. Инициализация объекта. В 1С 7.7 не существовало оператора Новый для большинства объектов. Вместо него использовалась универсальная функция СоздатьОбъект(). Запрос = СоздатьОбъект("Запрос");
  2. Текст запроса. Обратите внимание на синтаксис. Здесь нет привычного ВЫБРАТЬ ... ИЗ ... ГДЕ. Язык запросов 7.7 строился на описании переменных, группировок и условий.
    
    ТекстЗапроса = "
    |ТекущийЭлемент = Справочник.Партнеры.ТекущийЭлемент;
    |ДатаИзменения = Справочник.Партнеры.ДатаИзменения;
    |Группировка ТекущийЭлемент;
    |Условие(ДатаИзменения >= ДатаИзмененияОбъекта);";
    
    В этом фрагменте мы объявляем переменную ТекущийЭлемент, которая ссылается на объект справочника, задаем поле для фильтрации и определяем, как данные будут сгруппированы в результате.
  3. Выполнение и обход результатов. Метод Выполнить() запускает формирование выборки. Обход осуществляется в цикле Пока ... Цикл с помощью метода Группировка().
    
    Запрос.Выполнить(ТекстЗапроса);
    Пока Запрос.Группировка(1) = 1 Цикл
        // Работа с данными
    КонецЦикла;
    

Интеграция с Конвертацией данных 2.1

Выясним причину появления такого кода в правилах обмена. При использовании Конвертации данных 2.1 для выгрузки из версии 7.7 применяется специальная обработка V77Exp.ert. В этой обработке код из правил обмена выполняется через Шаблон() или Выполнить(), что позволяет использовать встроенный язык «семерки» непосредственно в алгоритмах ПВД (Правил Выгрузки Данных).

Рассмотрим метод ВыгрузитьПоПравилу(), который встречается в примере:

ВыгрузитьПоПравилу(Запрос.ТекущийЭлемент, , , , "Контрагенты");

В данном контексте мы передаем найденный в запросе объект (Запрос.ТекущийЭлемент) в процедуру выгрузки, указывая имя правила («Контрагенты»). Это стандартный способ программного инициирования выгрузки объекта при обмене данными между 7.7 и 8.x.

Исторический экскурс: технологии 1С 6.0

Чтобы лучше понять эволюцию платформы, посмотрим на примеры из еще более ранней версии — 1С:Бухгалтерия 6.0. В то время синтаксис был еще более специфичным и базировался на использовании восклицательных знаков для команд и совершенно иного подхода к манипуляции данными. Проанализируем пример создания проводок:


!ВЫБРАТЬ СТРОКУ
  !пСумма=СКД41:{|2}/СКД41:{|2}Н*ЗН|3
  !*    Дата;  Д;     К;     Сумма;     Содержание;
  !ПРОВОДКА ЗН2; "90.2"; "41.1"; пСумма; "НК "+ЗН1+": "+СН{|2}+" по средней";
!СЛЕДУЮЩАЯ СТРОКА

Важно отметить, что даже тогда существовало понятие СКД (Сальдо Конечное Дебетовое), которое многие современные программисты ошибочно принимают исключительно за Систему Компоновки Данных. В версии 6.0 это была встроенная функция для получения бухгалтерских итогов.

Сравнение механизмов запросов 7.7 и 8.x

Выясним, в чем заключаются ключевые отличия, которые часто сбивают с толку разработчиков «восьмерки»:

Практические советы по работе с наследием 7.7

Если вам довелось сопровождать базу на 7.7 или настраивать из нее обмен, рекомендуем придерживаться следующих правил:

  1. Не пугайтесь конструкции СоздатьОбъект. Это единственный способ работы со справочниками, документами и регистрами. Например, для поиска по коду мы используем:
    
    Спр = СоздатьОбъект("Справочник.Номенклатура");
    Если Спр.НайтиПоКоду("00001") = 1 Тогда
        Сообщить(Спр.Наименование);
    КонецЕсли;
    
  2. Помните про контекст. В 7.7 очень важно, в каком модуле выполняется код. Например, ТекущийДокумент() работает только в контексте формы или модуля документа.
  3. Изучайте Построитель отчетов. Для тех, кто привык к гибкости 1С 8, переходным звеном в свое время был ПостроительОтчетов в ранних версиях 8.0, который идеологически наследовал часть логики построения выборок.
  4. Используйте документацию. При работе с 7.7 лучшим другом разработчика остается «Желток» (Желтая Книга Конфигурирования) или встроенный синтакс-помощник, который в 7.7 вызывается так же, но содержит иную структуру разделов.

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

← На главную