В процессе оперативной работы в 1С:Управление нашей фирмой (УНФ) менеджеры часто сталкиваются с ситуацией, когда фактическая отгрузка отличается от предварительного заказа. Покупатель может в последний момент попросить добавить еще одну единицу товара или заменить одну позицию на другую. Если оформить документ Реализация товаров и услуг на основании Заказа покупателя, но указать в нем большее количество, система позволит провести документ, но в регистрах учета возникнут «минусы».
Рассмотрим подробнее, почему так происходит, как это влияет на планирование закупок и какие существуют способы решения данной проблемы — от организационных до технических.
Для начала разберем, как 1С:УНФ фиксирует потребности. Когда менеджер проводит документ Заказ покупателя, система делает запись в регистр накопления Заказы покупателей с видом движения Приход. Это означает, что перед компанией возникло обязательство отгрузить товар.
При проведении Реализации товаров и услуг, созданной на основании этого заказа, система делает движение Расход по тому же регистру. Однако типовая логика многих версий УНФ (особенно старых редакций 1.6) заключается в том, что расход делается ровно на то количество, которое указано в накладной, без проверки на «закрытие» только заказанного объема.
Проанализируем ситуацию на примере:
Заказы покупателей: -1 шт.Выясним причину, почему это критично. Отрицательный остаток в этом регистре система интерпретирует как «перевыполнение» заказа. В отчетах (например, «Анализ заказа») вы увидите отрицательное значение в колонке «Осталось отгрузить». Самое неприятное происходит в блоке закупки: инструмент Расчет потребностей может вычесть этот «минус» из общей потребности в товаре, и система решит, что вам нужно закупать меньше товара, чем требуется на самом деле для обеспечения других заказов. Для комплексного анализа взаимосвязи заказов и отгрузок подойдёт коммерческий отчет по продажам и заказам покупателей.
Прежде чем приступать к доработкам кода, проверим настройки программы. В современных версиях 1С:УНФ (начиная с редакций 1.6.19 и в 3.0) предусмотрен механизм, запрещающий отгрузку сверх заказа.
Разберем по шагам, как активировать эту опцию:
Если этот флаг установлен, система выдаст ошибку при попытке провести реализацию, в которой количество строк или объем товара превышает данные исходного заказа. Это самый простой и правильный путь для наведения порядка в учете.
Если специфика бизнеса такова, что заказы часто меняются «на лету», а период редактирования старых заказов уже закрыт, рекомендуется использовать документ Корректировка заказа.
Рассмотрим, как это работает: вместо того чтобы править исходный Заказ покупателя, менеджер создает документ корректировки. Этот документ изменяет состояние регистра Заказы покупателей, приводя ожидаемое количество к фактическому. После проведения корректировки Реализация закроет заказ «в ноль», и в отчетах не будет висеть лишних потребностей или отрицательных остатков.
Бывают случаи, когда отгрузка уже совершена, «минусы» в регистрах уже зафиксированы, и нам нужно оперативно очистить учет. Для этих целей в 1С:УНФ предназначен документ Завершение заказа покупателя.
Посмотрим на алгоритм его работы:
Важно: Всегда указывайте причину закрытия заказа, это поможет в дальнейшем анализировать, почему фактические продажи отличаются от плановых.
Если штатные настройки по каким-то причинам не подходят, мы можем реализовать собственную проверку. Рассмотрим пример кода, который можно внедрить через расширение в модуль документа РеализацияТоваровУслуг перед записью или при проведении. Наша задача — сравнить таблицу товаров реализации с остатками по заказу.
Проанализируем пример логики проверки:
// Пример упрощенной проверки в модуле документа
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Если РежимПроведения = РежимПроведенияДокумента.Проведение Тогда
Для Каждого СтрокаТЧ Из Товары Цикл
Если ЗначениеЗаполнено(СтрокаТЧ.ЗаказПокупателя) Тогда
// Получаем остаток по заказу через запрос к регистру ЗаказыПокупателей
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЗаказыПокупателейОстатки.КоличествоОстаток КАК Осталось
|ИЗ
| РегистрНакопления.ЗаказыПокупателей.Остатки(, ЗаказПокупателя = &Заказ И Номенклатура = &Номенклатура) КАК ЗаказыПокупателейОстатки";
Запрос.УстановитьПараметр("Заказ", СтрокаТЧ.ЗаказПокупателя);
Запрос.УстановитьПараметр("Номенклатура", СтрокаТЧ.Номенклатура);
Результат = Запрос.Выполнить().Выбрать();
Если Результат.Следующий() Тогда
Если СтрокаТЧ.Количество > Результат.Осталось Тогда
Сообщить("Внимание! По товару " + СтрокаТЧ.Номенклатура + " превышено количество в заказе на " + (СтрокаТЧ.Количество - Результат.Осталось) + " шт.");
// Отказ = Истина; // Раскомментировать для жесткого запрета
КонецЕсли;
Иначе
Сообщить("Товар " + СтрокаТЧ.Номенклатура + " отсутствует в заказе " + СтрокаТЧ.ЗаказПокупателя);
// Отказ = Истина;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Данный код позволяет выявить расхождения еще на этапе попытки проведения. Мы рекомендуем использовать расширения, чтобы не снимать конфигурацию с поддержки.
Многие пользователи недооценивают серьезность отрицательных остатков в заказах. Разберем ситуацию с точки зрения закупщика. В 1С:УНФ обработка Расчет потребностей в запасах работает по формуле: Потребность = (Заказы покупателей + Минимальный запас) - (Остатки на складах + Заказы поставщикам).
Если в Заказы покупателей попал «минус» (например, отгрузили на 5 штук больше), то общая потребность уменьшится на эти 5 штук. В итоге закупщик не закажет товар, который на самом деле нужен для обеспечения следующего клиента.
Поэтому совместная работа менеджеров по продажам и закупщиков должна строиться на правиле: Реализация не может превышать Заказ. Если клиент хочет больше — менеджер обязан сначала увеличить количество в Заказе покупателя (или создать второй заказ), чтобы закупщик увидел реальный расход склада и вовремя восполнил запасы.
Мы выяснили, что поведение системы, при котором Реализация «минусует» заказы сверх меры — это не ошибка, а особенность архитектуры регистров 1С. Чтобы избежать хаоса в учете, рекомендуем:
Заказ покупателя до момента выписки накладной.Завершение заказа.Помните, что порядок в заказах — это фундамент для корректного автозаказа и бесперебойного наличия товаров на вашем складе.