Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

Запрос не в цикле

Запрос не в цикле
Я
   Sem0709
 
04.10.18 - 17:06
Доброго всем. 8.3 обычная форма... на ночь глядя название темы не придумывается

Нужно на несколько электронный адрес контрагента отправить список документов.

Получаю контрагентов со строкой адресов из справочника.
Затем в цикле перебираю их и получаю список документов отдельным запросов. Но это ведь не правильно... запрос в цикле.

Помогите понять, как получить всё одним запросом.

То есть я должен получить строку с контрагентом, адресами, список документов
 
 
   Wern
 
1 - 04.10.18 - 17:09
Зачем? Выигрыш в твоем случае не стоит хлопот.
   Sem0709
 
2 - 04.10.18 - 17:12
(1) То есть делать запрос в цикле?
   Лефмихалыч
 
3 - 04.10.18 - 17:18
соединить контрагентов с документами, а потом ИТоги ПО Контрагент
   ILM
 
4 - 04.10.18 - 17:19
Ну выбери документы с отбором  "Контрагент В (&СписокКонтрагентов)
   Михаил Козлов
 
5 - 04.10.18 - 17:19
ВЫБРАТЬ 
  РН.Контрагент КАК Контрагент,
  КИ.Адрес КАК Адрес,
  РН.Ссылка КАК док
ИЗ Документы.РеализацияТоваровУслуг КАК РН
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК КИ
ПО РН.Контрагент = КИ.Объект И КИ.ТипАдреса = &eMail
ИТОГИ МАКСИМУМ(Контрагент), МАКСИМУМ(Адрес) ПО Контрагент

Обходить по группировкам.
   Sem0709
 
6 - 04.10.18 - 17:29
Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |    Документы.Ссылка,
    |ИЗ
    |    Документы.Приходные КАК Документы
    |ГДЕ
    |    Документы.Контрагент= &Контрагент";   
    

Для Каждого Строка ИЗ ТаблицаКонтрагентовИАдрес Цикл
    
    Запрос.УстановитьПараметр("Контрагент", Строка .Контрагент);

    Если ЗапросПутой Тогда
       Продолжить;
    КонецЕсли;

    РезультатЗапроса = Запрос.Выполнить().Выбрать();

    ОтправитьПисьмо(РезультатЗапроса);

КонецЦикла;

Чёт с итогами не понял до конца, у меня получиться что-то и с запросов выше?
   Лефмихалыч
 
7 - 04.10.18 - 17:35
(6) нет, так не надо. Думай еще
   dka80
 
8 - 04.10.18 - 17:37
Выбрать Документы.Ссылка, Контрагент Из Документы.Приходные Как Документы Где Документы.Контрагент В (&Контрагенты) Итоги по Контрагент

Запрос.УстановитьПараметры("Контрагенты", ТаблицаКонтрагентовИАдрес.ВыгрузитьКолонку(Контрагент));
Результат = Запрос.Выполнить();
ВыборкаКонтрагент = Результат.Выбрать(Обходрезультатазапроса.погруппировкам)
Пока ВыборкаКонтрагент.Следующий() Цикл
ВыборкаДокумент = ВыборкаКонтрагент.Выбрать();
текстДокумент = "";
Пока ВыборкаДокумент.Следующий() Цикл
текстдокумент = текстдокумент + ВыборкаДокумент.Ссылка;
КонецЦикла;
ОтправитьПисьмо(ВыборкаКонтрагент.Контрагент, ТекстДокумент);
КонецЦикла
   Лефмихалыч
 
9 - 04.10.18 - 17:39
я даже знаю, каким будет следующий вопрос
   Sem0709
 
10 - 04.10.18 - 17:42
(5) (8) (9) Аааа, "Обходить по группировкам" %)
Спасибо, понял.
 
 Рекламное место пустует
   МаленькийВопросик
 
11 - 04.10.18 - 17:51
а зачем здесь по-группировкам обходить?
   Sem0709
 
12 - 04.10.18 - 17:55
Чтобы получить документы из группировки контрагента
   МаленькийВопросик
 
13 - 04.10.18 - 18:02
(12) согласен с (1) работодатель твои умоизороты не оценит.
   Sem0709
 
14 - 04.10.18 - 18:08
(13) Если у него нажатие будет отрабатывать 30 минут, то будет время оценить? :)
   Sem0709
 
15 - 04.10.18 - 18:09
(13) А в итоге, Ваш вариант? В запросе делать?
   Йохохо
 
16 - 04.10.18 - 18:15
(15) лучше финальный вариант покажи, а то у тебя 
    Если ЗапросПутой Тогда
       Продолжить;
    КонецЕсли;

    РезультатЗапроса = Запрос.Выполнить().Выбрать();
как бы намекает
   Sem0709
 
17 - 04.10.18 - 18:34
Запрос = Новый Запрос;
    Запрос.Текст = 
    "ВЫБРАТЬ
    |    СтатусДокумента.Документ.Контрагент.НаименованиеПолное КАК ДокументКонтрагентНаименованиеПолное,
    |    СтатусДокумента.Документ.Контрагент.АдресЭлектроннойПочты КАК ДокументКонтрагентАдресЭлектроннойПочты,
    |    СтатусДокумента.Документ.ВходящийНомер КАК ВходящийНомер
    |ИЗ
    |    РегистрСведений.СтатусДокумента.СрезПоследних КАК СтатусДокумента
    |ГДЕ
    |    СтатусДокументаСрезПоследних.Документ.Проведен
    |    И СтатусДокументаСрезПоследних.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыДокументов.СтопОплата)
    |
    |УПОРЯДОЧИТЬ ПО
    |    ДокументКонтрагентНаименованиеПолное,
    |    ВходящаяДата
    |ИТОГИ ПО
    |    ДокументКонтрагентНаименованиеПолное,
    |    ДокументКонтрагентАдресЭлектроннойПочты";
    
    РезультатЗапроса = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "ДокументКонтрагентНаименованиеПолное");
    
    Пока РезультатЗапроса.Следующий() Цикл
        
        ТекстПисьма = "Уважаемый " + ДокументКонтрагентНаименованиеПолное + " Ваши стоп оплаты: ";
        ТаблицаАдресов = РазложитьСтрокуИПроверитьАдрес(РезультатЗапроса.ДокументКонтрагентАдресЭлектроннойПочты);
        
        ВыборкаДокументов = РезультатЗапроса.Выбрать();
        
        Пока ВыборкаДокументов.Следующий() Цикл
            ТекстПисьма = ТекстПисьма + " " + ВыборкаДокументов.ВходящийНомер;
        КонецЦикла; 
        
        ОправитьПисьмо(ТекстПисьма, ТаблицаАдресов);
        
    КонецЦикла;
   Sem0709
 
18 - 04.10.18 - 18:34
(16) Примерно так (17)
   Sem0709
 
19 - 04.10.18 - 18:44
Конечно же... ну и тоже духе.

        
        Если НЕ ЗначениеЗаполнено(ТаблицаАдресов) Тогда
            Сообщить("Фиг, а не письмо: " + РезультатЗапроса.ДокументКонтрагентНаименованиеПолное);
            Продолжить;//или Возврат;

        КонецЕсли;
   Йохохо
 
20 - 04.10.18 - 18:54
КАК СтатусДокумента
    |ГДЕ
    |    СтатусДокументаСрезПоследних
откуда Вы код берете?

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует