Как программно заполнить аналитику (проект, член семьи) в документах 1С:Деньги

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

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

Разберем подробно, как устроена эта система и как программно заполнить эти данные при переносе документов.

Понимаем архитектуру: Справочник «ЗначенияСубконтоАналитика»

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

Этот справочник является своего рода «ключом», который объединяет в себе сразу несколько видов аналитики. Рассмотрим его особенности:

  1. Табличная часть: Внутри этого справочника есть табличная часть (обычно называется Субконто), где хранятся пары: ВидСубконто (ссылка на План видов характеристик) и Значение (ссылка на конкретный объект).
  2. Наименование: Оно формируется динамически как строковое представление всех выбранных аналитик через точку с запятой (например, "Я; Постоянные расходы; Основной магазин").
  3. Уникальность: Система старается не плодить дубли. Для каждой уникальной комбинации аналитик должен существовать только один элемент в этом справочнике.

Шаг 1: Работа с Планом видов характеристик

Перед тем как записывать данные, нам нужно определить, какие именно виды аналитики мы хотим заполнить. Все они хранятся в объекте ПланыВидовХарактеристик.ВидыСубконтоАналитики. Выясним, как найти нужные нам виды программно:


// Пример получения ссылок на виды аналитики
ВидЧленСемьи = ПланыВидовХарактеристик.ВидыСубконтоАналитики.НайтиПоНаименованию("Член семьи");
ВидПроект    = ПланыВидовХарактеристик.ВидыСубконтоАналитики.НайтиПоНаименованию("Проект");

Важный нюанс: Перечень доступных аналитик для конкретной строки документа жестко ограничен выбранной Статьей доходов/расходов. В самой статье указано, какие виды субконто для нее обязательны или разрешены. Если вы программно создадите ключ аналитики с проектом для статьи, которая проект не поддерживает, данные могут не отобразиться в интерфейсе.

Шаг 2: Поиск или создание ключа аналитики

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

Рассмотрим пример функции, которая возвращает ссылку на нужный элемент справочника ЗначенияСубконтоАналитика:


Функция ПолучитьКлючАналитики(СтруктураАналитик)
    
    // СтруктураАналитик содержит: Ключ - ВидСубконто, Значение - Ссылка на объект (физлицо, проект и т.д.)
    
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |	Субконто.Ссылка КАК Ссылка
        |ИЗ
        |	Справочник.ЗначенияСубконтоАналитика.Субконто КАК Субконто
        |ГДЕ
        |	Субконто.ВидСубконто = &Вид1 И Субконто.Значение = &Значение1
        |	И Субконто.Ссылка В (
        |		ВЫБРАТЬ Ссылка ИЗ Справочник.ЗначенияСубконтоАналитика.Субконто 
        |		ГДЕ ВидСубконто = &Вид2 И Значение = &Значение2
        |	)";
    
    // В реальном коде запрос должен быть динамическим в зависимости от количества аналитик
    // Здесь приведен упрощенный пример для двух аналитик (Член семьи и Проект)
    
    // Если поиск не дал результатов, создаем новый элемент:
    НовыйКлюч = Справочники.ЗначенияСубконтоАналитика.СоздатьЭлемент();
    
    Для Каждого Аналитика Из СтруктураАналитик Цикл
        НоваяСтрока = НовыйКлюч.Субконто.Добавить();
        НоваяСтрока.ВидСубконто = Аналитика.Ключ;
        НоваяСтрока.Значение    = Аналитика.Значение;
    КонецЦикла;
    
    // Наименование в типовых часто формируется автоматически при записи или в обработке заполнения
    НовыйКлюч.Записать();
    Возврат НовыйКлюч.Ссылка;
    
КонецФункции

Шаг 3: Заполнение документа

Теперь, когда у нас есть механизм получения «ключа», проанализируем ситуацию заполнения самого документа Расход. Мы должны сначала найти все составляющие, получить ключ и подставить его в табличную часть Состав.


Процедура ЗаполнитьДокументРасход(ДокОбъект, ДанныеИз77)
    
    // 1. Заполняем шапку
    ДокОбъект.Дата = ДанныеИз77.Дата;
    ДокОбъект.Кошелек = НайтиКошелек(ДанныеИз77.КошелекНаименование);
    
    // 2. Заполняем табличную часть
    НоваяСтрока = ДокОбъект.Состав.Добавить();
    НоваяСтрока.Статья = Справочники.СтатьиРасходов.НайтиПоНаименованию(ДанныеИз77.Статья);
    НоваяСтрока.Сумма = ДанныеИз77.Сумма;
    
    // 3. Формируем аналитику
    Аналитики = Новый Структура;
    Аналитики.Вставить(ВидыСубконтоАналитики.ЧленСемьи, Справочники.ФизическиеЛица.НайтиПоНаименованию(ДанныеИз77.ЧленСемьи));
    Аналитики.Вставить(ВидыСубконтоАналитики.Проект, Справочники.Проекты.НайтиПоНаименованию(ДанныеИз77.Проект));
    
    // 4. Присваиваем ключ аналитики строке документа
    НоваяСтрока.Аналитика = ПолучитьКлючАналитики(Аналитики);
    
    ДокОбъект.Записать(РежимЗаписиДокумента.Проведение);
    
КонецПроцедуры

Почему вы видите "старые" наименования аналитик?

Проанализируем ситуацию, описанную в обсуждении: в документе отображается актуальное ФИО члена семьи, а в просматривателе объектов (или в наименовании ключа аналитики) — старое. Это происходит потому, что Наименование элемента ЗначенияСубконтоАналитика — это всего лишь статичная строка, которая записывается в момент создания элемента.

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

Рекомендации для успешного переноса

Выясним основные правила, которые помогут избежать ошибок при работе с 8-кой:

  1. Используйте типовые функции: В конфигурации «1С:Деньги» наверняка есть общий модуль (например, РаботаСАналитикой), где уже реализована функция поиска или создания ключа аналитики. Поищите вызовы ЗначенияСубконтоАналитика в глобальном поиске по конфигурации.
  2. Проверяйте состав аналитик в Статье: Перед записью убедитесь, что в справочнике СтатьиРасходов для выбранной статьи действительно включено использование «Проекта» или «Члена семьи».
  3. Соблюдайте порядок: Порядок строк в табличной части справочника ЗначенияСубконтоАналитика может влиять на то, как система распознает ключ. Лучше всего добавлять аналитики в том же порядке, в каком они определены в Плане видов характеристик.

Таким образом, ключ к решению задачи — это работа не с документом напрямую, а с промежуточным справочником-контейнером, который консолидирует в себе все дополнительные разрезы учета.

← На главную