Как реализовать замену номенклатуры в документах прямо из отчета в 1С 8?

Программист 1С v8.3 (Управляемые формы) Управленческий учет Промышленность, строительство и АПК
← На главную

При переходе с платформы 1С 7.7 на 1С 8 многие разработчики сталкиваются с необходимостью сохранить привычный для пользователей интерактивный функционал. Одной из таких задач является возможность изменять данные в первичных документах (например, производить замену материалов или готовой продукции) непосредственно из сформированного отчета. Рассмотрим, как это реализовать современными средствами платформы 8.3, избегая "костылей" и сохраняя чистоту архитектуры.

Понимание архитектурных различий: от таблицы к объекту

В 1С 7.7 отчеты часто строились на прямом манипулировании таблицей. В 1С 8 основным инструментом построения отчетов является Система компоновки данных (СКД). Важно понимать, что отчет в 8-ке — это не просто набор текста в ячейках, а сложная структура, сохраняющая связи с объектами базы данных через механизм расшифровки. Разберем пошагово, как использовать этот механизм для нашей задачи.

Решение 1: Использование события ОбработкаРасшифровки

Самый близкий аналог функционала из 7.7 — это перехват клика пользователя по ячейке отчета. В управляемых формах 1С 8.3 для этого используется событие ОбработкаРасшифровки в модуле формы отчета. Проанализируем алгоритм действий:

  1. При формировании отчета СКД автоматически заполняет ДанныеРасшифровки.
  2. Когда пользователь нажимает на ячейку (например, с названием номенклатуры), вызывается процедура-обработчик.
  3. Мы программно определяем, какой документ и какая строка соответствуют этой ячейке.
  4. Вызываем обработку или открываем диалог замены.
  5. После внесения изменений обновляем отчет.

Рассмотрим пример кода для модуля формы отчета:


&НаКлиенте
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь; // Отменяем стандартное открытие документа
    
    // Получаем данные расшифровки, чтобы понять, на что нажали
    Данные = ПолучитьДанныеРасшифровкиНаСервере(Расшифровка);
    
    Если Данные.Свойство("СсылкаНаДокумент") И Данные.Свойство("ТекущаяНоменклатура") Тогда
        
        // Описываем параметры для нашей обработки замены
        ПараметрыФормы = Новый Структура;
        ПараметрыФормы.Вставить("ДокументОбъект", Данные.СсылкаНаДокумент);
        ПараметрыФормы.Вставить("СтараяНоменклатура", Данные.ТекущаяНоменклатура);
        
        // Открываем форму помощника замены
        ОткрытьФорму("ОбщаяФорма.ПомощникЗаменыНоменклатуры", ПараметрыФормы, ТекущийОбъект, , , , 
            Новый ОписаниеОповещения("ПослеЗаменыЗавершение", ЭтотОбъект));
            
    КонецЕсли;
    
КонецПроцедуры

В этом примере мы используем ОписаниеОповещения, чтобы после закрытия формы замены отчет автоматически переформировался, вызывая метод ЭтаФорма.ОбновитьОтчет(). Это обеспечивает ту самую наглядность, о которой говорилось в исходном запросе.

Решение 2: Интерактивные редактируемые поля в отчете

В платформе 8.3 появилась возможность сделать отчет "живым". Если в 7.7 вы просто заменяли текст, то здесь можно разрешить редактирование конкретных колонок прямо в табличном документе. Выясним, как это настроить:

Для этого в настройках оформления поля в СКД или программно при выводе в ТабличныйДокумент необходимо установить свойство ТолькоПросмотр = Ложь. Пользователь сможет вписать новое количество или выбрать другую номенклатуру прямо в сетке отчета. После этого по кнопке "Применить изменения" мы обходим строки табличного документа и записываем данные в соответствующие документы-основания.

Решение 3: Переход к Автоматизированным Рабочим Местам (АРМ)

Проанализируем ситуацию: если отчет требует постоянной правки данных, возможно, пользователю нужен не отчет, а АРМ (Автоматизированное рабочее место). В типовых конфигурациях (УНФ, ERP, УТ 11) вместо простых отчетов по расходу часто используются обработки, которые визуально выглядят как списки, но имеют встроенные кнопки управления.

Преимущества использования АРМ:

Решение 4: Механизм аналогов в типовых конфигурациях

Если вы используете современные конфигурации, такие как 1С:Управление нашей фирмой или 1С:ERP, замена номенклатуры в производстве — это стандартный бизнес-процесс. Разберем, как это работает там:

Вместо того чтобы вручную менять номенклатуру в документах через отчет, в системе настраиваются "Аналоги номенклатуры". Когда в документе производства (например, "Производство без заказа" или "Этап производства") не хватает основного материала, программа позволяет нажать кнопку "Подобрать аналоги". Система сама предложит разрешенные замены и пересчитает количество согласно коэффициентам.

Это избавляет от необходимости писать самописные отчеты для корректировки данных "задним числом", так как проблема решается в момент оформления документа.

Использование расширений для реализации функционала

Важный совет для программиста: если вы решили реализовать такую замену в типовой конфигурации, делайте это через Расширения. Это позволит вам:

  1. Добавить процедуру ОбработкаРасшифровки к типовому отчету, не снимая конфигурацию с поддержки.
  2. Создать собственные команды в контекстном меню отчета.
  3. Легко обновлять основную программу, так как весь ваш код замены будет вынесен в отдельный слой.

Резюме: В 1С 8 замена номенклатуры через отчет реализуется гораздо мощнее, чем в 7.7. Мы рекомендуем использовать сочетание СКД с перехватом события расшифровки для простых задач, а для сложных производственных процессов — внедрять механизм аналогов или создавать специализированные АРМ. Это сделает работу пользователя более надежной и соответствующей стандартам современной разработки на платформе 1С.

← На главную