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