Имя: Пароль:
1C
1С v8
Сформировать универсальный отчет, не получая форму
,
0 LehhaK
 
09.04.13
09:09
1. Универсальный отчет forever 33% (1)
2. Универсальный отчет уныл 33% (1)
3. КГ/АМ 33% (1)
Всего мнений: 3

Щас вот озадачился проблемой формирования универсального отчета на стороне сервера(в регламентном задании). Суть - хочу слать письма добрым людям по вечерам. Отправлять научился, нормуль все уходит, когда запускаю обработку под юзером. На сервере ругается на "ПолучитьФорму", ибо получает только на клиенте. И я задумался. Крепко так... даже ветку на мисте нашел: v8: Регламентные задания (выполнение отчета) Правда, там ТСу так и не смогли ответить. Вот мне тоже интересно как сформировать универсальный отчет не получая форму. Мож знает кто?
Мой код, кому интересно:
Процедура СформироватьИОтправитьОтчет() Экспорт
   
   Отчет = Отчеты.Продажи.Создать();
   Форма = Отчет.ПолучитьФорму("Форма");
   Отчет.УниверсальныйОтчет.ПостроительОтчета.ИзмеренияСтроки.Очистить();
   Отчет.УниверсальныйОтчет.ПостроительОтчета.ИзмеренияКолонки.Очистить();
   Отчет.УниверсальныйОтчет.ПостроительОтчета.ВыбранныеПоля.Очистить();
   Отчет.УниверсальныйОтчет.ПостроительОтчета.Порядок.Очистить();
   
   
   Отчет.УниверсальныйОтчет.ДобавитьИзмерениеСтроки("Подразделение");
   Отчет.УниверсальныйОтчет.ДобавитьИзмерениеСтроки("Номенклатура");
   Отчет.УниверсальныйОтчет.ОтрицательноеКрасным = Истина;
   Отчет.УниверсальныйОтчет.ДатаНач = НачалоДня(ТекущаяДата());
   Отчет.УниверсальныйОтчет.ДатаКон = ТекущаяДата();
   ТабДок = Форма.ЭлементыФормы.ПолеТабличногоДокументаРезультат;
   Отчет.СформироватьОтчет(ТабДок);
   Получатель = "ололо";
   
   Отчет2 = Отчеты.ВаловаяПрибыль.Создать();
   Форма2 = Отчет2.ПолучитьФорму("Форма");
   
   Отчет2.УниверсальныйОтчет.ПостроительОтчета.ИзмеренияСтроки.Очистить();
   Отчет2.УниверсальныйОтчет.ПостроительОтчета.ИзмеренияКолонки.Очистить();
   Отчет2.УниверсальныйОтчет.ПостроительОтчета.ВыбранныеПоля.Очистить();
   Отчет2.УниверсальныйОтчет.ПостроительОтчета.Порядок.Очистить();

   Отчет2.УниверсальныйОтчет.ДобавитьИзмерениеСтроки("Подразделение");
   Отчет2.УниверсальныйОтчет.ДобавитьИзмерениеСтроки("Номенклатура");
   Отчет2.УниверсальныйОтчет.ОтрицательноеКрасным = Истина;
   Отчет2.УниверсальныйОтчет.ДатаНач = НачалоДня(ТекущаяДата());
   Отчет2.УниверсальныйОтчет.ДатаКон = ТекущаяДата();
   ТабДок2 = Форма2.ЭлементыФормы.ПолеТабличногоДокументаРезультат;
   Отчет2.СформироватьОтчет(ТабДок2);


   ОтправитьФайл (ТабДок,ТабДок2,Получатель);

КонецПроцедуры

