Имя: Пароль:
1C
1С v8
Автоматическая выгрузка универсального отчета на другой сервер.
,
0 Anabella
 
30.05.18
17:06
Добрый день. У нас есть сервак для рабочих баз, куда доступ для всего остального строго закрыт, и другие серваки. Нужно сделать регламентное задание которое бы ночью выгружало из УТ10 список отчетов в папку на другом сервере. Обработку написала. Под собой отлично работает. А в регламентном задании - нет. Причем не видно, что он вообще его формирует, оно почти тут же останавливается с ошибкой. А что за ошибка, хрен пойми.

Код следующий:

Процедура ВыгрузитьОтчеты() Экспорт

    ПараметрыПоиска = ПолучитьСписокОтчетов();

    Для каждого СтрокаПоиска из ПараметрыПоиска цикл
            
        Если СтрокаПоиска.Неделя = истина тогда
            Если ДеньНедели(ТекущаяДата()) = 1 тогда                
            Иначе
                продолжить;
            КонецЕсли;
        КонецЕсли;
        
        Период = ПолучитьПериод(СтрокаПоиска.ПериодНачало,СтрокаПоиска.ПериодОкончание);

        Если СтрокаПоиска.ИмяОбъекта <> "ОтчетОбъект.Прайс" тогда            
    
            ТабДок = Новый ТабличныйДокумент;
                
            Запрос = Новый Запрос;
            Запрос.Текст = "ВЫБРАТЬ
                           |    СохраненныеНастройки.СохраненнаяНастройка
                           |ИЗ
                           |    РегистрСведений.СохраненныеНастройки КАК СохраненныеНастройки
                           |ГДЕ
                           |    СохраненныеНастройки.Пользователь = &Пользователь
                           |    И СохраненныеНастройки.ИмяОбъекта = &ИмяОбъекта
                           |    И СохраненныеНастройки.НаименованиеНастройки = &НаименованиеНастройки";
                              
            Запрос.УстановитьПараметр("Пользователь", СтрокаПоиска.Пользователь);
            Запрос.УстановитьПараметр("ИмяОбъекта",СтрокаПоиска.ИмяОбъекта);
            Запрос.УстановитьПараметр("НаименованиеНастройки",СтрокаПоиска.НаименованиеНастройки);
            
            Выборка = Запрос.Выполнить().Выбрать();
            Выборка.Следующий();
                        
            Точка = Найти(СтрокаПоиска.ИмяОбъекта,".");
            КоличествоСимволов = (СтрДлина(СтрокаПоиска.ИмяОбъекта))-Точка;
            ИмяОбъектаОтчета = Прав(СтрокаПоиска.ИмяОбъекта,КоличествоСимволов);
            
            Отчет = Отчеты[ИмяОбъектаОтчета].Создать();
                        
            УниверсальныйОтчет = Отчеты.УниверсальныйОтчет.Создать();
            
            СтруктураНастройки = Новый Структура;
            СтруктураНастройки.Вставить("Пользователь", СтрокаПоиска.Пользователь);
            СтруктураНастройки.Вставить("ИмяОбъекта", СтрокаПоиска.ИмяОбъекта);
            СтруктураНастройки.Вставить("НаименованиеНастройки", СтрокаПоиска.НаименованиеНастройки);
            СтруктураНастройки.Вставить("СохраненнаяНастройка", Выборка.СохраненнаяНастройка.Получить());
            
            УниверсальныеМеханизмы.ПолучитьНастройку(СтруктураНастройки);
            
            СтруктураНастройки.СохраненнаяНастройка.НастройкаПериода.ДатаНачала = Период.Дата1;
            СтруктураНастройки.СохраненнаяНастройка.НастройкаПериода.ДатаОкончания = Период.Дата2;
                        
            УниверсальныйОтчет.мТекущаяНастройка = СтруктураНастройки;
            УниверсальныйОтчет.ВосстановитьНастройкиИзСтруктуры(СтруктураНастройки.СохраненнаяНастройка);
                
            Отчет.ВосстановитьНастройкиИзСтруктуры(СтруктураНастройки.СохраненнаяНастройка);
            Отчет.СформироватьОтчет(ТабДок);

            
        ИмяФайла = СтрокаПоиска.НаименованиеОтчета;
        Результат = "net use t: \\gate.saks.ru\translate\service\1c\_1с.ут.отчёты Amozhetbyttakoyparol7 /user:OFFICE\1cut";

        ЗапуститьПриложение(Результат,,Истина);
        ПутьКФайлуДискПодключен = "t:\" + ИмяФайла + ".xlsx";
        //ПутьКФайлуДискПодключен = "t:\\gate.saks.ru\translate\service\1c\_1с.ут.отчёты\" + ИмяФайла + ".xlsx";        

        Файл = Новый Файл(ПутьКФайлуДискПодключен);
        ТабДок.Записать(ПутьКФайлуДискПодключен,ТипФайлаТабличногоДокумента.XLSX);
                        
КонецПроцедуры

