|
Конвертация данных 2.1: Два справочника в один | ☑ | ||
---|---|---|---|---|
0
specproject
09.04.20
✎
22:53
|
Редактирую правила конвертации от обмена УТ*-Розница. По сути от УТ там ничего не осталось и устарело. Обновить возможности нет. Опыт в КД2 не велик.
В УТ* есть два справочника которые переносятся в один справочник Номенклатура в Розницу. Поступил так: Написал два ПКО: 1. Номенклатура в Номенклатуру с созданием с поиском по ГУИД 2. Справочник2 в Номенклатуру (без создания новых, поиск по ГУИД) В ПКО1 в обработчик ПослеВыгрузки вставил такой код: Запрос = Новый Запрос( "ВЫБРАТЬ | Справочник2.Номенклатура.Ссылка КАК Ссылка, | Справочник2.ОсобенностьУчета, | Справочник2.ПродукцияМаркируемаяДляГИСМ, | Справочник2.КодТНВЭД, | Справочник2.КиЗГИСМ, | Справочник2.КиЗГИСМВид, | Справочник2.КиЗГИСМСпособВыпускаВОборот, | Справочник2.КиЗГИСМGTIN, | Справочник2.КиЗГИСМРазмер, | Справочник2.ТабачнаяПродукция, | Справочник2.ОбувнаяПродукция |ИЗ | Справочник.Справочник2 КАК Справочник2 |ГДЕ | Справочник2.Номенклатура = &Номенклатура"); Запрос.УстановитьПараметр("Номенклатура", Источник.Ссылка); Выборка = Запрос.Выполнить().Выбрать(); Сообщить("Запрос выполнен"); Если Выборка.Следующий() Тогда ВыгрузитьПоПравилу(Выборка, , , , "Номенклатура_ДописатьПараметрыИзСправочник2"); Сообщить("Выгрузили коды по правилам"); Иначе Сообщить("Запрос пуст"); КонецЕсли; Вопрос: На сколько правильно такое решение? Дело в том, что выгружается два объекта (две секции), т.е. справочник Номенклатуры на Рознице, наверное, пишется два раза. Второй "неприятный" момент в том, что секция с доп параметрами стоит раньше чем секция Номенклатуры, т.е. я подозреваю, что для новой Номенклатуры доп параметры не пропишутся. Второй вопрос такой (может он не связан с первым): У меня не снимается Номенклатура с регистрации в УТ. Файл обмена из Розницы в УТ содержит такую инфу: <ДанныеПоОбмену ВерсияОтправителя="2.3.3.19" УдалитьРегистрациюИзменений="true" НомерВходящегоСообщения="53" НомерИсходящегоСообщения="51" ОтКого="РЦЛ" Кому="УТЛ" ПланОбмена="ОбменУправлениеТорговлейРозница"/> <ИнформацияОРегистрацииОбъекта ПустойНабор="false" ТипПриемника="" ТипИсточника="СправочникСсылка.Номенклатура" УникальныйИдентификаторПриемника="719de88c-7748-11ea-8108-6045cb74c998" УникальныйИдентификаторИсточника="719de88c-7748-11ea-8108-6045cb74c998"/> <ИнформацияОРегистрацииОбъекта ПустойНабор="false" ТипПриемника="" ТипИсточника="СправочникСсылка.Номенклатура" УникальныйИдентификаторПриемника="719de88d-7748-11ea-8108-6045cb74c998" УникальныйИдентификаторИсточника="719de88d-7748-11ea-8108-6045cb74c998"/> В последних двух строках идентификаторы моих двух экспериментальных номенклатур. Странность в том, что даже если я убираю все регистрации с двух сторон, то эти последние две строки все равно выгружаются. И Почему в них ТипПриёмника не указан? |
|||
1
Ёпрст
09.04.20
✎
23:16
|
(0) если выгрузка одноразовая, через обработку универсального обмена, то 2 пко можно было и не использовать
|
|||
2
specproject
09.04.20
✎
23:35
|
(1) К сожалению, обмен постоянный.
И не понимаю как в одноразовом можно было бы обойтись одним ПКО? Запрос бы не нужен был - точно. |
|||
3
AneJIbcuH
10.04.20
✎
07:51
|
(0) а зачем так сложно ?
Я так понял, у вас во втором справочнике есть данные, которые идут в номенклатуру в Рознице как реквизиты там. Почему бы вам не сделать Произвольный алгоритм в ПВД для номенклатуры, где будет запрос на все необходимые реквизиты из двух таблиц (левым соединением) ? Тут достаточно одного ПКО. Ну ещё поправить правила регистрации Справочник2, не его регистрировать, а связанную с ним номенклатуру. |
|||
4
specproject
10.04.20
✎
08:53
|
(3) Можете подробней. Слаб в КД2. Считал что ПВД применяются только при разовых обменах.
Подскажите как запрос в ПВД связать с зарегистрированной номенклатурой? |
|||
5
specproject
10.04.20
✎
08:54
|
Одним запросом все данные - это просто мечта
|
|||
6
Ёпрст
10.04.20
✎
09:13
|
(4) никак не связать, пвд в планах обмена не того, вот и спрашивал, про разовую выгрузку.
|
|||
7
Ёпрст
10.04.20
✎
09:15
|
Но.. выгрузить по правилу тоже можно не делать в первом пко, просто добавить нужные реквизиты от второго справочника инапихать их значениями из запроса
|
|||
8
AneJIbcuH
10.04.20
✎
09:17
|
Вообще должно работать так: если используется обработка для разового переноса, то произвольный алгоритм накладывается на все данные. Если он-лайн обмен, то произвольный алгоритм на зарегистрированные данные. Тут прям прям не уверен, но где-то именно так читал. Поэтому пробуете в ПВД написать запрос к номенклатуре (левым соединением к ней Справочник2), вытаскиваете необходимые реквизиты и обязательно Ссылка. А далее одно ПКО для номенклатуры, где конвертируете реквизиты.
Если не получится, знаю точно метод, который прокатит: Накопить в массив зарегистрированную номенклатуре и потом запросом выгрузить. |
|||
9
specproject
10.04.20
✎
10:57
|
(7) Если бы честным, то ещё один из реквизитов я беру запросом из третьего справочника. Но просто в этом месте этих реквизитов 10. Если каждый реквизит выдергивать запросом, то + 10 запросов в цикле... Работать будет, но вот со скоростью засомневался.
|
|||
10
specproject
10.04.20
✎
11:03
|
Есть вот такие идеи в голове:
вариант 1: сформировать запрос перед выгрузкой, куда-то сложить (вроде какие-то параметры же есть, только не знаю как работают) и потом вытащить их значения на уровне ПКС вариант 2: написать ПКО2 по выгрузке сразу всех реквизитов номенклатуры. А в ПКО1 сделать запрос по формированию этих реквизитов и тормозить выгрузку Отказ=Истина; Вот только сомнения у меня что регистрация чистится будет. |
|||
11
Ёпрст
10.04.20
✎
12:00
|
(9) зачем каждый ? один запрос на всё, и потом в пкс каждого реквизита значения оттуда
|
|||
12
specproject
10.04.20
✎
16:20
|
(11) Как это делается?
|
|||
13
AneJIbcuH
10.04.20
✎
17:03
|
(12) Короче, я тебе в (8) ещё предложил метод..
Описываю, как будет производительно это сделать. 1. Добавляешь новый ключ в глобальную структуру "Параметры" обработчика событий "Перед выгрузкой данных" твоей конвертации. Параметры.Вставить("НоменклатураВыгрузки",Новый Массив); 2. В ПВД, где объект выборки твой справочник номенклатура ставишь Способ выборки = Стандартная и в обработчике "Перед выгрузкой" пишешь: Параметры.НоменклатураВыгрузки.Добавить(Объект.Ссылка); Отказ = Истина; так ты накапливаешь зарегистрированную номенклатуру к выгрузке в массив, но типовыми средствами не выгружаешь, отказываешься. Также можешь поставить галку "Выбирать данные для выгрузки одним запросом". 3. В обработчике событий "После выгрузки данных" твоей конвертации пишешь код с тем самым одним красивым запросом! Начинаешь так: Если Параметры.НоменклатураВыгрузки.Количество() > 0 Тогда //Перечисли в строку через запятую реквизиты, которые будешь выгружать СтрокаРеквизитов = "Артикул,Код,ВидНоменклатуры,СтавкаНДС и тд"; //Тут твой красивый запрос, где собираешь все необходимые реквизиты (как в переменной СтрокаРеквизитов + Ссылка) для выгрузки в розницу (из нужных таблиц базы источника). В Условии запроса у тебя будет Номенклатура.Ссылка В (&МассивНоменклатуры) //Устанавливаешь Параметр запроса Запрос.УстановитьПараметр("МассивНоменклатуры",Параметры.НоменклатураВыгрузки); //Далее формируешь выборку ВыборкаПоНоменклатуре = Запрос.Выполнить().Выбрать(); Пока ВыборкаПоНоменклатуре .Следующий() Цикл Реквизиты = Новый Структура(СтрокаРеквизитов); ЗаполнитьЗначенияСвойств(Реквизиты,ВыборкаПоНоменклатуре); ВыгрузитьПоПравилу(ВыборкаПоНоменклатуре.Ссылка, , Реквизиты, , "твоё_ПКО_Номенклатура"); КонецЦикла; КонецЕсли; В твоём ПКО по номенклатуре "твоё_ПКО_Номенклатура" для реквизитов ставишь галки «Получить из входящих данных». С тебя пивас :) |
|||
14
Ёпрст
10.04.20
✎
17:20
|
(12)
Создаешь одно ПКО.. создаешь в нём, например, новое свойство, Источник - Пусто,Приёмник-Пусто, сдвигаешь его наверх. ему в Перед выгрузкой пишешь:
Далее в этом же ПКО определяешь эти реквизиты, Источник-пусто, приёмник - нужный реквизит и ставишь галку - получать из входящих данных. Всё собственна. |
|||
15
Ёпрст
10.04.20
✎
17:20
|
В данном примере, это Код и Наименование
|
|||
16
Ёпрст
10.04.20
✎
17:22
|
Твоё пко отработает, поместит в структуру нужные значения недостающих атрибутов и проставит их потом как "получить из входящих данных"
|
|||
17
Маленький Вопросик
10.04.20
✎
17:25
|
да, народ у нас не тянет конвертацию... слабоват...
|
|||
18
AneJIbcuH
10.04.20
✎
17:28
|
(17) скорее ленивый: поизучать, попрактиковаться, поштудировать интернет.
|
|||
19
specproject
10.04.20
✎
20:19
|
(18) так это и есть изучение и практика. Штудировать интернет устал... везде практически только простые основы до которых и так чисто на логике можно дойти.
Сегодня сервер с базами лёг. Завтра попробую всё, что здесь увидел. |
|||
20
specproject
11.04.20
✎
20:48
|
(13) как пиво передать?
|
|||
21
specproject
12.04.20
✎
08:17
|
«Хьюстон, у нас проблемы»
У меня отвалилась выгрузка Установки цен. Там есть Номенклатура. Поэтому Отказ=Истина не получается Использовать. Отдельно правило не стал писать. И... Что с регистрацией делать? Не чистится. Где мог накосячить? |
|||
22
AneJIbcuH
12.04.20
✎
08:25
|
(20) Транспортной компанией ) я так понимаю города не далеко друг от друга )
Шутка, шутка. (21) Что значит отвалилась ? Если у тебя ПВД сначала для выгрузки Номенклатуры, далее ПВД для выгрузки установки цен. Не вижу зависимости.. И регистрация должна сниматься, если ты именно про справочник Номенклатура. |
|||
23
specproject
12.04.20
✎
08:28
|
Со стороны Розница требуется переносить только Отчеты о розничных продажах. Поэтому в регистрации везде прописал Отказ. Все правила на автопилоте созданы.
В регистрации со стороны Розница всё чисто. |
|||
24
AneJIbcuH
12.04.20
✎
08:30
|
(21) а погоди, кажется понял. У тебя номенклатура по (13) в самом конце выгружается в обработчике "После выгрузки данных".
Тогда, для каждой номенклатуры формировать реквизиты и сразу выгружать. Примерно так, как советовали в (14), но мне не нравится этот момент в количестве запросов. Если выгружается не много документов, то можно следовать примеру (13) и для документов. |
|||
25
specproject
12.04.20
✎
08:42
|
(24) ага, ссылки тоже перестали отображаться.
В основном правиле оставил только Поиск по ГУИД, Код, Номенклатура, и отключил создание. |
|||
26
specproject
12.04.20
✎
21:52
|
Небольшой отчет по лабораторной работе:
Начну с конца. Вот эти строки <ИнформацияОРегистрацииОбъекта ПустойНабор="false" ТипПриемника="" ТипИсточника="СправочникСсылка.Номенклатура" УникальныйИдентификаторПриемника="719de88c-7748-11ea-8108-6045cb74c998" УникальныйИдентификаторИсточника="719de88c-7748-11ea-8108-6045cb74c998"/> Это регистр СоответствияОбъектовИнформационныхБаз То, что ТипПриемника="" это оказалась беда. Во-первых, когда данный регистр заполняется, он передаётся обратно. С пустым ТипПриемника он вызывал ошибку, которая нигде не показывалась. (Не мог создать запись регистра). А при ошибке регистрация не снималась и ... Во-вторых, когда я выбрал Источник Справочник.Номенклатура, то ничего кроме как заполнения этого реквизита не поменялось. Т.е. получил работающий обмен. Естественно защиту от дурака я в конфигурацию вставил, но это другая история. С Самой номенклатурой получилось пока так: ПКО1 для обработки справочника: формирует красивый запрос, отправляет в ПКО2 и Отказ=Истина ПКО2 просто заполняет и записывает по полученным данным (пока там ещё не всё понятно, Родитель не выгружается, например, а пометка удаления запросто) ПКО3 для подстановки в документы, так как ПКО1 не подставишь, а то по каждой строке выгружается номенклатура |
|||
27
Курцвейл
12.04.20
✎
22:03
|
(26) А что мешает сделать 1но ПКО и привязать к нему алгоритм?
|
|||
28
specproject
13.04.20
✎
05:39
|
(27) в одном у меня получается 11 запросов для каждого реквизита. Может просто не умею по другому.
Буду рад услышать как реализовать через любые другие варианты |
|||
29
Ёпрст
13.04.20
✎
10:11
|
(28) ё..(14) не осилил что ле ? там 1 запрос для одного элемента справочника.
|
|||
30
Ёпрст
13.04.20
✎
10:11
|
и 1 ПКО
|
|||
31
Ёпрст
13.04.20
✎
10:11
|
и ПВД (которые могут не работать в ПланахОбмена) не нужны
|
|||
32
specproject
13.04.20
✎
16:46
|
(29) пробовал, не "взлетело". На ПКС ВходящиеДанные были пустыми. Может упустил чего, может УТ слишком старая.
Сегодня договорился привести Номенклатуру к классическому виду, поэтому ПКО существенно облегчится. За отзывчивость, Спасибо. |
|||
33
Ёпрст
13.04.20
✎
16:47
|
(32) картинуи с правилами покажи. Там всё работает
|
|||
34
Ёпрст
13.04.20
✎
16:47
|
*картинки
|
|||
35
specproject
13.04.20
✎
16:47
|
(31) ага, пробовал что-то писать в обработчиках ПВД и получалось, что ПКО переставали срабатывать.
|
|||
36
specproject
13.04.20
✎
16:53
|
(33) позже смоделирую. Как картинки показать? На файлобменник какой-нить?
|
|||
37
Ёпрст
13.04.20
✎
16:54
|
||||
38
Ёпрст
13.04.20
✎
16:55
|
Вот так сделай, только в первом ПКС пихай свой запрос на получение нужных реквизитов и привет
|
|||
39
specproject
13.04.20
✎
17:25
|
(38) Работает!
Или я видимо куда-то не туда запихал инициализацию входящих данных Или в слове ВходящиеДанные ошибку допустил. Спасибо |
|||
40
specproject
13.04.20
✎
17:34
|
Надеюсь у тебя правильный я-кошелёк был указан.
;-) |
|||
41
Ёпрст
13.04.20
✎
17:38
|
(39) не.. там надо еще Значение определить, чтоб точно свойство сработало
|
|||
42
Ёпрст
13.04.20
✎
17:38
|
вроде как.
|
|||
43
Ёпрст
13.04.20
✎
17:38
|
И если у тебя его не было, то могло у тебя не работать
|
|||
44
specproject
13.04.20
✎
17:42
|
(41) Если галка "получать из внешних" данных стоит, то точно работает без Значение=
сейчас попробую без галки... |
|||
45
specproject
13.04.20
✎
17:51
|
(44) Без галки "Значение=" обязательно
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |