КД. Справочники. Пометка на удаление

1. Wefast 30.10.15 11:27 Сейчас в теме
Создал правила по переносу справочников. Все в общем то стандартно.
При выгрузке отслеживал сообщениями что там с пометкой удаления у объектов и они все выгружаются.
Но после того как я загружаю все в приемник все элементы без пометки удаления.

Пробовал в ПКО после выгрузки написать:
Если Объект.ПометкаУдаления = 1 Тогда
Объект.УстановитьПометкуУдаления(Истина,Ложь);
КонецЕсли;

Элемент переносится с пометкой на удаление но выдает ошибку и все на этом останавливается.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. adva 45 30.10.15 11:37 Сейчас в теме
Это 7.7 или 8, а то и Истина используете, и с 1 сравниваете?
4. Wefast 30.10.15 11:40 Сейчас в теме
(2) adva, 8

Ошибка:
Ошибка в обработчике события ПослеЗагрузкиОбъекта 
    ИмяПКО                 =  Номенклатура
    ТипОбъекта             =  Номенклатура
    Объект                 =  Банки
    Обработчик             =  ПослеЗагрузкиОбъекта 
    ОписаниеОшибки         =  Ошибка при вызове метода контекста (УстановитьПометкуУдаления): Элемент не выбран! 
    ПозицияМодуля          =  (1)
    КодСообщения           =  21

Ошибка при загрузке данных: {ВнешняяОбработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(1629)}: Ошибка в обработчике события ПослеЗагрузкиОбъекта 
    ИмяПКО                 =  Номенклатура
    ТипОбъекта             =  Номенклатура
    Объект                 =  Банки
    Обработчик             =  ПослеЗагрузкиОбъекта 
    ОписаниеОшибки         =  Ошибка при вызове метода контекста (УстановитьПометкуУдаления): Элемент не выбран! 
    ПозицияМодуля          =  (1)
    КодСообщения           =  21
Показать
6. adva 45 30.10.15 13:50 Сейчас в теме
(4) похоже на то, что это новый объект, и его надо предварительно записать.
ИНТЕГРА; +1 Ответить
11. adva 45 02.11.15 10:32 Сейчас в теме
А ошибка из (4), я смотрю, происходит в момент загрузки, для загрузки в обработчиках загрузки применяли метод УстановитьПометкуУдаления ? Или это что-то типовое?
3. adva 45 30.10.15 11:38 Сейчас в теме
И какую именно ошибку выдает?
5. Wefast 30.10.15 11:45 Сейчас в теме
Думаю может в ПВД нужно что то написать, но не знаю, что в исходящих данных и как там что сравнивать. Без отладчика и обращения к методам и св-ам через точку тяжко
7. adva 45 30.10.15 13:51 Сейчас в теме
только не понятно, правила пометку удаления передают и без доп. кода, надо наверное найти, в какой момент она снимается. Кстати, для пометки удаления сделано ПКС ?
8. Wefast 02.11.15 09:49 Сейчас в теме
(7) adva, Да ПКС есть, я даже поиск по ней веду. Объекты новые. Но это же не документ, я не могу установить какой то режим записи.
После выгрузки пробовал сделать что то такое:

//Если Объект.ПометкаУдаления = 1 Тогда 
	
	Объект.УстановитьПометкуУдаления(Истина,Ложь); // 1 вариант, просто пометку пробовал установить
	
	Если Не ОбъектНайден  Тогда // 2 вариант
        	Объект.Получить();
        	Объект.УстановитьПометкуУдаления(Истина,Ложь);
		Объект.Записать();
        КонецЕсли;

    
КонецЕсли
Показать
;

И в общем ничего вразумительного это не дает, так как я делаю это в ПКО

а в ПВД после выгрузки попробовал

Если Объект.ПометкаУдаления = Истина Тогда
	Сообщить(""+Объект.Наименование + " " + "После выгрузки пометка существует"); // выдает истину
	п = Объект.ПолучитьОбъект();
	
	п.УстановитьПометкуУдаления(Истина,Ложь);
	п.Записать();
	
КонецЕсли;
Показать
15. adva 45 02.11.15 12:39 Сейчас в теме
по поводу (8). Надо сначала записать объект, а затем устанавливать пометку на удаление. У Вас наоборот, пытаетесь установить пометку у несуществующего объекта, а затем его записать.
17. ИНТЕГРА 25 02.11.15 13:01 Сейчас в теме
(8) Wefast, понимания никакого :)
Если Объект.ПометкаУдаления = 1 Тогда 
    
    Если Объект.ЭтоНовый() Тогда // Более грамотно Объект.Модифицированность(), но 1Сники в КД могут манипулировать
        Объект.Записать();
    КонецЕсли;

    Объект.УстановитьПометкуУдаления(Истина,Ложь);
    