Функция ПолучитьСписокОтчетов()
    
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |    СписокЕжедневныхОтчетов.Пользователь,
                   |    СписокЕжедневныхОтчетов.ИмяОбъекта,
                   |    СписокЕжедневныхОтчетов.НаименованиеНастройки,
                   |    СписокЕжедневныхОтчетов.ПериодНачало,
                   |    СписокЕжедневныхОтчетов.ПериодОкончание,
                   |    СписокЕжедневныхОтчетов.НаименованиеОтчета,
                   |    СписокЕжедневныхОтчетов.Неделя
                   |ИЗ
                   |    РегистрСведений.СписокЕжедневныхОтчетов КАК СписокЕжедневныхОтчетов";
                  
    ТЗОтчетов = Запрос.Выполнить().Выгрузить();
    
    Возврат ТЗОтчетов;    
    
КонецФункции
    
Функция ПолучитьПериод(ПериодНачало,ПериодОкончание);
    
    Структура = Новый Структура;
    
    Если ПериодНачало = Перечисления.ПериодыОтчетов.Вчера тогда
        Дата1 = НачалоДня(НачалоДня(ТекущаяДата())-1);
    ИначеЕсли ПериодНачало = Перечисления.ПериодыОтчетов.Месяц тогда
        Дата1 = НачалоМесяца(ТекущаяДата());
    ИначеЕсли ПериодНачало = Перечисления.ПериодыОтчетов.Сегодня тогда
        Дата1 = НачалоДня(ТекущаяДата());
    ИначеЕсли ПериодНачало = Перечисления.ПериодыОтчетов.Неделя тогда
        Дата1 = НачалоДня(ТекущаяДата()-3600*24*7);        
    ИначеЕсли ПериодНачало = Перечисления.ПериодыОтчетов.ДвеНедели тогда    
        Дата1 = НачалоДня(ТекущаяДата()-3600*24*7*2);
    ИначеЕсли ПериодНачало = Перечисления.ПериодыОтчетов.ТриНедели тогда    
        Дата1 = НачалоДня(ТекущаяДата()-3600*24*7*3);
    ИначеЕсли ПериодНачало = Перечисления.ПериодыОтчетов.ЧетыреНедели тогда    
        Дата1 = НачалоДня(ТекущаяДата()-3600*24*7*4);    
    ИначеЕсли ПериодНачало = Перечисления.ПериодыОтчетов.Минус28Дней тогда    
        Дата1 = НачалоДня(ТекущаяДата()-3600*24*28);                                    
    ИначеЕсли ПериодНачало = Перечисления.ПериодыОтчетов.Предыдущие4Месяца тогда        
        Дата1 = НачалоМесяца(ДобавитьМесяц(ТекущаяДата(),-3));    
    ИначеЕсли ПериодНачало = Перечисления.ПериодыОтчетов.ПредыдущийМесяц тогда        
        Дата1 = НачалоМесяца(ДобавитьМесяц(ТекущаяДата(),-1));                
    ИначеЕсли ПериодНачало = Перечисления.ПериодыОтчетов.Фикс1июль17 тогда    
        Дата1 = НачалоДня('20170701');                    
    ИначеЕсли ПериодНачало = Перечисления.ПериодыОтчетов.Фикс31июль17 тогда    
        Дата1 = НачалоДня('20170731');    
    ИначеЕсли ПериодНачало = Перечисления.ПериодыОтчетов.Завтра тогда    
        Дата1 = КонецДня(ТекущаяДата())+1;                    
    КонецЕсли;
    
    Если ПериодОкончание = Перечисления.ПериодыОтчетов.Вчера тогда
        Дата2 = КонецДня(НачалоДня(ТекущаяДата())-1);
    ИначеЕсли ПериодОкончание = Перечисления.ПериодыОтчетов.Сегодня тогда
        Дата2 = КонецДня(ТекущаяДата());
    ИначеЕсли ПериодОкончание = Перечисления.ПериодыОтчетов.КонецТекущегоМесяца тогда    
        Дата2 = КонецМесяца(ТекущаяДата());                                            
    ИначеЕсли ПериодОкончание = Перечисления.ПериодыОтчетов.Следующие10Дней тогда
        Дата2 = КонецДня(КонецДня(ТекущаяДата()+3600*24*10));
    КонецЕсли;
    
    Структура.Вставить("Дата1",Дата1);
    Структура.Вставить("Дата2",Дата2);
    
    Возврат Структура;
    
КонецФункции
1 Anabella
 
30.05.18
17:08
Простите, как позвать модератора, чтобы поменять пару строк?
2 DrShad
 
30.05.18
17:08
права
3 Anabella
 
30.05.18
17:09
(2) есть права у пользователя под которым рег.задание выполняется.
4 DrShad
 
30.05.18
17:10
(3) имя пользователя в студию
5 ptiz
 
30.05.18
17:10
(0) "А что за ошибка, хрен пойми." - пиши логи в журнал регистрации и смотри, где останавливается
6 Anabella
 
30.05.18
17:10
(1) с этим помогите пожалуйста.
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс