Имя: Пароль:
1C
1С v8
Реализовываю блокировку, возник вопрос правильности проверки, подскажите
0 razbiralshik
 
16.07.13
16:04
Впервые в жизни решил реализовать блокировку, тестирую.
У конфигурации - Режим управления блокировкой данных: Автоматический и управляемый.
У документа и регистра накопления - Режим управления блокировкой данных: Управляемый.

1. Пробовал так
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
   БлокировкаДанных = Новый БлокировкаДанных;
   ЭлементБлокировки = БлокировкаДанных.Добавить("РегистрНакопления.ОстаткиТоваров");
   ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
   ЭлементБлокировки.УстановитьЗначение("Склад", Склад);
   ЭлементБлокировки.ИсточникДанных = Товары;
   ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура");
   БлокировкаДанных.Заблокировать();
   
   Движения.ОстаткиТоваров.Записывать = Истина;
   Для Каждого ТекСтрокаТовары Из Товары Цикл
       Движение = Движения.ОстаткиТоваров.Добавить();
       Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
       Движение.Период = Дата;
       Движение.Номенклатура = ТекСтрокаТовары.Номенклатура;
       Движение.Склад = Склад;
       Движение.Количество = ТекСтрокаТовары.Количество;
   КонецЦикла;
КонецПроцедуры


2. Пробовал так
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
   Движения.ОстаткиТоваров.Записывать = Истина;
   Остатки = ПолучитьОстатки();
   Если НЕ Остатки.Количество() = 0 Тогда
       Для Каждого ТекСтрокаТовары Из Остатки Цикл
           Движение = Движения.ОстаткиТоваров.Добавить();
           Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
           Движение.Период = Дата;
           Движение.Номенклатура = ТекСтрокаТовары.Номенклатура;
           Движение.Склад = Склад;
           Движение.Количество = ТекСтрокаТовары.Количество;
       КонецЦикла;
   КонецЕсли;
КонецПроцедуры

Функция ПолучитьОстатки()
   Запрос = Новый Запрос;
   Запрос.Текст =
   "ВЫБРАТЬ
   |    ОстаткиТоваровОстатки.Номенклатура,
   |    ОстаткиТоваровОстатки.Склад,
   |    ОстаткиТоваровОстатки.КоличествоОстаток КАК Количество
   |ИЗ
   |    РегистрНакопления.ОстаткиТоваров.Остатки КАК ОстаткиТоваровОстатки
   |
   |ДЛЯ ИЗМЕНЕНИЯ
   |    РегистрНакопления.ОстаткиТоваров.Остатки";
   Результат = Запрос.Выполнить().Выгрузить();
   Возврат Результат;
КонецФункции


Тестировал двумя способами:
1.
Открываю два предприятия под разными юзверями, открываю два разных документа одного типа (Реализация товаров), нажимаю провести в одном документе, пока один не проводится, второй висит, потом отвисает. Остатки после проведения верные.

2. Открываю два предприятия под разными юзверями,открываю в одном предприятии реализацию товаров, нажимаю провести, во время проведения, открываю другую реализацию в другом предприятии, но она не открывается, пишется что: не удалось заблокировать таблицу document 21.


В обоих случаях так и должно происходить или у меня не пашет блокировка или в чем фишка, разъясните новичку в этом деле пожалуйста?
1 Fragster
 
гуру
16.07.13
16:06
2 способ в режиме управляемых блокировок не работает
2 Fragster
 
гуру
16.07.13
16:07
а у тебя - косяк какой-то в открытии - ибо таблица документа блокируется, а не таблица регистра
3 razbiralshik
 
16.07.13
16:10
(2) тестировал двумя способами обе реализации блокировки..., т.е. и 1 и 2 способ выдает "не удалось заблокировать таблицу document 21", если открыть во время проведения...
4 razbiralshik
 
16.07.13
16:31
Никто не подскажет?
5 Reaper_1c
 
16.07.13
16:43
В студию приглашаются: значение свойства "очищать автоматически" регистра, порядок измерений в регистре и название СУБД.
6 razbiralshik
 
16.07.13
16:49
СУБД - MSSQLSERVER.
Порядок измерений в регистре - Номенклатура, Склад.
А по поводу "очищать автоматически", ты имеешь ввиду это? Документ - Движения - Удаление движений - Удалять автоматически при отмене проведения.
7 razbiralshik
 
16.07.13
17:42
Жаль что никто не знает...
8 Fragster
 
гуру
16.07.13
17:48
(7)->(2)
9 razbiralshik
 
16.07.13
17:52
Блокировку убрал,, даже весь код убрал, такая же фигня вылазит, видимо в платформе дело, как считаете?
10 Fragster
 
гуру
16.07.13
17:53
(9) при открытии что у тебя происходит-то?
11 razbiralshik
 
16.07.13
17:53
Ставишь точку останову в одному предприятии, в другом просто открываешь документ, пока висит в отладке и вот такая вот фигня...
12 Fragster
 
гуру
16.07.13
17:54
(11) в коде пир откртии, перед открытием, при создании на сервере у тебя что?????
13 razbiralshik
 
16.07.13
17:54
(10) ничего, кода нет никакого. может дело в этом (11) ?
14 razbiralshik
 
16.07.13
17:55
(12) да ничего нету, при проведении только пустая процедура чтобы точку останова можно было поставить