Невозможно перестать удивляться до чего же затейники, эти программисты из фирмы 1С 🙂
Так например, реализация внутренних справочников (тех которые НЕ доступны для редактирования пользователям) идет через общие МАКЕТЫ. Например в УПП именно в макете хранится информация по «счетам учета» для конкретного документа.
И вот как эти данные вытаскиваются
Функция ПолучитьРеквизитыСчетовУчета(ИмяДокумента, ИмяТабличнойЧасти) Макет = ПолучитьОбщийМакет("СчетаУчетаВДокументах"); ПостроительЗапроса = Новый ПостроительЗапроса; ПостроительЗапроса.ИсточникДанных = Новый ОписаниеИсточникаДанных(Макет.Область("ОписаниеСчетовУчета")); // Установим отборы УстановитьОтборПоПолю(ПостроительЗапроса, "Документ", ИмяДокумента); УстановитьОтборПоПолю(ПостроительЗапроса, "ТабличнаяЧасть", ИмяТабличнойЧасти); // Возвращаем таблицу значений с отобранными из макета данными ПостроительЗапроса.Выполнить(); Возврат ПостроительЗапроса.Результат.Выгрузить(); КонецФункции
Костыли? Отнюдь.
Во-первых макет предоставляет информацию в табличной части (удобно для редактирования), а во-вторых он недоступен пользователям (может менять только программист через конфигуратор).
Так что если и костысль то очень удобный.
Еще пример хранения данных в макете. Чтение в список значений (Должности). Данные находятся в первой колонке.
Должности.Очистить(); МакетДолжности = ПолучитьМакет("Должности"); Стр = 1; Пока истина Цикл Адрес="R"+Формат(Стр,"ЧГ=")+"C1"; Значение=МакетДолжности.Область(Адрес).Текст; Если ПустаяСтрока(Значение) Тогда Прервать; КонецЕсли; Должности.Добавить(Значение); Стр = Стр + 1; КонецЦикла;