#0
by Tateossian
Уважаемые форумчане! Столкнулся со следующей проблемой. В некой функции строю дерево партий (из партионного учета) со всеми цепочками преобразований (через отчеты производства за смену, комплектации) - некий локальный расчет себестоимости. Переделал разузлование на фоновых заданиях, которые запускаются при уровне выше второго. Но во время работы фоновых заданий есть таблица, которая хранит в себе данные "цепочек" - с документом оприходования и документом списания и количеством. Данные в ней должны быть синхронизированы: сначала я читаю данные в этой таблице, потом записываю. Эта таблица сделана на непериодическом РС. И постоянно фоновые задания падают на методе Прочитать. Как правильно разруливать блокировку? Там таблица из трех записей, вот же ж. И все равно падает.
#2
by Tateossian
Это обрезанная функция, не обращайте внимания на параметр "ТаблицаНакопленных". Вся эта механизма работает в рекурсии. Функция "НакопитьДвижение" вызывается из функции, где перед этим идет вот такой блок: ... То есть, я сначала читаю остаток в этом регистре, потом его дописываю. Излишняя блокировка получается.
#3
by Tateossian
Убрал процедуру НакопитьДвижение и засунул все сюда ... КонецПроцедуры Все равно падает...
#9
by Tateossian
Апну ветку. Господа! Я не уточнил, что это все делается в обработке проведения. Если эту функцию вывести отдельно, то все работает без проблем. Вопрос: почему в обработке проведения фоновые задания блокируются? У документа режим управления блокировкой выставил в управляемый.
#10
by bolobol
Твою стипендию! С этого и начинать нужно было! Сам себе заблокировал в транзакции проведения, а другим сеансом накладываешь тоже самое.
#13
by Fragster
Глобальный контекст (Global context) УстановитьВремяОжиданияБлокировкиДанных (SetLockWaitTime) Синтаксис: УстановитьВремяОжиданияБлокировкиДанных(<Таймаут>) Параметры: Тип: Число. Время ожидания блокировки данных (в секундах). Значение по умолчанию: 20 Описание: Устанавливает время ожидания блокировки данных (в секундах). Доступность: Сервер, толстый клиент, внешнее соединение.
#14
by Tateossian
В том-то и загвоздка, что фоновым заданиям вообще пофиг на проводимую реализацию в родительском сеансе. Если убрать этот регистр, то фоновые задания отрабатываются нормально. Это регистр нужен для синхронизации данных, отрабатываемых разными фоновыми заданиями. Я тестировал без него - никаких проблем с блокировками. Выходит, вся проблема в данном регистре, но в родительском сеансе к нему нет обращений. ЧЯДНТ?
#15
by Fragster
документ подичиненый регистратору? удаление движений авто? в регистр пишешь в "родительском" сеансе?
#16
by Tateossian
В смысле регистр? Не, неподчиненный. В родительском этот регистр вообще не используется. Кстати, заметил, что результаты, выполненные в одном потоке и асинхронно различаются. Не сильно, но разница есть. Походу, ошибка в логике где-то :(
#17
by Fragster
надеюсь, ты в обработке проведения не дожидаешься конца выполнения фоновых, а только их стартуешь, а уже они разруливают формирование движений и слитие результатов?
#18
by Fragster
концепт такой: обработка проведения -> старт фонового задания 1 фоновое задание 1 - делим данные на независимые порции, стартуем фоновые задания 2...К на каждую порцию или не более чем Х штук в цикле пока порции не закончатся. ждем окончания Фоновые задания 2...К пишут в независимый регистр результаты своей работы фоновое задание 1 - собирает результаты, очищает регистр-буфер, записывает набор движений исходного документа.
#19
by Tateossian
ААААА, понял. У меня нет этого "прокси" - фонового задания 1. Кстати, можно подключить обработчик ожидания (имхается мне) и там стартануть все это дело. Но вот вопрос: а если будет эксепшн, как этот вопрос разрулить? (Движения тогда не запишутся)
#20
by Fragster
Синтаксис: ОжидатьЗавершения(<ФоновыеЗадания>, <Таймаут>) Параметры: Тип: Массив. Массив фоновых заданий, завершение которых нужно ожидать. Тип: Число. Таймаут в секундах ожидания завершения заданий. Если таймаут не задан, ожидание будет длиться до завершения всех заданий, или до первого аварийного завершения задания. Описание: Ожидает завершения всех фоновых заданий из списка. Если хотя бы одно задание завершено аварийно, ожидание прерывается и выдается ошибка выполнения задания. Если наступил таймаут, выдается ошибка ожидания задания. Ожидать завершения заданий может только администратор или пользователь, запустивший задания на выполнение. Доступность: Сервер, толстый клиент, внешнее соединение.
#22
by Tateossian
Я как раз эту процедуру юзаю в обработке проведения. Если она выполнится, тогда отрабатываю данные, если "отваливается" провожу без фоновых заданий. Так вот после добавления этого регистра, обеспечивающего синхронизацию - она всегда отваливается. Даже одно фоновое задание нельзя запустить. Почему так?
#25
by Fragster
ну ты видимо юзаешь какие-то заблокированные ресурсы из незакрытой транзакции записи-проведения документа, и при этом сам себе дедлок делаешь
#26
by Tateossian
Ок, я понял. А как проверить, что фоновое задание отработало нормально? Видится мне мне, что что-то вроде Пока Не проведенПравильно Цикл завернуть в попытку, а при исключении проведенПравильно = ложь и так до бесконечности:) Или ограничиться несколькими попытками и вывести в ЖР.
#27
by Fragster
в обработке проведения пиши в регистр ключ задания номер 1, в конце фонового задания пиши в регистр успех или косяк, далее - обрабатывай, либо в самом задании (при необходимости отменяй проведение, например), либо в обработке ожидания. также передзаписью документа можно этот регистр проверять и блокировать. И в списке документов раскрашивать сереньким, допустим.
#28
by Fragster
+ только в случае косяка - надо не совсем отменять, а восстанавливать предыдущее состояние, что немного сложнее
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
- Регламентные и фоновые задания задания
- На каком сервере выполняются фоновые задания?
- Регламентные задания (фоновые задания) права
- Сложение времени и сортировка по времени
- Как убить фоновые задания на 8.3 в клиент - серверном варианте работы
- Фоновые задания для мобильных приложений
- Откуда берутся фоновые задания
- Регламентные и фоновые задания
- БП. Превышено максимальное время ожидания предоставления блокировки
- Фоновые задания БП 3.0. Не успевают выполняться
- Фоновые задания. Недопустимое состояние объекта
В этой группе 1С
- Клиент 1с 8.3.4 сам закрывается во время работы.
- Как получить данные из регистра сведений ?
- как на 1с 8.1 увеличить шрифт
- УТ11 Программное создание сертификата номенклатуры
- Чем можно посмотреть результат запроса SQL microsoft ?
- Неявный запрос к БД при проведении
- 1С Розница 2 - задать розничные цены оприходованным по инвентаризации товарам
- СКД. Почему не получает данных следующей строки через "ВычислитьВыражение"?
- Сменный график работы в ЗУП 2.5
- Неизвестный идентификатор формы
- v7: Ошибка при формировании записей книги-покупок
- Получить и использовать настройку отбора компоновки данных
- openconf 1с 7.7
- Закрытие месяца в ЕРП 2.0
- УТ 11. При открытии формы "ФормаДокументаМастер" чека ККМ выдает ошибку
- Обновление измененной УПП
- Ошибка SDBL пропущена точка с запятой pos=25
- скд, графики, горизонтально
- таблица в формате mxl
- ЗУП 2.5 Постоянное удержание в начислении зарплаты в качестве исполн. листа.