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