![]() |
![]() |
|
1С:Предприятие
:: 1С:Предприятие 8 общая
|
|
| ||
Franchiser 26.03.19 - 20:09 | Хочу при открытии обработки установить блокировку на регистр накопления и снять её после закрытия обработки. Как это сделать? | ||
H A D G E H O G s 1 - 26.03.19 - 20:14 | Зачем? | ||
Franchiser 2 - 26.03.19 - 20:18 | Планирую в обработке заполнить ТЧ записями регистра с номером записи, и потом по номеру записи выполнить исправление отдельных записей . | ||
Franchiser 3 - 26.03.19 - 20:19 | В типовой обработке дат запрет изменения это как то реализовано. | ||
H A D G E H O G s 4 - 26.03.19 - 20:19 | Ну обычным способом не получится, только упр. блокировка на время вызова. | ||
H A D G E H O G s 5 - 26.03.19 - 20:20 | Необычно - создать справочник с препопределенными значениями и блокировать их | ||
Franchiser 6 - 26.03.19 - 20:20 | Блокировки я умею ставить в транзакции, а эту блокировку нужно как то к уид формы привязать. | ||
H A D G E H O G s 7 - 26.03.19 - 20:21 | Попытка
ЗаблокироватьДанныеДляРедактирования(Справочники.АСФОбъектыБлокировки.ОбменСOmobus);
Исключение
Ошибка=ИнформацияОбОшибке();
ОписаниеОшибки=Ошибка.Причина.Описание;
СтруктураВозврата=Новый Структура;
СтруктураВозврата.Вставить("Результат",Ложь);
СтруктураВозврата.Вставить("ОписаниеОшибки","Обработка заблокирована и не будет запущена во избежание дублирования загрузки: "+ОписаниеОшибки);
ЕстьОшибкаБлокировки=Истина;
КонецПопытки; | ||
H A D G E H O G s 8 - 26.03.19 - 20:22 | Если надо привязать к форме - там есть 3 параметр на УИД | ||
H A D G E H O G s 9 - 26.03.19 - 20:22 | ЗаблокироватьДанныеДляРедактирования (LockDataForEdit)Синтаксис: ЗаблокироватьДанныеДляРедактирования(<Ключ>, <ВерсияДанных>, <ИдентификаторФормы>) | ||
Franchiser 10 - 26.03.19 - 20:23 | (5) не, справочник я не буду делать. Мне чисто для интереса. Сейчас у меня сделана блокировка на набор записей | ||
Cyberhawk 11 - 26.03.19 - 20:23 | (7) Ну это сработает только если в других местах тоже такая договоренность имеется (пытаться заблокировать элемент справочника) | ||
Franchiser 12 - 26.03.19 - 20:25 | (9) это позволяет блокировать весь регистр, без указания ключа ? | ||
H A D G E H O G s 13 - 26.03.19 - 20:25 | |||
H A D G E H O G s 14 - 26.03.19 - 20:26 | (12) Нет. В документации видно, что может являться ключом блокировки | ||
Franchiser 15 - 26.03.19 - 20:28 | Ладно, потом посмотрю как сделали в обработке редактирования дат запрета, что нельзя писать в другом сеансе в регистр дат запрета. Они как то через ВХ блокировки передают. | ||
H A D G E H O G s 16 - 26.03.19 - 20:37 | (15) Через КлючЗаписи РС ДатыЗапретаИзменения и ЗаблокироватьДанныеДляРедактирования() | ||
Franchiser 17 - 26.03.19 - 20:39 | Да нашел:
&НаСервереБезКонтекста Процедура РазблокироватьВсеЗаписиНаСервере(АдресУстановленныхБлокировок) Блокировки = ПолучитьИзВременногоХранилища(АдресУстановленныхБлокировок); ЗначенияКлючаЗаписи = Новый Структура("Раздел, Объект, Пользователь"); Попытка Индекс = Блокировки.Состав.Количество() - 1; Пока Индекс >= 0 Цикл ЗаполнитьЗначенияСвойств(ЗначенияКлючаЗаписи, Блокировки.Состав[Индекс]); КлючЗаписи = РегистрыСведений.ДатыЗапретаИзменения.СоздатьКлючЗаписи(ЗначенияКлючаЗаписи); РазблокироватьДанныеДляРедактирования(КлючЗаписи, Блокировки.ИдентификаторФормы); Блокировки.Состав.Удалить(Индекс); Индекс = Индекс - 1; КонецЦикла; Исключение ПоместитьВоВременноеХранилище(Блокировки, АдресУстановленныхБлокировок); ВызватьИсключение; КонецПопытки; ПоместитьВоВременноеХранилище(Блокировки, АдресУстановленныхБлокировок); КонецПроцедуры &НаСервереБезКонтекста Функция ЗаблокироватьЗаписьНаСервере(ОписаниеКлючаЗаписи, АдресУстановленныхБлокировок) Блокировки = ПолучитьИзВременногоХранилища(АдресУстановленныхБлокировок); ЗначенияКлючаЗаписи = Новый Структура("Раздел, Объект, Пользователь"); ЗаполнитьЗначенияСвойств(ЗначенияКлючаЗаписи, ОписаниеКлючаЗаписи); КлючЗаписи = РегистрыСведений.ДатыЗапретаИзменения.СоздатьКлючЗаписи(ЗначенияКлючаЗаписи); ЗаблокироватьДанныеДляРедактирования(КлючЗаписи, , Блокировки.ИдентификаторФормы); БлокировкаДобавлена = Ложь; Если Блокировки.Состав.НайтиСтроки(ЗначенияКлючаЗаписи) = 0 Тогда ЗаполнитьЗначенияСвойств(Блокировки.Состав.Добавить(), ЗначенияКлючаЗаписи); БлокировкаДобавлена = Истина; КонецЕсли; ПоместитьВоВременноеХранилище(Блокировки, АдресУстановленныхБлокировок); Возврат БлокировкаДобавлена; КонецФункции | ||
Franchiser 18 - 26.03.19 - 20:45 | (16) с регистрами сведений понятно.
А для регистров накопления ЗаблокироватьДанныеДляРедактирования работает? | ||
Cyberhawk 19 - 26.03.19 - 20:47 | (13) Насчет "никак" это ты погорячился. Что мешает удерживать транзакцию сколько нужно (например, внутри нее крутить цикл с условием выхода)? | ||
H A D G E H O G s 20 - 26.03.19 - 20:48 | (19) Ясное и незамутненное мутотней восприятие реальности. | ||
H A D G E H O G s 21 - 26.03.19 - 20:49 | (18) Вряд ли, в СП только РС. Но, если у вас получится, напишите сюда. | ||
Franchiser 22 - 26.03.19 - 21:02 | Можно попробовать установить блокировку на регистраторы.
Вот пример с ИТС: &НаСервере Функция ПримерМодификации() ТоварСсылка = Справочники.Товары.НайтиПоКоду("000000001"); Попытка ЗаблокироватьДанныеДляРедактирования(ТоварСсылка);  // Можно выполнять модификацию данных объекта  // ... ТоварОбъект = ТоварСсылка.ПолучитьОбъект(); ТоварОбъект.Наименование = "Новое наименование"; ТоварОбъект.Записать(); Возврат Истина; Исключение  // Нельзя модифицировать данные объекта Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Данные объекта уже заблокированы"; Сообщение.Сообщить(); Возврат Ложь; КонецПопытки; КонецФункции | ||
palsergeich 23 - 26.03.19 - 21:11 | (19) а то что потом люди что бы как то работать в базе ставят ожидание 600 секунд.
Прямо сейчас я в такой базе копаюсь, у меня просто горит, а самое главное, то что там наху..верчено, совершенно бессмысленно. | ||
palsergeich 24 - 26.03.19 - 21:12 | Я не говорю что это невозможно, но архитектурное решение под эту задачу выбрано неверно. У одного обработка открыта, он пошел пить чай, остальные работать не могут.
Круче только вопрос в обработке проведения задавать. | ||
palsergeich 25 - 26.03.19 - 21:14 | (22) уже лучше, но все равно не торт | ||
palsergeich 26 - 26.03.19 - 21:18 | Но объектная блокировка - это последнее дело. | ||
palsergeich 27 - 26.03.19 - 21:24 | Самый тупой способ реализации этой задачи:
Создается РС. при старте обработки он заполняется. При закрытии как то очищается. + Подписка на событие записи этого регистра. отказ, когда такая запись в служебном регистре есть. Нормально этот регистр будет пустой, влияние на производительность должно быть минимальным. | ||
Franchiser 28 - 26.03.19 - 21:25 | Да у меня вообще разовая обработка, не буду я регистры создавать | ||
palsergeich 29 - 26.03.19 - 21:25 | (28) Все вы так говорите | ||
palsergeich 30 - 26.03.19 - 21:27 | А потом эта разовая обработка вызывается раз в 5 минут, вся база в управляемых блокировках, таймаут 600 секунд выкручен.
В таком виде мне одна база досталась вчера. Рекламное место пустует | ||
Cyberhawk 31 - 26.03.19 - 21:27 | (24) "У одного обработка открыта, он пошел пить чай, остальные работать не могут" // Так это ж "проектное решение" из сабжа - пока обработка открыта | ||
Cyberhawk 32 - 26.03.19 - 21:28 | Чем отличается плане невозможности работы других от (27) - хз | ||
palsergeich 33 - 26.03.19 - 21:28 | (31) Ну дык установи монопольный режим и не ипи мозги)
В БСП же ща шикарная выгонялка, одному в базе остаться - 2 клика | ||
Franchiser 34 - 26.03.19 - 21:29 | я блокирую только документ операция определенного типа, загруженные автоматически, их никто и не открывает кроме меня | ||
Cyberhawk 35 - 26.03.19 - 21:30 | А зачем тебе блокировать при открытии, а не при нажатии кнопки, когда собственно что-то и начнет происходить? | ||
palsergeich 36 - 26.03.19 - 21:30 | (32) тем что при этом сценарии не будет эскалации на управляемой блокировки, что при большом количестве регистраторов словить как нечего делать | ||
palsergeich 37 - 26.03.19 - 21:31 | (34) Монопольный режим чем не устраивает?
Просто ты блокируешь конкретные записи, а сервер раз и эскалацию на все пространство имен захотел и наложил. | ||
Franchiser 38 - 26.03.19 - 21:32 | На форме обработки есть ТЧ, которая будет заполнена данными регистра и номерами записей регистра. За время заполнения ТЧ и нажатия кнопки исправления регистра есть время когда что-то может быть кем-то испорчено в теории. | ||
palsergeich 39 - 26.03.19 - 21:32 | Я в 8.2 ловил эскалацию на 2000 записей, хотя по мануалам это число должно быть куда как больше. | ||
Cyberhawk 40 - 26.03.19 - 21:32 | (38) Ну так после нажатия кнопки проверь, что ничего не испорчено | ||
palsergeich 41 - 26.03.19 - 21:33 | (40) Кстати да | ||
Franchiser 42 - 26.03.19 - 21:33 | (40) ну ок, нет так нет | ||
Franchiser 43 - 26.03.19 - 21:34 | (41) ну что, ну предположим испорчено, тогда ошибка. А я хочу блокировку. Такой вариант я тоже сейчас учитываю. | ||
Franchiser 44 - 26.03.19 - 21:37 | Я не прошу помощи в реализации, а интересно можно ли сделать блокировку регистра накопления при открытии формы обработки без транзакций или нет. | ||
palsergeich 45 - 26.03.19 - 21:38 | |||
palsergeich 46 - 26.03.19 - 21:40 | Уточню транзакция без блокировки возможна, а блокировка без транзакции - нет.
Костыль с объектной блокировкой - это не настоящая блокировка просто) она своим названием вводит в заблуждение) | ||
Franchiser 47 - 26.03.19 - 21:41 | А как же блокировка по ключу записи регистра сведений? | ||
palsergeich 48 - 26.03.19 - 21:41 | (47) ну наложи ее вне транзакции, попробуй | ||
Franchiser 49 - 26.03.19 - 21:45 | (48) я не говорю про объект Блокировка. | ||
palsergeich 50 - 26.03.19 - 21:46 | (49) а про что? | ||
Franchiser 51 - 26.03.19 - 21:54 | (50) про метод глобального контекста ЗаблокироватьДанныеДляРедактирования(). | ||
palsergeich 52 - 26.03.19 - 21:57 | |||
palsergeich 53 - 26.03.19 - 21:58 | Просто запись что под таким то сеансом такой то идентификатор такой то версии захвачен.
Отваливается сеанс и только дергать сервер, для того что бы с этим объектом работать снова можно было) | ||
palsergeich 54 - 26.03.19 - 22:00 | Они кстати на обучении говорят что для объектной блокировки слово блокировка зря выбрали. Очень много у неокрепших умов путаницы из-за этого.
Но мануалы написаны, а фарш обратно не провернешь | ||
Garykom 55 - 26.03.19 - 22:04 | (38) Забей и делай просто пост контроль, после исправления регистра.
Если кем то испорчено то откатывайся и снова. | ||
palsergeich 56 - 26.03.19 - 22:05 | (55) Согласен, по мне самый разумный вариант. | ||
Franchiser 57 - 26.03.19 - 22:29 | |||
Garykom 58 - 26.03.19 - 22:35 | (57) Тебе блокировать надо от исправления старых документов которые проводки/записи сделали или от новых? | ||
Franchiser 59 - 26.03.19 - 23:33 | (58) Старых |
|
Список тем форума
|
Правила | Описание | Реклама на форуме | Волшебные решения | Поиск | Секции | Рейтинг | Книга знаний | Вики-миста (КЗ2) | Мобильная | Архив | Модераторы | Галерея | Регистрация | 18+ |