Как отключить или обойти контроль взаиморасчетов при отгрузке в 1С:УТ 11?

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

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

Метод 1. Настройка прав доступа, ролей и управление доступом к формам

Первым делом проанализируем штатные возможности системы. В 1С:УТ 11 контроль лимитов завязан на систему прав и контроль видимости и доступности элементов управляемой формы. Даже если в соглашении или договоре установлен жесткий запрет, определенные категории пользователей могут его игнорировать.

Разберем, какие права за это отвечают:

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

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

Метод 2. Использование механизма согласования заказов

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

Посмотрим на последовательность действий:

  1. Менеджер создает заказ, система видит превышение долга и блокирует статус К отгрузке.
  2. Заказ отправляется на согласование руководителю.
  3. Руководитель, проверив платежку (которая еще не проведена по банку), устанавливает в заказе признак Согласован.
  4. После этого система позволяет перевести заказ в статус К отгрузке, считая, что ответственное лицо взяло на себя риск превышения лимита.

Метод 3. Оперативное изменение условий в договоре или соглашении

Выясним причину блокировки на уровне данных. Контроль может срабатывать по двум объектам: Договор или Типовое/Индивидуальное соглашение. Если отгрузка критична, а прав на отклонение нет, можно временно увеличить лимит задолженности.

Проанализируем шаги:

Метод 4. Программный обход контроля через расширение

Если штатные методы не подходят (например, нужно сохранить жесткий контроль для всех, но дать возможность «проталкивать» документы программно), рассмотрим техническое решение. В УТ 11 контроль выполняется в модулях проведения при анализе временных таблиц движений.

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

Для начала, при записи документа (например, через команду на форме или подписку), мы устанавливаем наш флаг:


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

Затем, в расширении для общего модуля (обычно это ПроведениеСерверУТ), мы перехватываем процедуру контроля результатов проведения. Рассмотрим, как выглядит этот код:


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

Разберем, что происходит в коде: Механизм проведения УТ 11 собирает изменения по взаиморасчетам во временные таблицы. Если система видит, что флаги ИзменениеСуммыДолга или КонтрольСрока установлены в Истина, она запускает тяжелые запросы для проверки лимитов. Устанавливая их в Ложь, мы заставляем систему «думать», что движений, требующих контроля, в этом документе нет.

Особенности контроля авансов

Иногда документ не проводится не из-за долга, а из-за ошибки «Превышена сумма зачета аванса». Это часто случается при ручных корректировках или сложных схемах взаимозачетов. В этом случае, как показано в примере выше, критически важно сбросить флаг ДвиженияРасчетыСКлиентамиИзменениеАвансыПоНакладным. Это позволит провести документ Реализация товаров и услуг даже при логических нестыковках в регистре зачетов авансов.

Заключение и рекомендации

Мы рассмотрели несколько вариантов решения проблемы контроля взаиморасчетов. Резюмируя, выделим основные рекомендации:

Помните, что в версиях 11.5 и выше логика может незначительно меняться, поэтому перед внедрением программного кода обязательно проанализируйте структуру Объект.ДополнительныеСвойства.ДляПроведения.СтруктураВременныеТаблицы в отладчике именно вашей версии программы.

← На главную