Вопрос по конвертации

1. MARISHA_Viktoria 35 02.04.20 17:53 Сейчас в теме
Добрый вечер всем. Прошу помощи. Как в конвертации данных прописать условие, чтоб данные перенеслись в группу по определённому имени?
Суть в чем, переношу данные из бухгалтерии 3.0 в документооборот, из друх баз бп. В ДО создала две папки в справочнике контрагентов, по именам организации, теперь надо как-то перенести данные правилом обмена, но где и как написать условие, что если организация одна, переносим в одноименную папку, если другая, то в другую.
Прошу помощи.
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Sergex 58 02.04.20 18:04 Сейчас в теме
А в источниках - БП 3.0 нельзя сделать в корне справочника контрагенты папку одноименную организации? Тогда оно само при обмене залетит в нужную папку так как иерархия синхронизируется.
4. MARISHA_Viktoria 35 02.04.20 18:08 Сейчас в теме
(2)можно, но хочется как-то по другому.
5. FilippovRI 71 02.04.20 18:09 Сейчас в теме
(4) событие после загрузки данных, указывать папку конкретно каждому в зависимости от условий.
7. Sergex 58 02.04.20 18:11 Сейчас в теме
(4)По другому можно поумнеть на пару кг... :)
3. platonov.e 158 02.04.20 18:07 Сейчас в теме
Ну теоретически можете где то при загрузке смотреть префикс, и в зависимости от него искать папку. только я не знаю можно ли там до префикса дотянутся.
6. MARISHA_Viktoria 35 02.04.20 18:10 Сейчас в теме
(3) думала как-то НайтиПоНаименованию(Организация)
Или что-то подобное
9. platonov.e 158 02.04.20 18:15 Сейчас в теме
(6) ну вам ведь нужно сперва узнать какой организации вы грузите данные. Обычно их разделяют префиксами организации. Посмотрите в КД, что есть в обработчиках. Если вы как то знаете откуда грузите, то уже без проблем можно подставить группу.

PS А если в базе источника будет несколько организаций?
10. MARISHA_Viktoria 35 02.04.20 18:17 Сейчас в теме
(9)в обоих источниках по одной организации.
Сначала выгружаю из одной, потом из другой
11. platonov.e 158 02.04.20 18:25 Сейчас в теме
(10)Тогда советую вам докопаться до префикса, и по нему искать группу.
Думаю это желательно делать перед загрузкой, и только для новых, чтобы не перезаписывать номенклатуру. Но там сами смотрите как нужно)
8. FilippovRI 71 02.04.20 18:14 Сейчас в теме
(3) В поля поиска включить код, так как префикс по умолчанию содержится там и он нам нужен для анализа

В обработке полей поиска можно
1. Использовать номер варианта поиска, с помощью запроса получить нужный код, оттуда взять префикс и проанализировать его.
Пример на основании исходного кода
ОбщегоНазначенияКлиентСервер.Сообщитьпользователю("9 "+СвойстваПоиска["Артикул"]);
Если НомерВариантаПоиска  = 1  Тогда
    СтрокаИменСвойствПоиска = "Артикул,Наименование";
ИначеЕсли НомерВариантаПоиска = 2 Тогда
    СтрокаИменСвойствПоиска = "Артикул";
ИначеЕсли НомерВариантаПоиска = 3 Тогда
    СтрокаИменСвойствПоиска = "Наименование";
иначе
Запрос = новый запрос("");

Запрос.Установитьпараметр ("Код",сред(СвойстваПоиска["Код"],3))
КонецЕсли;
Показать