Процедура ОтправитьФайл(ТабДок,ТабДок2,Получатель)

   АдресОтправки = Получатель;
   
   Почта = Новый ИнтернетПочта;
   
   Профиль                        = Новый ИнтернетПочтовыйПрофиль;
   //Профиль.АдресСервераPOP3    = "pop.googlemail.com";
   //Профиль.ПортPOP3 = 995;
   Профиль.АдресСервераSMTP    = "smtp.tomica.ru";
   Профиль.ПортSMTP = 25;
   //Профиль.Пользователь        = "ололо";
   //Профиль.ПользовательSMTP    = "ололо";
   //Профиль.Пароль                = "ололо";
   //Профиль.ПарольSMTP            = "оллол";
   Профиль.Таймаут = "60";
   
   Почта.Подключиться(Профиль);
   
   письмо                    = Новый ИнтернетПочтовоеСообщение;
   письмо.ИмяОтправителя    = "ФоновоеЗадание1С";
   Если Найти(АдресОтправки, ";") = 0 Тогда
       письмо.Получатели.Добавить(АдресОтправки);
   Иначе
       мАдреса = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(АдресОтправки, ";");
       Для каждого адрес из мАдреса Цикл
           письмо.Получатели.Добавить(адрес);
       КонецЦикла;
   КонецЕсли;
   письмо.Тема                = "Ежедневные отчеты";
   
   имяФайла = ПолучитьИмяВременногоФайла("xls");
   ИмяФайла2 = ПолучитьИмяВременногоФайла("xls");
   табДок.Записать(имяФайла, ТипФайлаТабличногоДокумента.XLS97);
   ТабДок2.Записать(ИмяФайла2, ТипФайлаТабличногоДокумента.XLS97);
   письмо.Тексты.Добавить("Ежедневные отчеты. Первый файл - отчет ""Продажи"", Второй - ""Валовая прибыль""");
   письмо.Вложения.Добавить(имяФайла);
   Письмо.Вложения.Добавить(ИмяФайла2);
   Почта.Послать(письмо);
   
   Почта.Отключиться();
   
   Попытка
       УдалитьФайлы(имяФайла);
       УдалитьФайлы(ИмяФайла2);
   Исключение
   КонецПопытки;
   
КонецПроцедуры

   


Суть то в чем, я если не из формы табличный документ получаю, а новый создаю, то он пустой остается. я так понимаю, что в ЭлементыФормы.ПолеТабличногоДокументаРезультат какие то настройки хранятся, только я их в коде нигде найти не могу...
1 shuhard
 
09.04.13
09:12
(0) и не фиг заниматься некрофильством

КГ/АМ
2 LehhaK
 
09.04.13
09:13
(1) Переписать отчеты , конечно, можно, уйдя от универсального. Но зачем себе работы придумывать? У меня УТ 10.3 тут все основные отчеты на базе универсального
3 cw014
 
09.04.13
09:14
А наструя тебе форма?

Перем СохраненныеПараметрыПечати;

Отчет = Отчеты.Продажи.Создать();
ПолеТабличногоДокументаРезультат = Новый ТабличныйДокумент;

Если Отчет.УниверсальныйОтчет.мВосстанавливатьНастройкиПриОткрытии Тогда
   
   Если ЗначениеЗаполнено(глЗначениеПеременной("глТекущийПользователь")) И Не ЗначениеЗаполнено(Отчет.УниверсальныйОтчет.ДатаНач) Тогда
       
       Отчет.УниверсальныйОтчет.ДатаНач = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "ОсновнаяДатаНачалаОтчетов");
       
   КонецЕсли;
   
   СтруктураНастройки = Новый Структура;
   СтруктураНастройки.Вставить("Пользователь", глЗначениеПеременной("глТекущийПользователь"));
   СтруктураНастройки.Вставить("ИмяОбъекта", "Продажи");
   
   Если УниверсальныеМеханизмы.ПолучитьНастройкуИспользоватьПриОткрытии(СтруктураНастройки) Тогда
       
       Отчет.УниверсальныйОтчет.мТекущаяНастройка = СтруктураНастройки;
       Отчет.ВосстановитьНастройкиИзСтруктуры(СтруктураНастройки.СохраненнаяНастройка);
       
       СтруктураСНастройками.Свойство("ПараметрыПечати", СохраненныеПараметрыПечати);
       
       Если ТипЗнч(СохраненныеПараметрыПечати) = Тип("Структура") Тогда
           
           // Ориентация
           СохраненныеПараметрыПечати.Свойство("ОриентацияСтраницы", ПолеТабличногоДокументаРезультат.ОриентацияСтраницы);
           
           // Масштаб
           СохраненныеПараметрыПечати.Свойство("МасштабПечати", ПолеТабличногоДокументаРезультат.МасштабПечати);
           СохраненныеПараметрыПечати.Свойство("АвтоМасштаб", ПолеТабличногоДокументаРезультат.АвтоМасштаб);
           
           // Поля
           СохраненныеПараметрыПечати.Свойство("ПолеСлева", ПолеТабличногоДокументаРезультат.ПолеСлева);
           СохраненныеПараметрыПечати.Свойство("ПолеСверху", ПолеТабличногоДокументаРезультат.ПолеСверху);
           СохраненныеПараметрыПечати.Свойство("ПолеСправа", ПолеТабличногоДокументаРезультат.ПолеСправа);
           СохраненныеПараметрыПечати.Свойство("ПолеСнизу", ПолеТабличногоДокументаРезультат.ПолеСнизу);
           
           // Колонтитулы
           СохраненныеПараметрыПечати.Свойство("РазмерКолонтитулаСверху", ПолеТабличногоДокументаРезультат.РазмерКолонтитулаСверху);
           СохраненныеПараметрыПечати.Свойство("РазмерКолонтитулаСнизу", ПолеТабличногоДокументаРезультат.РазмерКолонтитулаСнизу);
           
           // Экземпляров на страницу
           СохраненныеПараметрыПечати.Свойство("ЭкземпляровНаСтранице", ПолеТабличногоДокументаРезультат.ЭкземпляровНаСтранице);
           
           // Черно-белая печать
           СохраненныеПараметрыПечати.Свойство("ЧерноБелаяПечать", ПолеТабличногоДокументаРезультат.ЧерноБелаяПечать);
           
       КонецЕсли;
       
   Иначе
       
       Отчет.УстановитьНачальныеНастройки();
       
   КонецЕсли;
   
   Отчет.УниверсальныйОтчет.ВосстановитьДополнительныеНастройки(Объект, Отчет, ИмяОбъекта);
   
