Как вывести в журнале документов графу из справочника? Есть справочник ОригиналыДокументов, в котором есть реквизиты Документ и Оригинал. И есть журнал документов "Реализация". Надо в нем вывести колонку из справочника, которая соответствует данному документу.
В какой функции это выводится и как?
Запрос примерно так выглядит:
"ВЫБРАТЬ
| ОригиналыДокументов.Документ,
| ОригиналыДокументов.Оригинал,
| РеализацияТоваров.Ссылка
|ИЗ
| Справочник.ОригиналыДокументов КАК ОригиналыДокументов
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваров КАК РеализацияТоваров
| ПО ОригиналыДокументов.Документ = РеализацияТоваров.Ссылка"
В обычных формах заполнение значений доп-колонок динамического списка делается через оформление их ячеек в обработчиках ПриВыводеСтроки и ПриПолученииДанных. Если требуется запрос к БД, до расово верно это делать в ПриПолученииДанных, т.к. там хотя бы порцию данных можно обработать, а не по каждой строке запросы фигачить. Это тривиальная задача, гуглиться должна хорошо.
СписокПриПолученииДанных
мДок = Новый Массив;
Для каждого Оформление Из ОформленияСтрок Цикл
мДок.Добавить(Оформление.ДанныеСтроки.Ссылка);
КонецЦикла;
Запрос= новый Запрос;
Запрос.Текст=
"ВЫБРАТЬ
| ОригиналыДокументов.Документ,
| ОригиналыДокументов.Оригинал,
| РеализацияТоваров.Ссылка
|ИЗ
| Справочник.ОригиналыДокументов КАК ОригиналыДокументов
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваров КАК РеализацияТоваров
| ПО ОригиналыДокументов.Документ = РеализацияТоваров.Ссылка
|ГДЕ
| ОригиналыДокументов.Документ В(&ТекДок)";
Запрос.УстановитьПараметр("ТекДок", мДок);
Результат = Запрос.Выполнить().Выгрузить();
Результат.ВыбратьСтроку();
мДок = Новый Массив;
соотв = Новый Соответствие;
Для каждого Оформление Из ОформленияСтрок Цикл
мДок.Добавить(Оформление.ДанныеСтроки.Ссылка);
соотв[Оформление.ДанныеСтроки.Ссылка] = Оформление;
КонецЦикла;
Запрос= новый Запрос;
Запрос.Текст=
"ВЫБРАТЬ
| ОригиналыДокументов.Оригинал,
| РеализацияТоваров.Ссылка
|ИЗ
| Документ.РеализацияТоваров КАК РеализацияТоваров
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ОригиналыДокументов КАК ОригиналыДокументов
| ПО ОригиналыДокументов.Документ = РеализацияТоваров.Ссылка
|ГДЕ
| РеализацияТоваров.Ссылка В(&ТекДок)";
Запрос.УстановитьПараметр("ТекДок", мДок);
выб = Запрос.Выполнить().Выбрать();
Пока выб.Следущий() Цикл
соотв[выб.Ссылка].Ячейки.Оригинал.УстановитьТекст(выб.Оригинал);
КонецЦикла;
Еще бы оно не зависало. Метод таблицы значений "ВыбратьСтроку" должен открывать таблицу значений на интерактивный просмотр.
Вызов ее при обновлении отображения динамического списка имеет непредсказуемые результаты.
В таблице "Результат" вы получили нужные соответствия.
Теперь нужно еще раз обойти оформления строк и записать нужные данные в оформления (находя данные в полученной таблице).
Я обычно, чтобы два раза оформления не обходить, при первом обходе заполнял соответствие оформлений ссылкам.
Тогда при обходе таблицы соответствий можно напрямую получать нужные оформления из соответствия.
Если будет сильно подтормаживать при листании (справочник большой), стоит проиндексировать поле "Документ".
Но вообще это костыль конечно, от которого только в УФ избавились.
(11) лично отстреливал ентузиастов, пихающих что попало в форму списка, ещё в 7.7.
Дополнительное поле рядом так неудобно сделать??
и сразу "тормоза" исчезают, ибо нужно вытащить инфо только по одному элементу...
(12) Инфо по одному элементу - это отдельный вариант. На него все не спишешь.
А в УФ вообще плюнули и разрешили сортировать по любому полю без оглядки на индексы.
Хочешь платить производительностью и есть чем платить - плати.
ИМХО, правильное бизнес-решение.
мДок = Новый Массив;
соотв = Новый Соответствие;
Для каждого Оформление Из ОформленияСтрок Цикл
мДок.Добавить(Оформление.ДанныеСтроки.Ссылка);
соотв[Оформление.ДанныеСтроки.Ссылка] = Оформление;
КонецЦикла;
Запрос= новый Запрос("ВЫБРАТЬ
| ОригиналыДокументов.Документ
|ИЗ
| Справочник.ОригиналыДокументов КАК ОригиналыДокументов
|ГДЕ
| ОригиналыДокументов.Документ В(&ТекДок) И ОригиналыДокументов.Оригинал");
Запрос.УстановитьПараметр("ТекДок", мДок);
выб = Запрос.Выполнить().Выбрать();
Пока выб.Следущий() Цикл
соотв[выб.Ссылка].Ячейки.Оригинал.УстановитьФлажок(Истина);
КонецЦикла;
P.S. Если у вас в справочнике просто галочками отмечают документы, по котрым оригиналы получены/выданы, то лучше на встроенный механизм категорий посмотрели бы, кмк.