Почему в 1С:КА 2 и ERP в реализации пишется «Отгрузка запрещена», но документ проводится?

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

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

Анализ визуальной индикации на форме

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


Процедура ОбновитьОграничениеЗадолженности(Договор, Дата, Текст, ВидимостьТекста, ЦветТекста, ВидимостьКартинки) Экспорт
    
    // ... (пропуск кода получения данных договора)
    
    ПревышенаСумма = Ложь;
    Если ДанныеДоговора.ОграничиватьСуммуЗадолженности Тогда
        ОстатокДопустимогоКредита = ОстатокДопустимогоКредита(Договор, ДанныеДоговора.ДопустимаяСуммаЗадолженности);
        ПревышенаСумма = ОстатокДопустимогоКредита < 0;
    КонецЕсли;
    
    ПревышенСрок = Ложь;
    Если ДанныеДоговора.ЗапрещаетсяПросроченнаяЗадолженность Тогда
        СуммаПросроченнойЗадолженности = СуммаПросроченнойЗадолженности(Договор, Дата);
        ПревышенСрок = СуммаПросроченнойЗадолженности > 0;
    КонецЕсли;
    
    Если ПревышенаСумма ИЛИ ПревышенСрок Тогда
        Текст = НСтр("ru='Отгрузка запрещена'");
        ЦветТекста = WebЦвета.Кирпичный;
        ВидимостьТекста = Истина;
        ВидимостьКартинки = Истина;
    Иначе
        // ... (установка других статусов)
    КонецЕсли;
    
КонецПроцедуры

Проанализировав этот код, мы видим, что процедура ОбновитьОграничениеЗадолженности занимается исключительно интерфейсными задачами. Она проверяет остаток кредита и наличие просрочки, после чего меняет свойства элементов формы: текст, цвет и видимость картинки. В этой процедуре нет и не может быть команды на отказ в проведении (Отказ = Истина), так как она выполняется в контексте формы, а не при записи объекта в базу данных.

Почему блокировка проведения не срабатывает автоматически

Если надпись появилась, значит, система зафиксировала нарушение условий, но блокировка проведения — это отдельный механизм. Рассмотрим основные причины, по которым документ «проскакивает» проведение:

  1. Права доступа (Роли): Это наиболее частая причина. Если пользователю назначена роль Отклонение от условий продаж, система считает, что данный сотрудник имеет полномочия игнорировать лимиты. В этом случае менеджер видит предупреждение, но может его проигнорировать.
  2. Статусы документа: Контроль дебиторской задолженности в ERP-системах часто привязан к статусу документа. Например, проведение в статусе К предоплате может быть разрешено всегда, а жесткая блокировка включится только при попытке перевести документ в статус Реализовано или Отгружено.
  3. Неоперативное проведение: При проведении документа «задним числом» система может пропускать часть проверок, которые актуальны только для оперативного режима, так как остатки и задолженность на прошлую дату могут не соответствовать текущей картине.

Как настроить жесткий запрет типовыми средствами

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

1. Настройка Соглашения об условиях продаж

Перейдем в Типовое соглашение или Индивидуальное соглашение, выбранное в документе. На вкладке «Условия продаж» необходимо обратить внимание на график оплаты. Блокировка отгрузки тесно связана с тем, как настроены этапы оплаты. Если в графике указано Кредит (после отгрузки), система будет более лояльна. Если же стоит Предоплата (до отгрузки), контроль будет максимально строгим.

2. Настройка Договора

Если расчеты ведутся в разрезе договоров, откроем карточку договора. На вкладке «Расчеты / Оплата» должны быть включены следующие опции:

3. Глобальные настройки системы

Проверим раздел НСИ и администрирование — Продажи. Убедимся, что включена опция Лимиты кредита. Без этой глобальной настройки индивидуальные флаги в договорах могут работать некорректно.

Программная доработка (использование расширений)

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

Нам необходимо создать расширение и добавить в него обработчик для документа РеализацияТоваровУслуг. Проанализируем пример логики, которую следует внедрить в процедуру ПередЗаписью или ОбработкаПроведения:


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

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

← На главную