|
Последовательность действий, вешающая 1С в режиме предприятий | ☑ | ||
---|---|---|---|---|
0
toypaul
гуру
06.12.18
✎
17:08
|
Не 100% что это повторится в любой форме, но ...
ПередЗаписью -> ПоказатьВопрос(ОповещениеВопроса), Отказ = Истина (отказ от записи) --> ОповещениеВопроса (обработка данных объекта) ---> Записать ----> ПередЗаписью (повторный вызов события, но уже Отказ = Ложь) после выхода из этого события получаем крах 1С. ладно бы зациклилось, но не зацикливается. и как быть? как правильно Записать вызвать? |
|||
1
Полбатона
06.12.18
✎
17:10
|
зачем записывать перед записью?
отказ от записи только в случае отказ при вопросе |
|||
2
toypaul
гуру
06.12.18
✎
17:12
|
(1) я не записываю перед записью. я записываю в оповещении.
|
|||
3
Полбатона
06.12.18
✎
17:12
|
зачем? в оповещении надо делать только отказ
|
|||
4
toypaul
гуру
06.12.18
✎
17:13
|
алгоритм такой
1) перед записью проверяем все хорошо или нет. если плохо спрашиваем юзера, он отвечает - "сделай хорошо и запиши". я делаю хорошо и записываю. |
|||
5
toypaul
гуру
06.12.18
✎
17:13
|
(3) какой отказ в оповещении? ты о чем вообще?
|
|||
6
Полбатона
06.12.18
✎
17:14
|
(4) шо ты умничаешь, слушай что тебе дядя говорит
Создать в форме переменную, которая будет хранить ответ пользователя при ее закрытии, Если ответа получено еще не было (переменная содержит Неопределено), то в обработчике ПередЗакрытием нужно показать окно выбора пользователю, например, при помощи метода ПоказатьВопрос() и прервать закрытие формы, установив Отказ=Истина, В процедуре-обработчике выбора следует установить переменной результат выбора и вызвать метод Закрыть() формы, Если переменная содержит какое-либо значение, то это значит, что идет процесс закрытия, инициированный на предыдущем шаге, результат выбора от пользователя уже получен и обработчик ПередЗакрытием может использовать его значение. |
|||
7
PR
06.12.18
✎
17:14
|
Что это?
|
|||
8
Полбатона
06.12.18
✎
17:15
|
Стаж: 14 лет 3 месяца 25 дней
Рукалицо |
|||
9
toypaul
гуру
06.12.18
✎
17:16
|
(6) где я про закрытии писал? очнись
|
|||
11
Очевидно
06.12.18
✎
17:19
|
(9) я может не понимаю чего-то, но почему вы спрашиваете пользователя "Перед записью" - транзакция уже открыта ... какие диалоговые окна ?! все проверки должны происходить до этих процедур...
|
|||
13
toypaul
гуру
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) крах платформы - это всегда глюк
|
|||
22
toypaul
гуру
06.12.18
✎
17:27
|
Может я алгоритм непонятно написал?
пользователь жмакает Записать или Провести или Провести и закрыть. дальше мы проверяем - все ли хорошо в документе. если все хорошо, ничего не делаем (отрабатывает запись). если плохо, спрашиваем пользователя - у тебя плохо, исправить? может ответить нет, тогда просто отказ от записи. может ответить исправить, тогда исправляем и записываем (с тем же режимом что он и жмакнул). последовательность событий как я это сейчас делаю я написал. эта последовательность крэшит 1С. вот думаю как правильно Записать сделать ... свои кнопки Записи лень писать. (17) вот именно что транзакция позже открывается. по-моему если в форме то начиная с ПриЗаписиНаСервере. |
|||
23
Очевидно
06.12.18
✎
17:28
|
(13) честно говоря выглядит как некий велосипед, но раз уж такой путь избран ... видимо должна быть какой-то реквизит на форме, который при записи должен хранить значения "Отказ" при записи ... при первом вызове он типа Истина, а после вопроса устанавливать в ложь ..
(17) да , я понял , я пропустил, что речь об форме, мне показалось что речь про модуль объекта ... |
|||
24
toypaul
гуру
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/ |
|||
27
toypaul
гуру
06.12.18
✎
17:30
|
(23) почитай (22). где тут велосипед?
можно конечно сделать некрасиво ... по-моему как в типовых и делается. исправить, но не записывать и пусть юзер второй раз сам жмакает. попробовать что ли через обработчик ожидания. почему-то помнится, что уже было такое. (19) ты все еще здесь что ли? не осилил вопрос все еще? |
|||
28
Очевидно
06.12.18
✎
17:34
|
(25) нет, в модуле не так ...
ИЗ СП про "Перед записью": Возникает перед выполнением записи объекта. Процедура-обработчик вызывается после начала транзакции записи, но до начала записи документа. |
|||
29
toypaul
гуру
06.12.18
✎
17:38
|
придется свои кнопки рисовать ... про Провести и закрыть я не подумал ...
|
|||
30
Полбатона
06.12.18
✎
17:38
|
(29) как же я был прав.
|
|||
31
Очевидно
06.12.18
✎
17:40
|
(27) ИМХО про велосипед: Думаю проверка должна происходить в обработчике "ОбработкаПроверкиЗаполненияНаСервере" и если что-то не так - выдавать ошибку ...
если пользователь хочет "Всё исправить" у него должна быть кнопка "Всё исправить" ... чтобы это был осознанный клик ... Но если идти по вашему пути, думаю "Своя кнопка" - будет лучше... |
|||
32
PR
06.12.18
✎
17:41
|
(4) Перед записью спрашиваем юзера?
Паша, срочно заканчивай говнокодить, ужас же |
|||
33
Полбатона
06.12.18
✎
17:43
|
(32) в типовой бухне такого полно
|
|||
34
toypaul
гуру
06.12.18
✎
17:43
|
(32) ну а где еще спрашивать-то? если не рисовать свои кнопки?
|
|||
35
toypaul
гуру
06.12.18
✎
17:44
|
в принципе сейчас код рабочий. нужно только одну кнопку "Провести и записать" сделать.
вопрос-то с другого начинался. какого 1С падает? вроде ничего криминального. |
|||
36
youalex
06.12.18
✎
17:49
|
(34) рисовать свои кнопки - это один из вариантов на ИТС:
https://its.1c.ru/docs/v8nonmodal/#25 |
|||
37
Полбатона
06.12.18
✎
17:50
|
(36) автор принципиально не читает ИТС. Он выше этого де..ма
|
|||
38
PR
06.12.18
✎
18:21
|
(33) В стандартном обработчике ПередЗаписью выполняется ПоказатьВопрос?
Брешешь, я так понимаю :)) |
|||
39
Ник080808
06.12.18
✎
18:25
|
(38) в форме на клиенте разве нет?
|
|||
40
Ник080808
06.12.18
✎
18:26
|
(34) ОбработкаПроверкиЗаполненияНаСервере как говорит (31)
|
|||
41
PR
06.12.18
✎
18:29
|
(39) Форму подскажешь в типовой БП?
Любую первую попавшуюся, думаю, это несложно, раз их полно |
|||
42
Вафель
06.12.18
✎
18:47
|
(40) как ты вопрос задашь на сервере?
|
|||
43
Ник080808
06.12.18
✎
19:03
|
(41) а, вы о БП)
|
|||
44
PR заднеприводнёнкин
06.12.18
✎
19:23
|
(41) документ Платежное поручение, Ром.
|
|||
45
PR
06.12.18
✎
20:07
|
(43) Я о (26)
|
|||
46
toypaul
гуру
07.12.18
✎
08:21
|
Я если честно так и не понял в чем говнокод вызвать ПоказатьВопрос из клиентского метода?
это вообще-то единственный вариант в случае когда юзер жмакает Закрыть в модифицированной форме и потом Записать. тут уже никакие "свои" кнопки не помогут. а про "лучи добра" в каментах из статьи я согласен. но не согласен с тем что мы в ПередЗаписью не знаем что хотел юзер. знаем, но не все - не знаем только хотел он Закрыть форму или нет. вот если бы был такой параметр в этом событии - вообще не было бы вопросов |
|||
47
toypaul
гуру
07.12.18
✎
10:11
|
Оказалось что причина краха 1С не в вызове второй раз метода Записать. А в параметрах этого метода.
Вот такая фигня туда передавалась ПараметрыКонтроля = Новый Структура; ПараметрыКонтроля.Вставить("ПараметрыЗаписи", ПараметрыКонтроля); ПараметрыКонтроля("ЧтоТо", ЧтоТо); Записать(ПараметрыКонтроля.ПараметрыЗаписи); вот эта строчка вешала систему ПараметрыКонтроля.Вставить("ПараметрыЗаписи", ПараметрыКонтроля); |
|||
48
PR
07.12.18
✎
10:17
|
(46) Ужасно, но у 1С действительно используется такая конструкция
На что только не пойдешь ради асинхронных вызовов |
|||
49
PR
07.12.18
✎
10:18
|
(47) ПараметрыКонтроля.Вставить("ПараметрыЗаписи", ПараметрыКонтроля)?
То есть ты в структуру в одно из значений вставляешь эту же струтуру и ждешь, что не будет рекурсии? |
|||
50
toypaul
гуру
07.12.18
✎
10:36
|
(49) это была ошибка.
правильно было ПараметрыКонтроля.Вставить("ПараметрыЗаписи", ПараметрыЗаписи); |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |