В процессе работы с программными продуктами фирмы «1С» на единой ERP-платформе пользователи часто сталкиваются с неожиданным поведением системы после установки автоматических обновлений или исправлений (патчей). Одной из наиболее резонансных проблем стала ошибка при проведении документа РеализацияТоваровУслуг, которая полностью блокирует операционную деятельность компании. При попытке провести документ система выдает аварийное сообщение, ссылающееся на несуществующий или отключенный объект конфигурации — ЗаказДавальца.
В этой статье мы подробно разберем, почему возникает эта ошибка, как устроена архитектура общего ядра конфигураций «1С», детально проанализируем техническую причину сбоя и по шагам рассмотрим несколько способов окончательного решения проблемы как в пользовательском режиме «1С:Предприятие», так и через «Конфигуратор».
Сбой проявляется внезапно, чаще всего после очередного автоматического обновления или регламентной установки исправлений (патчей) от фирмы «1С». При попытке провести документ Реализация товаров и услуг (или при перепроведении старых документов) система аварийно завершает транзакцию и выводит на экран следующее диагностическое сообщение:
Документ Реализация товаров и услуг 0000-000032 от 20.01.2020 не проведен: {(47, 39)}: Неверные параметры "Документ.ЗаказДавальца.ПустаяСсылка" И Таблица.ЗаказКлиента <> ЗНАЧЕНИЕ(Документ.ЗаказДавальца.ПустаяСсылка)
Пользователи и администраторы базы данных при этом оказываются в замешательстве: в используемой конфигурации (например, «1С:Управление торговлей») документа «Заказ давальца» нет вообще. В конфигурации «1С:Комплексная автоматизация» этот документ физически присутствует в метаданных, но функциональная опция «Производство» может быть полностью отключена. При этом обычные заказы клиентов проводятся без нареканий, остатки товаров на складах есть, но отгрузку оформить невозможно. Более того, ошибка начинает блокировать и другие операции, связанные с расчетами: проведение платежей, банковских выписок и корректировок.
Для того чтобы понять природу этой ошибки, нам необходимо проанализировать архитектуру современных решений «1С». Программы «1С:ERP Управление предприятием», «1С:Комплексная автоматизация» (КА) и «1С:Управление торговлей» (УТ) разрабатываются на базе единого программного ядра. Код многих общих модулей, запросов и механизмов проведения документов (особенно в контуре взаиморасчетов) у них абсолютно идентичен.
В начале 2020 года фирма «1С» выпустила оперативное исправление — патч с идентификатором EF_00_00270469. Данный патч предназначался для исправления локальной ошибки в механизме расчетов с клиентами. Однако при написании кода исправления разработчики допустили критическую ошибку: они жестко прописали в тексте одного из SQL-подобных запросов обращение к пустому значению документа давальческой схемы:
// Фрагмент некорректного запроса в патче
ВЫБРАТЬ
Таблица.Ссылка КАК Ссылка,
Таблица.ЗаказКлиента КАК ЗаказКлиента
ИЗ
РегистрНакопления.РасчетыСКлиентами КАК Таблица
ГДЕ
Таблица.ЗаказКлиента <> ЗНАЧЕНИЕ(Документ.ЗаказДавальца.ПустаяСсылка)
Давайте проанализируем, к чему это приводит на уровне платформы в разных конфигурациях:
Документ.ЗаказДавальца) полностью вырезаны разработчиками на этапе сборки релиза. Когда платформа пытается скомпилировать данный запрос, она не находит тип данных Документ.ЗаказДавальца в пространстве метаданных и выдает ошибку компиляции запроса.ЗаказДавальца физически существует в структуре метаданных. Однако, если в настройках системы отключена функциональная опция «Производство», платформа «1С» на уровне СУБД блокирует доступ к таблицам неиспользуемых документов. Результат оказывается аналогичным — аварийное завершение работы запроса с ошибкой неверных параметров.Таким образом, дефектный патч, призванный решить небольшую проблему во взаиморасчетах, полностью парализовал проведение документов отгрузки и оплаты в информационных базах УТ и КА.
Для устранения этой неисправности нам потребуется удалить некорректный патч EF_00_00270469 из информационной базы. Рассмотрим два основных способа решения этой задачи: через пользовательский интерфейс в режиме «1С:Предприятие» и через режим «Конфигуратор».
Этот метод является наиболее предпочтительным, так как не требует монопольного доступа к базе данных и может быть выполнен пользователем с правами администратора непосредственно в процессе работы.
Выполним следующие шаги:
После удаления патча система может предложить перезапустить программу. Крайне важно согласиться на это действие, чтобы изменения вступили в силу.
Если по какой-то причине зайти в режиме «Предприятие» не получается или интерфейс работает медленно, мы можем выполнить операцию удаления через среду разработки.
Рассмотрим этот алгоритм по шагам:
EF_ в своем наименовании.Очень часто администраторы сталкиваются с ситуацией, когда патч успешно удален как в «Конфигураторе», так и в режиме «1С:Предприятие», но при попытке провести реализацию ошибка продолжает появляться. Рассмотрим подробнее, почему это происходит и как с этим бороться.
Причина кроется в механизме кэширования запросов и планов их выполнения платформой «1С:Предприятие». Скомпилированные схемы метаданных и тексты запросов кэшируются как на локальных компьютерах пользователей, так и на сервере приложений 1С.
Чтобы изменения гарантированно применились, выполним следующие регламентные действия:
%userprofile%\AppData\Local\1C\1Cv8 и %userprofile%\AppData\Roaming\1C\1Cv8 при закрытом приложении 1С.1C:Enterprise 8.3 Server Agent, в Linux — демон srv1cv83). В качестве альтернативы можно завершить все активные сеансы и принудительно перезапустить рабочие процессы (rphost) через консоль администрирования серверов 1С.Для того чтобы минимизировать риски возникновения подобных критических ошибок в будущем, проанализируем и внедрим следующие правила администрирования информационных систем на платформе «1С»:
Мы полностью разобрали проблему с ошибкой проведения документа реализации, выяснили ее архитектурные и технические причины и рассмотрели пошаговые методики ее устранения. Применяя данные инструкции, вы сможете оперативно восстановить работоспособность учетной системы вашей организации.