![]() |
|
Порядок проведения влияет на упр блокировку | ☑ | ||
---|---|---|---|---|
0
break
28.02.14
✎
10:36
|
взвел конфу и нужные объекты в режим управляемых блокировок. Прописал в документе следующий код
Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.Детали"); ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; ЭлементБлокировки.УстановитьЗначение("Деталь", Деталь); ЭлементБлокировки.УстановитьЗначение("Партия", Партия); Блокировка.Заблокировать(); Движение = Движения.Детали.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Период = Дата; Движение.Деталь = Деталь; Движение.Партия = Партия; Движение.Количество = Количество; Предупреждение("1"); Движения.Детали.Записать(); Предупреждение("2"); //проверяем на отриц остатки Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ДеталиОстатки.КоличествоОстаток КАК Количество |ИЗ | РегистрНакопления.Детали.Остатки( | &ТочкаИтогов, | Деталь = &Деталь | И Партия = &Партия) КАК ДеталиОстатки |ГДЕ | ДеталиОстатки.КоличествоОстаток < 0"; Запрос.УстановитьПараметр("Подразделение", Участок); Запрос.УстановитьПараметр("Партия", Партия); Запрос.УстановитьПараметр("Деталь", Деталь); Запрос.УстановитьПараметр("Состояние",Перечисления.СостоянияДеталей.Контроль); Запрос.УстановитьПараметр("ТочкаИтогов", Новый Граница(МоментВремени(), ВидГраницы.Включая)); //далее код проверки остатков теперь если провести документ №1 с партией №1 И деталью №1 от 20.02.14, остановиться на предупреждение №2, а потом потом провести документ №2 с партией №2 И деталью №1 от 21.02.14, то док №2 проводится. Если же поменять порядок проведения док-ов (застопорить док №2, провести док №1), то док №1 отваливается с таймаутом ожидания на запросе получения отрицательных остатков. Не могу понять, почему так происходит, пространство блокировок ведь разное. База на MSSQL 2008. |
|||
1
break
28.02.14
✎
10:38
|
".., а потом потом провести документ №2 с партией №2 И деталью №1 ..." => опечатка читать как "..., а потом потом провести документ №2 с партией №2 И деталью №2.."
|
|||
2
ptiz
28.02.14
✎
10:42
|
ПЕРЕпроведение тут не мешается? Удаление движений - не автоматическое?
|
|||
3
break
28.02.14
✎
10:44
|
да я перепровожу, удаление - Удалять автоматически при отмене проведения
|
|||
4
ptiz
28.02.14
✎
10:45
|
(3) Переписывай на ручное удаление движений. См. как в типовых.
|
|||
5
ptiz
28.02.14
✎
10:45
|
Сначала можешь убедиться, что при проведении (не ПЕРЕпроведении) всё работает как надо.
|
|||
6
break
28.02.14
✎
10:47
|
(5) да при проведении все отрабатывает, перед установкой блокировки такой код
Движения.Детали.Записывать = Истина; Движения.Детали.Очистить(); Блокировка = Новый БлокировкаДанных; |
|||
7
break
28.02.14
✎
10:54
|
установил свойство "Удаление движений" в Не удалять автоматически, все равно блокируется
|
|||
8
ptiz
28.02.14
✎
11:03
|
(6) Не так.
Так ты движения из базы не удалил и при запросах они будут мешать. Сделай так: Движения.Детали.Очистить(); Движения.Детали.Записать(); |
|||
9
GROOVY
28.02.14
✎
11:22
|
Тут объект блокировка не нужен. Достаточно указать
Движения.Детали.БлокироватьДляИзменения = Истина; |
|||
10
GROOVY
28.02.14
✎
11:24
|
Движения.Детали.Очистить();
Движения.Детали.Записывать = Истина; Движения.Детали.БлокироватьДляИзменения = Истина; Движение = Движения.Детали.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Период = Дата; Движение.Деталь = Деталь; Движение.Партия = Партия; Движение.Количество = Количество; Движения.Записать(); Запрос = Новый Запрос; ... |
|||
11
break
28.02.14
✎
12:03
|
(8) не сработало ((
(10) а регистр тогда должен быть с включенным разделителем итогов? сейчас он выключен и использование Движения.Детали.БлокироватьДляИзменения = Истина; все равно дает "Превышено время ожидания запроса на блокировку" |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |