При работе в конфигурации 1С:Управление торговлей 11.4 (особенно в релизах ветки 11.4.13) пользователи часто сталкиваются с критической ошибкой при попытке создать или провести документ Приходный кассовый ордер (ПКО). Проблема обычно проявляется в виде аварийного завершения операции с указанием на ошибку в общем модуле ОбменСКонтрагентамиСлужебный. В этой статье мы подробно разберем причины возникновения этой ситуации, проанализируем технические нюансы релизов и рассмотрим несколько способов решения проблемы.
Проанализируем ситуацию, описанную пользователями. Ошибка чаще всего возникает в строке 2065 (или около того) модуля ОбменСКонтрагентамиСлужебный. Основная причина кроется в глубокой переработке подсистемы Электронного документооборота (ЭДО) и интеграции с маркировкой, которую фирма «1С» затеяла в переходных релизах. Система пытается определить, нужно ли формировать электронный документ для данной хозяйственной операции, и делает это некорректно.
Разберем подробнее, почему это происходит даже тогда, когда функциональная опция ЭДО отключена. В коде конфигурации подписки на события и процедуры инициализации объектов часто срабатывают раньше, чем проверяется флаг использования ЭДО. Программа пытается сопоставить тип текущего документа (в нашем случае ДокументСсылка.ПриходныйКассовыйОрдер) со списком типов, поддерживающих электронный обмен. На этом этапе происходит обращение к метаданным, которых может не существовать в текущем релизе или которые определены неверно.
Выясним причину на примере объекта ВыкупТоваровХранителем. В некоторых сборках этот объект мигрировал: он мог быть представлен как отдельный тип документа ДокументСсылка.ВыкупТоваровХранителем или как вид хозяйственной операции внутри другого документа. Если расширение или типовой код обращается к типу ДокументСсылка.ВыкупТоваровХранителем, а в метаданных такого объекта нет, система выдает фатальную ошибку.
Если ваша конфигурация содержит расширения, созданные сторонними разработчиками или под более старые релизы, велика вероятность, что ошибка провоцируется именно ими. Рассмотрим пример кода, который вызывает сбой при попытке создать ПКО, и как его можно исправить.
Проанализируем фрагмент кода в расширении, который необходимо закомментировать или изменить, если система «спотыкается» на определении типа источника:
// Пример проблемного участка кода в расширении
//++ Ошибка в релизе 11.4.13
//ИначеЕсли ТипИсточника = Тип("ДокументСсылка.ВыкупТоваровХранителем")
// ИЛИ ТипИсточника = Тип("ДокументОбъект.ВыкупТоваровХранителем") Тогда
// ВидЭД = Перечисления.ВидыЭД.УПД;
// НаправлениеЭД = Перечисления.НаправленияЭД.Исходящий;
// Если ЭтоСсылка Тогда
// ЗначенияРеквизитов = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Источник, "Организация, Контрагент, Договор");
// Организация = ЗначенияРеквизитов.Организация;
// Контрагент = ЗначенияРеквизитов.Контрагент;
// Договор = ЗначенияРеквизитов.Договор;
// Иначе
// Организация = Источник.Организация;
// Контрагент = Источник.Контрагент;
// Договор = Источник.Договор;
// КонецЕсли;
//-- Конец проблемного участка
Посмотрим на логику исправления: если ТипИсточника в данный момент равен ПриходныйОрдер, а код пытается найти у него реквизиты, характерные для товарных документов (например, Договор или Склад в контексте, не предусмотренном для ПКО), или обращается к несуществующему типу ВыкупТоваровХранителем, происходит прерывание. После комментирования этого блока (если данная логика вам не критична) создание ПКО восстанавливается.
Релиз 11.4.13.47 официально признан сообществом одним из самых нестабильных. Для него и последующих версий (например, 11.4.13.51) компания «1С» выпустила десятки патчей. Если вы не хотите править код вручную, необходимо воспользоваться механизмом автоматической установки исправлений.
Выполним следующие шаги для исправления ситуации:
EF_00..., которые касаются работы ОбменСКонтрагентами и подсистемы БЭД (Библиотека электронного документооборота).Важно помнить, что в релизе 11.4.13.47 за неделю жизни было выявлено столько ошибок, что даже официальная поддержка рекомендовала либо немедленно обновляться до 11.4.13.51 с патчами, либо откатываться на стабильную ветку 11.4.12.
Иногда ошибка в модуле ОбменСКонтрагентамиСлужебный может сохраняться из-за некорректного кэша метаданных на стороне клиента или несовместимости версии платформы с новыми библиотеками 11.4.13.х.
Рассмотрим порядок действий для исключения этих факторов:
8.3.17.1851 или актуальные версии 8.3.18+.ПередЗаписью или ПриУстановкеНовогоНомера, которая конфликтует с логикой ЭДО.Многие пользователи удивляются: «Я отключил ЭДО совсем, почему ошибка в модуле обмена все равно вылетает?». Разберем этот технический парадокс. В архитектуре 1С:УТ 11.4 многие общие модули вызываются через механизм подписок на события. Эти подписки жестко прописаны в метаданных. Когда вы нажимаете кнопку «Записать» в ПКО, срабатывает подписка, которая передает управление в общий модуль обмена. Код этого модуля начинает анализировать объект, чтобы понять, что с ним делать. И только внутри этого анализа стоит проверка: «А включена ли опция ЭДО?». Если ошибка происходит до этой проверки (например, на этапе объявления переменных или сопоставления типов), то состояние настройки ЭДО уже не имеет значения — программа «падает» раньше.
Резюме: Если вы столкнулись с невозможностью создать ПКО в УТ 11.4.13, наиболее эффективным решением будет обновление до последнего доступного релиза в ветке (не ниже 11.4.13.281) с обязательной установкой всех исправлений (патчей) через интернет-поддержку. Если же вы вынуждены работать на проблемном релизе, проверьте свои расширения на наличие обращений к несуществующим типам документов, таким как ВыкупТоваровХранителем.