Имя: Пароль:
1C
1С v8
Вопрос по блокировкам (если можно так назвать)
0 Cmyk32
 
12.05.12
12:01
Добрый день!
У меня следующая проблема.

Есть отчет, который выводит список некоторых документов. В отчете есть колонка "Статус", через которую можно напрямую менять статус документа.
Возникает ситуация, когда руководитель формирует отчет и приступает к его обработке, а в этот момент один из менеджеров открывает свой документ, вносит изменения и сохраняет. В результате у руководителя в отчете неактуальная информация. Как запретить редактирование статуса, если документ был изменен?
1 Cmyk32
 
12.05.12
12:01
Или на крайний вариант заблокировать менеджерам изменение тех документов, которые выведены в отчет руководителю.
2 john_ddd
 
12.05.12
12:05
при изменении статуса через отчет переформировывать отчет программно
3 Cmyk32
 
12.05.12
12:06
(2) Не хочется всякий раз переформировывать отчет, если статус не менялся.
4 Cmyk32
 
12.05.12
12:06
(3) т.е. не статус, а другие данные документа
5 Cmyk32
 
12.05.12
12:08
Для (1) "ДЛЯ ИЗМЕНЕНИЯ" не срабатывает
6 john_ddd
 
12.05.12
12:09
сделать константу Переформировать отчет...при записи документа делать ее истина
а отчетом проверять ее изредка..и выводить предупреждение переформировать отчет
7 Нуф-Нуф
 
12.05.12
12:11
БлокировкаДанных (DataLock)
БлокировкаДанных (DataLock)
Элементы коллекции:

ЭлементБлокировкиДанных
Для объекта доступен обход коллекции посредством оператора Для каждого … Из … Цикл. При обходе выбираются элементы блокировки.
Возможно обращение к элементам блокировки посредством оператора [...]. В качестве аргумента передается индекс (нумерация с 0).

Методы:

Добавить (Add)
Заблокировать (Lock)
Количество (Count)
Получить (Get)

Конструкторы:

По умолчанию

Описание:

Предназначен для явной блокировки данных от чтения или изменения другими сессиями.

Доступность:

Сервер, толстый клиент, внешнее соединение.
Возможен обмен с сервером. Сериализуется.
Пример:

Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ТоварыНаСкладах");
ЭлементБлокировки.УстановитьЗначение("Качество", Справочники.Качество.НайтиПоКоду("1"));
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
ЭлементБлокировки.ИсточникДанных = ДокументОбъект.ВозвратнаяТара;
ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура");
ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Склад", "Склад");
8 Нуф-Нуф
 
12.05.12
12:11
блокируй документы которые выведены в отчет
9 Cmyk32
 
12.05.12
12:12
(6) Жуткий способ.
(7) То, что нужно! Спасибо тебе))
10 john_ddd
 
12.05.12
12:12
а мне нравиться мой извратный способ) чем блокировать доки отчетом...может он там будет целый день сидеть в отчете
11 Cmyk32
 
12.05.12
12:14
(10) ))))
12 Cmyk32
 
12.05.12
12:14
(8) Если я в СКД отчет формирую?
13 unregistered
 
12.05.12
12:15
В данные для отчета брать еще и версию данных.
При изменении документа руководителем сравнивать версию объекта в отчете с версией в базе данных. Если не соответствуют, то выводить сообщение руководителю с предложением переформировать отчет.
14 Нуф-Нуф
 
12.05.12
12:15
(12) формируй скд программно и перед выводом блокируй документы
15 Cmyk32
 
12.05.12
12:16
(13) Мне тоже нравится) но не знаю как не "мазолить" глаза пользователей лишней колонкой с версией?
16 ptiz
 
12.05.12
12:17
(0) "через которую можно напрямую менять статус документа."
Так при записи нового статуса проверяй - не был ли он изменен.
17 Cmyk32
 
12.05.12
12:19
(16) Как проверять?
18 john_ddd
 
12.05.12
12:22
(16) хороший способ
19 Нуф-Нуф
 
12.05.12
12:23
будь мужиком! заблокируй документы, блеать!
20 Cmyk32
 
12.05.12
12:23
(18) Да, но как проверять?
21 Cmyk32
 
12.05.12
12:24
(19) Если это мне, то эээ... проблематично и дорого)
22 Нуф-Нуф
 
12.05.12
12:26
(21) хм... в чем проблематика и какова цена в твоем понимании? :)
23 john_ddd
 
12.05.12
12:27
в процедуре обработкаРасшифровки сравнивай статус в документе и статус в отчете
24 Cmyk32
 
12.05.12
12:30
(23) Поняла. Я некорректно поставила задачу.
Статус может менять только руководитель. А менеджер - другие реквизиты документа. При этом при изменении статуса руководителем важно, чтобы в отчете отображались актуальные данные.
25 john_ddd
 
12.05.12
12:34
(24) тогда способ с константой больше подходит)
26 Cmyk32
 
12.05.12
12:35
(25) )))) Не, не уговоришь) Тогда версию данных)
27 john_ddd
 
12.05.12
12:41
если версионирование включено то можно)
28 ptiz
 
12.05.12
13:12
(26) Да, сравнивай и ругайся "обновите отчет - данные устарели".
29 azernot
 
12.05.12
13:20
Заводим что-то типа константы "Отчёт актуален"
После выполнения запроса в отчёте устанавливаем "ОтчетАктуален = Да".
При записи документов устанавливаем "ОтчетАктуален = нет".
При любых действиях пользователя в отчёте периодически проверяем, актуален ли отчёт, и если нет - предлагаем обновить данные.
30 azernot
 
12.05.12
13:21
+(29) Тьфу блин, ровно тот же велосипед в (6)...
31 john_ddd
 
12.05.12
13:54
ы)
32 Cmyk32
 
12.05.12
13:58
(29) Это "некрасивое" решение. Поскольку из 10000 документов только 1 может быть изменен. Не хочется весь отчет заново формировать. При том, что как раз в этом 1 документе статус может и не меняться.