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