Почему в 1С:УТ 11 можно принять товар по перемещению до его фактической отгрузки и как это исправить?

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

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

В этой статье мы подробно разберем, почему разработчики фирмы «1С» заложили именно такую логику в систему, как работают складские регистры в данный момент и какими способами можно настроить жесткий контроль последовательности отгрузки и приемки на предприятии.

Философия и техническая логика работы ордерного склада в 1С

Чтобы понять причины такого поведения программы, проанализируем разделение документооборота на финансовый и складской контуры. В системе 1С документ Перемещение товаров выступает одновременно в двух ролях:

  1. Финансовый документ: фиксирует переход права собственности или внутреннее перемещение затрат между организациями и подразделениями.
  2. Распоряжение на складскую операцию: служит сигналом для кладовщиков обоих складов (отправителя и получателя) о необходимости начать работу.

Как только менеджер проводит документ Перемещение товаров со статусом Отгружено, система считает, что товар юридически списан со склада-отправителя и находится в пути. В этот момент на техническом уровне происходят движения в регистрах накопления:

Рабочее место кладовщика «Приемка товаров на склад» на складе-получателе функционирует на основе остатков регистра Товары к поступлению. Поскольку документ-распоряжение уже проведен, он мгновенно появляется на вкладке приемки. Программа позволяет кладовщику-получателю создать приходный ордер, так как для системы главным основанием является именно проведенное финансовое распоряжение (накладная перемещения), а не действия склада-отправителя.

Разработчики фирмы «1С» пошли на этот шаг осознанно, руководствуясь принципом отказоустойчивости реальных бизнес-процессов. На практике склады могут находиться в разных городах, иметь проблемы с интернетом или электричеством. Если машина с товаром физически приехала на склад-получатель, а кладовщик склада-отправителя еще не успел провести расходный ордер в системе, жесткая блокировка парализовала бы работу принимающего склада. Разгрузка машины заблокировалась бы, что привело бы к простоям транспорта.

Как смоделировать последовательность в системе пошагово

Рассмотрим стандартную цепочку действий, которую предполагает типовой функционал:

  1. Менеджер создает и проводит документ Перемещение товаров со статусом Отгружено.
  2. Кладовщик склада-отправителя открывает рабочее место «Отгрузка» и создает Расходный ордер на товары. Статус ордера последовательно меняется: Подготовлено → К отбору → К проверке → К отгрузке → Отгружен.
  3. После фактической отправки машины кладовщик склада-получателя открывает рабочее место «Приемка». На основании того же перемещения он создает Приходный ордер на товары, проверяет количество и переводит его в статус Принят.

В типовой конфигурации контроль за выполнением этой цепочки возлагается на посмертный (ретроспективный) анализ. Для этого используются специализированные отчёты: «Состояние выполнения приемки», «Выполнение приемки товаров» и «Исполнение распоряжений на перемещение». Предполагается, что руководство или старший кладовщик в конце смены анализируют зависшие остатки по регистрам Товары к отгрузке и Товары к поступлению.

Варианты решения проблемы и настройки жесткого контроля

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

Метод А. Использование виртуального транзитного склада («Товары в пути»)

Этот способ не требует программирования и реализуется штатными настройками системы. Вместо прямого перемещения со склада «А» на склад «Б» настраивается схема транзита:

  1. Создается виртуальный склад с типом «Транзит» (или «Товары в пути»).
  2. Перемещение оформляется в два этапа. Первым документом перемещения товар списывается со склада-отправителя на склад-транзит. Контролируется отгрузка с реального склада.
  3. Вторым документом перемещения товар забирается со склада-транзита на склад-получатель. Программа физически не позволит принять на склад-получатель больше товара, чем фактически числится на виртуальном транзитном складе.

Этот метод усложняет документооборот (требуется два документа перемещения вместо одного), но гарантирует 100% точность учета без доработки кода.

Метод Б. Программное ограничение проведения документов (Расширение конфигурации)

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

Нам необходимо перехватить процедуру проведения документа Приходный ордер на товары. Если документ проводится в статусе Принят, система должна выполнить запрос к базе данных и проверить, существует ли по данному распоряжению проведенный расходный ордер в статусе Отгружен. Если ордер не найден или его статус ниже требуемого, проведение блокируется.

Пример кода для модуля объекта документа Приходный ордер на товары в расширении:


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

Используя этот код в расширении, вы гарантируете, что ни один кладовщик не сможет оприходовать товар на склад-получатель «задним числом» или раньше времени, полностью исключив влияние человеческого фактора.

Метод В. Фильтрация списка распоряжений в рабочем месте кладовщика

Если вы не хотите жестко запрещать проведение документов программно, можно пойти по пути оптимизации интерфейса. Для этого дорабатывается динамический список в рабочем месте «Приемка товаров на склад» (обработка ПриемкаТоваровНаСклад).

В запрос выбора распоряжений добавляется левое соединение с таблицей документов Расходный ордер на товары. На форму выводится признак «Товар отгружен отправителем» (зеленый флажок или отдельная колонка). Кладовщик склада-получателя будет визуально видеть, какие машины уже отправлены в его сторону, а какие перемещения существуют пока только на бумаге, и не будет брать в работу неоформленные распоряжения.

Проанализировав все три метода, мы рекомендуем использовать Метод Б как наиболее надежный и не усложняющий повседневную работу сотрудников дополнительным документооборотом.

← На главную