КонецЕсли;

Отчет.СформироватьОтчет(ПолеТабличногоДокументаРезультат);
4 LehhaK
 
09.04.13
09:21
(3) Это твое или типовое?
5 LehhaK
 
09.04.13
09:29
+(4) Все, херню спросил. Щас попробую
6 cw014
 
09.04.13
09:30
(4) Это мое, взятое из типового

Универсальный отчет forever
7 LehhaK
 
09.04.13
09:42
Если втупую вставить, то как то так:
{Обработка.НоваяОтправкаПисемРуководству.МодульОбъекта(25,9)}: Переменная не определена (СтруктураСНастройками)
       <<?>>СтруктураСНастройками.Свойство("ПараметрыПечати", СохраненныеПараметрыПечати); (Проверка: Толстый клиент (обычное приложение))
{Обработка.НоваяОтправкаПисемРуководству.МодульОбъекта(66,66)}: Переменная не определена (Объект)
   Отчет.УниверсальныйОтчет.ВосстановитьДополнительныеНастройки(<<?>>Объект, Отчет, ИмяОбъекта); (Проверка: Толстый клиент (обычное приложение))
{Обработка.НоваяОтправкаПисемРуководству.МодульОбъекта(66,81)}: Переменная не определена (ИмяОбъекта)
   Отчет.УниверсальныйОтчет.ВосстановитьДополнительныеНастройки(Объект, Отчет, <<?>>ИмяОбъекта); (Проверка: Толстый клиент (обычное приложение))

Если подумать и дописать,что СтруктураСНастройками = новый структура; Объект заменить на ЭтотОбъект, а ИмяОбъекта = ИмяОбъекта = Отчет.Метаданные().Имя; То пишет:
{Отчет.УниверсальныйОтчет.МодульОбъекта(5902)}: Поле объекта не обнаружено (БыстрыйОтборРазвернут)
   Объект.БыстрыйОтборРазвернут = ?(ВосстановитьЗначение(СтрЗаменить(?(ИмяОбъекта = Неопределено, Строка(Отчет), ИмяОбъекта), ".", "_") + "_БыстрыйОтборРазвернут") = Истина, Истина, Ложь);


как то так вот
8 LehhaK
 
