Имя: Пароль:
1C
 
Вопрос по Конвертации
0 mzelensky
 
08.08.14
08:37
Доброго всем!
Правила переноса из УТ в УТ для Украины (с политической веткой не путать!). Задача такая:

Перегружаю справочник номенклатуры. У номенклатуры есть реквизит "Вид номенклатуры" (это другой спраочник). Нужные виды номенклатуры в приемнике уже созданы и пролисходит лишь их поиск по наименованию (если не нашли, то и не создаем). Нужно чтобы при выгрузке номенклатуры если стоит галочка "учет характеристик" (в источнике), то в приемнике вид номенклатуры искался по наименованию "ВидСХарактеристикой", а если галочки в источнике НЕТ, то искать в приемнике вид номенклатуры с наименованием "ВидБезХарактеристики".

Как это настроить?
1 mzelensky
 
08.08.14
08:39
Идеи такие: перед выгрузкой номенклатуры проверять нужную мне галочку и как-то надо запускать то или иное правило выгрузки для справочника "Вид номенклатуры"...но не представляю как оно потом будет загружаться.
2 mehfk
 
08.08.14
08:40
Обработчики "Правила конвертации объектов"
Поля поиска
Условия возникновения события
Только для платформы V8.
Событие выполняется при поиске элемента ссылочного типа. Если установлен поиск по уникальнму идентификатору и программа нашла элемент, то поиск прекращается. Если поиск по уникальному идентификатору не дал положительного результата и указано, что нужно продолжить поиск в этом случае или поиск по уникальному идентификатору не проводился, то программа пытается найти элементы по свойствам поиска. В обработчике нужно установить список полей через запятую по которым нужно проводить поиск. Если очередная попытка дала положительный результат, то поиск прекращается.
Поиск возможен только по тем полям у которых на этапе выгрузка был установлен флаг поиска данных!!!

Параметры:
НомерВариантаПоиска - число. Номер попытки поиска. Попыток поиска может быть не больше 10.

СвойстваПоиска – соответствие, в котором хранятся текущие значения реквизитов поиска. Эти значения можно использовать в произвольных алгоритмах для идентификации объектов ИБ при загрузке данных. Следует иметь в виду, что при создании нового объекта, значения из соответствия СвойстваПоиска используются для заполнения свойств нового объекта.

ПараметрыОбъекта - либо Неопределено либо Соответствие, в котором хранятся дополнительные параметры, переданные для данного объекта из источника в приемник. Если параметров передано не было, то ПараметрыОбъекта = Неопределено. В данном обработчике соответствие содержит только те параметры, для которых установлен признак поиска.

ПрекратитьПоиск - булево. Если Истина, то поиск объекта прекращается, в зависимости от того СсылкаНаОбъект заполнена или нет создается новый объект.

СсылкаНаОбъект - ссылка на результирующий объект. Если в обработчике установить данную ссылку (не пустую) то программа ее запомнит и поиск на этом будет считать успешно завершенным

УстанавливатьУОбъектаВсеСвойстваПоиска - булево. Определяет нужно ли после удачного завершения поиска установить объекту все реквизиты поиска. Объект может быть найден по части реквизитов. Этот флаг определяет нужно оставшиеся реквизиты, которые не участвовали в поиске (но по которым поиск возможен) установить объекту или нет. Значение по умолчанию: Истина.

НастройкаПоиска - строка. Выбранный пользователем вариант сопоставления объектов. В ПКО есть таблица Варианты настроек полей поиска - с возможными вариантами настроек полей поиска для пользователя. Разработчик правил определяет возможные комбинации полей поиска, которые пользователь может выбирать при настройке обмена. Все настройки указанные разработчиком правил должны быть отработаны в коде обработчика "Поля поиска". Переменная НастройкаПоиска в обработчике определяет выбранный пользователем вариант сопоставления (ИмяНастройкиДляАлгоритма из соответствующей строки таблицы). Если пользователь не выбрал ни один вариант сопоставления, или ему ни один вариант не был предложен, то НастройкаПоиска - пустая строка.

СтрокаИменСвойствПоиска – строка в которой задаются ключевые поля варианта поиска. Могут быть указаны только те свойства, для которых при настройке правил обмена был выставлен флаг поиска.

Пример:
Если НомерВариантаПоиска = 1 тогда

СтрокаИменСвойствПоиска = "Код, Наименование";

