Имя: Пароль:
1C
1С v8
Продолжить выполнение обработки с момента на котором остановилась
0 who respawn
 
20.03.25
09:52
Привет, обработка меняет и перепроводит документы, данные берёт из экселя, т.е. человек запускает обработку, выбирает файл и пошла
Бывает, что случается конфликт блокировок и приходится обработку запускай заново, как можно сделать, чтобы обработка после неудачной попытки(из-за конфликта блокировок) продолжила со строки экселя, на которой остановилась?
1 Волшебник
 
20.03.25
09:54
Попытка...Исключение
2 Ненавижу 1С
 
гуру
20.03.25
09:58
(0) запоминать строку остановки
3 АнализДанных
 
20.03.25
09:59
(0) Как вариант в процессе записывать в "Хранилище общих настроек" служебную информацию, в которой содержится:
- имя файла
- номер обработанной строки

При запуске процедуры делать проверку, что если в хранилище есть информация об этом файле, и что номер строки там не равен последнему номеру, то задавать пользователю вопрос, что есть возможность продолжить со строки №ххх, "продолжить\начать сначала\Отмена"
4 Мультук
 
гуру
20.03.25
10:00
1) Данные из XSL импортируем в табличную часть
В табличную часть добавляем колонку ФлагПровелось булево
2) В цикле перебирая "строка" из табличной части проводим документы, не забывая Попытка...Исключение

3) При успешном проведении ставим
Строка.ФлагПровелось = Истина;

Дальше рассказывать ?
5 who respawn
 
20.03.25
10:15
Спасибо, пойду разбираться👍
6 Злоп
 
20.03.25
13:48
С такими тупыми вопросами разбираться с советами не надо. Надо валить из профессии программиста.
7 Волшебник
 
20.03.25
13:55
Для решения проблемы с конфликтами блокировок при перепроведении документов в 1С можно использовать следующий подход:

1. Хранение состояния обработки:
* При запуске обработки создайте переменную, которая будет хранить текущую строку Excel, которая обрабатывается.
* После обработки каждой строки обновляйте эту переменную.

2. Обработка исключений:
* Оберните код обработки документа в блок Попытка...Исключение. Если возникнет конфликт блокировок, сохраните состояние (номер строки) и завершите выполнение обработки.
* В этом блоке стоит проверить тип возникшей ошибки, чтобы отличить её от других возможных ошибок.

3. Перезапуск обработки:
* При следующем запуске обработки проверьте, сохранено ли состояние о предыдущем запуске.
* Если состояние сохранено, начните обработку с последней обработанной (или не обработанной при ошибке) строки.

4. Логирование:
* Введите логирование, чтобы сразу было видно, на каком шаге произошёл сбой. Это позволит легче отслеживать и диагностировать проблемы.

Пример кода обработки:
Перем ПоследняяОбработаннаяСтрока;

Процедура ОбработатьФайл(ФайлExcel)
    Для каждого Строка Из ФайлExcel Цикл
        Если Строка.Номер <= ПоследняяОбработаннаяСтрока Тогда
            Продолжить;
        КонецЕсли;

        Попытка
            // Код обработки документа
            ОбработатьДокумент(Строка);

            // Обновляем последнюю обработанную строку
            ПоследняяОбработаннаяСтрока = Строка.Номер;
            
        Исключение
            Если ТипОшибки = ОшибкаБлокировки Тогда
                // Сохранение состояния обработки
                ЗаписатьСостояние(ПоследняяОбработаннаяСтрока);
                Сообщить("Обработка остановлена из-за блокировки.");
                Прекратить;
            Иначе
                // Обработка других исключений
                Сообщить("Ошибка: " + ОписаниеОшибки());
                Прекратить;
            КонецЕсли;
        КонецПопытки;
    КонецЦикла;
    
    // Очистка состояния после успешного завершения
    УдалитьСостояние();
КонецПроцедуры

Процедура ОбработатьДокумент(Строка)
    // Реализация обработки строки
КонецПроцедуры

Процедура ЗаписатьСостояние(НомерСтроки)
    // Код для сохранения состояния, например в файл или в регистр сведений
КонецПроцедуры

Процедура УдалитьСостояние()
    // Код для удаления состояния, когда обработка завершена без ошибок
КонецПроцедуры



Таким образом, вы сможете возобновлять обработку с того места, где она остановилась из-за блокировки документов.