Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
28 июн 2025, 13:09

Регламентные задания

Автор Gio, 12 июн 2025, 15:30

0 Пользователей и 1 гость просматривают эту тему.

Gio

Всем привет, Я хочу создать регламентные задания для автоматического обновления записей. Я добавил новый Общий модуль и я экспортировал все процедуры из другого старого объектного модуля, где этот процесс работал (у меня не было неопределенной переменной)

Когда я вызываю эту процедуру из другой формы, данные отправляются в файл электронной таблицы на моем компьютере. Когда я вызываю эту процедуру из регламентные задания, процесс завершается без ошибок, но записи не создаются. У меня в регламентные задании та же процедура, что и в другой форме, который работает.

Общий модуль имеет следующие свойства: сервер; внешнее соединение; клиент (обычный вызов сервера)

(На этом этапе я экспортирую записи в файл электронной таблицы для тестирования, а затем планирую отправить записи в другую программу через веб-сервис.)

Процедура _WS_inventar_exporti2() Экспорт

    WSПараметры = ПолучитьWSПараметры(Перечисления.WS.inventar_exporti);

    ОС = ПолучитьОС();
    Счетчик = 0;
    Выборка = Новый Массив;

    Пока ОС.Следующий() Цикл
        Счетчик = Счетчик + 1;
        Выборка.Добавить(Новый Структура(
            "name,group,Inv_number,price,Purchase_date,department,department_code,responsible,last_move_date",
            ОС.name, ОС.group, ОС.Inv_number, ОС.price, ОС.Purchase_date,
            ОС.department, ОС.department_code, ОС.responsible, ОС.last_move_date
        ));
    КонецЦикла;

    Сообщить(" ПолучитьОС(): " + Строка(Счетчик));

    Таблица = Новый ТаблицаЗначений;
    Таблица.Колонки.Добавить("Inv_number");
    Таблица.Колонки.Добавить("name");
    Таблица.Колонки.Добавить("group");
    Таблица.Колонки.Добавить("price");
    Таблица.Колонки.Добавить("Purchase_date");
    Таблица.Колонки.Добавить("department");
    Таблица.Колонки.Добавить("department_code");
    Таблица.Колонки.Добавить("responsible");
    Таблица.Колонки.Добавить("last_move_date");

    КолвоДобавленных = 0;
    Лимит = 10;

    Для Каждого Стр Из Выборка Цикл
        СтрокаТаблицы = Таблица.Добавить();
        СтрокаТаблицы.Inv_number = Стр.Inv_number;
        СтрокаТаблицы.name = Стр.name;
        СтрокаТаблицы.group = Стр.group;
        СтрокаТаблицы.price = Стр.price;
        СтрокаТаблицы.Purchase_date = Стр.Purchase_date;
        СтрокаТаблицы.department = Стр.department;
        СтрокаТаблицы.department_code = Стр.department_code;
        СтрокаТаблицы.responsible = Стр.responsible;
        СтрокаТаблицы.last_move_date = Стр.last_move_date;

        КолвоДобавленных = КолвоДобавленных + 1;
        Если КолвоДобавленных >= Лимит Тогда
            Прервать;
        КонецЕсли;
    КонецЦикла;

    Сообщить("✅ Elements were actually added: " + Строка(КолвоДобавленных));

    Попытка
        Каталог = "C:\Temp\";
        ИмяФайла = Каталог + "Inventar_export_log_TEST10_SIMPLE.csv";

        ТекстовыйДокумент = Новый ТекстовыйДокумент;

        // Заголовок
        СтрокаЗаголовка = "";
        Для НомерКолонки = 1 По Таблица.Колонки.Количество() Цикл
            ИмяКолонки = Таблица.Колонки[НомерКолонки - 1].Имя;
            Если НомерКолонки > 1 Тогда
                СтрокаЗаголовка = СтрокаЗаголовка + ";";
            КонецЕсли;
            СтрокаЗаголовка = СтрокаЗаголовка + ИмяКолонки;
        КонецЦикла;
        ТекстовыйДокумент.ДобавитьСтроку(СтрокаЗаголовка);

        // Строки
        Для НомерСтроки = 1 По Таблица.Количество() Цикл
            СтрокаТаблицы = Таблица.Получить(НомерСтроки - 1);
            СтрокаCSV = "";
            Для НомерКолонки = 1 По Таблица.Колонки.Количество() Цикл
                ИмяКолонки = Таблица.Колонки[НомерКолонки - 1].Имя;
                Если НомерКолонки > 1 Тогда
                    СтрокаCSV = СтрокаCSV + ";";
                КонецЕсли;
                ЗначениеЯчейки = СтрокаТаблицы[ИмяКолонки];
                Если ТипЗнч(ЗначениеЯчейки) = Тип("Дата") Тогда
                    ЗначениеЯчейки = Формат(ЗначениеЯчейки, "ДФ='yyyy-MM-dd'");
                КонецЕсли;
                СтрокаCSV = СтрокаCSV + """" + Строка(ЗначениеЯчейки) + """";
            КонецЦикла;
            ТекстовыйДокумент.ДобавитьСтроку(СтрокаCSV);
        КонецЦикла;

        ТекстовыйДокумент.Записать(ИмяФайла);
        Сообщить("✅ Export to CSV file completed: " + ИмяФайла);

    Исключение
        Сообщить("‼️ Error while writing to CSV: " + ОписаниеОшибки());
    КонецПопытки;
   

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

