Как программно получить список документов, вводимых на основании, в 1С:Предприятии 7.7

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

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

Анализ структуры метаданных документов

В системе 1С 7.7 объект Метаданные предоставляет доступ ко всей структуре конфигурации. Если мы обратимся к конкретному документу через Метаданные.Документ(к), то обнаружим специальное свойство ВводимыеНаОснованииДокументы. Рассмотрим ситуацию, когда нам нужно программно сформировать список (например, строку с разделителями), содержащую все виды документов, которые могут быть созданы на базе текущего.

Важно понимать, что свойство ВводимыеНаОснованииДокументы представляет собой коллекцию ссылок на другие объекты метаданных. Простое обращение к этому свойству не вернет строку или массив имен, поэтому нам потребуется цикл для перебора элементов этой коллекции.

Реализация перебора коллекции

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

Проанализируем пример кода, который решает эту задачу:


// Перебираем все виды документов в конфигурации
Для к = 1 по Метаданные.Документ() Цикл
    ВидДок = Метаданные.Документ(к).Идентификатор;
    
    // Переменная для накопления списка
    СписокВводимых = "";
    
    // Получаем коллекцию документов, вводимых на основании текущего
    КоллекцияВОД = Метаданные.Документ(к).ВводимыеНаОснованииДокументы;
    
    // Организуем цикл по количеству элементов в коллекции
    Для л = 1 По КоллекцияВОД.Количество() Цикл
        // Получаем объект метаданных конкретного документа из списка
        ОбъектМетаданных = КоллекцияВОД.Получить(л);
        
        // Добавляем полный идентификатор в строку
        СписокВводимых = СписокВводимых + ОбъектМетаданных.ПолныйИдентификатор() + ", "; 
    КонецЦикла;
    
    // Выводим результат (для примера)
    Если ПустаяСтрока(СписокВводимых) = 0 Тогда
        Сообщить("Для документа " + ВидДок + " разрешен ввод на основании: " + СписокВводимых);
    КонецЕсли;
КонецЦикла;

В данном коде мы используем метод ПолныйИдентификатор(), который возвращает строку вида Документ.НазваниеДокумента. Это удобно, если в дальнейшем планируется использовать это значение в функции ОткрытьФорму() или для создания объекта через СоздатьОбъект().

Различие в направлениях связей: ВводимыеНаОсновании и ОснованиеДля

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

  1. ВводимыеНаОснованииДокументы — это список тех документов, которые можно создать, взяв текущий документ за основу. Это "исходящие" связи.
  2. ОснованиеДляДокументов — это список документов, которые сами могут служить основанием для создания текущего документа. Это "входящие" связи.

Если ваша задача — создать динамическое меню кнопки "Ввести на основании", вам нужно использовать именно ВводимыеНаОснованииДокументы. Если же вы хотите проверить, из каких документов можно создать текущий (например, при программной генерации цепочки), следует обращаться к ОснованиеДляДокументов.

Полезные методы объектов метаданных

Когда мы получаем конкретный элемент коллекции через метод Получить(л), мы работаем с объектом типа "Метаданные". Рассмотрим подробнее, какие свойства этого объекта могут быть нам полезны:

Важные особенности платформы 1С 7.7

Проанализируем технические нюансы, характерные именно для версии 7.7, которые отличают её от более современных версий платформы:

1. Индексация коллекций. В отличие от 1С 8.x, где коллекции начинаются с 0, в 1С 7.7 индексация коллекций метаданных всегда начинается с 1. Использование нулевого индекса приведет к ошибке выполнения.

2. Декларативность связей. Настройка в метаданных — это лишь разрешение на связь. Сама по себе запись в списке ВводимыеНаОснованииДокументы не гарантирует, что данные будут перенесены автоматически. Для фактической связи в модуле формы создаваемого документа должна быть определена процедура ВводНаОсновании(ДокОснование), в которой прописывается логика заполнения реквизитов и, что немаловажно, установка связи для "Структуры подчиненности" (обычно через запись документа-основания в специальный реквизит).

3. Использование синтакс-помощников. Для работы с методами метаданных программисты часто используют расширенные файлы подсказок (так называемые ALS-файлы). В файле 1cv7.als (или специализированных сборках) можно найти детальное описание всех доступных атрибутов коллекций, что значительно упрощает разработку в условиях отсутствия современного IntelliSense.

Практическое применение: Проверка возможности создания

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


Функция МожноЛиВвестиНаОсновании(ВидОснования, ВидСоздаваемого)
    // ВидОснования и ВидСоздаваемого - строки, идентификаторы
    Для л = 1 По Метаданные.Документ(ВидОснования).ВводимыеНаОснованииДокументы.Количество() Цикл
        Если Метаданные.Документ(ВидОснования).ВводимыеНаОснованииДокументы.Получить(л).Идентификатор = ВидСоздаваемого Тогда
            Возврат 1; // Да, можно
        КонецЕсли;
    КонецЦикла;
    Возврат 0; // Нет, связь не настроена
КонецФункции

Таким образом, мы рассмотрели полный цикл работы с документами, вводимыми на основании в 1С 7.7. Мы научились обращаться к коллекции метаданных, правильно использовать индексы и различать направления связей между документами. Эти знания позволяют создавать гибкие и динамичные механизмы в рамках платформы "Предприятие 7.7".

← На главную