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