В процессе сопровождения типовых конфигураций (например, «1С:Управление торговлей») программисты часто сталкиваются с ситуацией, когда в системе срабатывает неизвестное ограничение. Например, программа блокирует создание второго документа для одного и того же контрагента за день, при этом стандартный поиск по тексту ошибки ничего не дает, так как визуальное сообщение пользователю не выводится.
Разберем по шагам, как локализовать и найти место в коде, где зашита подобная проверка, даже если после обновления конфигурации ограничение продолжает срабатывать.
Самый быстрый и надежный способ выяснить, почему отменяется запись документа — это пошаговая отладка с момента нажатия кнопки проведения или записи.
ПередЗаписью.Отказ.Если параметр Отказ принимает значение Истина, проанализируем условие, из-за которого произошел сброс записи. Зачастую разработчики пишут отказ без вывода сообщения пользователю:
Если ЗаписьЗаблокированаТогда
Отказ = Истина;
Возврат;
КонецЕсли;
Если в модуле объекта документа алгоритм проверки отсутствует, логика может быть вынесена в общие модули и подключена через подписки на события. В платформе 1С:Предприятие подписки выполняются до или после основных событий объекта.
Для поиска подписки проанализируем дерево конфигурации:
ПередЗаписью или ПриЗаписи.ДокументСсылка или ДокументОбъект).Если пошаговая отладка затруднена или в системе выполняется слишком много вызовов, используем инструмент Замер производительности в отладчике.
В дереве вызовов обращаем внимание на последние выполненные модули перед возвратом на клиент. Строка, в которой параметру Отказ присваивается значение Истина, и будет искомым ограничением.
Если основной конфигурационный файл (CF) был обновлен, но логика осталась, доработка вероятнее всего выполнена через механизм расширений (CFE). Расширение не перезаписывается при типовом обновлении основной конфигурации.
Проверим наличие расширений:
&Перед, &После и &Вместо для процедуры ПередЗаписью.Для поиска проверки на уровне запросов к базе данных выполним глобальный поиск по конфигурации и расширениям (сочетание клавиш Ctrl + Shift + F). Введем комбинации условий, характерные для ограничения создания одного документа в день:
НАЧАЛОПЕРИОДА и ДЕНЬЗапрос.УстановитьПараметр("Контрагент"Выбрать Первые 1 в сочетании с типом проверяемого документа.Рассмотренные инструменты позволят быстро обнаружить произвольные проверки любой сложности и привести код в соответствие со стандартами разработки 1С.