В процессе эксплуатации и регулярного обновления конфигурации «1С:Управление торговлей» (редакция 11) специалисты и пользователи иногда сталкиваются с неожиданными критическими сбоями в базовых механизмах программы. Одним из ярких примеров является массовый сбой при попытке проведения документа СписаниеБезналичныхДенежныхСредств, сопровождающийся ошибкой обращения к реквизиту государственного контракта, а также сопутствующий баг в карточке партнера, блокирующий ввод адреса веб-сайта. В этой статье мы подробно разберем причины возникновения обеих проблем, проанализируем внутренние механизмы платформы и БСП, вызвавшие данные неполадки, и изучим пошаговые алгоритмы их устранения.
---
Рассмотрим детально ситуацию, с которой сталкиваются пользователи. После автоматического или ручного обновления конфигурации (например, на релиз 11.4.11.106) при попытке провести или просто записать любой документ СписаниеБезналичныхДенежныхСредств система полностью блокирует действие и выбрасывает аварийное завершение транзакции со следующим стеком вызовов:
Ошибка при выполнении обработчика - 'ПередЗаписью'
по причине:
Неверный второй параметр Реквизиты в функции ОбщегоНазначения.ЗначенияРеквизитовОбъекта:
- Поле объекта "ГосударственныйКонтракт.Код" не найдено
{ОбщийМодуль.ОбщегоНазначения.Модуль(297)}: ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(...)
{EF_00_00299998 Документ.СписаниеБезналичныхДенежныхСредств.МодульОбъекта(133)}: РеквизитыБанковскогоСчета = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(БанковскийСчет, "ОтдельныйСчетГОЗ, ГосударственныйКонтракт.Код");
Проанализируем архитектуру этого сбоя. Источником проблемы здесь выступает функция Библиотеки Стандартных Подсистем (БСП) ОбщегоНазначения.ЗначенияРеквизитовОбъекта. Данный метод предназначен для быстрого и оптимизированного получения значений реквизитов конкретного ссылочного объекта без необходимости выборки всей строки или создания тяжелых запросов вручную. Метод принимает два основных параметра: ссылку на объект (в нашем случае это справочник БанковскиеСчетаОрганизаций или БанковскиеСчетаКонтрагентов, хранящийся в переменной БанковскийСчет) и строку с перечислением запрашиваемых полей через запятую.
Перед тем как сформировать запрос к СУБД, внутренний код БСП выполняет жесткую проверку структуры метаданных целевого объекта на наличие всех запрашиваемых полей. Если хотя бы одно из указанных в строке полей отсутствует в структуре метаданных конфигурации, функция незамедлительно генерирует исключение, что мы и видим в логе ошибки.
Выясним, почему это произошло в «1С:Управление торговлей». Виновником коллизии является автоматическое исправление (патч) с идентификатором EF_00_00299998. Фирма «1С» использует единую кодовую базу торгового ядра для трех флагманских решений: «1С:ERP Управление предприятием», «1С:Комплексная автоматизация» и «1С:Управление торговлей». Разработанный патч предназначался для исправления логики работы со специальными банковскими счетами в рамках исполнения Гособоронзаказа (ГОЗ). Данный функционал полноценно представлен в ERP и КА, где у справочников банковских счетов присутствует реквизит ГосударственныйКонтракт, ссылающийся на соответствующий справочник контрактов.
Однако в конфигурации «Управление торговлей» полноценный учет ГОЗ и госконтрактов не предусмотрен архитектурно. В результате патч EF_00_00299998, будучи примененным к конфигурации УТ, попытался обратиться к несуществующему в метаданных реквизиту ГосударственныйКонтракт.Код. Это и привело к моментальному отказу системы при проведении платежных документов.
---
Для восстановления штатной работоспособности системы мы можем прибегнуть к нескольким вариантам решения.
Поскольку учет ГОЗ в «1С:Управление торговлей» не используется, удаление данного исправления никак не повлияет на бизнес-логику вашей системы. Выполним следующие шаги:
EF_00_00299998.В некоторых случаях, если интерфейс предприятия заблокирован или требуется быстрое вмешательство администратора базы данных, операцию можно провести через Конфигуратор:
EF_00_00299998.Разработчики фирмы «1С» оперативно отреагировали на проблему и исключили несовместимый вызов из кода патча для конфигурации УТ. Проблема полностью нивелирована в последующих официальных релизах. Для исправления ситуации достаточно обновить программу до релиза 11.4.12.61 или более актуального.
---
Перейдя на релиз 11.4.12.61 для исправления ошибки списания денежных средств, администраторы часто сталкиваются со следующей проблемой: в карточке любого партнера (справочник Партнеры) поле ввода Сайт перестает реагировать на любые нажатия клавиш клавиатуры. Поле выглядит активным, курсор в него устанавливается, но ввести символы напрямую невозможно — система их игнорирует или моментально стирает.
Разберем техническую причину этой неполадки. Поле «Сайт» является частью подсистемы «Контактная информация», разработанной в рамках Библиотеки Стандартных Подсистем. В релизе 11.4.12.61 был изменен внутренний валидатор ввода текстовой информации на клиенте для объектов с типом контактной информации «Веб-страница».
При вводе каждого отдельного символа срабатывает клиентское событие автопроверки маски ввода на базе регулярного выражения. Из-за логической ошибки в коде регулярного выражения любой вводимый пользователем символ (будь то буквы, цифры, двоеточия или косые черты) ошибочно распознается регулярным выражением как некорректный символ маски, вследствие чего обработчик события прерывает ввод и очищает буфер клавиатуры, не давая зафиксировать текст в поле.
---
Рассмотрим, какими путями мы можем решить или временно обойти эту проблему.
Так как ошибочный алгоритм валидации текста срабатывает только при прямом интерактивном наборе строки непосредственно в форме карточки партнера, мы можем обойти ограничение за счет вызова специализированной формы ввода контактной информации. Выполним следующие шаги:
Для устранения этой ошибки фирма «1С» выпустила отдельный патч для подсистемы КИ. Рекомендуется проверить наличие доступных автоматических исправлений в разделе НСИ и администрирование -> Обслуживание -> Поиск и установка обновлений/патчей.
Наиболее надежным решением является переход на последующие релизы конфигурации «Управление торговлей», в которых данная ошибка валидации регулярных выражений была полностью устранена разработчиками БСП. Рекомендуется обновить информационную базу до версии 11.4.12.71 или выше.
---
Для того чтобы минимизировать риски остановки операционной деятельности предприятия из-за подобных ошибок при обновлении, рекомендуем придерживаться следующих правил: