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