Вывод - можно на этапе обработки полей поиска сделать анализ по префиксу.
12. karamazoff 96 02.04.20 18:51 Сейчас в теме
если проще - сделать для бп1 правила обмена с выгрузкой в 1-у папку, для бп2 свои правила обмена с выгрузкой в другую , или при выгрузке передавать в параметр, например, ИНН организации, а после загрузки по нему сортировать
MARISHA_Viktoria; platonov.e; +2 Ответить
14. platonov.e 158 02.04.20 20:58 Сейчас в теме
(12) Согласен, вариант хороший, но для каждой организации нужно переписывать правила.
Можно ведь что то универсальное написать
15. karamazoff 96 02.04.20 21:08 Сейчас в теме
(14)Можно, через параметры, но если организаций всего 2-е и курить не очень охота то в кд2 надо исправить лишь одну строчку Родитель = Справочники.Коннтрагенты.НайтиПоКоду
16. Sergex 58 03.04.20 01:13 Сейчас в теме
(15)Если допустить что структура контрагентов в источниках тупо не имеет групп, то все будет как вы написали. А если в источниках есть некая иерархическая организация в справочниках, она таким способом сохранится в приемнике?
18. karamazoff 96 03.04.20 10:40 Сейчас в теме
(16)вод код переноса в нужную папку с иерархией вставляется в ПКО Контрагенты ПослеЗагрузки

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

для корректировки правил для второй базы достаточно открыть файл правил xml, найти там строку
мояПапка = Справочники.Контрагенты.НайтиПоКоду("папка нужной организации");
и изменить код папки на вторую организацию
13. Akuji 22 02.04.20 20:44 Сейчас в теме
В конвертации данных на закладке Параметры добавить параметр "ЭтоОрганизацияНомер"
Перед выгрузкой данных заполняем этот параметр Если нашли организацияю по коду то ЭтоОрганизацияНомер = 1 - допустим...
Далее в обработчиках по контрагентам используем этот параметр ЭтоОрганизацияНомер для установки родителя
17. Sergex 58 03.04.20 01:18 Сейчас в теме
Стоит не забывать, что в источниках вполне себе может иметься иерархическая структура у контрагентов, либо надо опираться на допущение что ее нет и не должно быть никогда.
Потому что задача состоит не в том чтобы изменять родителя у ЛЮБОГО элемента справочника в приемнике, а в том чтобы изменять его только у корневых, то есть имеющих 0 уровень в иерархии.

Второй тупой вариант (кроме добавления группы в источнике) добавить доп реквизит для контрагентов, который можно сделать не видимым, с типом значения организация, и написать код в источнике заполняющий этот доп. реквизит, при сохранении нового элемента.

А уже в приемнике написать некую пост обработку которая после выполнения обмена распихивает по значению этого доп. реквизита элементы и группы которые попали в корень по группам которые нужны но отсутствуют в источниках.

Это чтобы не лезть в КД...
19. Deryni 23 03.04.20 14:31 Сейчас в теме
А организация указана в самом контрагенте?
20. Akuji 22 03.04.20 16:26 Сейчас в теме
Тут похожая задача решается: My Webpage
21. SamMix 8 04.04.20 19:20 Сейчас в теме
Можно в ПКО Контрагенты для ПКС Родитель в обработчике задать значение=наименование организации. И для свойства Родитель определить отдельное ПКО с полями поиска Наименование и ЭтоГруппа.
22. aleks-lit 06.04.20 08:29 Сейчас в теме
в каждом из правил жестко в "После Загрузки" пропишите
Объект.Родитель = Справочник.Контрагенты.НайтиПоНаименованию("Имя_соответствующей_папки")

это проще всего

или, если хотите использовать одни правила, то задайте параметр "наименование организации" . при выгрузке присвойте ему значение, допустим,
Значение = Справочник.организации.наименование
. назовите параметр "наименование_организации". а после загрузки

Если ПараметрыОбъекта["наименование_организации"] = "организация1" тогда
   Объект.Родитель = Справочник.Контрагенты.НайтиПоНаименованию("Имя_соответствующей_папки")
иначе
   Объект.Родитель = Справочник.Контрагенты.НайтиПоНаименованию("Имя_соответствующей_папки2")
КонецЕсли;


главное чтобы папка(вернее, группа) была создана в справочнике заранее
23. aleks-lit 06.04.20 08:36 Сейчас в теме
А самый простой вариант это выгрузить из одной базы и перетащить в всё в папку1, а потом выгрузить из другой и перетащить всё( кроме папки1) в папку2
можно групповой обработкой

но это если разово выгружать
triviumfan; +1 Ответить
Оставьте свое сообщение

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