Эта процедура работает при вызове из основной формы.

основная форма:

Процедура ОсновныеДействияФормыВыполнять(Кнопка)

Структура = Новый Структура("Период,WS,Комментарий,ДатаНачала,ДатаКонец");

Комментарий = "";


Комментарий = "";

Если Флажок_inventar_exporti Тогда

ДатаНачала = ТекущаяДата();
Структура.WS         = Перечисления.WS.inventar_exporti;
Структура.Период     = ДатаНачала;
Структура.ДатаНачала = ДатаНачала;

WS_РегламентныеЗадания._WS_inventar_exporti2();

Структура.Комментарий = Комментарий;
Структура.ДатаКонец   = ТекущаяДата();

WS_РегламентныеЗадания.WSИстория(Структура);

КонецЕсли;

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

Регламентные задания:

Процедура ВыполнитьРегламентноеЗадание(ПараметрыВыполнения = Неопределено) Экспорт


Если Не ЗначениеЗаполнено(ПараметрыВыполнения) Тогда
        ПараметрыВыполнения = Новый Структура;
    КонецЕсли;


    Структура = Новый Структура("Период,WS,Комментарий,ДатаНачала,ДатаКонец");
    ДатаНачала = ТекущаяДата();
    Комментарий = "";

    Структура.Период     = ДатаНачала;
    Структура.ДатаНачала = ДатаНачала;
    Структура.WS         = Перечисления.WS.inventar_exporti;

    Попытка
      WS_РегламентныеЗадания._WS_inventar_exporti2();
    Исключение
        Комментарий = "Error: " + ОписаниеОшибки();
    КонецПопытки;

    Структура.Комментарий = Комментарий;
    Структура.ДатаКонец   = ТекущаяДата();

    WS_РегламентныеЗадания.WSИстория(Структура);
     
КонецПроцедуры

последняя процедура для регламентные задания находится в том же модуле, где находится первая процедура.

Где ошибка? Может ли быть так, что фоновая задача не может выполнить поиск в папке и, следовательно, не может записать данные, но на самом деле может отправить их через веб-сервис?

antoneus

База клиент-серверная?

Optiman

Что в журнале после выполнения рег. задания показывает?

Denis1010

Могу предположить, что регламентное задание падает в ошибку (во время попытки), которая у вас имеется в коде. Попробуйте сам файл во временное хранилище поместить, и дальше уже через него обрабатывать его. У вас там попытка в попытке, если 2 попытка не отработает, то 1 может отработать без ошибки, поэтому рег.зад и не видит что есть проблемы. Но опять же, могу ошибаться, прям сильно в код не вникал

antoneus

Ставлю на то, что регламент записывает файл на сервере, а ОП его на клиенте ищет.

Denis1010

Скорее всего так и есть, для быстрой проверки можно в принципе убрать все попытки, тогда думаю и выпадет рег.заданию ошибка о ненайденном файле

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск