Что делать, если количество в реализации больше, чем в заказе покупателя в 1С:УНФ

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

В процессе оперативной работы в 1С:Управление нашей фирмой (УНФ) менеджеры часто сталкиваются с ситуацией, когда фактическая отгрузка отличается от предварительного заказа. Покупатель может в последний момент попросить добавить еще одну единицу товара или заменить одну позицию на другую. Если оформить документ Реализация товаров и услуг на основании Заказа покупателя, но указать в нем большее количество, система позволит провести документ, но в регистрах учета возникнут «минусы».

Рассмотрим подробнее, почему так происходит, как это влияет на планирование закупок и какие существуют способы решения данной проблемы — от организационных до технических.

Анализируем механику работы регистра «Заказы покупателей»

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

При проведении Реализации товаров и услуг, созданной на основании этого заказа, система делает движение Расход по тому же регистру. Однако типовая логика многих версий УНФ (особенно старых редакций 1.6) заключается в том, что расход делается ровно на то количество, которое указано в накладной, без проверки на «закрытие» только заказанного объема.

Проанализируем ситуацию на примере:

  1. В заказе указан Товар1 в количестве 1 шт. (Регистр: +1).
  2. В реализации на основании заказа указан Товар1 в количестве 2 шт. (Регистр: -2).
  3. Итог по регистру Заказы покупателей: -1 шт.

Выясним причину, почему это критично. Отрицательный остаток в этом регистре система интерпретирует как «перевыполнение» заказа. В отчетах (например, «Анализ заказа») вы увидите отрицательное значение в колонке «Осталось отгрузить». Самое неприятное происходит в блоке закупки: инструмент Расчет потребностей может вычесть этот «минус» из общей потребности в товаре, и система решит, что вам нужно закупать меньше товара, чем требуется на самом деле для обеспечения других заказов. Для комплексного анализа взаимосвязи заказов и отгрузок подойдёт коммерческий отчет по продажам и заказам покупателей.

Способ 1: Включение штатного контроля отгрузки

Прежде чем приступать к доработкам кода, проверим настройки программы. В современных версиях 1С:УНФ (начиная с редакций 1.6.19 и в 3.0) предусмотрен механизм, запрещающий отгрузку сверх заказа.

Разберем по шагам, как активировать эту опцию:

  1. Перейдем в раздел Настройки — Еще больше возможностей.
  2. Выберем подраздел Продажи.
  3. Найдем флаг Контролировать отгрузку при оформлении на основании заказов.

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

Способ 2: Корректировка заказов покупателей

Если специфика бизнеса такова, что заказы часто меняются «на лету», а период редактирования старых заказов уже закрыт, рекомендуется использовать документ Корректировка заказа.

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

Способ 3: Использование документа «Завершение заказа»

Бывают случаи, когда отгрузка уже совершена, «минусы» в регистрах уже зафиксированы, и нам нужно оперативно очистить учет. Для этих целей в 1С:УНФ предназначен документ Завершение заказа покупателя.

Посмотрим на алгоритм его работы:

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

Способ 4: Программное ограничение (для разработчиков)

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

Проанализируем пример логики проверки:


// Пример упрощенной проверки в модуле документа
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
    
    Если РежимПроведения = РежимПроведенияДокумента.Проведение Тогда
        
        Для Каждого СтрокаТЧ Из Товары Цикл
            Если ЗначениеЗаполнено(СтрокаТЧ.ЗаказПокупателя) Тогда
                
                // Получаем остаток по заказу через запрос к регистру ЗаказыПокупателей
                Запрос = Новый Запрос;
                Запрос.Текст = 
                "ВЫБРАТЬ
                |   ЗаказыПокупателейОстатки.КоличествоОстаток КАК Осталось
                |ИЗ
                |   РегистрНакопления.ЗаказыПокупателей.Остатки(, ЗаказПокупателя = &Заказ И Номенклатура = &Номенклатура) КАК ЗаказыПокупателейОстатки";
                
                Запрос.УстановитьПараметр("Заказ", СтрокаТЧ.ЗаказПокупателя);
                Запрос.УстановитьПараметр("Номенклатура", СтрокаТЧ.Номенклатура);
                
                Результат = Запрос.Выполнить().Выбрать();
                Если Результат.Следующий() Тогда
                    Если СтрокаТЧ.Количество > Результат.Осталось Тогда
                        Сообщить("Внимание! По товару " + СтрокаТЧ.Номенклатура + " превышено количество в заказе на " + (СтрокаТЧ.Количество - Результат.Осталось) + " шт.");
                        // Отказ = Истина; // Раскомментировать для жесткого запрета
                    КонецЕсли;
                Иначе
                    Сообщить("Товар " + СтрокаТЧ.Номенклатура + " отсутствует в заказе " + СтрокаТЧ.ЗаказПокупателя);
                    // Отказ = Истина;
                КонецЕсли;
                
            КонецЕсли;
        КонецЦикла;
        
    КонецЕсли;
    
КонецПроцедуры

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

Влияние на планирование и «Расчет потребностей»

Многие пользователи недооценивают серьезность отрицательных остатков в заказах. Разберем ситуацию с точки зрения закупщика. В 1С:УНФ обработка Расчет потребностей в запасах работает по формуле: Потребность = (Заказы покупателей + Минимальный запас) - (Остатки на складах + Заказы поставщикам).

Если в Заказы покупателей попал «минус» (например, отгрузили на 5 штук больше), то общая потребность уменьшится на эти 5 штук. В итоге закупщик не закажет товар, который на самом деле нужен для обеспечения следующего клиента.

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

Резюме и рекомендации

Мы выяснили, что поведение системы, при котором Реализация «минусует» заказы сверх меры — это не ошибка, а особенность архитектуры регистров 1С. Чтобы избежать хаоса в учете, рекомендуем:

  1. Использовать штатный контроль: Включите опцию контроля отгрузки в настройках продаж.
  2. Соблюдать дисциплину: Приучите менеджеров вносить изменения в Заказ покупателя до момента выписки накладной.
  3. Регулярно проверять отчеты: Используйте отчет «Заказы покупателей» с фильтром по отрицательному остатку для поиска ошибок оформления.
  4. Автоматизировать закрытие: Если специфика допускает отклонения, используйте регламентное создание документов Завершение заказа.

Помните, что порядок в заказах — это фундамент для корректного автозаказа и бесперебойного наличия товаров на вашем складе.

← На главную