Имя: Пароль:
     
1C
1С v8
Вопрос знатокам КД, ПКС ПометкаУдаления
0 ProDeveloper
 
09.11.12
11:23
Вопрос такой - есть правила обмена, писались на КД 2.1.6.4, есть ПКО Контрагенты, никаких обработчиков на ПКО не висит, в ПКС есть ПометкаУдаления в свойствах ПКС стоит птица "Не замещать значения свойства у существующих объектов в приемнике", поведение обмена меня удивило:
1 вариант - В источнике Контрагент помечен на удаление, в приемнике не помечен на удаление, обмен отработал как надо, необходимые реквизиты в приемнике записались, пометка удаления была не тронута.
2 вариант (более интересный) - В источнике Контрагент не помечен на удаление, в приемнике помечен на удаление, после обмена, необходимые реквизиты в приемнике записались, но пометка на удаление почему то в приемнике была снята.
Игрался птицей "Объекты, выгруженные по ссылке, загружать без пометки удаления" на странице загрузки в обработке V8Exchan - Универсальный обмен данными в формате XML 2.1.6 не помогло, попытки сделать через обработчик "ПослеЗагрузки" в ПКО Контрагенты также не увенчались успехом.

Если ОбъектНайден Тогда
   Объект.УстановитьПометкуУдаления(Ссылка.ПометкаУдаления);
КонецЕсли;

Возникает ошибка - "Ошибка при вызове метода контекста (УстановитьПометкуУдаления): Операция не может быть выполнена, так как данные объекта модифицированы!"

Кто-нибудь сталкивался с такой проблемой?
1 ProDeveloper
 
09.11.12
11:33
up
2 Йохохо
 
09.11.12
11:33
ДокументОбъект.<Имя документа> (DocumentObject.<Имя документа>)
УстановитьПометкуУдаления (SetDeletionMark)
Синтаксис:

УстановитьПометкуУдаления(<ПометкаУдаления>)
Параметры:

<ПометкаУдаления> (обязательный)

Тип: Булево.
Признак установки / снятие пометки на удаление.
Истина - пометка будет установлена; Ложь - пометка будет снята.
Описание:

Устанавливает/снимет пометку на удаление документа. Документ при этом не удаляется из базы данных. Окончательное удаление помеченных документов происходит при удалении помеченных объектов.

Доступность:

Сервер, толстый клиент, внешнее соединение.
Примечание:

Применение метода влечет инициирование события ПередЗаписью, т.к. происходит сохранение измененного свойства ПометкаУдаления.
Если документ проведен, применение метода приводит к отмене проведения.
Если объект модифицирован, то выполнение метода вызывает исключение.
3 ProDeveloper
 
09.11.12
11:36
(2) норм копипаст из СП, молодец)
4 mikecool
 
09.11.12
11:38
"Возникает ошибка - "Ошибка при вызове метода контекста (УстановитьПометкуУдаления): Операция не может быть выполнена, так как данные объекта модифицированы!" " - попробуй Записать() перед установкой пометки
5 ProDeveloper
 
09.11.12
11:39
Кто нить разбирался с странным поведением птицы в свойствах ПКС "Не замещать значения свойства у существующих объектов в приемнике", и почему в варианте №1 она отрабатывает как надо, а в варианте № 2 такое странное поведение.
6 Йохохо
 
09.11.12
11:44
(5) потому, что у 1с трепетное отношение к этому булеану
7 ProDeveloper
 
09.11.12
11:44
(4) Я в курсе) Потому что объект модифицирован, если перед программной установкой пометки удаления в обработчике "ПослеЗаписи" попробовать модифицированный Объект.Записать(), потом установить пометку удаления из ссылки, то ошибок не возникает, но и результат все тот же, снимается пометка)
8 ProDeveloper
 
09.11.12
11:46
Пробовал так же в обработчиках ПКС ПометкаУдаления играться с НеЗамещать = Истина; (эквивалент птицы "Не замещать значения свойства у существующих объектов в приемнике") Тоже толку 0
9 ProDeveloper
 
