Имя: Пароль:
1C
1С v8
Новый элемент только что записан, но форма не закрывалась, как это программно уз
,
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). Работает как и требовалось.
Всем огромное спасибо за советы и обсуждение!
AdBlock убивает бесплатный контент. 1Сергей