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