09.04.13
10:07
Спасибо, добрый человек. Все, что мне надо из этого кода - Отчет.УстановитьНачальныеНастройки();
И все летает. Полный код для грядущих поколений:
Отчет = Отчеты.Продажи.Создать();
   Отчет.УниверсальныйОтчет.ПостроительОтчета.ИзмеренияСтроки.Очистить();
   Отчет.УниверсальныйОтчет.ПостроительОтчета.ИзмеренияКолонки.Очистить();
   Отчет.УниверсальныйОтчет.ПостроительОтчета.ВыбранныеПоля.Очистить();
   Отчет.УниверсальныйОтчет.ПостроительОтчета.Порядок.Очистить();
   
   
   Отчет.УниверсальныйОтчет.ДобавитьИзмерениеСтроки("Подразделение");
   Отчет.УниверсальныйОтчет.ДобавитьИзмерениеСтроки("Номенклатура");
   Отчет.УниверсальныйОтчет.ОтрицательноеКрасным = Истина;
   Отчет.УниверсальныйОтчет.ДатаНач = НачалоДня(ТекущаяДата());
   Отчет.УниверсальныйОтчет.ДатаКон = ТекущаяДата();
   Отчет.УстановитьНачальныеНастройки();
   ТабДок = Форма.ЭлементыФормы.ПолеТабличногоДокументаРезультат;
   ТабДок = Новый ТабличныйДокумент;
   Отчет.СформироватьОтчет(ТабДок);
   
   Получатель = "[email protected]";
   
   
   
   Отчет2 = Отчеты.ВаловаяПрибыль.Создать();
   Отчет2.УниверсальныйОтчет.ПостроительОтчета.ИзмеренияСтроки.Очистить();
   Отчет2.УниверсальныйОтчет.ПостроительОтчета.ИзмеренияКолонки.Очистить();
   Отчет2.УниверсальныйОтчет.ПостроительОтчета.ВыбранныеПоля.Очистить();
   Отчет2.УниверсальныйОтчет.ПостроительОтчета.Порядок.Очистить();

   Отчет2.УниверсальныйОтчет.ДобавитьИзмерениеСтроки("Подразделение");
   Отчет2.УниверсальныйОтчет.ДобавитьИзмерениеСтроки("Номенклатура");
   Отчет2.УниверсальныйОтчет.ОтрицательноеКрасным = Истина;
   Отчет2.УниверсальныйОтчет.ДатаНач = НачалоДня(ТекущаяДата());
   Отчет2.УниверсальныйОтчет.ДатаКон = ТекущаяДата();
   Отчет2.УстановитьНачальныеНастройки();
       ТабДок2 = Новый ТабличныйДокумент;
       Отчет2.СформироватьОтчет(ТабДок2);
    ТабДок2.Показать();
9 mehfk
 
09.04.13
10:30
(8) Это не смущает в модуле отчета?

#Если Клиент Тогда
...
...
Процедура УстановитьНачальныеНастройки(ДополнительныеПараметры = Неопределено) Экспорт
...
...
#КонецЕсли
10 LehhaK
 
09.04.13
21:14
(9) Смущает, ога. Только когда регламент запустился - до этой строки даже не дошло. Консоль заданий пишет "метод объекта не обнаружен (ДобавитьИзмерениеСтроки)". Там то вроде никак не клиент. Да и процедура такая есть. Почему сервер ее как метод опознает? З.Ы. с клиента все по прежнему норм отрабатывает.
11 Reaper_1c
 
09.04.13
21:22
Если уж говорим о некрофилии, то для рассылки предназначен рапорт руководителю, в котором от природы есть шаблоны для подключения собственных отчетов. Нафига лохматить бабушку?

Универсальный отчет уныл
12 LehhaK
 
09.04.13
21:25
(11) Интересно же. Вероятно, я перепишу оба этих отчета на СКД (кстати, как она дружит с сервером?) или тупо буду формировать табличный документ обработкой и отсылать. Но ппц как охота отправить универсальный...
13 LehhaK
 
10.04.13
12:52
Апнуть, чтоли?
14 mehfk
 
10.04.13
16:35
(12) Я делал по рабоче-крестьянски - виндовый планировщик запускал 1с-ку от имени специально заведенного пользователя, запускалась обработка и формировала несколько отчетов на базе универсального.
15 mehfk
 
10.04.13
16:36
(10) Модуль универсального отчета открой
16 LehhaK
 
11.04.13
07:42
(14) да я так же уже запилил. Универсальный отчет в регламентном задании - от лукавого.