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