ИначеЕсли НомерВариантаПоиска = 2 тогда

СтрокаИменСвойствПоиска = "Код";

Иначе

СтрокаИменСвойствПоиска = "Наименование";

КонецЕсли;
3 mzelensky
 
08.08.14
08:44
(2) Оно в любом случае по наименованию будет (сейчас так и на строено). Просто если стоит галка в номенклатуре, то наименование для поиска справочника Вид номенклатуры "ВидСХарактеристикой", а если нет галки, то наименование для поиска справочника Вид номенклатуры "ВидБезХарактеристики"
4 m-serg74
 
08.08.14
08:44
(1) нафиг мудрить у свойства ВидНоменклатуры в зависимости от галки
Значение = "ВидС/БезХарактеристик"

в ПКО ВидНоменклатуры
Поиск по наименованию у свойства Наименование перед выгрузкой
Значение = Источник;

и всё
5 mzelensky
 
08.08.14
08:48
(4) потому что в источнике НЕТ такого вида номенклатуры, какой мне нужен в приемнике. В Источнике везде вид номенклатуры "Товар", а в приемнике в зависимости от галочки должен подставляться вид номенкдлатуры "Товар с характеристикой" или "Товар без характристики"
6 Alex S D
 
08.08.14
09:01
(5) тебе же сказали, наименование меняется на то что тебе нужно, при выгрузке
7 m-serg74
 
08.08.14
09:22
(5) вроде всё доступно написал, я ХЗ...
8 toypaul
 
гуру
08.08.14
09:37
В обработчике, который отрабатывает поиск (не помню как называется) есть возможность указать найденный элемент и указать что поиск завершен.
9 toypaul
 
гуру
08.08.14
09:38
В правиле конвертации нужно настроить конвертацию по наименованию. Либо конвертацию по справочнику и по наименованию.
10 Boroda
 
08.08.14
09:38
(1) Как вариант:
  Создай 2 правила: одно с характериками, другое - без.
В первом в "Перед выгрузкой" напиши что-то типа:
  Если НЕ Источник.УчетХарактеристик Тогда
     Отказ  = Истина;
  КонецЕсли;
в другом правиле убери "НЕ"
11 toypaul
 
гуру
08.08.14
09:40
что-то гоню я. никакого обработчика поиска тут не надо
12 mzelensky
 
08.08.14
09:43
(7) Я не понял вот про это:

в ПКО ВидНоменклатуры
Поиск по наименованию у свойства Наименование перед выгрузкой
Значение = Источник;

Что за поиск по наименованию у свойства наименования?
13 toypaul
 
гуру
08.08.14
09:44
в ПКС Наименование написать

Если Источник.МояГалка Тогда
Значение = "СХар"
Иначе
Значение = "БезХар
КонецЕсли
14 Boroda
 
08.08.14
09:45
(0) "ВидСХарактеристикой", "ВидБезХарактеристики" - это отдельные справочники ?
15 m-serg74
 
08.08.14
09:46
(12) галочка в КД, в ПКО ВидНоменклатуры единственное ПКС Наименование
у него в событии ПередВыгрузкой:
Значение = Источник;
16 mzelensky
 
08.08.14
09:46
(13) а что в данном случае "Источником" будет?

Пиши плиз подробней, а то мне лично тяжко понимать про какой объект ты говоришь.
17 mzelensky
 
08.08.14
09:47
(14) Это один справочник, но разные элементы в нем
18 m-serg74
 
08.08.14
09:47
(16) дай тим вивер покажу :)
19 toypaul
 
гуру
08.08.14
09:47
источником будет источник. почитай хотя бы описание обработчиков. эти описания есть в самой КД
20 m-serg74
 
08.08.14
09:48
(19) это кому сообщение?
21 mzelensky
 
