Имя: Пароль:
1C
1С v8
Существует объект или нет.
,
0 MAnt
 
25.07.12
10:47
Как узнать существует объект в базе или нет?
При записи документа (процедуру перед записью нельзя использовать по религиозным соображениям) создается элемент справочника и присваивается реквизиту документа. Если пользователь проводит новый документ и документ не проводится, присходит откат транзации, элемент справочника не сохраняется, а в реквизите документа "Объект не найден". В процедуре обработка проведения пытаюсь узнать элемент справочника существует или нет, но никак не получается.
1 EasyRider
 
25.07.12
10:50
Реквизит.ПолучитьОбъект() сравнивать с Неопределено
2 vicof
 
25.07.12
10:53
ЭтоНовый?
3 MAnt
 
25.07.12
10:54
(2) Не подходит. Элемент справочника записан и прекрасно присваивается реквизиту документа.
4 MAnt
 
25.07.12
10:56
(1) Не работает. Возвращается нормальное значение. В запросах тоже получается получить значение.
5 Liova
 
25.07.12
10:56
Так в момент проведения элемент справочника есть в незафиксированной транзакции.
6 Liova
 
25.07.12
10:57
В порядке мозгового штурма: А если сделать запрос с ДЛЯ ИЗМЕНЕНИЯ?
7 pumbaEO
 
25.07.12
11:01
(6) какая разница, если у него транзакция отменяется в записи.
процедуру перед записью нельзя использовать по религиозным соображениям - Что за модное направление в религии?
8 Ненавижу 1С
 
гуру
25.07.12
11:03
>>процедуру перед записью нельзя использовать по религиозным соображениям
ваххабит?
9 rs_trade
 
25.07.12
11:04
(0) При записи документа создается элемент справочника...

франч?
10 MAnt
 
25.07.12
11:06
(7)(8) До моего прихода разработан механизм, позволяющий писать куски кода в пользовательском режиме. Этот код вызывается при записи или проведении. Туда уже много всего понаписано и менять никто не даст.
(9) Фикси.
11 MAnt
 
25.07.12
11:08
(6) Не сработало.
Похоже нужных методов.
12 pumbaEO
 
25.07.12
11:08
(10) т.е. добавить в справочник алгоритмы реквизит булево "ПередЗаписью" и подписку на событие и вызвать алгоритм в подписке религия не позволяет?
13 MAnt
 
25.07.12
11:11
(12) Добавление новых объектов в базу - это моветон и делать это нужно только в исключительных случаях.
14 pumbaEO
 
25.07.12
11:14
(13) добавление тонны кода для борьбы с ошибкой проектирования - вот это моветон. А естественное развитие, в вашем случаи эволюция конфигурации - это реальная жизнь.
15 IronDemon
 
25.07.12
11:16
После создания объекта проверить, если не создался - документ не записываем.


   Если Объект.НоменклатурнаяГруппа.Пустая() Тогда
       НовыйОбъект = Истина;
       СправочникОбъект = Справочники.НоменклатурныеГруппы.СоздатьЭлемент();
       СправочникОбъект.СтавкаНДС=Перечисления.СтавкиНДС.НДС20;
       СправочникОбъект.УстановитьНовыйКод();
   Иначе
       НовыйОбъект = Ложь;
       СправочникОбъект = Объект.НоменклатурнаяГруппа.ПолучитьОбъект();
   КонецЕсли;
   Если СправочникОбъект = Неопределено Тогда
       СтрокаСообщения = "Ошибка создания номенклатурной группы.";
       МассивСообщений.Добавить(СтрокаСообщения);
       Возврат;
   КонецЕсли;
16 MAnt
 
25.07.12
13:49
Получилось следущее: если проводится новый документ, то процедуры ПередЗаписью, ПриЗаписи, ОбработкаПроведения выполняются в одной транзации. Если какие-то действия делаются перед записью, в случае неудачного проведения они откатываются обратно. Платформа 8.2.15.310.