8.х Отладка регламентных заданий

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Itsys, 25 янв 2010.

  1. TopicStarter Overlay
    Itsys
    Offline

    Itsys Опытный в 1С

    Регистрация:
    3 янв 2010
    Сообщения:
    1.394
    Симпатии:
    0
    Баллы:
    26
    Добрый день,

    Подскажите, каким образом можно отладить регламентное задание, задание (обмен данными с другой системой через ODBC) запускается и успешно выполняется, но результата нет, кода же запускаешь вручную, все ОК?

    Неужели только один вариант - через текстовый файл? Хотелось бы посмотреть состояние переменных и т.д.
  2. Stack_G
    Offline

    Stack_G Опытный в 1С

    Регистрация:
    10 дек 2007
    Сообщения:
    786
    Симпатии:
    2
    Баллы:
    26
    Может и есть какая-нибудь утилита, но простейший вариант - внешняя обработка, на кнопку вешаешь метод регл. задания и в путь :)
    Вот только если регл. задание у вас выполняется на сервере, то нужно посмотреть, чтобы не было "клиентского" кода ("сообщить,предупреждение, работы с формами" - в СП описано "Недоступен на сервере 1С:Предприятие."). Либо этот код зарыть
    Код:
    #Если Клиент Тогда
    #КонецЕсли
    
    А так можете посмотреть через консоль заданий, выдает ли ваше фоновое задание ошибку.
  3. TopicStarter Overlay
    Itsys
    Offline

    Itsys Опытный в 1С

    Регистрация:
    3 янв 2010
    Сообщения:
    1.394
    Симпатии:
    0
    Баллы:
    26
    Для теста сделал отдельную кнопку с меню, при нажатии на которую все работает нормально.
    В консоли заданий показывает, что все выполнено, а результата нет. Весь "потенциально опасный" код убран в инструкцию препроцессору "#Если Клиент".
    Вот процедура, вызываемая в регзадании:
    Код:
    Процедура ОбменДаннымиКлиентскоеОборудование() Экспорт
    Попытка
    DataBaseConnection = Новый COMОбъект("ADODB.Connection");
    Исключение
    #Если Клиент Тогда
    Сообщить("Не удается загрузить ADODB.Connection - " + ОписаниеОшибки());
    #КонецЕсли
    Возврат;
    КонецПопытки;
    
    Попытка
    DataBaseConnection.ConnectionString = "DSN=" + Константы.ИмяБазыWiseman.Получить() + ";Password=one_s;User ID=one_s;Data Source=" + Константы.ИмяБазыWiseman.Получить() + ";Persist Security Info=True";
    DataBaseConnection.Open();
    Исключение
    #Если Клиент Тогда
    Сообщить("Не удалось подключиться к базе данных " + Константы.ИмяБазыWiseman.Получить() + " - " + ОписаниеОшибки());
    #КонецЕсли
    Возврат;   
    КонецПопытки;   
    
    RecordSet = Новый COMОбъект("ADODB.Recordset");
    RecordSet.ActiveConnection = DataBaseConnection;
    RecordSet.CursorLocation = 3; // UseClient
    
    Запрос = "select * from unco.ru_1c_eq_sell_move where tran_date > to_date('" + Формат(ТекущаяДата()-22*24*60*60, "ДФ=dd.MM.yyyy") + "','dd.mm.yyyy')";
    Попытка
    RecordSet.Open(Запрос);
    Если RecordSet.RecordCount > 0 Тогда
    #Если Клиент Тогда
    Сообщить("	Выполнен запрос " + Запрос);
    #КонецЕсли
    Счетчик = 0;
    Пока RecordSet.EOF = 0 Цикл
    Счетчик = Счетчик + 1;
    #Если Клиент Тогда
    Состояние("Получение информации по продаже оборудования " + Окр(Счетчик/RecordSet.RecordCount*100, 0, 1) + "%");
    #КонецЕсли
    КодКлиента = "" + RecordSet.Fields.Item("CO_NBR").Value + RecordSet.Fields.Item("DIV_NBR").Value + "." + Формат(RecordSet.Fields.Item("ACCT_NBR").Value, "ЧГ=0");
    ШК = Формат(RecordSet.Fields.Item("SERIAL_NBR").Value, "ЧГ=0");
    #Если Клиент Тогда
    Если RecordSet.Fields.Item("DIRECTION").Value = 1 Тогда
    Сообщить("	Найдена продажа оборудования клиенту " + КодКлиента + " - ШК " + ШК + " от " + RecordSet.Fields.Item("TRAN_DATE").Value);
    Иначе
    Сообщить("	Найден возврат оборудования от клиента " + КодКлиента + " - ШК " + ШК + " от " + RecordSet.Fields.Item("TRAN_DATE").Value);
    КонецЕсли;
    #КонецЕсли
    Если Число(ШК) < 0 Тогда
    #Если Клиент Тогда
    Сообщить("OK		Не верный ШК (отрицательный) - пропущен");
    #КонецЕсли
    RecordSet.MoveNext();
    Продолжить;
    КонецЕсли;
    
    ШК = "" + Лев("000000", 6 - СтрДлина(ШК)) + ШК;
    
    Спр = Справочники.СерииНоменклатуры.НайтиПоНаименованию(ШК, Истина);
    Если Спр.Пустая() Тогда
    #Если Клиент Тогда
    Сообщить("!!!		ШК не найден в базе 1С - пропущен");
    #КонецЕсли
    RecordSet.MoveNext();
    Продолжить;
    КонецЕсли;
    
    Отбор = Новый Структура ("Серия", Спр);
    ПоследнееСостояние = РегистрыСведений.ИсторияИзмененияСвойствСерии.ПолучитьПоследнее(КонецДня(RecordSet.Fields.Item("TRAN_DATE").Value), Отбор);
    Если RecordSet.Fields.Item("DIRECTION").Value = 1 Тогда
    //Установка
    Если НЕ ПоследнееСостояние.Клиентское Тогда
    Спр1 = Спр.ПолучитьОбъект();
    Спр1.Клиентское = Истина;
    Спр1.КодКлиента = СокрЛП(КодКлиента);
    Спр1.ПоследнееИзменение = RecordSet.Fields.Item("TRAN_DATE").Value;
    Попытка
    Спр1.Записать();
    Исключение
    #Если Клиент Тогда
    Сообщить("!!!		Ошибка при записи пометки Серии за клиентом: " + ОписаниеОшибки());
    #КонецЕсли
    КонецПопытки;
    ИначеЕсли СокрЛП(Спр.КодКлиента) <> СокрЛП(КодКлиента) Тогда
    #Если Клиент Тогда
    Сообщить("!!!		ШК уже числится за клиентом " + СокрЛП(Спр.КодКлиента));
    #КонецЕсли
    Спр1 = Спр.ПолучитьОбъект();
    Спр1.КодКлиента = СокрЛП(КодКлиента);
    Спр1.ПоследнееИзменение = RecordSet.Fields.Item("TRAN_DATE").Value;
    Попытка
    Спр1.Записать();
    Исключение
    #Если Клиент Тогда
    Сообщить("!!!		Ошибка при записи пометки Серии за клиентом: " + ОписаниеОшибки());
    #КонецЕсли
    КонецПопытки;
    КонецЕсли;
    Иначе
    //Снятие
    Если НЕ ПоследнееСостояние.Клиентское Тогда
    Если СокрЛП(Спр.КодКлиента) <> СокрЛП(КодКлиента) Тогда
    #Если Клиент Тогда
    Сообщить("!!!		ШК числится за другим клиентом " + СокрЛП(Спр.КодКлиента));
    #КонецЕсли
    КонецЕсли;
    Спр1 = Спр.ПолучитьОбъект();
    Спр1.Клиентское = Ложь;
    Спр1.КодКлиента = "";
    Спр1.ПоследнееИзменение = RecordSet.Fields.Item("TRAN_DATE").Value;
    Попытка
    Спр1.Записать();
    Исключение
    #Если Клиент Тогда
    Сообщить("!!!		Ошибка при снятии пометки Серии за клиентом: " + ОписаниеОшибки());
    #КонецЕсли
    КонецПопытки;
    КонецЕсли;
    КонецЕсли;
    RecordSet.MoveNext();
    КонецЦикла;
    Иначе
    #Если Клиент Тогда
    Сообщить("	Выполнен запрос " + Запрос + " - записей о продаже оборудования нет");
    #КонецЕсли
    КонецЕсли;
    RecordSet.Close();
    Исключение
    #Если Клиент Тогда
    Сообщить("	Запрос " + Запрос + " не выполнен " + ОписаниеОшибки());
    #КонецЕсли
    КонецПопытки;
    DataBaseConnection.Close();
    КонецПроцедуры
    
    

Поделиться этой страницей