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