По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Если у договора контрагента владелец - контрагент (а скорее всего так и есть), сделайте итоги по договору контрагента и, обходя детальные записи - программно собирайте свою строку. Например, в виде массива, который потом можно превратить строку с помощью СтрСоединить(МассивСлов, ", ").
Посмотрите пожалуйста код обхода, у меня Итоги по номеру договора и мой код задваивает значения в ячейках.
Запрос = Новый Запрос;
Запрос.Текст = СокрЛП(Объект.УсловиеКомплекта.Условие);
Запрос.УстановитьПараметр("Дата", Дата);
Если ЭтаФорма.Объект.УсловиеКомплекта= Справочники.ЛТ_УсловияКомплектовМакетов.НайтиПоНаименованию("Напоминание_пролонгация") Тогда
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДоговорЛизинга = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"ДоговорЛизинга");
Пока ВыборкаДоговорЛизинга.Следующий() Цикл
НоваяСтрока=Договоры.Добавить();
НоваяСтрока.ДоговорЛизинга=ВыборкаДоговорЛизинга.ДоговорЛизинга;
ВыборкаДетали= ВыборкаДоговорЛизинга.Выбрать();
//Телефон="";
//АдресЭП="";
НачалоСтроки=Истина;
Пока ВыборкаДетали.Следующий() Цикл
//сч=0;
//сч=сч+1;
//Если сч>1 Тогда
Если НачалоСтроки Тогда
Телефон = СокрЛП(ВыборкаДетали.Телефон);
ВсеАдресаЭП =СокрЛП(ВыборкаДетали.АдресЭП);
НачалоСтроки=Ложь;
//КонецЕсли;
Иначе
ВсеАдресаЭП = ВсеАдресаЭП+", "+СокрЛП(ВыборкаДетали.АдресЭП);
Телефон= Телефон+","+СокрЛП(ВыборкаДетали.Телефон);
КонецЕсли;
АдресЭП =СокрЛП(ВыборкаДетали.АдресЭП);
Контрагент=ВыборкаДетали.Контрагент;
КонецЦикла;
//АдресЭП =СокрЛП(ВыборкаДетали.АдресЭП);
НоваяСтрока.Контрагент= Контрагент;
Новаястрока.ВсеАдресаЭП = Лев(ВсеАдресаЭП,СтрДлина(ВсеАдресаЭП)-2);
НоваяСтрока.АдресЭП = АдресЭП;
НоваяСтрока.Телефон = Лев(Телефон,СтрДлина(Телефон)-2);
КонецЦикла;
Показать
(5) Добавляю текст запроса ))
ВЫБРАТЬ первые 40
ИБР_СтатусыДоговоровСрезПоследних.Договоры.Ссылка КАК ДоговорыСсылка,
ИБР_СтатусыДоговоровСрезПоследних.Статусы КАК Статусы
ПОМЕСТИТЬ СтатусыДоговоров
ИЗ
РегистрСведений.ИБР_СтатусыДоговоров.СрезПоследних(, ) КАК ИБР_СтатусыДоговоровСрезПоследних
ГДЕ
ИБР_СтатусыДоговоровСрезПоследних.Статусы = ЗНАЧЕНИЕ(Справочник.ИБР_СтатусыДоговоров.Действует)
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ЛТ_ГрафикиПлатежейОбороты.ДоговорЛизинга КАК ДоговорЛизинга,
МАКСИМУМ(ЛТ_ГрафикиПлатежейОбороты.ДатаНачисления) КАК ДатаНачисления
ПОМЕСТИТЬ ДатаОкончанияДЛ
ИЗ
РегистрНакопления.ЛТ_ГрафикиПлатежей.Обороты КАК ЛТ_ГрафикиПлатежейОбороты
ГДЕ
ЛТ_ГрафикиПлатежейОбороты.ДатаНачисления > ДОБАВИТЬКДАТЕ(&Дата, МЕСЯЦ, 1)
СГРУППИРОВАТЬ ПО
ЛТ_ГрафикиПлатежейОбороты.ДоговорЛизинга
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ДатаОкончанияДЛ.ДоговорЛизинга КАК ДоговорЛизинга,
ДатаОкончанияДЛ.ДатаНачисления КАК ДатаНачисления
ПОМЕСТИТЬ ДЛ30092021
ИЗ
СтатусыДоговоров КАК СтатусыДоговоров
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ДатаОкончанияДЛ КАК ДатаОкончанияДЛ
ПО (ДатаОкончанияДЛ.ДоговорЛизинга.Ссылка = СтатусыДоговоров.ДоговорыСсылка)
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ЛТ_ДоговорСтрахованияУсловияСтрахования.ДатаНачала КАК ДатаНачала,
ЛТ_ДоговорСтрахованияУсловияСтрахования.ДатаОкончания КАК ДатаОкончания,
ЛТ_ДоговорСтрахованияУсловияСтрахования.Оплачен КАК Оплачен,
ЛТ_ДоговорСтрахованияУсловияСтрахования.Ссылка.Плательщик КАК Плательщик,
ЛТ_ДоговорСтрахованияУсловияСтрахования.Ссылка.ТипДоговора КАК ТипДоговора,
ЛТ_ДоговорСтрахованияУсловияСтрахования.Ссылка.Основание КАК Основание
ПОМЕСТИТЬ ДС
ИЗ
Документ.ЛТ_ДоговорСтрахования.УсловияСтрахования КАК ЛТ_ДоговорСтрахованияУсловияСтрахования
ГДЕ
ЛТ_ДоговорСтрахованияУсловияСтрахования.Оплачен = ЛОЖЬ
И ЛТ_ДоговорСтрахованияУсловияСтрахования.Ссылка.Плательщик ПОДОБНО "Лизингополучатель%"
И ЛТ_ДоговорСтрахованияУсловияСтрахования.Ссылка.ТипДоговора <> ЗНАЧЕНИЕ(Перечисление.ИБР_ТипыДоговоровСтрахования.Осаго)
И ЛТ_ДоговорСтрахованияУсловияСтрахования.ДатаНачала МЕЖДУ НАЧАЛОПЕРИОДА(&Дата, МЕСЯЦ) И КОНЕЦПЕРИОДА(&Дата, МЕСЯЦ)
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ДС.ДатаНачала КАК ДатаНачала,
ДС.ДатаОкончания КАК ДатаОкончания,
ДС.Оплачен КАК Оплачен,
ДС.Плательщик КАК Плательщик,
ДС.ТипДоговора КАК ТипДоговора,
ДЛ30092021.ДоговорЛизинга КАК ДоговорЛизинга,
ДЛ30092021.ДатаНачисления КАК СрокОкончанияДоговора
ПОМЕСТИТЬ ДС_ДЛ
ИЗ
ДЛ30092021 КАК ДЛ30092021
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ДС КАК ДС
ПО ДЛ30092021.ДоговорЛизинга.Ссылка = ДС.Основание.Ссылка
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
КонтрагентыКонтактнаяИнформация.Ссылка КАК Ссылка,
КонтрагентыКонтактнаяИнформация.АдресЭП КАК АдресЭП
ПОМЕСТИТЬ Адрес_ЭП
ИЗ
Справочник.Контрагенты.КонтактнаяИнформация КАК КонтрагентыКонтактнаяИнформация
ГДЕ
КонтрагентыКонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты)
СГРУППИРОВАТЬ ПО
КонтрагентыКонтактнаяИнформация.Ссылка,
КонтрагентыКонтактнаяИнформация.АдресЭП
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
КонтрагентыКонтактнаяИнформация.Ссылка КАК Ссылка,
ПОДСТРОКА(КонтрагентыКонтактнаяИнформация.НомерТелефона, 1, 11) КАК НомерТелефона
ПОМЕСТИТЬ Телефон
ИЗ
Справочник.Контрагенты.КонтактнаяИнформация КАК КонтрагентыКонтактнаяИнформация
ГДЕ
КонтрагентыКонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Телефон)
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
Адрес_ЭП.Ссылка КАК Ссылка,
Адрес_ЭП.АдресЭП КАК АдресЭП,
Телефон.Ссылка КАК Ссылка1,
Телефон.НомерТелефона КАК НомерТелефона
ПОМЕСТИТЬ Телефон_АдресЭП
ИЗ
Адрес_ЭП КАК Адрес_ЭП
ПОЛНОЕ СОЕДИНЕНИЕ Телефон КАК Телефон
ПО (Адрес_ЭП.Ссылка = Телефон.Ссылка)
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ДС_ДЛ.ДоговорЛизинга КАК ДоговорЛизинга,
Телефон_АдресЭП.Ссылка КАК Контрагент,
Телефон_АдресЭП.АдресЭП КАК АдресЭП,
Телефон_АдресЭП.НомерТелефона КАК Телефон
ИЗ
ДС_ДЛ КАК ДС_ДЛ
ЛЕВОЕ СОЕДИНЕНИЕ Телефон_АдресЭП КАК Телефон_АдресЭП
ПО (ДС_ДЛ.ДоговорЛизинга.Контрагент.Ссылка = Телефон_АдресЭП.Ссылка.Ссылка)
СГРУППИРОВАТЬ ПО
Телефон_АдресЭП.АдресЭП,
Телефон_АдресЭП.НомерТелефона,
Телефон_АдресЭП.Ссылка,
ДС_ДЛ.ДоговорЛизинга
ИТОГИ ПО
ДоговорЛизинга
Показать
(9) сделайте тогда пакетный запрос из двух запросов. В первом - то что у вас сейчас с итогами (т.е. сделать выборку по договору контрагента без контактной информации), уберите итоге и оставьте плоскую выборку. Второй запрос возвращает всю контактную информацию.
Выполняете пакет запросов.
ВыборкаДог = это выборка по договорам
ВыборкаКИ - выборка по конт. инф
P.S. в (13) вам это уже посоветовали.
Выполняете пакет запросов.
ВыборкаДог = это выборка по договорам
ВыборкаКИ - выборка по конт. инф
Пока ВыборкаДог.Следующий() Цикл
ВыборкаКИ.Сбросить();
ПараметрыОтбора = Новый Структура("Контрагент", ВыборкаДог.Контрагент);
Пока ВыборкаКИ.НайтиСледующий(ПараметрыОтбора) Цикл
...
КонецЦикла;
...
КонецЦикла;
P.S. в (13) вам это уже посоветовали.
Используйте пакетный запрос, чтобы не пихать невпихуемое в одну таблицу. В одной таблице запроса связь контрагент - телефон, в другой контрагент - адрес эп. Потом выборками по этим таблицам РезультатЗапроса[i] по одному контрагенту сформируйте нужную строку.
(12) У Вас уже есть временные таблицы в запросе. Сделайте из них выборку, не соединяя с другими таблицами. Замените Запрос.Выполнить() на Запрос.ВыполнитьПакет(). Под индексами, соответствующими номерам таблиц (с 0), получите таблицы с нужными соответствиями. И обходите так, как вам нужно. Можно и так, как предложено в (11), но этим способом будет понятнее, как мне представляется.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот