Содержание:
1. Как программно добавить в динамический список данные?
2. Вариант решения для динамических списков в 1С 8.3
3. Использование Схемы запросов
1. Как программно добавить в динамический список данные?
Использование объекта СхемаЗапроса для универсальной модификации динамических списков.
Дано:
· динамические списки данных объектов конфигурации (списки элементов справочника, журналы документов);
· некоторые данные, которыми нужно программно добавить в динамические списки (каждый элемент списка), содержащиеся, например, в регистрах сведений.
Требуется предложить решение, которое:
· легко масштабируется на любые динамические списки данных в 1С (и может быть перенесено в другую конфигурацию);
· оставляет основную конфигурацию на полной поддержке.
2. Вариант решения для динамических списков в 1С 8.3
Допустим, с помощью расширения добавлен некий регистр сведений, в котором хранятся данные о ссылочных объектах БД (элементы справочника, документы). Необходимо в типовые формы динамических списков в 1С 8.3 и формы выбора добавить информацию из этого регистра, соединив левым соединением с типовым списком.
Можно решить эту задачу так: вынести в расширение формы списка и выбора и переписать произвольный запрос динамического списка. Недостатки этого метода заключаются в том, что при обновлении типовой конфигурации на более свежие релизы придется отслеживать изменения всех типовых произвольных запросов списков, чтобы внести эти изменения в расширение.
3. Использование Схемы запросов
Используем объект «Схема Запросов» в 1С.
В расширении в процедуре ПриСозданииНаСервере (с аннотацией &После) получим запрос динамического списка, передадим его в нашу процедуру, обработаем с помощью объекта СхемаЗапроса и обратно вернемся в текст, содержащий левое соединение с нужным нам регистром.
Ниже приводится примерный текст функции, решающий эту задачу. На большинстве динамических списков в 1С 8.3 он может быть использован без изменений. Вывод новой колонки в форму списка для показа пользователю здесь не рассматривается.
Рисунок 1 Запрос динамического списка
Функция ПолучитьРасширенныйТекстЗапроса(ТекстЗапроса) Экспорт
СхемаЗапроса = Новый СхемаЗапроса;
// передадим текст запроса в Схему запроса
СхемаЗапроса.УстановитьТекстЗапроса(Знач ТекстЗапроса);
//получим последний запрос пакета, к которому будем присоединять таблицу
ПоследнийЗапросПакета = СхемаЗапроса.ПакетЗапросов[СхемаЗапроса.ПакетЗапросов.Количество()-1]);
//Каждый оператор представляет собой запрос ВЫБРАТЬ.
Оператор = ПоследнийЗапросПакета.Операторы[0];
// получаем источники оператора ВЫБРАТЬ
Источники = Оператор.Источники;
ОсновнойИсточник = Источники[0];
//добавим к источникам наш регистр, укажем его псевдоним
НовыйИсточник = Источники.Добавить("РегистрСведений.Расш_НашРегистр.СрезПоследних", "Расш_НашРегистр");
// получим псевдоним основном таблицы для формирования условия соединения
ПсевдонимОсновнойТаблицы = ОсновнойИсточник.Псевдоним;
//Сформируем строку соединения
УсловиеСоединения = ПсевдонимОсновнойТаблицы + ".Ссылка = Расш_НашРегистр.Ссылка";
// получим соединения основного источника и добавим к нему своё
Соединения = ОсновнойИсточник.Соединения;
Соединения.Добавить(НовыйИсточник, УсловиеСоединения);
// установим тип соединения
Соединения[Соединения.Количество()-1].ТипСоединения = ТипСоединенияСхемыЗапроса.ЛевоеВнешнее;
// чтобы в динамическом списке стало доступно для вывода поле из нашего регистра, добавим его в запрос
Оператор.ВыбираемыеПоля.Добавить("Расш_НашРегистр.НекийРесурс");
// вернем получившийся запрос
НовыйТекстЗапроса = СхемаЗапроса.ПолучитьТекстЗапроса();
Возврат НовыйТекстЗапроса;
КонецФункции
Специалист компании «Кодерлайн»
Татьяна Федорова