Перенос данных из устаревших систем на платформе 1С:Предприятие 7.7 в современные конфигурации на базе 1С:Предприятие 8.3 (такие как BAS Бухгалтерия или Бухгалтерия предприятия 3.0) — это всегда вызов для разработчика. Одной из самых частых задач в этом процессе является перенос справочника Номенклатура. Однако именно здесь новички часто сталкиваются с технической ошибкой: Функция не обнаружена (ПКС_ПередВыгрузкой...).
В этой статье мы подробно разберем, почему возникает эта ошибка, как правильно передавать значения перечислений из «семерки» в «восьмерку» и какие нюансы настройки Конвертации данных 2.1 помогут сделать перенос справочников бесшовным.
Давайте проанализируем ситуацию. Когда вы работаете в обработке «Конвертация данных» и пишете код в обработчике Перед выгрузкой для ПКС (Правила конвертации свойств), этот код будет исполняться в контексте исходной базы. В нашем случае — в 1С:Предприятии 7.7.
Автор проблемы пытался указать значение следующим образом:
Значение = ПеречислениеСсылка.СтавкиНДС.НДС20;
Выясним причину неудачи: платформа 1С 7.7 ничего не знает о типах данных 1С 8.3. Объект ПеречислениеСсылка не существует в языке 7.7. Когда внешняя обработка выгрузки (V8Expor.ert) пытается загрузить правила и скомпилировать программный код из XML-файла, встроенный компилятор «семерки» спотыкается на неизвестном слове. В результате функция, отвечающая за это правило, просто не создается в памяти, и система выдает ошибку: Функция не обнаружена.
Рассмотрим первый и самый простой способ исправления. Чтобы передать значение в приемник (1С 8.3), которое в будущем станет элементом перечисления, нам не нужно обращаться к объектам восьмой версии напрямую. Нам достаточно передать строковое имя (идентификатор) значения перечисления, как оно задано в конфигураторе базы-приемника.
Посмотрим на пример правильного кода для обработчика Перед выгрузкой в ПКС СтавкаНДС:
// В 1С 7.7 мы просто присваиваем переменной Значение строку.
// Система Конвертации данных при загрузке сама сопоставит эту строку
// с именем значения перечисления в 8.3.
Значение = "НДС20";
Важный момент: Необходимо проверить точное имя значения в конфигураторе 1С 8.3. Например, для конфигурации BAS Бухгалтерия (Украина) или БП 3.0 это может быть НДС20, Vat20 или даже БезНДС. Не путайте это с синонимом (тем, что видит пользователь), вам нужно именно внутреннее «Имя».
Проанализируем более профессиональный подход, который позволяет избежать написания кода в ПКС и делает правила более гибкими. Это использование сопоставления значений внутри самой «Конвертации данных».
Выполним следующие шаги:
СтавкаНДС в справочнике Номенклатура.СтавкиНДС из 1С 7.7 соответствует какому значению перечисления СтавкиНДС из 1С 8.3.Этот метод считается более надежным, так как он исключает ошибки компиляции кода в «семерке» и наглядно показывает логику переноса данных другому разработчику.
Поскольку автор упоминает конфигурацию BAS Бухгалтерия для Украины 2.1, нужно учитывать специфику метаданных. В этой конфигурации (как и в российской версии 3.0) работа с НДС может быть завязана не только на перечислении, но и на налоговых назначениях.
Разберем дополнительные настройки, которые могут потребоваться:
КлассификаторЕдиницИзмерения. Вам обязательно нужно создать ПКО для единиц измерения и сопоставить их по коду (например, «796» для шт).ВидНоменклатуры можно написать простой код:
// Пример установки вида номенклатуры "Товар" для всей выгрузки
Значение = "Товар";
// Или если это услуга в 7.7
Если Источник.ЭтоУслуга = 1 Тогда
Значение = "Услуга";
КонецЕсли;
Как отметил автор, в его базе 1С 7.7 много изменений и релиз слишком старый для стандартных правил перехода. В такой ситуации мы рекомендуем придерживаться стратегии «чистого справочника».
Рассмотрим алгоритм действий при работе с сильно кастомизированной «семеркой»:
V8Expor.ert.Функция не обнаружена, первым делом проверяйте код в ПКС на наличие «восьмерочных» конструкций: Справочники..., Перечисления..., ПланыСчетов... — в 7.7 их использовать нельзя!Подводя итог, можно сказать, что главная ошибка автора была в попытке «говорить на языке 8.3» внутри системы 1С 7.7. Для успешной конвертации данных всегда помните: код в правилах выгрузки пишется на языке источника.
Короткий чек-лист для исправления:
ПеречислениеСсылка.Имя.Значение на строковое "Значение".Номенклатура имеет сложную иерархию, убедитесь, что в ПКО установлена галочка «Использовать для решения коллизий идентификатор объекта», чтобы не создать дубли при повторных выгрузках.Следуя этим правилам, вы сможете успешно перенести даже самую сложную иерархию номенклатуры из 1С 7.7 в 1С 8.3, сохранив все необходимые реквизиты и настройки налогового учета.