Как найти скрытое ограничение или доработку при записи документа в 1С

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей IT и автоматизация бизнеса
← На главную

В процессе сопровождения типовых конфигураций (например, «1С:Управление торговлей») программисты часто сталкиваются с ситуацией, когда в системе срабатывает неизвестное ограничение. Например, программа блокирует создание второго документа для одного и того же контрагента за день, при этом стандартный поиск по тексту ошибки ничего не дает, так как визуальное сообщение пользователю не выводится.

Разберем по шагам, как локализовать и найти место в коде, где зашита подобная проверка, даже если после обновления конфигурации ограничение продолжает срабатывать.

Шаг 1. Использование отладчика и точки останова в обработчике ПередЗаписью

Самый быстрый и надежный способ выяснить, почему отменяется запись документа — это пошаговая отладка с момента нажатия кнопки проведения или записи.

  1. Откроем конфигурацию в режиме Конфигуратор и включим режим отладки.
  2. Найдем в дереве конфигурации нужный документ и откроем его модуль объекта.
  3. Найдем процедуру-обработчик события ПередЗаписью.
  4. Поставим точку останова в самом начале этой процедуры.
  5. Запустим режим «1С:Предприятие», откроем проблемный документ и попытаемся его записать.
  6. При срабатывании точки останова продолжим выполнение кода пошагово (клавиша F10 или F11), отслеживая значение ключевого параметра Отказ.

Если параметр Отказ принимает значение Истина, проанализируем условие, из-за которого произошел сброс записи. Зачастую разработчики пишут отказ без вывода сообщения пользователю:


Если ЗаписьЗаблокированаТогда
    Отказ = Истина;
    Возврат;
КонецЕсли;

Шаг 2. Проверка подписок на события

Если в модуле объекта документа алгоритм проверки отсутствует, логика может быть вынесена в общие модули и подключена через подписки на события. В платформе 1С:Предприятие подписки выполняются до или после основных событий объекта.

Для поиска подписки проанализируем дерево конфигурации:

  1. Развернем ветку Общие > Подписки на события.
  2. Отфильтруем или изучим подписки, относящиеся к событию ПередЗаписью или ПриЗаписи.
  3. Проверим типы источника: в списке типов должен быть указан наш документ или составной тип (например, ДокументСсылка или ДокументОбъект).
  4. Перейдем в обработчик найденной подписки и проверим код на наличие проверок по контрагенту и дате.

Шаг 3. Замер производительности для локализации отказа

Если пошаговая отладка затруднена или в системе выполняется слишком много вызовов, используем инструмент Замер производительности в отладчике.

  1. В Конфигураторе откроем отладчик и выберем пункт меню Отладка > Замер производительности.
  2. В режиме «1С:Предприятие» зайдём в форму документа, подготовим данные к записи.
  3. Включим замер производительности в Конфигураторе.
  4. Нажмем «Записать» в документе и дождемся отмены записи.
  5. Остановим замер производительности и проанализируем сформированный список вызванных строк кода.

В дереве вызовов обращаем внимание на последние выполненные модули перед возвратом на клиент. Строка, в которой параметру Отказ присваивается значение Истина, и будет искомым ограничением.

Шаг 4. Поиск в расширениях конфигурации

Если основной конфигурационный файл (CF) был обновлен, но логика осталась, доработка вероятнее всего выполнена через механизм расширений (CFE). Расширение не перезаписывается при типовом обновлении основной конфигурации.

Проверим наличие расширений:

  1. В режиме «1С:Предприятие» перейдем в раздел Администрирование > Печатные формы, отчеты и обработки > Расширения.
  2. В режиме «Конфигуратор» откроем меню Конфигурация > Расширения конфигурации.
  3. Изучим модули объектов и форм в подключенных расширениях, обращая внимание на аннотации &Перед, &После и &Вместо для процедуры ПередЗаписью.

Шаг 5. Поиск по ключевым фрагментам кода

Для поиска проверки на уровне запросов к базе данных выполним глобальный поиск по конфигурации и расширениям (сочетание клавиш Ctrl + Shift + F). Введем комбинации условий, характерные для ограничения создания одного документа в день:

  1. НАЧАЛОПЕРИОДА и ДЕНЬ
  2. Запрос.УстановитьПараметр("Контрагент"
  3. Выбрать Первые 1 в сочетании с типом проверяемого документа.

Рассмотренные инструменты позволят быстро обнаружить произвольные проверки любой сложности и привести код в соответствие со стандартами разработки 1С.

← На главную