КонецЕсли
Показать
19. Wefast 02.11.15 15:00 Сейчас в теме
(17) ИНТЕГРА, Вставил это в После Выгрузки в ПКО, ошибок не выдало, но и пометок на удаление нет.
(18) insurgut, конфигурация типовая, никаких дополнительный изменений не вносил, так что даже не предположу что там искать на этот счет.
(13) adva, если в ПКС пометки удаления присовить Значению истину или ложь, соответственно у всех объектов будет эта пометка или не будет. Теоритически. Так то они у меня не переносятся все равно. Если присвоить значению ложь, но в После выгрузки в тело условия никогда не зайдет.
9. PhoenixAOD 62 02.11.15 10:05 Сейчас в теме
а если в пко сделать После выгрузки, если источник.пометкаудаления = истина тогда значение = истина конецесли
12. Wefast 02.11.15 11:30 Сейчас в теме
(9) PhoenixAOD, В ПКО в событие после выгрузки нет "Значение", значение установить можно в ПКС. Сделал так для ПКС - пометка при загрузке слетает.
(10) В ПКО писал в После выгрузки
Если Объект.ПометкаУдаления = ИСТИНА Тогда 
	
	Объект.УстановитьПометкуУдаления(Истина,Ложь);
КонецЕсли;

Выгрузка проходит нормально.
При загрузке выдает:
Начало загрузки:   02.11.2015 11:25:29

Ошибка в обработчике события ПослеЗагрузкиОбъекта
	ИмяПКО                 =  Номенклатура
	ТипОбъекта             =  Номенклатура
	Объект                 =  3
	Обработчик             =  ПослеЗагрузкиОбъекта
	ОписаниеОшибки         =  Ошибка при вызове метода контекста (УстановитьПометкуУдаления): Элемент не выбран!
	ПозицияМодуля          =  (3)
	КодСообщения           =  21

Ошибка при загрузке данных: {ВнешняяОбработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(1629)}: Ошибка в обработчике события ПослеЗагрузкиОбъекта
	ИмяПКО                 =  Номенклатура
	ТипОбъекта             =  Номенклатура
	Объект                 =  3
	Обработчик             =  ПослеЗагрузкиОбъекта
	ОписаниеОшибки         =  Ошибка при вызове метода контекста (УстановитьПометкуУдаления): Элемент не выбран!
	ПозицияМодуля          =  (3)
	КодСообщения           =  21

Окончание загрузки: 02.11.2015 11:25:30

Загружено объектов: 4
Показать

Объект на который выдается ошибка загружается с пометкой удаления, но дальше загрузка уже не идет.
13. adva 45 02.11.15 12:36 Сейчас в теме
(12) не вижу смысла при выгрузке устанавливать пометку удаления, если она уже стоит.
В ПКС ПометкаУдаления и надо было писать Значение = Истина (если она стоит).

Обработчики загрузки в ПКО используют установку пометки удаления? Почему-уверены, что именно с пометкой удаления связана ошибка? А если для ПКС присвоить Значение = Ложь, то ошибки не будет?
10. adva 45 02.11.15 10:29 Сейчас в теме
Не понял, а зачем в событии после выгрузки устанавливать пометку удаления, надо в ПКО в событии после загрузки устанавливать. Или где должны быть пометки, в источнике? ПослеВыгрузки отрабатывает в источнике, а ПослеЗагрузки, в приемнике.
14. adva 45 02.11.15 12:37 Сейчас в теме
И еще момент, вроде бы в обработчиках при выгрузке используется Источник, а при загрузке ОБъект. В итоге какой именно обработчик используется: у Вас используется и Объект, и ПослеВыгрузки?
16. adva 45 02.11.15 12:41 Сейчас в теме
предполагаю, что снятие пометки удаления происходит уже после отработки кода правил, а где именно, надо будет смотреть в отладчике. Попробуйте выгрузить один элемент, и проверить (можете для скорости отключить прочие ПКС).
18. insurgut 208 02.11.15 13:53 Сейчас в теме
У вас в конфигураторе базы приемника при записи объекта ничего не происходит? Или события подписки может при записи отрабатывают какие-то? Достаточно сопоставить реквизит источника и приемника в ПКО, все. Никаких проверок, никаких действий после загрузки производить НЕ НАДО. Не там копаете. Правила тут ни при чем, и ничего вы ими не сделаете.
20. adva 45 02.11.15 15:10 Сейчас в теме
на мисте нашел похожую тему, вроде как при выгрузке объектов по ссылке слетает пометка удаления (конфа там была бух 3). В правилах вроде такой флажок тоже был, но судя по ответам причина не в нем оказалась. Хотя результата изысканий там не приводилось. В общем в отладчике быстрее выясните.
21. Xershi 1535 02.11.15 15:25 Сейчас в теме
Может пора показать ПКО и код в нем?
22. Wefast 02.11.15 16:12 Сейчас в теме
(21) Xershi, в пко в событие Поля поиска
Если СвойстваПоиска["ЭтоГруппа"] Тогда
	СтрокаИменСвойствПоиска = "Наименование, ЭтоГруппа, Родитель";
