Как реализовать учет по качеству в регистре Учет затрат при комплектации номенклатуры в 1С:УПП

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

При работе в конфигурации 1С:Управление производственным предприятием 1.3 (УПП) часто возникает необходимость расширить стандартный функционал документов. Одной из таких задач является добавление учета по качеству в документе КомплектацияНоменклатуры. Если с регистрами складского учета (например, ТоварыНаСкладах) проблем обычно не возникает, то регистр УчетЗатрат (базовый регистр для РАУЗ — расширенной аналитики учета затрат) ведет себя иначе. Разберем подробно, почему данные о качестве не попадают в этот регистр и как это исправить.

Понимание механизмов РАУЗ

Прежде всего, нам необходимо осознать ключевое отличие РАУЗ от партионного учета. В расширенной аналитике движения по регистру УчетЗатрат формируются не непосредственно кодом в модуле объекта документа, а через универсальный механизм подписок на события. Проанализируем ситуацию: когда вы нажимаете кнопку «Провести», срабатывает подписка ПриПроведенииРасширеннаяАналитикаЗапасовИзменениеСостоянияОбработкаПроведения.

Этот механизм работает на основе ключей аналитики. Вместо того чтобы записывать в регистр прямые ссылки на номенклатуру, склад или качество, система создает (или находит существующий) элемент в справочнике КлючиАналитикиУчетаНоменклатуры. Если в этом ключе поле Качество заполнено значением «Новый» по умолчанию, то и в регистре вы всегда будете видеть только это значение, независимо от того, что указано в документе.

Шаг 1. Проверка системных настроек детализации

Перед тем как приступать к правке программного кода, проверим настройки самой программы. Выясним причину, по которой система может игнорировать качество на уровне ядра. Проанализируем путь:

  1. Перейдем в меню Настройки параметров учета.
  2. Найдем вкладку Затраты и себестоимость.
  3. Проверим установку детализации учета. Если флаг «Вести учет по качествам» для РАУЗ не установлен, система будет принудительно подставлять значение Справочники.Качество.Новый при формировании любых движений по затратам.

Шаг 2. Анализ формирования временных таблиц в модуле документа

Рассмотрим, как документ КомплектацияНоменклатуры передает данные в механизм РАУЗ. Основная работа по подготовке данных происходит в модуле объекта. Проанализируем процедуру ПодготовитьТаблицыДокумента() (или аналогичную, отвечающую за формирование движений). Документ готовит временные таблицы, которые затем «подхватываются» общим модулем проведения.

Для того чтобы качество из вашей новой колонки в табличной части Комплектующие попало в регистр, оно должно быть включено в структуру этих таблиц. Посмотрим на пример логики, которую необходимо внедрить в запрос формирования данных:


// В запросе формирования временной таблицы для РАУЗ
// необходимо убедиться, что поле Качество выбирается из ТЧ,
// а не задается константой.
ТекстЗапроса = "ВЫБРАТЬ
               |    Комплектующие.Номенклатура КАК Номенклатура,
               |    Комплектующие.Качество КАК Качество,
               |    Комплектующие.Количество КАК Количество,
               |    ...
               |ИЗ
               |    Документ.КомплектацияНоменклатуры.Комплектующие КАК Комплектующие
               |ГДЕ
               |    Комплектующие.Ссылка = &Ссылка";

Шаг 3. Модификация общих механизмов формирования ключей

Выясним, где именно происходит «потеря» качества. Если в таблицах документа качество заполнено правильно, но в регистр все равно пишется «Новый», значит, проблема в функции формирования ключа аналитики. Проанализируем общий модуль УчетЗатрат и его функции, такие как СформироватьЗапросыДляТаблицДвижений.

Важный момент: В документе КомплектацияНоменклатуры происходит две операции в одной:

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

Шаг 4. Работа с ключами аналитики номенклатуры

Разберем, как система создает записи в регистре УчетЗатрат. Основным измерением является АналитикаУчетаНоменклатуры. Чтобы система создала ключ с нужным качеством, это качество должно присутствовать в объекте СтруктураАналитики, который передается в функцию НайтиИлиСоздатьКлючАналитики.

Если вы обнаружили, что в коде жестко прописано использование качества «Новый», заменим его на получение значения из данных документа. Пример корректировки логики в общем модуле (если типовые механизмы не подхватывают поле автоматически):


// Пример модификации структуры для поиска ключа
СтруктураКлюча = Новый Структура;
СтруктураКлюча.Вставить("Номенклатура", СтрокаДанных.Номенклатура);
СтруктураКлюча.Вставить("Склад",        СтрокаДанных.Склад);
// Вместо фиксированного значения используем данные из нашей ТЧ
СтруктураКлюча.Вставить("Качество",     СтрокаДанных.Качество); 

Шаг 5. Отладка и проверка результата

Для проверки того, поддерживает ли ваша база данных запись разных качеств в РАУЗ, проделаем небольшой тест. Воспользуемся документом КорректировкаЗаписейРегистров. Попробуем вручную добавить запись в регистр УчетЗатрат, выбрав (или создав через выбор в поле аналитики) ключ с качеством, отличным от «Новый». Если запись успешно сохраняется и качество отображается в отчетах (например, в «Ведомости по учету затрат»), значит, технически система готова, и проблема заключается только в передаче данных из модуля Комплектации.

Резюме действий для программиста:

  1. Добавить реквизит Качество в шапку и ТЧ документа (уже сделано).
  2. Найти в модуле объекта место формирования таблицы ТаблицаТовары и ТаблицаСписания (или аналогичных для РАУЗ).
  3. Убедиться, что в текстах запросов, формирующих эти таблицы, поле Качество заполняется из реквизитов документа, а не подменяется значением ЗНАЧЕНИЕ(Справочник.Качество.Новый).
  4. Проверить подписку на событие проведения по РАУЗ и убедиться, что она получает корректно заполненные временные таблицы.

Помните, что РАУЗ — это сложная система зависимостей. После внесения изменений обязательно выполните перепроведение тестовых документов и проверьте целостность данных отчетом «Анализ распределения затрат», чтобы убедиться, что себестоимость по разным качествам рассчитывается корректно.

← На главную