08.08.14
09:48
(15) :( печаль ... Я имею ввиду про какой объект ты говришь, про спр. Номенклатура или спр. Вид номенклатуры...или еще что???
22 toypaul
 
гуру
08.08.14
09:49
(16) ПКС Наименование - два раза тыкнуть в свойство Наименование. там смотреть обработчик перед выгрузкой
23 mzelensky
 
08.08.14
09:49
(21) для (20)
24 m-serg74
 
08.08.14
09:49
(21) блин как можно неоднозначно понять ПКО ВидНоменклатуры
25 toypaul
 
гуру
08.08.14
09:51
(21) про вид номенклатуры речь.
26 mzelensky
 
08.08.14
09:53
А что получится при данном варианте, если мне отдельно нужно будет выгрузить справочник "Виды номенклатуры" ? Не через "Номенклатуру" ?
27 toypaul
 
гуру
08.08.14
09:54
а ... у тебя галка у номенклатуры
28 toypaul
 
гуру
08.08.14
09:55
тогда тебе нужно сделать доп. ПКО, в нем сделать как написано. и у свойства это ПКО указать.

и условие будет такое

Если Источник.Владелец.МояГалка Тогда
29 Абыр
 
08.08.14
09:55
ИмяПКО
30 m-serg74
 
08.08.14
09:56
(26) тогда проверку в ПКО ВидНоменклатуры,
в ПКС Наименование
Если ТипЗнч(Источник) = Тип("Строка") Тогда
    Значение = Источник;
Иначе
    Значение = Источник.Наименование;
КонецЕсли;
31 toypaul
 
гуру
08.08.14
09:56
(26) если будешь отдельно выгружать, то будет отрабатывать так какое стоит ПКО в ПВД для данного справочника. не понятно только зачем его отдельно выгружать.
32 m-serg74
 
08.08.14
09:57
(31) хватит огороды городить, см. (30)
33 fenixx
 
08.08.14
09:57
а почему (13) не подходит?
34 mzelensky
 
08.08.14
09:58
Блин, то ли я не догоняю ,то ли вы меня не так поняли...
35 toypaul
 
гуру
08.08.14
09:59
(34) ты не догоняешь
36 Skylark
 
08.08.14
10:00
(0) В (2) выдали отличную рабочую версию (которая при этом еще и канонична). Нужно только пораскинуть мозгами в этом направлении.
37 mzelensky
 
08.08.14
10:00
(35) Наверное. Давайте по этапам. Что  сделал:

ПКО НОМЕНКЛАТУРА. у свойства "Вид номенклатуры" "Перед выгрузкой" пишу:

Если Источник.ВестиУчетПоХарактеристикам Тогда
    Значение = "Товар (пр. ТМЦ) + х";
Иначе
    Значение = "Товар (пр. ТМЦ)";    
КонецЕсли;
38 toypaul
 
гуру
08.08.14
10:00
(32) какие еще огороды. это ты бредятину какую-то пишешь. а я на вопрос ответил.
39 mzelensky
 
08.08.14
10:01
(37) + у ПКО "ВИД НОМЕНКЛАТУРЫ" поставил поиск по наименованию
40 fenixx
 
08.08.14
10:02
(37) Правильно ты сделал. К этому ПКС надо прикрутить ПКО для справочника "ВидНоменклатуры" где источник - строка, приемник - справочник "ВидыНоменклатуры" с поиском по наименованию
41 toypaul
 
гуру
08.08.14
10:03
(40) источник пустой должен быть. КД не понимает простые типы. даже в принципе без разницы какой источник.
42 mzelensky
 
08.08.14
10:03
(39) + у ПКО "ВИД НОМЕНКЛАТУРЫ", ПКС "Наименование" "Перед выгрузкой" пишу:

Значение = Источник;
43 toypaul
 
гуру
08.08.14
10:03
(39) ну. дальше тогда пишешь в ПКС Наименование у ПКО вид номенклатуры

Значение = Источник.

чо не ясно-то?!
44 toypaul
 
гуру
08.08.14
10:03
(42) ну. все правильно.
45 Skylark
 
08.08.14
10:04
> СсылкаНаОбъект - ссылка на результирующий объект. Если в обработчике установить данную ссылку (не пустую) то программа ее запомнит и поиск на этом будет считать успешно завершенным

В этом месте ты можешь написать свой код, который будет искать  как хочешь. Как по-своему найдешь, подставляй свою ссылку и готово.
46 toypaul
 
гуру
08.08.14
10:05
(45) забудь уже про этот обработчик. это решение может и работает, но оно хуже чем предложенные дальше.
47 m-serg74
 
08.08.14
10:07
(42) нет, см. (30), если ВидНоменклатуры планируешь выгружать отдельно не как реквизит Номенклатуры
48 mzelensky
 
08.08.14
10:07
(40)(41) А в правиле ПКС для Вид номенклатуры что должно стоять источником?
49 m-serg74
 
08.08.14
10:07
(48) по барабану
50 Boroda
 
08.08.14
10:08
(17) В общем, сделай так:  :)
1. Создай правило  ВидыНоменклатуры  - ВидыНоменклатуры
   поиск сделай по наименованию, в этом ПКС сразу пропиши  в "перед выгрузкой"  Значение = Источник;
