Имя: Пароль:
1C
1С v8
Блокировка записей регистра сведений
0 vovus
 
04.02.12
21:40
Хочется найти определенную строку в регистре и сразу же записать. При этом никто другой данную строку с помощью этой же функции получить не должен. У регистра 2 измерения: Владелец и СтрокаНомер и куча ресурсов.
Народ, подскажите, плиз, правильно ли я накладываю блокировки? И не будет ли каких косяков при исполнении данного кода?

Запрос =
"ВЫБРАТЬ тарам-там-там
|ИЗ
|    РегистрСведений.усСтрокиПриемки КАК усСтрокиПриемки
|ГДЕ тарам-там-там
|    И усСтрокиПриемки.СтатусВыполнено = &ПустаяДата
|
|ДЛЯ ИЗМЕНЕНИЯ
|    РегистрСведений.усСтрокиПриемки";
Запрос.УстановитьПараметр("ПустаяДата",'00010101');
НачатьТранзакцию();
Результат = Запрос.Выполнить();
ТЗ=Результат.Выгрузить();    
Если ТЗ.Количество()>1 Тогда
   Предупреждение("Найдено более одного владельца для данного штрихода!");
   ЗафиксироватьТранзакцию();
   Возврат Неопределено;
ИначеЕсли ТЗ.Количество()=1 Тогда
   НабЗаписей=РегистрыСведений.усСтрокиПриемки.СоздатьНаборЗаписей();
   НабЗаписей.Отбор.Владелец.Установить(ТЗ[0].Владелец);
   НабЗаписей.Отбор.СтрокаНомер.Установить(ТЗ[0].СтрокаНомер);
   НабЗаписей.Прочитать();
   НабЗаписей[0].СтатусВыполнено=ТекущаяДата();
   НабЗаписей.Записать();
   ЗафиксироватьТранзакцию();
   Возврат НабЗаписей;
Иначе
   ЗафиксироватьТранзакцию();
   тарам-там-там...
КонецЕсли;
1 aleks-id
 
04.02.12
21:46
странный код. я бы сказал неоднозначный...
лениво все косяки перечислять, но лучше его в топку.
2 acsent
 
04.02.12
21:50
а где владелец в запросе?
3 aleks-id
 
04.02.12
21:51
(2) видимо в ГДЕ тарам-там-там
4 vovus
 
04.02.12
21:52
(3) точно
5 vovus
 
04.02.12
21:52
(3) без ГДЕ только, он в полях запроса, где просто тарам-там-там
Основная теорема систематики: Новые системы плодят новые проблемы.