Имя: Пароль:
1C
1С v8
КД Обмен 7.7-8.2 Установка родителя
,
0 kn
 
13.05.14
08:39
Приветствую, уважаемые форумчане.
Не получается при переносе номенклатуры из ТиС в БП по своим правилам
установить родителя для новой номенклатуры, т.е новую номенклатуру в БП
при переносе надо положить в папку "Новая номенклатура".
Использую параметр - НаименованиеПапки, подсмотрев идею на форуме для передачи параметра в 7.7 получилось создать новый элемент в нужной папке, но при повторной загрузке, как ни бьюсь, элемент создается заново - второй, причем все пусто кроме кода, посмотрите что не так, спасибо.

В ПКО Номенклатуры ПослеЗагрузки пишу

Отказ = Ложь;

Если Не (ОбъектНайден Или Объект.ЭтоГруппа) Тогда
Запрос = Новый Запрос("ВЫБРАТЬ
|    КОЛИЧЕСТВО(*) КАК КоличествоСКодом
|ИЗ
|    Справочник.Номенклатура КАК Номенклатура
|ГДЕ
|    Номенклатура.Код = &Код");

Запрос.УстановитьПараметр("Код", Объект.Код);

Выборка = Запрос.Выполнить().Выбрать();

Если Выборка.Следующий() Тогда
     Сообщить("Выборка.КоличествоСКодом = " +
Строка(Выборка.КоличествоСКодом));    
     Если Выборка.КоличествоСКодом > 0 Тогда
       Отказ = Истина;
     КонецЕсли;  
КонецЕсли;

Если Не Отказ Тогда
  
  Если ЗначениеЗаполнено(ПараметрыПКО) Тогда
   НаименованиеПапки = ПараметрыПКО.Получить("НаименованиеПапки");
  КонецЕсли;

  Если ЗначениеЗаполнено(НаименованиеПапки) Тогда
     Родитель = Справочники.Номенклатура.НайтиПоНаименованию(СокрЛП(НаименованиеПапки));
     Объект.Родитель = Родитель;
     Объект.ОбменДанными.Загрузка = Истина;
     Объект.Записать();
  КонецЕсли;
КонецЕсли;
КонецЕсли;
1 cons74
 
13.05.14
09:30
"элемент создается заново - второй"
в кд вроде есть галка "не записывать если не найден", плюс искать перед загрузкой
2 kn
 
13.05.14
09:32
так я ищу по коду и родителю, и он не находит для второго элемента, т.к первый в Новой папке
3 kn
 
13.05.14
09:33
А если в ПередЗагрузкой - Отказ поставить Истина, то в Послезагрузки, где устанавливаю нового родителя, Отказ сработает, или нет?
4 kn
 
13.05.14
09:37
флажок есть только Не создавать новый элемент в приемнике если он Не найден, но он не подходит
5 kn
 
13.05.14
09:47
В ПередЗагрузкой нет еще Объект, а есть Источник, как
получить код объекта здесь.
6 Aleksey
 
13.05.14
09:51
(5) В перед загрузкой НЕТ источника

Обработчики "Правила конвертации объектов"
При загрузке
Условия возникновения события
Только для платформы V8.
Событие выполняется после попытки идентификации. В случае успешной синхронизации доступен найденный объект. В противном случае его значение Неопределено. Можно произвести произвольную инициализацию, заполняемого данными объекта.

Параметры:
ОбъектНайден - Булево. Если значение параметра равно Ложь, то объект не идентифицирован, то есть не найден в информационной базе


Если не ОбъектНайден тогда
Объект.Родитель = Справочники.Номенклатура.НайтиПоНаименованию(СокрЛП(НаименованиеПапки))
КонецЕсли
7 kn
 
13.05.14
09:53
В перед загрузкой НЕТ источника - с чего это.
У меня первоначально не получалось в ПриЗагрузке, попробую еще.
8 Aleksey
 
13.05.14
09:54
(7) Учи матчасть
9 Aleksey
 
13.05.14
09:55
Источник - СТРОКА (!!!). Представление (!!!!) объекта источника.

Представление <> Источник. Представления - это строка
10 kn
 
13.05.14
09:57
а где-нибудь в ветке написано противное?
скорее вопрос не в установке родителя, а в том что криво срабатывает Отказ, запись все равно происходит хоть и пустого элемента
11 Aleksey
 
13.05.14
10:22
(10) У тебя в в коде нет проверки на новый, он у тебя меняется ВСЕГДА когда грузишь элемент
12 kn
 
13.05.14
10:26
А это нет? Если Не (ОбъектНайден Или Объект.ЭтоГруппа) Тогда
13 kn
 
13.05.14
10:27
вот почему написано, но не срабатывает

После загрузки
Условия возникновения события
Только для платформы V8.
Событие выполняется после прочтения и установки атрабутов объекта из файла, но до его записи в информационную базу. Возможна модификация загруженного объекта.

Параметры:
Отказ - Булево - Если Истина, то объект загружен не будет.
14 kn
 
13.05.14
10:27
или потому что из 7.7, тогда как обойти
15 Aleksey
 
13.05.14
10:28
(12) оно, немного нетак код прочёл
16 kn
 
13.05.14
10:31
к сожелению при выгрузки из 7.7 нельзя искать по уникальному
идентификатору, и когда отключаю поиск по родителю, оставив только по коду, тоже не то.
17 kn
 
13.05.14
10:54
как быть, ведь по идее при выгрузке документов с этой номенклатурой, должна подставляться первая номенклатура, т.е
вторая должна быть найдена как первая, но каким способом искать для случая перекладки в другую папку, почему при поиске по коду без поиска по родителю эффекта нет, какой смысл в поиске по родителю, кто может поясните, пжл-та
18 kn
 
13.05.14
11:04
(17)+ если просто выгрузить только номенклатуру, то все нормально, а вот если документ в составе которого номенклатура, то создается вторая номенклатура, пустая.
Т.е вопрос свелся к поиску номенклатуры, если родитель не тот.
19 kn
 
13.05.14
13:13
Получилось так
1.Поиск по Коду,ЭтоГруппа
2.В ПКС Родитель - флажок Не замещеть значения свойств существующих объектов в Приемнике
3.Т.к соответствие ПараметрыПКО доступно только ПослеЗагрузки то там и устанавливать родителя надо

Если Не Объект.ЭтоГруппа Тогда
  Если ЗначениеЗаполнено(ПараметрыПКО) Тогда
   НаименованиеПапки = ПараметрыПКО.Получить("НаименованиеПапки");
  КонецЕсли;

  Если ЗначениеЗаполнено(НаименованиеПапки) Тогда
     Родитель = Справочники.Номенклатура.НайтиПоНаименованию(СокрЛП(НаименованиеПапки));
     Если Не ОбъектНайден Тогда
      Объект.Родитель = Родитель;
      Объект.ОбменДанными.Загрузка = Истина;
      Объект.Записать();
     КонецЕсли;
  КонецЕсли;
КонецЕсли;