Где взять правила переноса документов из 1С:КА 1.1 в КА 2.4 и как решить ошибку выгрузки модуля обмена?

Программист 1С v8.3 (Управляемые формы) 1С:Комплексная автоматизация IT и автоматизация бизнеса
← На главную

При переходе с устаревшей редакции «1С:Комплексная автоматизация 1.1» на современные версии (КА 2.4 или актуальную 2.5) специалисты часто сталкиваются с вопросом корректного переноса исторических документов и справочников. Рассмотрим подробнее, какие типовые инструменты существуют, в чем их ограничения, и разберем по шагам решение проблемы с пропавшими функциями при использовании «Конвертации данных 3».

Типовые инструменты перехода: КД 2.1 против EnterpriseData

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

  1. Типовой перенос на базе «Конвертации данных 2.1». В шаблонах установки новых релизов Комплексной автоматизации 2 (в каталоге ExtFiles) поставляется штатная обработка и макет с правилами обмена в формате 2.01. Важно понимать, что этот механизм ориентирован в первую очередь на перенос нормативно-справочной информации (справочников) и начальных остатков на дату перехода. Перенос оборотов и документов за прошлые периоды в нем реализован крайне ограниченно.
  2. Обмен через универсальный формат EnterpriseData (КД 3). Начиная с последних релизов КА 1.1 (например, 1.1.110.2), в конфигурацию встроен обмен через формат EnterpriseData. Это позволяет настроить более «плавный» переход и обмен документами. Однако универсальный формат жестко регламентирован XDTO-пакетами. На исторических «грязных» данных (незаполненные обязательные реквизиты, дубли) валидация XDTO часто выдает ошибки и не пропускает объекты.

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

Как настроить обмен EnterpriseData без снятия КА 1.1 с поддержки

Если вы решили использовать формат EnterpriseData и вам необходимо скорректировать правила через «Конвертацию данных 3» (КД 3), вам понадобится выгрузить и загрузить обратно программный код в общий модуль МенеджерОбменаЧерезУниверсальныйФормат. Выясним, обязательно ли для этого снимать конфигурацию-источник с поддержки.

Снимать конфигурацию с замка не обязательно. В современных версиях Библиотеки стандартных подсистем (БСП) в настройках синхронизации данных можно переключить режим работы. Вы можете указать, что модуль МенеджерОбменаЧерезУниверсальныйФормат находится во внешней обработке. Таким образом, вы просто помещаете модифицированный код в обработку, подключаете её в пользовательском режиме и радуетесь — конфигурация остается типовой (хотя обновления для КА 1.1 уже давно не выпускаются).

Решение ошибки «Процедура или функция с указанным именем не определена» в КД 3

Посмотрим на пример распространенной ошибки. При выгрузке модуля менеджера обмена из КД 3 и попытке применить его в КА 1.1 возникает множество синтаксических ошибок, например:


{ОбщийМодуль.МенеджерОбменаЧерезУниверсальныйФормат.Модуль(221,7)}: Процедура или функция с указанным именем не определена (ЭтоСБДСРасчетыСКонтрагентами)
    Если <<?>>ЭтоСБДСРасчетыСКонтрагентами(ДанныеИБ) Тогда (Проверка: Толстый клиент (обычное приложение))

Причина проблемы: Ошибка возникает из-за особенностей парсинга текста в «Конвертации данных 3». При загрузке структуры из текстового файла общего модуля КД 3 ориентируется на служебные комментарии-теги. Если при загрузке теги считались некорректно, секция //Алгоритмы просто не переносится в базу КД 3. При обратной генерации кода этот блок оказывается пустым, и все функции, к которым обращаются ПКО и ПОД, пропадают.

Решение: Нам необходимо вручную скопировать недостающий блок алгоритмов из оригинального типового модуля МенеджерОбменаЧерезУниверсальныйФормат старой конфигурации (или УПП 1.3) в сгенерированный итоговый модуль внешней обработки. Ниже приведен код пропавшей функции для работы с безналичными расчетами:


Функция ЭтоСБДСРасчетыСКонтрагентами(ДанныеИБ, ВидРасчетов = "")
    ВидОперации = ДанныеИБ.ВидОперации;
    Если ВидОперации = Перечисления.ВидыОперацийСписаниеБезналичныхДенежныхСредств.ВозвратДенежныхСредствПокупателю
        Или ВидОперации = Перечисления.ВидыОперацийППИсходящее.ВозвратДенежныхСредствПокупателю Тогда
        ВидРасчетов = "СПокупателем";
    ИначеЕсли ВидОперации = Перечисления.ВидыОперацийСписаниеБезналичныхДенежныхСредств.ОплатаПоставщику
        Или ВидОперации = Перечисления.ВидыОперацийППИсходящее.ОплатаПоставщику Тогда
        ВидРасчетов = "СПоставщиком";
    ИначеЕсли ВидОперации = Перечисления.ВидыОперацийСписаниеБезналичныхДенежныхСредств.РасчетыПоКредитамИЗаймам
        Или ВидОперации = Перечисления.ВидыОперацийППИсходящее.РасчетыПоКредитамИЗаймамСКонтрагентами Тогда
        ВидРасчетов = "КредитыИЗаймы";
    ИначеЕсли ВидОперации = Перечисления.ВидыОперацийСписаниеБезналичныхДенежныхСредств.ПрочиеРасчетыСКонтрагентами
        Или ВидОперации = Перечисления.ВидыОперацийППИсходящее.ПрочиеРасчетыСКонтрагентами  Тогда
        ВидРасчетов = "Прочее";
    Иначе
        Возврат Ложь;
    КонецЕсли;
    Возврат Истина;
КонецФункции

Вставьте эту и другие недостающие функции из раздела алгоритмов в конец вашего модифицированного модуля. После этого проверка синтаксиса пройдет успешно, и обмен через формат EnterpriseData заработает корректно.

← На главную