|
Новый элемент только что записан, но форма не закрывалась, как это программно уз | ☑ | ||
---|---|---|---|---|
0
Сметанин
25.10.11
✎
08:23
|
Всем привет.
В общем такая задача. В форме справочника есть кнопка, которая вызывает обработку, которая в свою очередь вносит изменения в табличную часть элемента справочника. Так вот, если запустить эту процедуру для существующего элемента, все работает нормально, а вот если создать новый элемент, записать его и вызвать обработку, выдается сообщение о блокировке. В связи с этим вопрос: как программно определить что элемент хоть и записан, но создан "только что"? Вариант закрывать форму элемента справочника не предлагать - при работе с обработкой пользователю нужно видеть ТЧ справочника. |
|||
1
Alex375
25.10.11
✎
08:25
|
Заведи реквизит в форме и устанавливай его в Истина/Ложь при открытии формы. Вот и будет тебе признак.
|
|||
2
Wobland
25.10.11
✎
08:26
|
а чем записанный "только что" элемент отличается от записанного "позавчера"?
|
|||
3
Irbis
25.10.11
✎
08:27
|
ЭтоНовый спасет тебя перед вызовом обработки
|
|||
4
Wobland
25.10.11
✎
08:28
|
(3) оно ж про записанный ложь скажет
|
|||
5
Рэйв
25.10.11
✎
08:29
|
(0)В любом месте модуля:
Если Ссылка.Пустая() Тогда // это новый, не записанный элемент Иначе //это записанный элемент КонецЕсли; |
|||
6
Irbis
25.10.11
✎
08:30
|
Конечно, скажет. Но если работа обработки для "свежезаписанного" и для "несвежезаписанного" различаются и вываливаются ошибки, проблема в hands.dll
|
|||
7
Сметанин
25.10.11
✎
08:41
|
(1) спасибо, попробую
(2) обработка по-разному реагирует |
|||
8
Wobland
25.10.11
✎
08:42
|
(7) я же строго про элементы справочника спросил.
|
|||
9
vmv
25.10.11
✎
08:45
|
СсылкаНового = Спрвочник.Клиенты.ПолучитьСсылку();
Мегаобработка.ОткрытьМодифицироватьНовыйЭлементПоСсылке(СсылкаНового); Если СсылкаНового.ПолучитьОбъект() = Неопределено Тогда Сообщить("Ы, нету"); КонецЕсли; |
|||
10
vmv
25.10.11
✎
08:46
|
тока установить ссылку нового в объект не забываем пр записи
это работает и в 8.1 и в 8.2, все остальное от лукавого |
|||
11
Сметанин
25.10.11
✎
08:46
|
"Только-что" - если создали новый, записали и сразу запустили обработку
"Позавчера" - если создали, записали, ЗАКРЫЛИ ФОРМУ, а потом открыли |
|||
12
Irbis
25.10.11
✎
08:48
|
(11) А если при создании и записи форму НЕ ОТКРЫВАЛИ обработка тоже работать не будет?
|
|||
13
Мимохожий Однако
25.10.11
✎
08:48
|
Закрой форму записанного справочника. В обработке поставь проверку на блокировку и не трогай,пока открыт.
|
|||
14
vmv
25.10.11
✎
08:48
|
привыкаем работать со СсылкаНового(), отвыкаем от объектов в 8.1 и прочих вольностей
|
|||
15
Сметанин
25.10.11
✎
08:53
|
(12) То есть программно создали элемент справочника? Не проверял.
(13)В (0) писал, что это неудобно. В том то все и дело, что если элемент записан "давно" открытая форма не мешает (9) Надо покурить над вашей идеей, я в 8 новичок |
|||
16
vmv
25.10.11
✎
08:59
|
(15) в чем неудобно в понимании, я сам на такие же грабли натыкался в 8.1 постоянно, пока не стал испольпользовать указанную выше методику.
все равно к этому придете, если будете писать на 8.2 да на 8.1 вариантов нет переменная объект которая висит у вас в модуле или в параметрах передачи будет "кривая" если объект модифицировать и записать и будет постоянная ругня на блокировку. не хотите понимать - дело ваше, все равно прийдеться стать на этот путь. ета все |
|||
17
Irbis
25.10.11
✎
09:00
|
(15) Если по нормальному, обработка твоя должна работать ОДИНАКОВО для любого элемента записанного в БД, причем время записи неважно.
|
|||
18
vmv
25.10.11
✎
09:03
|
(17) всяко бывет, при нестандартных загрузках/обменах и отношениях к объекту один-ко-многим, возможны ситуации можественной модификации объекта в несколльких точках и методах. посему лучше рабоать со ссылка нового и структурами значений полей - тогда все оке
|
|||
19
Irbis
25.10.11
✎
09:07
|
(17) Тебе тоже вопрос чем сслки "свежезаписанного" и "несвежезаписанного" отличаются и почему обработка при передаче в нее ссылки должна работать по разному?
|
|||
20
Сметанин
25.10.11
✎
09:13
|
(17) Еще раз себя проверил, все происходит именно так как я сразу написал
Вот, кстати текст сообщения об ошибке {Обработка.Пользователи.Форма.Форма(334)}: Ошибка при вызове метода контекста (Записать): Не удалось заблокировать запись. Действие (изменение, удаление или блокировка записи) не выполнено. Пользователь.Записать(); по причине: Не удалось заблокировать запись. Действие (изменение, удаление или блокировка записи) не выполнено. (16) платформа 8.0 ... |
|||
21
Сметанин
25.10.11
✎
09:27
|
(9) Может конечно, тупой вопрос, но если у меня написано
ФормаОбработки.РеквизитФИО = Ссылка; Как я должен написать по вашему методу? СсылкаНового = Спрвочники.Пользователи.ПолучитьСсылку(); Выдает "объект не найден" |
|||
22
Сметанин
25.10.11
✎
09:50
|
В общем применил способ (1). Работает как и требовалось.
Всем огромное спасибо за советы и обсуждение! |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |