Как программно вывести дополнительные реквизиты в журнал списка документов без изменения конфигурации

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия IT и автоматизация бизнеса
← На главную

При работе в типовых конфигурациях 1С, таких как «Бухгалтерия для Казахстана» или «1С:Бухгалтерия 3.0», часто возникает необходимость пометить документы, загруженные из внешних источников (например, из XML-файлов), особым признаком. Важно сделать это так, чтобы признак был виден прямо в списке документов, но при этом сама конфигурация оставалась «на поддержке» (без внесения правок в основную базу). Рассмотрим, как реализовать эту задачу наиболее эффективными способами. Если загрузка выполняется регулярно, вы можете настроить автоматический регулярный обмен данными между базами 1С по расписанию без изменения типовых конфигураций.

Разберем механизмы хранения дополнительных данных в БСП

Прежде чем приступать к коду, выясним, как Библиотека стандартных подсистем (БСП) хранит пользовательские данные. Существует два принципиально разных механизма, и выбор между ними влияет на производительность списка:

  1. Дополнительные реквизиты — они хранятся в табличной части самого документа под названием ДополнительныеРеквизиты. Преимущество в том, что данные «привязаны» к объекту, и их проще выводить в динамические списки через запросы.
  2. Дополнительные сведения — хранятся в отдельном регистре сведений ДополнительныеСведения. Это удобно для расширения аналитики без изменения структуры таблиц, но для вывода в список потребуется выполнять соединение (JOIN) с таблицей регистра, что может быть медленнее при огромных объемах данных.

Для нашей задачи — отображения булевого флажка «Загружено из XML» — лучше всего подходят именно дополнительные реквизиты.

Решение 1: Использование штатных средств (без программирования)

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

  1. Перейдем в раздел Администрирование — Общие настройки — Дополнительные реквизиты и сведения.
  2. В разделе Дополнительные реквизиты найдем нужный вид документа (например, «Поступление ТМЗ и услуг») и нажмем «Добавить — Новый».
  3. Создадим реквизит с именем «Загружен из XML» и типом значения Булево.
  4. Теперь зайдем в сам список документов. Нажмем кнопку «Еще» — «Изменить форму».
  5. В открывшемся дереве элементов выделим элемент «Список» и нажмем кнопку «Добавить поля». В списке доступных полей вы увидите созданный вами дополнительный реквизит. Поставьте галочку, и он появится в журнале.

Этот способ идеален, если пользователю нужно видеть колонку в конкретном списке, а не в общем журнале документов.

Решение 2: Программная запись признака при загрузке из XML

Поскольку загрузка документов происходит через вашу собственную обработку, нам нужно программно устанавливать значение этого реквизита. Вместо того чтобы вручную перебирать табличные части, воспользуемся API библиотеки БСП. Это гарантирует корректность связей с Планом видов характеристик ДополнительныеРеквизитыИСведения.

Проанализируем пример кода для записи свойства:


// Предположим, СсылкаНаДокумент — это ссылка на созданный объект
// Нам нужно найти ссылку на само свойство (элемент ПВХ)
СвойствоСсылка = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Загружен из XML (Поступление ТМЗ и услуг)");

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

Метод УправлениеСвойствами.ЗаписатьСвойстваУОбъекта сам определит, куда записывать данные (в табличную часть или регистр) в зависимости от настроек свойства.

Решение 3: Реализация через расширение конфигурации

Если штатный вывод через «Изменить форму» не подходит (например, нужно настроить видимость для всех пользователей сразу или изменить запрос общего журнала), используем механизм расширений. Это позволит нам модифицировать динамический список программно.

Рассмотрим шаги по созданию расширения:

  1. Создадим новое расширение и добавим в него форму списка нужного документа или форму общего журнала.
  2. В расширении найдем Динамический список (обычно это основной реквизит формы с именем «Список»).
  3. Нам нужно изменить текст запроса. В расширении выберем свойство «Настройка списка» или переопределим запрос целиком.
  4. Добавим левое соединение с таблицей дополнительных реквизитов. Посмотрим на пример запроса:

ВЫБРАТЬ
    ДокументТаблица.Ссылка КАК Ссылка,
    ДокументТаблица.Дата КАК Дата,
    ДокументТаблица.Номер КАК Номер,
    ЕСТЬNULL(ДопРеквизиты.Значение, ЛОЖЬ) КАК ЗагруженИзXML
ИЗ
    Документ.ПоступлениеТоваровУслуг КАК ДокументТаблица
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровУслуг.ДополнительныеРеквизиты КАК ДопРеквизиты
        ПО ДопРеквизиты.Ссылка = ДокументТаблица.Ссылка
            И ДопРеквизиты.Свойство = &СвойствоЗагрузкаИзXML

Важно: Не забудьте установить параметр &СвойствоЗагрузкаИзXML при создании формы (в процедуре ПриСозданииНаСервере).

Визуальное выделение документов

Для удобства пользователей можно не просто выводить колонку с текстом «Да/Нет», а визуально выделять строки. Это делается через Условное оформление динамического списка. Выясним, как это настроить в расширении формы:

  1. Откроем свойства динамического списка и найдем пункт «Условное оформление».
  2. Добавим новый элемент оформления.
  3. В поле «Оформление» выберем, например, «Цвет фона» (светло-зеленый) или «Цвет текста».
  4. В поле «Условие» укажем: ЗагруженИзXML Равно Истина.
  5. В поле «Оформляемые поля» укажем те колонки, которые должны подсвечиваться (или всю строку целиком).

Такой подход позволит бухгалтеру мгновенно идентифицировать в журнале документы, пришедшие из внешних систем. При этом для контроля результатов переноса или обмена полезно запустить автоматическое сравнение проводок в базах 1С для быстрого поиска расхождений в бухгалтерском учёте.

Проблема общих журналов

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

Единственный надежный способ здесь — расширение, где вы модифицируете запрос общего журнала, объединяя данные из разных таблиц или обращаясь к общему регистру сведений ДополнительныеСведения. Использование индексированных полей в регистре сведений обеспечит высокую скорость открытия журнала даже при большом количестве записей.

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

← На главную