|
Запрос не в цикле | ☑ | ||
---|---|---|---|---|
0
Sem0709
04.10.18
✎
17:06
|
Доброго всем. 8.3 обычная форма... на ночь глядя название темы не придумывается
Нужно на несколько электронный адрес контрагента отправить список документов. Получаю контрагентов со строкой адресов из справочника. Затем в цикле перебираю их и получаю список документов отдельным запросов. Но это ведь не правильно... запрос в цикле. Помогите понять, как получить всё одним запросом. То есть я должен получить строку с контрагентом, адресами, список документов |
|||
1
Wern
04.10.18
✎
17:09
|
Зачем? Выигрыш в твоем случае не стоит хлопот.
|
|||
2
Sem0709
04.10.18
✎
17:12
|
(1) То есть делать запрос в цикле?
|
|||
3
Лефмихалыч
04.10.18
✎
17:18
|
соединить контрагентов с документами, а потом ИТоги ПО Контрагент
|
|||
4
ILM
гуру
04.10.18
✎
17:19
|
Ну выбери документы с отбором "Контрагент В (&СписокКонтрагентов)
|
|||
5
Михаил Козлов
04.10.18
✎
17:19
|
ВЫБРАТЬ
РН.Контрагент КАК Контрагент, КИ.Адрес КАК Адрес, РН.Ссылка КАК док ИЗ Документы.РеализацияТоваровУслуг КАК РН ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК КИ ПО РН.Контрагент = КИ.Объект И КИ.ТипАдреса = &eMail ИТОГИ МАКСИМУМ(Контрагент), МАКСИМУМ(Адрес) ПО Контрагент Обходить по группировкам. |
|||
6
Sem0709
04.10.18
✎
17:29
|
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ | Документы.Ссылка, |ИЗ | Документы.Приходные КАК Документы |ГДЕ | Документы.Контрагент= &Контрагент"; Для Каждого Строка ИЗ ТаблицаКонтрагентовИАдрес Цикл Запрос.УстановитьПараметр("Контрагент", Строка .Контрагент); Если ЗапросПутой Тогда Продолжить; КонецЕсли; РезультатЗапроса = Запрос.Выполнить().Выбрать(); ОтправитьПисьмо(РезультатЗапроса); КонецЦикла; Чёт с итогами не понял до конца, у меня получиться что-то и с запросов выше? |
|||
7
Лефмихалыч
04.10.18
✎
17:35
|
(6) нет, так не надо. Думай еще
|
|||
8
dka80
04.10.18
✎
17:37
|
Выбрать Документы.Ссылка, Контрагент Из Документы.Приходные Как Документы Где Документы.Контрагент В (&Контрагенты) Итоги по Контрагент
Запрос.УстановитьПараметры("Контрагенты", ТаблицаКонтрагентовИАдрес.ВыгрузитьКолонку(Контрагент)); Результат = Запрос.Выполнить(); ВыборкаКонтрагент = Результат.Выбрать(Обходрезультатазапроса.погруппировкам) Пока ВыборкаКонтрагент.Следующий() Цикл ВыборкаДокумент = ВыборкаКонтрагент.Выбрать(); текстДокумент = ""; Пока ВыборкаДокумент.Следующий() Цикл текстдокумент = текстдокумент + ВыборкаДокумент.Ссылка; КонецЦикла; ОтправитьПисьмо(ВыборкаКонтрагент.Контрагент, ТекстДокумент); КонецЦикла |
|||
9
Лефмихалыч
04.10.18
✎
17:39
|
я даже знаю, каким будет следующий вопрос
|
|||
10
Sem0709
04.10.18
✎
17:42
|
(5) (8) (9) Аааа, "Обходить по группировкам" %)
Спасибо, понял. |
|||
11
Маленький Вопросик
04.10.18
✎
17:51
|
а зачем здесь по-группировкам обходить?
|
|||
12
Sem0709
04.10.18
✎
17:55
|
Чтобы получить документы из группировки контрагента
|
|||
13
Маленький Вопросик
04.10.18
✎
18:02
|
(12) согласен с (1) работодатель твои умоизороты не оценит.
|
|||
14
Sem0709
04.10.18
✎
18:08
|
(13) Если у него нажатие будет отрабатывать 30 минут, то будет время оценить? :)
|
|||
15
Sem0709
04.10.18
✎
18:09
|
(13) А в итоге, Ваш вариант? В запросе делать?
|
|||
16
Йохохо
04.10.18
✎
18:15
|
(15) лучше финальный вариант покажи, а то у тебя
Если ЗапросПутой Тогда Продолжить; КонецЕсли; РезультатЗапроса = Запрос.Выполнить().Выбрать(); как бы намекает |
|||
17
Sem0709
04.10.18
✎
18:34
|
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ | СтатусДокумента.Документ.Контрагент.НаименованиеПолное КАК ДокументКонтрагентНаименованиеПолное, | СтатусДокумента.Документ.Контрагент.АдресЭлектроннойПочты КАК ДокументКонтрагентАдресЭлектроннойПочты, | СтатусДокумента.Документ.ВходящийНомер КАК ВходящийНомер |ИЗ | РегистрСведений.СтатусДокумента.СрезПоследних КАК СтатусДокумента |ГДЕ | СтатусДокументаСрезПоследних.Документ.Проведен | И СтатусДокументаСрезПоследних.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыДокументов.СтопОплата) | |УПОРЯДОЧИТЬ ПО | ДокументКонтрагентНаименованиеПолное, | ВходящаяДата |ИТОГИ ПО | ДокументКонтрагентНаименованиеПолное, | ДокументКонтрагентАдресЭлектроннойПочты"; РезультатЗапроса = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "ДокументКонтрагентНаименованиеПолное"); Пока РезультатЗапроса.Следующий() Цикл ТекстПисьма = "Уважаемый " + ДокументКонтрагентНаименованиеПолное + " Ваши стоп оплаты: "; ТаблицаАдресов = РазложитьСтрокуИПроверитьАдрес(РезультатЗапроса.ДокументКонтрагентАдресЭлектроннойПочты); ВыборкаДокументов = РезультатЗапроса.Выбрать(); Пока ВыборкаДокументов.Следующий() Цикл ТекстПисьма = ТекстПисьма + " " + ВыборкаДокументов.ВходящийНомер; КонецЦикла; ОправитьПисьмо(ТекстПисьма, ТаблицаАдресов); КонецЦикла; |
|||
18
Sem0709
04.10.18
✎
18:34
|
(16) Примерно так (17)
|
|||
19
Sem0709
04.10.18
✎
18:44
|
Конечно же... ну и тоже духе.
Если НЕ ЗначениеЗаполнено(ТаблицаАдресов) Тогда Сообщить("Фиг, а не письмо: " + РезультатЗапроса.ДокументКонтрагентНаименованиеПолное); Продолжить; //или Возврат; КонецЕсли; |
|||
20
Йохохо
04.10.18
✎
18:54
|
КАК СтатусДокумента
|ГДЕ | СтатусДокументаСрезПоследних откуда Вы код берете? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |