Как программно получить или создать Ключ аналитики учета номенклатуры в 1С:УТ 11 и ERP

Программист 1С v8.3 (Управляемые формы) Управленческий учет Торговля и дистрибуция
← На главную

В современных конфигурациях на базе платформы 1С:Предприятие 8.3, таких как Управление торговлей 11, ERP Управление предприятием и Комплексная автоматизация 2, учет товаров в регистрах накопления ведется не напрямую по ссылке на номенклатуру, а через специальный разрез — КлючАналитикиУчетаНоменклатуры. Это сделано для оптимизации хранения данных и ускорения работы системы. Однако при разработке собственных механизмов или добавлении кастомных реквизитов в документы программисты часто сталкиваются с вопросом: как правильно сформировать или найти этот ключ для своих данных?

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

Зачем нужны ключи аналитики и как они устроены

Прежде чем переходить к коду, проанализируем ситуацию. Ключ аналитики — это элемент справочника КлючиАналитикиУчетаНоменклатуры, который объединяет в себе несколько измерений учета: Номенклатура, Характеристика, Серия и Назначение. Вместо того чтобы в каждом регистре (например, «Выручка и себестоимость продаж» или «Запасы на складах») хранить по 4–5 отдельных полей, система хранит одну ссылку на ключ — для исправления ошибок в аналитике пригодится автоматическое заполнение корректировки регистров в 1С:УТ и ERP.

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

Способ 1: Получение одиночного ключа через менеджер справочника

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

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


// Пример получения ключа аналитики для конкретных данных
ПараметрыКлюча = Новый Структура;
ПараметрыКлюча.Вставить("Номенклатура",   СвояНоменклатура);
ПараметрыКлюча.Вставить("Характеристика", СвояХарактеристика);
ПараметрыКлюча.Вставить("Серия",          СвояСерия); // Если не используется, передаем ПустаяСсылка
ПараметрыКлюча.Вставить("Назначение",     ПустаяСсылка); // Важное поле для ERP/УТ

КлючАналитики = Справочники.КлючиАналитикиУчетаНоменклатуры.НайтиКлючАналитики(ПараметрыКлюча);

Этот метод удобен тем, что внутри него уже заложена логика: «найти, а если нет — создать». Он автоматически проверяет наличие записи в регистре сведений КлючиАналитикиУчетаНоменклатуры, который служит индексом для справочника.

Способ 2: Массовое формирование ключей для таблицы значений

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

Для массовой обработки используется процедура ПодготовитьТаблицуСКлючамиАналитики. Рассмотрим пример подготовки таблицы товаров перед формированием движений:


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

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

// Теперь в ТаблицаДляКлючей заполнена колонка КлючАналитики

Такой подход намного эффективнее, так как система минимизирует количество транзакций при создании новых элементов справочника.

Интеграция в процесс проведения документа

Если вы создали свои реквизиты (например, МояНоменклатура и МояХарактеристика) и хотите, чтобы штатные механизмы проведения использовали их, лучше всего вклиниться в процедуру ИнициализироватьДанныеДокумента в модуле менеджера вашего документа.

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

  1. Найдите место, где происходит выборка данных из табличной части документа в таблицу значений или временную таблицу.
  2. Вместо стандартных полей Номенклатура и Характеристика подставьте ваши кастомные реквизиты.
  3. Вызовите стандартную процедуру ИнициализироватьКлючиАналитикиУчетаНоменклатуры (она часто встречается в модулях менеджеров документов реализации или поступления).

Пример изменения логики в модуле менеджера:


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

// Далее, когда таблица получена, вызывается типовой метод:
КлючиАналитикиУчетаНоменклатурыСервер.ЗаполнитьКлючиАналитикиВТаблице(ТаблицаРезультат, "КлючАналитики");

Важные нюансы и "подводные камни"

Посмотрим на технические детали, которые могут вызвать сложности:

Резюме: Для работы с ключами аналитики всегда старайтесь использовать типовой метод Справочники.КлючиАналитикиУчетаНоменклатуры.НайтиКлючАналитики(ПараметрыКлюча) — для этого пригодится исправление ошибок учета и ключей аналитики УТ/ERP. Это гарантирует целостность данных и корректную работу всех регистров в 1С:УТ 11 и ERP.

← На главную