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