09.11.12
11:53
Сперва я думал что просто птица не работает, может релиз КД 2.1.6.4 глюкавый, стал проверять. В варианте № 1 все работает должным образом, что подтверждает работоспособность птицы "Не замещать значения свойства у существующих объектов в приемнике" в свойствах ПКС, и действительно в источнике объект помечен на удаление в приемнике после обмена записались необходимые реквизиты и пометка удаления при этом осталась не тронутой, в приемнике Контрагент не помечен на удаление.
Почему в варианте №2 он её трогает не пойму.
10 ProDeveloper
 
09.11.12
12:05
Выжимка из XML выгруженная по данным правилам.

- <Объект Нпп="6" Тип="СправочникСсылка.Контрагенты" ИмяПравила="Контрагенты">
- <Ссылка НеСоздаватьЕслиНеНайден="true">
- <Свойство Имя="{УникальныйИдентификатор}" Тип="Строка">
 <Значение>71cfdebe-dba2-11e1-9393-003048c8515d</Значение>
 </Свойство>
- <Свойство Имя="ИНН" Тип="Строка">
 <Значение>...</Значение>
 </Свойство>
- <Свойство Имя="КПП" Тип="Строка">
 <Значение>...</Значение>
 </Свойство>
 </Ссылка>
- <Свойство Имя="ПометкаУдаления" Тип="Булево" НеЗамещать="true">
 <Значение>false</Значение>
 </Свойство>


Из xml отчетливо видно

- <Свойство Имя="ПометкаУдаления" Тип="Булево" НеЗамещать="true">
 <Значение>false</Значение>
</Свойство>


почему происходит замещение в варианте № 2, а в варианте № 1 все нормально, для меня загадка.
11 Йохохо
 
09.11.12
12:14
не приходила мысль, что дело не в кд?
12 ProDeveloper
 
09.11.12
12:14
Вылечить удалось в обработчике "ПослеЗаписи" ПКО Контрагенты

Если ОбъектНайден Тогда
   ПометкаУдаления = Ссылка.ПометкаУдаления;
   Объект.Записать();
   Объект.УстановитьПометкуУдаления(ПометкаУдаления);
КонецЕсли;


Но поведение птицы в свойствах ПКС "Не замещать значения свойства у существующих объектов в приемнике" недюже удивило.
13 Йохохо
 
09.11.12
12:15
про это написано в (2) и (6)
14 ProDeveloper
 
09.11.12
12:16
(13) почему птица в ПКС работает как-то с переменным успехом?
15 Йохохо
 
09.11.12
12:16
(12) ну да, пятница же, добавь третью, контрольную запись
16 Йохохо
 
09.11.12
12:17
хотя третий раз за тебя кд запишет, оставь так
17 ProDeveloper
 
09.11.12
12:21
Ответ блин так и не найден, почему так себя ведет КД, ведь по идее никакого кода не надо - должно хватать птицы. И почему в варианте №1 птицы хватает а в №2 её не хватает.
18 acsent
 
09.11.12
12:23
Что ты в итоге хочешь?
19 ProDeveloper
 
09.11.12
12:36
(18) хотелось услышать вразумительный ответ почему не работает птица в варианте №2 и снимается пометка удаления
20 Йохохо
 
09.11.12
13:47
(19) а если в 0.2 так
Объект.ОбменДанными = Истина;
Объект.Записать(...);
ОбъектМодифицирован = Ложь;
В форме записывать только измененные объекты = V
это же ты прочитал? "Если объект модифицирован, то выполнение метода вызывает исключение."
21 ProDeveloper
 
09.11.12
14:15
(20) уффф, ты можешь ответить почему в варианте № 2 без какого либо кода в обработчиках ПКО, когда стоит птица в ПКС у ПометкаУдаления - "Не замещать значения свойства у существующих объектов в приемнике" она все таки замещается
22 ProDeveloper
 
09.11.12
14:16
и те же самые правила обмена не замещают пометку удаления в варианте № 1
23 Йохохо
 
09.11.12
15:01
(21) не тестил, грешу на обработчики записи, т.к. запись изменений помеченного объекта
AdBlock убивает бесплатный контент. 1Сергей