Вход | Регистрация



Последовательность действий, вешающая 1С в режиме предприятий

Последовательность действий, вешающая 1С в режиме предприятий
Я
   toypaul
 
06.12.18 - 17:08
Не 100% что это повторится в любой форме, но ...

ПередЗаписью
-> ПоказатьВопрос(ОповещениеВопроса), Отказ = Истина (отказ от записи)
--> ОповещениеВопроса (обработка данных объекта)
---> Записать
----> ПередЗаписью (повторный вызов события, но уже Отказ = Ложь)

после выхода из этого события получаем крах 1С.

ладно бы зациклилось, но не зацикливается.

и как быть? как правильно Записать вызвать?
 
 
   Полбатона
 
1 - 06.12.18 - 17:10
зачем записывать перед записью?
отказ от записи только в случае отказ при вопросе
   toypaul
 
2 - 06.12.18 - 17:12
(1) я не записываю перед записью. я записываю в оповещении.
   Полбатона
 
3 - 06.12.18 - 17:12
зачем? в оповещении надо делать только отказ
   toypaul
 
4 - 06.12.18 - 17:13
алгоритм такой

1) перед записью проверяем все хорошо или нет. если плохо спрашиваем юзера, он отвечает - "сделай хорошо и запиши". я делаю хорошо и записываю.
   toypaul
 
5 - 06.12.18 - 17:13
(3) какой отказ в оповещении? ты о чем вообще?
   Полбатона
 
6 - 06.12.18 - 17:14
(4) шо ты умничаешь, слушай что тебе дядя говорит
    Создать в форме переменную, которая будет хранить ответ пользователя при ее закрытии,
    Если ответа получено еще не было (переменная содержит Неопределено), то в обработчике ПередЗакрытием нужно показать окно выбора пользователю, например, при помощи метода ПоказатьВопрос() и прервать закрытие формы, установив Отказ=Истина,
    В процедуре-обработчике выбора следует установить переменной результат выбора и вызвать метод Закрыть() формы,
    Если переменная содержит какое-либо значение, то это значит, что идет процесс закрытия, инициированный на предыдущем шаге, результат выбора от пользователя уже получен и обработчик ПередЗакрытием может использовать его значение.
   PR
 
7 - 06.12.18 - 17:14
Что это?
   Полбатона
 
8 - 06.12.18 - 17:15
Стаж: 14 лет 3 месяца 25 дней 
Рукалицо
   toypaul
 
9 - 06.12.18 - 17:16
(6) где я про закрытии писал? очнись
   Очевидно
 
11 - 06.12.18 - 17:19
(9) я может не понимаю чего-то, но почему вы спрашиваете пользователя "Перед записью" - транзакция уже открыта ... какие диалоговые окна ?! все проверки должны происходить до этих процедур...
   toypaul
 
13 - 06.12.18 - 17:20
(11) какая транзакция открыта в ПриЗаписи на клиенте в управляемой форме?
   Вафель
 
17 - 06.12.18 - 17:26
(11) нет, не открыта
   Вафель
 
18 - 06.12.18 - 17:26
если просто крах - то это глюк платформы. попробуй на версии посвежее/постарее
   Полбатона
 
19 - 06.12.18 - 17:27
(18) это не глюк платформы, это глюк хромосомы у топикстартера
   Вафель
 
20 - 06.12.18 - 17:27
но лучше свою кнопку записи сделать
   Вафель
 
21 - 06.12.18 - 17:27
(19) крах платформы - это всегда глюк
   toypaul
 
22 - 06.12.18 - 17:27
Может я алгоритм непонятно написал?

пользователь жмакает Записать или Провести или Провести и закрыть. дальше мы проверяем - все ли хорошо в документе. если все хорошо, ничего не делаем (отрабатывает запись). если плохо, спрашиваем пользователя - у тебя плохо, исправить? может ответить нет, тогда просто отказ от записи. может ответить исправить, тогда исправляем и записываем (с тем же режимом что он и жмакнул).

последовательность событий как я это сейчас делаю я написал. эта последовательность крэшит 1С. вот думаю как правильно Записать сделать ...

свои кнопки Записи лень писать.

(17) вот именно что транзакция позже открывается. по-моему если в форме то начиная с ПриЗаписиНаСервере.
   Очевидно
 
23 - 06.12.18 - 17:28
(13) честно говоря выглядит как некий велосипед, но раз уж такой путь избран ... видимо должна быть какой-то реквизит на форме, который при записи должен хранить значения "Отказ" при записи ... при первом вызове он типа Истина, а после вопроса устанавливать в ложь ..
(17) да , я понял , я пропустил, что речь об форме, мне показалось что речь про модуль объекта ...
   toypaul
 
24 - 06.12.18 - 17:28
(20) дэк не охота ... Записать, Провести, Провести и закрыть. лень :)
   Вафель
 
25 - 06.12.18 - 17:29
(23) в модуле аналогично
   Полбатона
 
26 - 06.12.18 - 17:29
(23) в БП 3 работает именно так.
http://catalog.mista.ru/public/372973/
   toypaul
 
27 - 06.12.18 - 17:30
(23) почитай (22). где тут велосипед?

