Как программно разрешить отгрузку товара сверх лимита задолженности в УТ 11?

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

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

Анализ механизма контроля задолженности

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

  1. Регистры накопления для расчета текущей задолженности.
  2. Общие модули с названиями, содержащими Контроль или РасчетыСКлиентами.
  3. Механизм подписок на события, который срабатывает в момент проведения документа Реализация товаров и услуг.

Чтобы найти место, где система «блокирует» проведение, используйте возможности отладчика. Установите точку останова в процедуре ОбработкаПроведения модуля документа и проследите стек вызовов. Вы обязательно обнаружите вызов функции, которая возвращает значение Ложь при превышении лимита. Именно это место является ключом к управлению процессом.

Решение 1: Проверка прав доступа и ролей

Прежде чем писать программный код, проанализируйте настройки прав пользователя. В 1С:УТ 11 часто предусмотрены специальные роли, разрешающие игнорирование кредитных лимитов. Возможно, вам не нужно писать код, а достаточно назначить пользователю профиль группы доступа, содержащий право на превышение лимитов. Проверьте функциональную опцию Контролировать сумму задолженности в настройках системы — иногда достаточно изменить настройки для конкретного пользователя или группы, чтобы задача была решена штатно.

Решение 2: Перехват события и программный обход

Если штатных настроек недостаточно, используйте механизм расширений конфигурации. Это наиболее «чистый» способ вмешательства, который позволит сохранить типовую конфигурацию на поддержке.

  1. Создайте расширение конфигурации.
  2. Используйте аннотацию &Вместо для процедуры контроля, которую вы обнаружили с помощью отладчика.
  3. Внутри расширения добавьте условие, которое проверяет наличие специального флага или определенного пользователя/роли, чтобы принять решение: разрешить проведение или выполнить типовую проверку.

Пример концептуальной реализации логики в расширении:


// В расширении используем аннотацию &Вместо
&Вместо("ПроверитьЛимитЗадолженности")
Процедура Расш_ПроверитьЛимитЗадолженности(ДокументСсылка, Отказ)
    Если ПользовательИмеетПравоНаПревышение() Тогда
        // Пропускаем контроль, проведение будет разрешено
        Возврат;
    Иначе
        // Вызываем типовой метод для стандартной проверки
        ПродолжитьВызов(ДокументСсылка, Отказ);
    КонецЕсли;
КонецПроцедуры

Решение 3: Использование дополнительных свойств объекта

Типовой код часто предусматривает возможность управления поведением через коллекцию ДополнительныеСвойства объекта документа. При программном проведении документа (например, через Записать(РежимЗаписиДокумента.Проведение)) вы можете передать в документ структуру с флагом, который отключает проверку:


ДокументОбъект = ДокументСсылка.ПолучитьОбъект();
ДокументОбъект.ДополнительныеСвойства.Вставить("ИгнорироватьКонтрольЗадолженности", Истина);
ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);

Однако, этот метод работает только в том случае, если разработчики типовой конфигурации предусмотрели проверку этого ключа внутри своих общих модулей. Используйте отладчик, чтобы увидеть, опрашивается ли ДополнительныеСвойства в процессе проведения.

Рекомендации по реализации

Мы рекомендуем придерживаться следующих правил при доработке:

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

← На главную