2. Теперь в правиле выгрузкки номенклатуры, там где выгружаеся вид номенклатуры в "ПриВыгрузке" пропиши:
Если источник.Учетхарактерисик Тогда
  Значение = "СХарактристикаи";
Иначе
  Значение = "БезХарактристик";
КонецЕсли;

Должно сработать.  






в свойствах
51 mzelensky
 
08.08.14
10:09
Блин...давайте какой-нить один вариант...я уже запутался немного
52 mzelensky
 
08.08.14
10:10
При выгрузке данных ошибка:

Ошибка в обработчике события ПередВыгрузкой (свойства)
    ПКО                    =  Номенклатура  (Справочник: Номенклатура)
    ПКС                    =  2  (ВидНоменклатуры --> ВидНоменклатуры)
    Объект                 =  Половики  (Номенклатура)
    СвойствоПриемника      =  ВидНоменклатуры  (СправочникСсылка.ВидыНоменклатуры)
    Обработчик             =  ПередВыгрузкойСвойства
    ОписаниеОшибки         =  Преобразование значения к типу Булево не может быть выполнено
    ПозицияМодуля          =  (1)
    КодСообщения           =  55
53 toypaul
 
гуру
08.08.14
10:10
(51) у тебя уже есть рабочий вариант. не ... мозк, а попробуй.
54 toypaul
 
гуру
08.08.14
10:12
(52) у тебя галка не задана для группы
55 m-serg74
 
08.08.14
10:12
(54) +
56 mzelensky
 
08.08.14
10:19
Ошибка получения значения свойства объекта (по имени свойства источника)
    ПКО                    =  ВидыНоменклатуры  (Справочник: Виды номенклатуры)
    ПКС                    =  2  (ПометкаУдаления --> ПометкаУдаления)
    Объект                 =  Товар (пр. ТМЦ)  (Строка)
    СвойствоПриемника      =  ПометкаУдаления  (Булево)
    ОписаниеОшибки         =  Получение элемента по индексу для значения не определено
    ПозицияМодуля          =  Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(8196)
    КодСообщения           =  13
57 Skylark
 
08.08.14
10:23
(46) Как хотите. Если не получится по-вашему - приходите
58 toypaul
 
гуру
08.08.14
10:26
(56) тебе БЕСПЛАТНО предложили через ТВ все показать. не хочешь, мучайся дальше. или купи курс по КД для просветления мозгов.

я знаю откуда ошибка, но писать не буду.
59 mzelensky
 
08.08.14
10:40
В общем ЧТО-ТО ПОЛУЧИЛОСЬ...
60 mzelensky
 
08.08.14
10:45
Всем спасибо за мучения.
Особенная благодарность: m-serg74 и toypaul
61 m-serg74
 
08.08.14
10:46
приходите еще:)
62 mzelensky
 
08.08.14
10:51
Хотя вот еще вопрос остался. Когда указываю правила обмена в обработке ВЫГРУЗКИ, то считываются правила и выдается ошибка:


Ссылка на несуществующий объект метаданных в правилах обмена
    Объект                 =  Строка
    ОписаниеОшибки         =  Значение не является значением объектного типа (ПКО)
    ПозицияМодуля          =  Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(2071)
    КодСообщения           =  11
63 mzelensky
 
08.08.14
10:51
(62) + При этом выгрузка вроде как проходит нормально
64 m-serg74
 
08.08.14
10:56
(62) ХЗ что там у тебя еще где в правилах
65 mzelensky
 
08.08.14
10:58
(64) Дык в том и дело .что не понятно куда глядеть
66 m-serg74
 
08.08.14
11:01
(65) знамо дело в отладчик, с Остановка По Ошибке
67 mzelensky
 
08.08.14
11:02
все, нашел...случайно одно ПКО добавил
68 m-serg74
 
08.08.14
11:02
+ Ошибка содержит текст и туда кусок текста ошибки, например:
"Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(2071)"
69 m-serg74
 
08.08.14
11:03
(68) -> +(66), но уже теперь не актуально наверное :)