Имя: Пароль:
1C
1С v8
Конвертация данных перенос контрагентов в одну папку?
0 vl_programmer
 
21.09.11
09:20
Есть 2 базы структура идентичная мне нужно перенести контрагентов из одной базы в другую. То есть все контрагенты в месте с папками должны перенестись в бд приемник в одну единственную папку которую я там создал
не важно есть ли контрагент в базе приемника или нет есть ли папка из источника в приемнике тупо без всякого поиска нужно залить в одну папку.
Пишу в правилах конвертация на обработчике событий "после загрузки"

Если Не ЗначениеЗаполнено(Объект.Родитель) Тогда
  Объект.Родитель = Справочники.Контрагенты.НайтиПоКоду("ЦБ004306");
КонецЕсли;
 
Но все контрагенты и папки кидаются в корень и получается что в корне по две одинаковых папки (структура папок контрагентов тоже похожа). Не пойму что я не так делаю?
1 OFF
 
21.09.11
09:22
СП читай что возвращает НайтиПоКоду
2 jsmith82
 
21.09.11
09:25
я делал много раз такую шляпу
один раз тожде облажался, но потом понял в чём дело
то ли обработчик не тот, то ли чё
в общем, какая-то мелочёвка
3 ptiz
 
21.09.11
09:26
(0) Если делаешь После загрузки, то тогда еще
Объект.Записать();
4 vl_programmer
 
21.09.11
09:27
(1) ага учту
(2) Жаль не помните :)
(3) Спасибо!
5 Рэйв
 
21.09.11
09:42
(3)Не надо. Это уже когда все поля заполнены(загружено) и осталось только записать.Запись еще будет
6 vl_programmer
 
21.09.11
09:48
при загрузке ругается

ПозицияМодуля     =  ВнешняяОбработка.УниверсальныйОбменДаннымиXML(4788)
КодСообщения           =  26
7 qeos
 
21.09.11
10:10
при выгрузке Родитель..
если родитель пустая() тогда Значение = ТребуемыйРодитель.
и все.
8 vl_programmer
 
21.09.11
10:11
(7)
Если Не ЗначениеЗаполнено(Объект.Родитель) Тогда
  Объект.Родитель = Справочники.Контрагенты.НайтиПоКоду("ЦБ004306");
КонецЕсли;
и должно работать?
9 qeos
 
21.09.11
10:14
(8) нет..
10 qeos
 
21.09.11
10:15
ПКС _Родитель_ ПередВыгрузкой

Если Не ЗначениеЗаполнено(Источник.Родитель) Тогда
  Значение = Справочники.Контрагенты.НайтиПоКоду("ЦБ004306");
КонецЕсли;
11 vl_programmer
 
21.09.11
10:16
(10) ага спасибо!!!! Щас попробую
12 Aprobator
 
21.09.11
10:20
не взлетит.
13 vl_programmer
 
21.09.11
10:21
(12) что сделать чтоб взлетело?
14 ptiz
 
21.09.11
10:27
(10) Тогда уж "перед загрузкой" или как там, т.е. уже в приемнике.
15 Aprobator
 
21.09.11
10:28
Создать правило именно для такого родителя с наименованием типа "ОбязательныйРодитель". В нем из реквизитов указать только код. У кода в ПКС ПередВыгрузкой указать Значение = "ЦБ004306". Поставить поиск по коду. Новый не создавать - только искать.

А в самом ПКО Справочника (откуда будет по необходимости делаться перенаправление на обязательного родителя) перед выгрузкой прописать следующее
Если Не ЗначениеЗаполнено(Источник.Родитель) Тогда
  ИмяПКО = "ОбязательныйРодитель"; // перенаправление на твое правило
КонецЕсли;
16 Aprobator
 
21.09.11
10:29
(15) упс вот так надо:

Если Не ЗначениеЗаполнено(Источник.Родитель) Тогда
  Значение = 1; // а то если значения нет, то перенапраления не будет
  ИмяПКО = "ОбязательныйРодитель"; // перенаправление на твое правило
КонецЕсли;
17 qeos
 
21.09.11
10:29
(12) чойто не взлетит?
(15) чото не понял логику
18 Aprobator
 
21.09.11
10:30
(17) а как он его найдет ПередВыгрузкой в базе приемнике?
19 Aprobator
 
21.09.11
10:31
(17) чего непонятного то? Для родителя создается правило, которое будет тупо искать родителя в базе приемнике по коду.
20 Aprobator
 
21.09.11
10:32
подобный метод используется в типовых правилах переноса Бухгалтерия 7.7 - УПП, для Организации.
21 qeos
 
21.09.11
10:32
(18) хм.. ну да. я бы тогда просто создал такую группу в истонике и все.. ))
22 Aprobator
 
21.09.11
10:33
(21) для разового решения вполне пригодный вариант. Об этом я не подумал )
23 fisher
 
21.09.11
10:51
(0) Странно. Должно работать.
Можно еще тоже самое в "Перед выгрузкой" ПКС родителя делать.
Если Не ЗначениеЗаполнено(Источник.Родитель) Тогда
  Выражение = "Справочники.Контрагенты.НайтиПоКоду("ЦБ004306")";
КонецЕсли;
Еще такая фича работает:
Если Не ЗначениеЗаполнено(Источник.Родитель) Тогда
  Значение = "ЦБ004306";
КонецЕсли;
Ну а самый универсальный способ из штатных, как уже сказали - создание отдельного правила для поиска по коду.
24 fisher
 
21.09.11
10:53
Упс.
Выражение = "Справочники.Контрагенты.НайтиПоКоду(""ЦБ004306"")";
25 vl_programmer
 
21.09.11
10:54
Попробую всем спасибо!
26 fisher
 
21.09.11
10:55
(23) + Забыл сказать.
Фича с прямым присвоением кода работает только когда вообще не указано никакое правило конвертации.
27 vl_programmer
 
21.09.11
11:28
Почти все получилось но группы сделал он элементами и в результате большая часть контрагентов не выгрузилась
28 SIS72
 
21.09.11
11:50
читай http://www.mykod.info - 7 пример - все подробно разжевано для начинаюших изучать конвертацию данных
29 Aprobator
 
21.09.11
11:54
(27) дык е мое. Реквизит то ЭтоГруппа кто будет прописывать?
В ПКС ПередВыгрузкой Значение = Источник.ЭтоГруппа();
Неужели типовые правила тяжело найти и посмотреть? Такая фигня даже в демо конверташке лежит.
30 Aprobator
 
21.09.11
11:55
(29) хотя странно, если конфа идентичная, как такая фигня вылезти могла?
31 Aprobator
 
21.09.11
11:56
(29) так делается, если с 7 ки в 8 ку данные тащить надо.