можно конечно сделать некрасиво ... по-моему как в типовых и делается. исправить, но не записывать и пусть юзер второй раз сам жмакает.

попробовать что ли через обработчик ожидания. почему-то помнится, что уже было такое.

(19) ты все еще здесь что ли? не осилил вопрос все еще?
   Очевидно
 
28 - 06.12.18 - 17:34
(25) нет, в модуле не так ...
ИЗ СП про "Перед записью":
Возникает перед выполнением записи объекта. Процедура-обработчик вызывается после начала транзакции записи, но до начала записи документа.
   toypaul
 
29 - 06.12.18 - 17:38
придется свои кнопки рисовать ... про Провести и закрыть я не подумал ...
   Полбатона
 
30 - 06.12.18 - 17:38
(29) как же я был прав.
   Очевидно
 
31 - 06.12.18 - 17:40
(27) ИМХО про велосипед: Думаю проверка должна происходить в обработчике "ОбработкаПроверкиЗаполненияНаСервере" и если что-то не так - выдавать ошибку ...
если пользователь хочет "Всё исправить" у него должна быть кнопка "Всё исправить" ... чтобы это был осознанный клик ...

Но если идти по вашему пути, думаю "Своя кнопка" - будет лучше...
   PR
 
32 - 06.12.18 - 17:41
(4) Перед записью спрашиваем юзера?
Паша, срочно заканчивай говнокодить, ужас же
   Полбатона
 
33 - 06.12.18 - 17:43
(32) в типовой бухне такого полно
 
 
   toypaul
 
34 - 06.12.18 - 17:43
(32) ну а где еще спрашивать-то? если не рисовать свои кнопки?
   toypaul
 
35 - 06.12.18 - 17:44
в принципе сейчас код рабочий. нужно только одну кнопку "Провести и записать" сделать.

вопрос-то с другого начинался. какого 1С падает? вроде ничего криминального.
   youalex
 
36 - 06.12.18 - 17:49
(34) рисовать свои кнопки - это один из вариантов на ИТС:
https://its.1c.ru/docs/v8nonmodal/#25
   Полбатона
 
37 - 06.12.18 - 17:50
(36) автор принципиально не читает ИТС. Он выше этого де..ма
   PR
 
38 - 06.12.18 - 18:21
(33) В стандартном обработчике ПередЗаписью выполняется ПоказатьВопрос?
Брешешь, я так понимаю :))
   Ник080808
 
39 - 06.12.18 - 18:25
(38) в форме на клиенте разве нет?
   Ник080808
 
40 - 06.12.18 - 18:26
(34) ОбработкаПроверкиЗаполненияНаСервере как говорит (31)
   PR
 
41 - 06.12.18 - 18:29
(39) Форму подскажешь в типовой БП?
Любую первую попавшуюся, думаю, это несложно, раз их полно
   Вафель
 
42 - 06.12.18 - 18:47
(40) как ты вопрос задашь на сервере?
   Ник080808
 
43 - 06.12.18 - 19:03
(41) а, вы о БП)
   PR заднеприводнёнкин
 
44 - 06.12.18 - 19:23
(41) документ Платежное поручение, Ром.
   PR
 
45 - 06.12.18 - 20:07
(43) Я о (26)
   toypaul
 
46 - 07.12.18 - 08:21
Я если честно так и не понял в чем говнокод вызвать ПоказатьВопрос из клиентского метода?

это вообще-то единственный вариант в случае когда юзер жмакает Закрыть в модифицированной форме и потом Записать. тут уже никакие "свои" кнопки не помогут.

а про "лучи добра" в каментах из статьи я согласен. но не согласен с тем что мы в ПередЗаписью не знаем что хотел юзер. знаем, но не все - не знаем только хотел он Закрыть форму или нет. вот если бы был такой параметр в этом событии - вообще не было бы вопросов
   toypaul
 
47 - 07.12.18 - 10:11
Оказалось что причина краха 1С не в вызове второй раз метода Записать. А в параметрах этого метода.

Вот такая фигня туда передавалась
ПараметрыКонтроля = Новый Структура;
ПараметрыКонтроля.Вставить("ПараметрыЗаписи", ПараметрыКонтроля);

ПараметрыКонтроля("ЧтоТо", ЧтоТо);

Записать(ПараметрыКонтроля.ПараметрыЗаписи);

вот эта строчка вешала систему
ПараметрыКонтроля.Вставить("ПараметрыЗаписи", ПараметрыКонтроля);
   PR
 
48 - 07.12.18 - 10:17
(46) Ужасно, но у 1С действительно используется такая конструкция
На что только не пойдешь ради асинхронных вызовов
   PR
 
49 - 07.12.18 - 10:18
(47) ПараметрыКонтроля.Вставить("ПараметрыЗаписи", ПараметрыКонтроля)?
То есть ты в структуру в одно из значений вставляешь эту же струтуру и ждешь, что не будет рекурсии?
 
 Рекламное место пустует
   toypaul
 
50 - 07.12.18 - 10:36
(49) это была ошибка.

правильно было

ПараметрыКонтроля.Вставить("ПараметрыЗаписи", ПараметрыЗаписи);


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует