Имя: Пароль:
1C
1С v8
Получать данные из ТЗ по итогам
0 Vladislava-smile
 
09.09.15
04:24
Есть такая таблица:
Док   ДоговорКонтрагента   Менеджер   Начальник
1     1                    Иванов     Кириллов
2     2                    Петров     Филатов
3     3                    Сидоров    Кириллов
4     4                    Капустин   Филатов

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

Я предполагаю что так можно сделать только через обход по группировкам в запросе, загрузив в него врем. ТЗ, в методах ТЗ не нашла подобного ничего ... Правильно я понимаю?
1 Смотрящий
 
09.09.15
04:39
(0) Сортироваться по колонке Начальник, и циклом собирать документы
2 Vladislava-smile
 
09.09.15
06:40
(1) - Спасибо, сделала уже так:
Запрос=Новый Запрос;
Запрос.Текст=("ВЫБРАТЬ РАЗРЕШЕННЫЕ
              |    ВнешняяТаблица.Ссылка КАК Ссылка,
              |    ВнешняяТаблица.Контрагент КАК Контрагент,
              |    ВнешняяТаблица.ДоговорКонтрагента КАК ДоговорКонтрагента,
              |    ВнешняяТаблица.Остаток КАК Остаток,
              |    ВнешняяТаблица.ЭлАдресДоговораКонтрагента КАК ЭлАдресДоговораКонтрагента,
              |    ВнешняяТаблица.Менеджер КАК Менеджер,
              |    ВнешняяТаблица.ЭлАдресМенеджера КАК ЭлАдресМенеджера,
              |    ВнешняяТаблица.Начальник КАК Начальник,
              |    ВнешняяТаблица.ТелефонКонтрагента КАК ТелефонКонтрагента
              |ПОМЕСТИТЬ ВнешняяТаблица
              |ИЗ
              |    &ВнешняяТаблица КАК ВнешняяТаблица
              |;
              |
              |////////////////////////////////////////////////////////////////////////////////
              |ВЫБРАТЬ
              |    ВнешняяТаблица.Ссылка,
              |    ВнешняяТаблица.Контрагент,
              |    ВнешняяТаблица.ДоговорКонтрагента,
              |    ВнешняяТаблица.Остаток,
              |    ВнешняяТаблица.ЭлАдресДоговораКонтрагента,
              |    ВнешняяТаблица.Менеджер,
              |    ВнешняяТаблица.ЭлАдресМенеджера,
              |    ВнешняяТаблица.Начальник КАК Начальник,
              |    ВнешняяТаблица.ТелефонКонтрагента
              |ИЗ
              |    ВнешняяТаблица КАК ВнешняяТаблица
              |ИТОГИ ПО
              |    Начальник");
Запрос.УстановитьПараметр("ВнешняяТаблица", ТЗ);
ВыборкаНачальник=Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаНачальник.Следующий() цикл
Если ЗначениеЗаполнено(ВыборкаНачальник.Начальник) тогда
    ТекНачальник=ВыборкаНачальник.Начальник;
    ПочтаНачальника="";
    НайтиКонтактПочта(ТекНачальник, ПочтаНачальника);
    ТекстПисьма="";
    ТекстПисьма = "<h3>Акты сверки по организации "+Организация+" отправлены контрагентам:</h3>";
    ТекстПисьма = ТекстПисьма + "<table border='1px'><th>Контрагент</th><th>Договор контрагента</th><th>Телефон контрагента</th><th>Менеджер</th><th>Эл. адрес менеджера</th>";
    
        ВыборкаДетали=ВыборкаНачальник.Выбрать();
        Пока ВыборкаДетали.Следующий() Цикл
        
                            Если ЗначениеЗаполнено(ВыборкаДетали.ЭлАдресДоговораКонтрагента) тогда
                                ТекстПисьма = ТекстПисьма + "<tr>";
                                ТекстПисьма = ТекстПисьма + "<td>" + ВыборкаДетали.Контрагент + "</td>";
                                ТекстПисьма = ТекстПисьма + "<td>" + ВыборкаДетали.ДоговорКонтрагента + "</td>";
                                ТекстПисьма = ТекстПисьма + "<td>" + ВыборкаДетали.ТелефонКонтрагента + "</td>";
                                ТекстПисьма = ТекстПисьма + "<td>" + ВыборкаДетали.Менеджер + "</td>";
                                ТекстПисьма = ТекстПисьма + "<td>" + ВыборкаДетали.ЭлАдресМенеджера + "</td>";
                                ТекстПисьма = ТекстПисьма + "</tr>";
                            КонецЕсли;

            КонецЦикла;
    // ОТПРАВКА ПИСЬМА НАЧАЛЬНИКУ

ОтправкаАктов = Справочники.ОбъектыРассылки.НайтиПоКоду("000000007");
Отправитель = ОтправкаАктов.УчетнаяЗаписьОтправителя;
Получатели = Новый СписокЗначений;
Для каждого Получатель из ОтправкаАктов.УчетныеЗаписиПочты Цикл
Получатели.Добавить(Получатель.ПочтаПолучателя);    
КонецЦикла;

        Почта = Неопределено;
        ПочтаПодключена = Ложь;
        Если ЗначениеЗаполнено(Отправитель) Тогда
            Почта = Новый ИнтернетПочта();
            Попытка
                Почта.Подключиться(УправлениеЭлектроннойПочтой.ПолучитьИнтернетПочтовыйПрофиль(Отправитель));
                ПочтаПодключена = Истина;
            Исключение
            КонецПопытки;
        КонецЕсли;
        
        Если ПочтаПодключена Тогда
            
                Если ЗначениеЗаполнено(Получатель) Тогда
                    ПочтовоеСообщение = Новый ИнтернетПочтовоеСообщение;
                    ПочтовоеСообщение.Тема = "Отправленные акты сверки " + Формат(ТекущаяДата(),"ДЛФ=ДД");

                    ПочтовоеСообщение.Отправитель.Адрес = Отправитель;
                    ПочтовоеСообщение.Получатели.Добавить();
                    ПочтовоеСообщение.Получатели.Добавить(Получатели);
                    
                    ПочтовоеСообщение.Отправитель.ОтображаемоеИмя=Отправитель.ПолноеНаименование();
                    
                    ПочтовоеСообщение.Тексты.Добавить(ТекстПисьма, ТипТекстаПочтовогоСообщения.HTML);
                                            
                            Попытка
                                    Почта.Послать(ПочтовоеСообщение);
                                    Сообщить("Письмо начальнику отдела продаж "+ТекНачальник+" отправлено.");
                            Исключение
                            КонецПопытки;
                                                
                КонецЕсли;
            КонецЕсли;
// ---------------------------------------------------------------------------

КонецЕсли;
КонецЦикла;
3 echo77
 
09.09.15
07:06
Среди методов ТЗ нет, но можно по-другому выпрлнить обход по группировкам. Получить таблицу-список уникальных значений "группировки", сделать цикл по значениям этого списка, методом найтистроки() выбирать из таблицы значения относящиеся к "группировке", обрабатывать их в цикле при необходимости выносить в отдельную таблицу методом найтистроки().
Если таблица огромная добавить в нее индекс