Иначе
	СтрокаИменСвойствПоиска = "ПолноеНаименование, Родитель, ПометкаУдаления";
КонецЕсли;


После выгрузки ничего рабочего нет. Все куски кода что я пытался туда вставить написаны выше.

(20) adva, Я как то не разобрался как отладчиком воспользоваться. Включаю отладчик. Создаю там внешнюю обработку, копирую в модуль предложенный код. В загручке/выгрузке указываю это обработку. и ничего не происходит
23. Xershi 1535 02.11.15 17:03 Сейчас в теме
(22) Wefast, ты картинку ПКО покажи.
24. Xershi 1535 02.11.15 17:04 Сейчас в теме
(22) Wefast, зачем ты вообще меняешь поля поиска?
25. Wefast 02.11.15 17:47 Сейчас в теме
(24) Xershi, в какой то статье по переносу справочников увидел такой пример с поиском, было написато что то вроде, что у группы нет же всех тех полей поиска что есть у элемента справочника.
http://i.imgur.com/l0tpzvE.png?1
29. insurgut 208 03.11.15 06:56 Сейчас в теме
(25) Wefast, как минимум - снимите флаг поиска по реквизиту Пометка удаления - вероятнее всего именно по этому у вас флаг слетает. По родителю искать тоже плохой вариант (если вы перекините номенклатуру в другую группу, то у вас получится что? Дубль!). Вообще поиск номенклатуры по реквизитам штука крайне прихотливая, и если нет четких договоренностей, и вам говорят "вначале по коду, потом по наименованию, потом по полному наименованию, по родителю и т.д. и т.п. - это неизбежно будет приводить к дублям номенклатуры.Если обмен новый и база новая - сразу же убирайте эти вариации и делайте поиск только по внутреннему идентификатору, безо всяких полей поиска. Если же база старая, то необходима долгая работа, возможно даже создание спец. реквизитов, вроде УникальныйКод, по которому и делать синхронизацию.
Xershi; Wefast; +2 Ответить
27. adva 45 03.11.15 04:24 Сейчас в теме
(22) для начала без процедур правил пройдись отладчиком, чисто по коду обработок загрузки выгрузки. Скорее всего проблема не в правилах.
26. insurgut 208 02.11.15 18:01 Сейчас в теме
Зачем? Ищите по идентификатору - здоровее будет голова!
28. insurgut 208 03.11.15 06:51 Сейчас в теме
Уже давно автор бы выложил сами правила и назвал для какого именно справочника проблема актуальна. Смысла играть в "угадайку" нет.
30. Wefast 03.11.15 09:09 Сейчас в теме
(28) insurgut, правила https://yadi.sk/d/yl7LCOKYkCHdU
БухгалтерияСтроительнойОрганизации 2.0.62.1
1С:Управление строительной организацией, редакция 1.3.66.4
Проблема актуальна для любого справочника. Но экспериментирую над справочником номенклатуры
(29) insurgut, база изначально с дублями. Поэтому так много полей для поиска.
(26) insurgut, переношу справочники из нескольких баз. По идентификатору в этом случае если я правильно понимаю он задублирует все.
31. Xershi 1535 03.11.15 09:54 Сейчас в теме
(30) Wefast, раз есть дубли, то нужно этот вопрос в начале решить. А только потом делать перенос.
Я в таких случаях делал ИД справочника (делает уникальность) и по нему поле поиска делал.
32. insurgut 208 03.11.15 11:28 Сейчас в теме
(30) Wefast, вариант снять поле поиска с реквизита пометки удаления попробовали? Не должно оно участвовать в поиске.
33. Wefast 05.11.15 09:08 Сейчас в теме
(32) insurgut, да, вроде помогло именно это. Странно, вроде у меня раньше не было поиска по пометки, а проблема была.
34. Xershi 1535 05.11.15 09:16 Сейчас в теме
Поля поиска это уникальные значения. Т.к. если взять комбинацию этих полей, то в базе не должно быть больше 1 такой записи. А у вас этих полей пруд пруди...
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот