![]() |
|
Обход неявных блокировок | ☑ | ||
---|---|---|---|---|
0
Ginger_616
04.02.20
✎
14:06
|
Добрый день!
Суть задачи в том что в процедуре "ПриЗаписи" документа "ЗаказКлиента" если по определенным условиям Отказ становится равен Истина - делать запись об этом в определенный регистр сведений (режим записи - независимый). Так как "ПриЗаписи" работает в "неявной транзации", запись которую я формирую программно в регистр сведений откатывается. Вопрос: Каким образом можно решить такую ситуацию? |
|||
1
Ginger_616
04.02.20
✎
14:06
|
тему что-то криво написал, сори.
|
|||
2
vi0
04.02.20
✎
14:12
|
а что за задача прикладная? зачемп писать в регистр?
|
|||
3
Ginger_616
04.02.20
✎
14:19
|
В регистр необходимо фиксировать данные о том, что заказ не смог "влезть" в доставку.
Условно в день мы можем принять 1 тонну, принято 990 кг, поступил заказ на 200 кг, отвезти мы его уже не можем так как превышается лимит. Пользователю выводится сообщение с ошибкой, заказ не проводится. Информацию необходимо зафиксировать для того чтобы в дальнейшем отобразить ее в отчетах. |
|||
4
polosov
04.02.20
✎
14:32
|
Делай проверку и запись в ОбработкаПроверкиЗаполнения
|
|||
5
eTmy
04.02.20
✎
14:37
|
(4) могут быть уже не актуальные данные
|
|||
6
Вуглускр1991
04.02.20
✎
14:57
|
Переназначить кнопки запись и проведение. Сделать транзакцию явной. После чего в ветке с отменой транзакции начать новую с записью в этот регистр.
Потом, надо будет создать регистр в который писать отказы в записи в тот регистр Потом, надо будет создать регистр в который писать отказы в записи в тот регистр Потом, надо будет создать регистр в который писать отказы в записи в тот регистр Потом, надо будет создать регистр в который писать отказы в записи в тот регистр ... |
|||
7
vi0
04.02.20
✎
15:02
|
если эта работа исключительно в форме документа то можно сделать проверку ПередЗаписью формы
там транзакция еще не началась |
|||
8
Ginger_616
04.02.20
✎
15:27
|
(7) Все получилось после того как перенес свои проверки в модуль форму в процедуру передЗаписьюНаСервере. Спасибо! Буду тестировать!
Всем большое спасибо за помощь. |
|||
9
H A D G E H O G s
04.02.20
✎
15:36
|
(0)
Пиши в ФоновомЗадании |
|||
10
Ginger_616
05.02.20
✎
09:58
|
Уважаемые, в итоге сегодня я продолжил работу над задачей и понял что перенесение данного кода в модуль формы мне не подходит, т.к. необходимо чтобы механизм отрабатывал не только когда зашли в заказ и провели, а также когда он проводится из формы списка, любого рабочего места и т.д.
Взгрустнул. (9) В фоновом задании я не могу фиксировать момент, когда у нас заказ не влез в доставку. |
|||
11
toypaul
гуру
05.02.20
✎
10:12
|
в (4) же дали ответ https://its.1c.ru/db/pubdevguide83/content/612/hdoc
|
|||
12
toypaul
гуру
05.02.20
✎
10:13
|
правда обработка проверки может сработать не только при попытке записи
|
|||
13
artik2
05.02.20
✎
10:45
|
не пробовал, но возможно прокатит передать запись в регистр веб-сервису, опубликованного к этой же базе.
|
|||
14
1Садовник
05.02.20
✎
11:20
|
(10) //В фоновом задании я не могу фиксировать момент, когда у нас заказ не влез в доставку.
Почему? В "ПриЗаписи" ставишь условие ограничения, если оно срабатывает: Отказ = Истина и запускаешь фоновое задание на запись в РС с нужными параметрами. При откате транзакции, фоновое отработает. (11) Следует учитывать, что обработчик ОбработкаПроверкиЗаполнения вызывается не при каждой записи объекта, в частности, он не вызывается в случаях если запись были инициирована программно. - https://its.1c.ru/db/v8std#content:463:hdoc |
|||
15
Cyberhawk
05.02.20
✎
11:25
|
(3) "Пользователю выводится сообщение с ошибкой, заказ не проводится" // Вот в форме ПередЗаписьюНаСервере и делай
|
|||
16
vi0
05.02.20
✎
13:59
|
(14) только нужно дождаться успешного завершения фонового, чтобы убедиться что там все случилось как надо
|
|||
17
vi0
05.02.20
✎
14:05
|
Хотя ФЗ попахивает костылём
|
|||
18
vi0
05.02.20
✎
14:08
|
(3) "Пользователю выводится сообщение с ошибкой, заказ не проводится. Информацию необходимо зафиксировать для того чтобы в дальнейшем отобразить ее в отчетах."
А дальше что пользователь делает с заказом? |
|||
19
vi0
05.02.20
✎
14:08
|
(3) Типовая конфигурация? Какая? Какая версия?
|
|||
20
Cyberhawk
05.02.20
✎
14:13
|
(16) Технически это нереализуемо без внешнего контура контроля
|
|||
21
vi0
05.02.20
✎
14:15
|
(20) почему не реализуемо?
|
|||
22
Cyberhawk
05.02.20
✎
14:19
|
(21) Потому что ФЗ - увы - ненадежный механизм
|
|||
23
Tonik992
05.02.20
✎
14:45
|
Писать в файлик или во внешний сервис.
|
|||
24
vi0
05.02.20
✎
14:52
|
(22) в чем конкретно заключается ненадежность? Или ты ответишь как в ветке про инвестиции "может случиться что угодно"?
|
|||
25
fisher
05.02.20
✎
14:52
|
В транзакции невозможно писать в базу данных факт отмены транзакции.
Вариантов только два: либо писать не в транзакции, либо не в базу данных. Во всяком случае не в базу данных 1С. Из нативного - проще всего представляется писать в ЖР, а в регистр сведений перебрасывать по регламенту. |
|||
26
vi0
05.02.20
✎
14:53
|
Я спрашиваю про надёжность получения факта успешного завершения фз
|
|||
27
vi0
05.02.20
✎
14:55
|
Мне кажется решение нужно искать в технологии работы с документами, а не в технических хитростях
|
|||
28
fisher
05.02.20
✎
15:01
|
(27) Вопросы логирования - это как раз вопросы "технических хитростей", а не технологии работы с документами.
|
|||
29
vi0
05.02.20
✎
15:04
|
(28) ты чему это?
|
|||
30
vi0
05.02.20
✎
15:09
|
Под технологией я подразумеваю например подсистему формирования отгрузок в ут11 или в ерп. Где не нужно искать способ обойти транзакцию итп
|
|||
31
fisher
05.02.20
✎
15:24
|
(30) Простая задача. Мы хотим логировать события в том числе откатываемых транзакций. Абсолютно рядовое желание. Анализировать статистику ошибок, да мало ли что еще. Причем здесь вообще "технология работы с документами"? Это вообще не только документов касается. Из коробки для этих целей ЖР предназначен. Желание писать это в регистр сведений - это уже больше к задаче агрегации логов относится, чтобы выполнять необходимые анализы быстро и безболезненно. В мире "взрослого" программирования для этих целей выполняется локальное логирование в текстовые файлы, а сверху агрегаторы логов собирают уже по ним нужные данные в более удобные виды для дальнейшей обработки.
|
|||
32
Фауст
05.02.20
✎
15:24
|
(3) Не нужно устанавливать Отказ = Истина.
Делай свои проверки в процедуре модуля объекта ПередЗаписью() Если проверка не пройдена то: 1) РежимЗаписи = РежимЗаписиДокумента.Запись; 2) Записываешь инфу в твой регистр сведений 3) Выводишь сообщение пользователю |
|||
33
vi0
05.02.20
✎
15:30
|
(31) ты упрощаешь и не берешь во внимание весь процесс, а именно то, что поступивший заказ не был обработан
|
|||
34
vi0
05.02.20
✎
15:31
|
(33) + и вопрос там не про транзакции а про заказы и отгрузки
|
|||
35
ProxyInspector
05.02.20
✎
16:14
|
ПередЗаписью() запиши в регистр сведений информацию об ошибке
После проведения удали эти записи, если все прошло нормально |
|||
36
Cyberhawk
05.02.20
✎
16:28
|
(24) Отмена программно - без гарантии. Выполнение - тоже.
|
|||
37
Cyberhawk
05.02.20
✎
16:29
|
+(36) Выполнение = статус имеет выполнено, а по факту - код даже не выполнялся.
Поэтому нужен внешний контроль там, где нужна гарантия. |
|||
38
vi0
05.02.20
✎
16:52
|
(37) по какому факту? ты о чем? хотя можешь не отвечать, точнее отвечать не нужно.
|
|||
39
fisher
05.02.20
✎
17:30
|
(33) Возможно я не до конца понял изначальную задачу ТС и обобщил не в ту степь. Если у него в статусы заказов упирается и причины отказа, тогда это тупо реквизитами заказа можно завести и в ПередЗаписью все просчитывать.
|
|||
40
Вуглускр1991
05.02.20
✎
20:31
|
(39) Конфликт блокировок перед записью не просчитаешь.
|
|||
41
Сияющий в темноте
06.02.20
✎
01:28
|
а когда мы программно записываем,может оказаться,что у нас одна большая транзакция на все документы и тут отказ,и опа-и как будто и не начинали писать в базу.
|
|||
42
fisher
06.02.20
✎
10:10
|
(40) Так я тоже сначала повелся на то, что ТС нужна статистика отказов. А на самом деле он бизнес-процесс пытается выстроить. Читай (3)
|
|||
43
Вуглускр1991
06.02.20
✎
10:32
|
(42) Ты прав, ПередЗаписью.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |