При настройке и использовании типового обмена между конфигурациями «Управление торговлей 11» и «Бухгалтерия предприятия 3.0» пользователи часто сталкиваются с критической остановкой процесса выгрузки. Система выдает сообщение: Недопустимое значение параметра (параметр номер '1') (Колонка не принадлежит коллекции), ссылаясь на общий модуль МенеджерОбменаЧерезУниверсальныйФормат. Рассмотрим подробнее, почему это происходит и как устранить проблему самостоятельно.
Разберем ситуацию с технической точки зрения. Ошибка локализована в общем модуле МенеджерОбменаЧерезУниверсальныйФормат, который отвечает за преобразование данных информационной базы в формат EnterpriseData. В процессе подготовки данных для документов (таких как «Реализация товаров и услуг» или «Заказ клиента») система формирует временную таблицу значений, содержащую данные табличных частей.
Проблема заключается в том, что в коде прописана жесткая команда на удаление технической колонки Упаковка перед завершением формирования XML-пакета. Однако, в зависимости от настроек программы или состава конкретного документа, эта колонка в таблице может отсутствовать. Выясним основные причины отсутствия колонки:
НСИ и администрирование — Номенклатура отключено использование упаковок, система оптимизирует запросы и не создает соответствующие колонки в таблицах обработки.Упаковка для них не предусмотрена программной логикой формирования структуры, и попытка её удаления приводит к краху процесса.EnterpriseData 1.7 и 1.8, где алгоритмы очистки таблиц стали более агрессивными.Проанализируем ситуацию с релизами. Ошибка была официально признана разработчиками 1С и исправлена в последующих выпусках. В релизах ветки 11.4.12.x и выше в код была добавлена проверка на наличие колонки перед её удалением.
Если ваша конфигурация находится на поддержке и не имеет значительных доработок, самым правильным решением будет обновление до актуального релиза. Это не только решит текущую проблему с колонкой Упаковка, но и предотвратит аналогичные ошибки (например, с колонкой НомерГТД), которые также встречались в версиях 11.4.11.x.
Если оперативное обновление невозможно, разберем, как внести исправления вручную. Нам необходимо изменить логику в общем модуле, чтобы система не пыталась удалить то, чего нет. Для этого воспользуемся методом Найти() коллекции Колонки таблицы значений.
Выполним следующие шаги в конфигураторе:
МенеджерОбменаЧерезУниверсальныйФормат.Таблица.Колонки.Удалить("Упаковка");.Рассмотрим пример правильного кода:
// Было:
// Таблица.Колонки.Удалить("Упаковка");
// Стало:
Если Таблица.Колонки.Найти("Упаковка") <> Неопределено Тогда
Таблица.Колонки.Удалить("Упаковка");
КонецЕсли;
Важное примечание: Настоятельно рекомендуем не вносить изменения напрямую в типовую конфигурацию. Лучше создайте Расширение конфигурации, добавьте в него данный общий модуль и примените исправление методом &Вместо или &ИзменениеИКонтроль. Это позволит сохранить возможность легкого обновления программы в будущем.
Если вы не являетесь программистом и вам нужно временное решение «здесь и сейчас», попробуем обойти ошибку через настройки системы:
НСИ и администрирование. Даже если вы их не используете в учете, само наличие этой функциональной опции может заставить систему всегда создавать нужную колонку в таблицах обмена, что предотвратит ошибку.1.8, попробуйте переключить её на 1.6 или 1.5. В более старых версиях формата механизмы обработки табличных частей реализованы иначе, и данная ошибка там может отсутствовать.Загрузить правила регистрации и выберите вариант Из конфигурации. Иногда использование внешних файлов правил старых версий провоцирует некорректную работу современных модулей обмена.Проанализируем ситуацию, если ошибка повторяется с другими именами колонок. Часто вместе с упаковками «вылетает» ошибка по колонке НомерГТД. Логика исправления будет абсолютно идентичной — необходимо найти место удаления колонки в модуле менеджера обмена и обернуть его в условие проверки существования.
Также рекомендуем выполнить очистку регистрации объектов. Если ошибка «зациклилась» на конкретном документе, который был создан в период некорректных настроек, его стоит перепровести или удалить из очереди выгрузки в мониторе синхронизации данных, а затем добавить снова. Это обновит структуру данных, передаваемых в обработчик выгрузки.
Подведем итог: наиболее эффективным и безопасным методом решения является обновление конфигурации до актуального релиза, так как это исправляет системную ошибку на уровне ядра правил обмена 1С. Если же обновление откладывается, использование расширения с проверкой метода Найти() является стандартной практикой решения данной проблемы.