Имя: Пароль:
1C
1С v8
Конвертация. Перенос данных из независимого рег. св. доп. свойства справочника
0 elevika
 
09.12.19
11:02
Уважаемые, нужна помощь. Имеются две нестандартные конфы. В источнике есть независимый непериодический РС: изм. Номенклатура, ресурсы Комплект (спр. Комплеты) и Коллекция (спр. Коллекции).
Во приемнике данные о Компелкта и Коллекциях (такие же спр., как в источнике) являются доп. свойствами, т.е. находятся в РС ЗначенияСвойствОбъектов. Написала правила.
Сделала ПКО "КомплектыКоллекцияВСвойство" без источника, приемник РС ЗначенияСвойстОбъектов. ПКС указала для Объект,Свойство,Значение - получить из входящих.
ПВД ПередВыгрузкой заношу данные в ИсходящиеДанные и выгружаю по правилу
ИсходящиеДанные = Новый Структура;
ИсходящиеДанные.Вставить("Свойство","00125");  // Колекция
ИсходящиеДанные.Вставить("Значение",Объект.Коллекция);
ИсходящиеДанные.Вставить("Объект",Объект.Номенклатура);
ВыгрузитьПоПравилу(,,ИсходящиеДанные,,"КомплектыКоллекцияВСвойство");

ИсходящиеДанные = Новый Структура;
ИсходящиеДанные.Вставить("Свойство","00166");  // Комплект
ИсходящиеДанные.Вставить("Значение",Объект.Комплект);
ИсходящиеДанные.Вставить("Объект",Объект.Номенклатура);
ВыгрузитьПоПравилу(,,ИсходящиеДанные,,"КомплектыКоллекцияВСвойство");
В при файловом обмене все ОК, при обмене через план-обмен ошибки:
ПВД =  КомплектыИКоллекции
Объект =  РегистрСведенийНаборЗаписей.КомплектыИКоллекции  (Регистр сведений набор записей: КомплектыИКоллекции)
Обработчик =  ПередВыгрузкойОбъектаВыборки
ОписаниеОшибки =  Поле объекта не обнаружено (Коллекция)
1 Ёпрст
 
гуру
09.12.19
11:05
а через план обмена твоего пвд нету
2 Ёпрст
 
гуру
09.12.19
11:05
там выгружаются зарегистрированные к обмену объекты
3 Ёпрст
 
гуру
09.12.19
11:07
своё выгрузить по правилу, запихни в ПКО номенклатуры, например, чтоб вместе с ней и свойства летели
4 Ёпрст
 
гуру
09.12.19
11:09
Ну у меня, в После Выгрузки в ПКО клиентосов,, так, например, воткнуто:


Запрос = Новый Запрос("
|ВЫБРАТЬ
|    *
|ИЗ
|    РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
|ГДЕ
|    КонтактнаяИнформация.Объект = &Объект");
Если Источник.ССылка = Источник Тогда
    Запрос.УстановитьПараметр("Объект", Источник);
Иначе
    Запрос.УстановитьПараметр("Объект", Источник.ССылка);
КонецЕсли;
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
    ВыгрузитьПоПравилу(,,Выборка, , "КонтактнаяИнформация");
КонецЦикла;
5 elevika
 
09.12.19
11:13
(1) Есть ПВД: Источник РС КомплектыИКоллеции (из конфы-источника) и ПКО "КомплектыКоллекцияВСвойство" (которое без источника)
В файловом режиме же срабатывает
6 Ёпрст
 
гуру
09.12.19
11:15
(5) еще раз, при выгрузку через планОбмена, пвд не участвуют.. не доходит ?
7 elevika
 
09.12.19
11:24
(4) У меня проблема, что я выгружаю Регистр, он независимый, т.е. нет регистратора, в ПКО которого я могла бы вставить "ПослеВыгрузки"
8 elevika
 
09.12.19
11:26
(6) План обмена доходит до ПВД, но выдает ошибку:
ПВД =  Карат_НоменклатураКомплектовИКоллекций
Объект =  РегистрСведенийНаборЗаписей.НоменклатураКомплектовИКоллекций  (Регистр сведений набор записей: Номенклатура Комплектов и Коллекций)
Обработчик =  ПередВыгрузкойОбъектаВыборки
ОписаниеОшибки =  Поле объекта не обнаружено (Коллекция)

т.е. застревает на строчке
ИсходящиеДанные.Вставить("Объект",Объект.Номенклатура);
Не находит реквизит Номенклатура в наборе записей регистра.
9 elevika
 
09.12.19
11:28
(8) перепутала строчки. застревает на строке
ИсходящиеДанные.Вставить("Значение",Объект.Комплект);

На самом деле, не важно, какой реквизит объекта будет читаться - не может найти любой
10 Ёпрст
 
гуру
09.12.19
11:41
(7) вставляй в ПКО Номенклатура
11 Ёпрст
 
гуру
09.12.19
11:41
в После Выгрузки
12 Ёпрст
 
гуру
09.12.19
11:43
Хотя вообще непонятно, почему сразу ПКО на этот РС не создать ?
13 elevika
 
09.12.19
11:52
(10) Тогда у меня будет выгружаться каждый раз порядка 2 тыс. записей. А мне надо тока те записи РС, которые реально изменялись, а это происходит редко и мало.
14 Ёпрст
 
гуру
09.12.19
11:52
(13) см (12)
15 elevika
 
09.12.19
11:56
(12) Не знаю как...
Источник РС, приемник РС ЗначенияСвойствОбъектов
в ПКС получается источник-приемник
номенклатура-объект
комплект-значение
.... - свойство
В свойстве затык. Его можно получить только на стороне загрузки в спр. ПВХ по коду или наименованию. Не могу передать его параметрами из процедур выгрузки. Пробовала через ВходящиеДанные/ИсходящиеДанные... не получилось.
16 Ёпрст
 
гуру
09.12.19
11:59
(15) ну, а как сейчас у тебя, через ВыгрузитьПоПравилу оно у тебя определяется ?
17 Ёпрст
 
гуру
09.12.19
12:00
ты же можешь просто наименование ПВХ туда передать и всё, через Значение = "Вася" в ПередВыгрузкой  .. усё, оно само, потом подставит нужный тип при загрузке
18 Ёпрст
 
гуру
09.12.19
12:01
в пкс у этого свойства поставь Значение = "тут нужное наименование свойства"
19 Ёпрст
 
гуру
09.12.19
12:04
ну и , можешь еще до кучи создать ПКО на планвида характеристик свой до кучи и его указать в качестве правила в ПКС в РС
20 elevika
 
09.12.19
12:08
Так просто? Ща попробую.. Ещё вопрос: у меня в источнике два рекв. - Комплект и Коллекция. В приемнике один - Значение. В ПКС две строки?
Комплект = Значение
Коллекция = Значение
21 Ёпрст
 
гуру
09.12.19
12:17
(20) если 2 значения, то выгружай в 2 свойства, в ПередВыгрузкой в ПКО РС делай выгрузить по правилу тогда
22 Ёпрст
 
гуру
09.12.19
12:18
Или, если только 2, то можно через 2 ПКО
23 Ёпрст
 
гуру
09.12.19
12:18
в первом, Комплект, во втором Значение
24 elevika
 
09.12.19
14:08
не могу с двумя значениями справиться ((
Сделала два ПВД (одинаковые источник и приемник, но разные ПКО, и разные наименования)
Сделала два ПКО: для Комплектов и для Коллекций. В каждом из них в ПКС "Свойство" ПередВыгрузкой Значение="...." (код соотвествующего свойства).
Срабатывает первое ПВД.
25 elevika
 
09.12.19
14:11
Пробую второй вариант
Один ПВД (источник и приемник - соответствующие регистры)
ПКО ПередВыгрузкой код:
ИсходящиеДанные = Новый Структура;
ИсходящиеДанные.Вставить("Свойство","00125");  // Колекция
ИсходящиеДанные.Вставить("Значение",Источник.Коллекция);
ИсходящиеДанные.Вставить("Объект",Источник.Номенклатура);
ВыгрузитьПоПравилу(,,ИсходящиеДанные,,"КомплектыКоллекцияВСвойство");

ИсходящиеДанные = Новый Структура;
ИсходящиеДанные.Вставить("Свойство","00166");  // Комплект
ИсходящиеДанные.Вставить("Значение",Источник.Комплект);
ИсходящиеДанные.Вставить("Объект",Источник.Номенклатура);
ВыгрузитьПоПравилу(,,ИсходящиеДанные,,"КомплектыКоллекцияВСвойство");

Для ПКС указала ПолучатьИзВходящих
Ошибка ПКО - пустой Источник
26 Ёпрст
 
гуру
09.12.19
14:20
(25) забудь ты про пвд :)
27 elevika
 
09.12.19
14:21
(26) ???
Его по любому делать. В (25) я описала код для ПКО
28 elevika
 
09.12.19
14:40
Если делать два ПКО (для каждого свойства свое), то тогда и два ПВД?
29 Ёпрст
 
гуру
09.12.19
14:40
дай правила поглядеть
30 Ёпрст
 
гуру
09.12.19
14:40
(28) если выгружаешь через план обмена , то пвд не нужны
31 elevika
 
09.12.19
14:56
(30) Я никогда не связывалась с Планом обмена, т.ч. это новости для меня. Объясни механизм.
Если я создам только ПКО без ПВД, то они не подключатся, т.к. нигде нет на них ссылок. Как это работает?
32 Ёпрст
 
гуру
09.12.19
14:58
(31) в плане обмена регистрируются объекты к выгрузке, по правилам ПКО они выгружаются, всё собственна. Можешь еще налепить свои Правила Регистрации объектов
33 Ёпрст
 
гуру
09.12.19
14:59
Пвд там нема, он нужен только для универсальнойвыгрузки
34 elevika
 
09.12.19
15:01
(32) Попробовала сделать два ПКО  и ни одного ПВД. Не сработал обмен вообще
Добавляю ПВД со ссылкой на какого-то ПКО, все срабатывает по этому ПКО
Добавляю второй ПВД со ссылкой на второй ПКО, отрабатывает тока первый, второй игнорирует
35 Ёпрст
 
гуру
09.12.19
15:13
(34) через план обмена ?
36 Ёпрст
 
гуру
09.12.19
15:14
и записи регистра сведений при этом помечены к выгрузке ?
37 Ёпрст
 
гуру
09.12.19
15:14
и выгружаешь через  обработку ОбменДаннымиXML ?
38 Cyberhawk
 
09.12.19
15:15
"мне надо тока те записи РС, которые реально изменялись, а это происходит редко и мало" // Как планируешь отбирать из этого регистра такие записи?
39 elevika
 
09.12.19
15:17
да, все через План Обмена.
Есть запись РС, которая помечена к выгрузке. Подгружаю правила в План. Делаю Синхронизацию. Отрабатывает норм, пометка с РС к выгрузке снимается. Но в приемнике данных нет (это если правила совсем без ПВД, если есть хоть 1 ПВД со ссылкой на ПКО, то отрабатывается первое)
ЗЫ.
Зато мне теперь понятно, почему правила файлового обмена не сработали в Плане - там код был в ПДВ. За это спасибо
40 elevika
 
09.12.19
15:18
(38) их изменения регистрируются в нужном Узле
41 Cyberhawk
 
09.12.19
15:19
(40) Как это согласуется с "Я никогда не связывалась с Планом обмена" из (31)?
42 Cyberhawk
 
09.12.19
15:20
"понятно, почему правила файлового обмена не сработали в Плане - там код был в ПДВ" // Если в ПВД указан произвольный алгоритм, а не выборка из конкретной таблицы, то такие ПВД ЕМНИП каждый раз выполняются и в обмене по планам обмена, по крайней мере в обвязке не на БСП
43 elevika
 
09.12.19
15:24
(41) Все бывает впервые. Никогда такого не было и вот опять ))
44 elevika
 
09.12.19
15:28
(42) Это выборка из объекта-регистра.
Так подскажи, как сделать выгрузку в два разных свойства?
45 elevika
 
09.12.19
15:43
Вобщем, основная проблема на данный момент - конвертировать одну запись РС в две
46 Cyberhawk
 
09.12.19
15:44
Способов много
47 elevika
 
09.12.19
15:46
(46) оценный ценный ответ!
48 elevika
 
10.12.19
11:35
Больше ни у кого нет советов по конвертации одно записи РС в две разных? РС независимый, т.е. без регистратора
49 Ёпрст
 
гуру
10.12.19
14:57
(48) правила выложи свои
50 mistеr
 
10.12.19
15:16
(45) В ПВД два раза ВыгрузитьПоПравилу() - что может быть проще?
51 elevika
 
10.12.19
15:23
(49) В каком виде? Что именно?
52 elevika
 
10.12.19
15:26
(50) Это бег по кругу. С этого я и начала. При файловом обмене все ОК. Через план обмена ПВД не отрабатывается, т.к. там стандартная обрабтка. А заменить стандратную на Произольный алгоритм не могу, т.к. мне надо, чтобы отрабатывалась текущая запись регистра, именно та, кот. была изменена и зарегина для переноса в др. базу
53 mistеr
 
10.12.19
15:40
(52) Ну хорошо, не в ПВД, а в ПКО ПередВыгрузкой.
54 elevika
 
10.12.19
15:45
(49)ПКО1 и ПКО2 почти одинаковы: источник=РС из базы-источника. Приемник=РС базы-приемника
Отличаются только одним ПКС "Свойство" в которое в каждом из правил я пишу ПередВыгрузкой свое значение

Если в ПКО1 ПередВыгрузкой (да и ПослеВыгрузки пробовала) пишу вызов ПКО2
ВыгрузитьПоПравилу(Источник,,,,"КоллекцииВСвойство",,,);

т.е. вроде должно отработаться ПКО2 и ПКО1

при обмене ошибка
ВНЕШНЕЕ СОЕДИНЕНИЕ: Ошибка при загрузке данных: {Обработка.КонвертацияОбъектовИнформационныхБаз.МодульОбъекта(9604)}: Поле объекта не обнаружено (ДополнительныеСвойства)
55 elevika
 
10.12.19
15:45
(53) см (54)
56 Ёпрст
 
гуру
10.12.19
15:51
(41) в КД нажимаешь сохранить правила, получаешь xml файлик, его кидаешь на файлопомойку, ссылку сюда
57 elevika
 
10.12.19
16:03
58 mistеr
 
10.12.19
16:03
(55) Ошибка где-то в правилах не означает, что подход не рабочий.

Еще раз опишу.

1. ПКО1 для ЗначенияСвойствОбъектов без источника.
2. ПКО2 с источником КомплектыИКоллекции и приемником что угодно, например ЗначенияСвойствОбъектов.

В ПКО2 Перед выгрузкой 2 раза формируем структуру для ПКО1 и выгружаем  ВыгрузитьПоПравилу() с ПКО1. Затем Отказ = Истина.
59 elevika
 
10.12.19
16:23
(58) Так это уже подробнее. Не поняла "...2 раза формируем структуру для ПКО1..."
Зачем второй раз?
И зачем структуру, если передаем источник?
60 mistеr
 
10.12.19
16:24
(59) Тебе же нужно одну запись в две. Передаем не источник, а структуру приемника.
61 elevika
 
10.12.19
16:26
(60) да, это я затупила ))
62 mistеr
 
10.12.19
16:29
СтруктураДопСвойство = Новый Структура("Объект,Свойство,Значение", Источник.Номенклатура, "00125", Источник.Коллекция);
    ВыгрузитьПоПравилу(СтруктураДопСвойство, , , , "ЗначенияСвойствОбъектов");
63 runoff_runoff
 
10.12.19
16:29
там же в ошибке явно сказано, что требуется РегистрСведенийНаборЗаписей, а не одна запись
перед выгрузкой в исходящих данных нужен массив структур, таблица значений или выборка запроса с нужными полями
64 elevika
 
10.12.19
16:43
(58) та же ошибка
ВНЕШНЕЕ СОЕДИНЕНИЕ: Ошибка при загрузке данных: {Обработка.КонвертацияОбъектовИнформационныхБаз.МодульОбъекта(9604)}: Поле объекта не обнаружено (ДополнительныеСвойства)
65 hhhh
 
10.12.19
16:48
(64) в (58) ничего нет про ДополнительныеСвойства, это вы уже сами всобачили.
66 elevika
 
10.12.19
16:50
(62) В ВыгрузитьПоПравилу Структуру не первым реквизитом (Источник), а третьим - ВходящиеДанные?
В этом случае ошибка из (64)
67 elevika
 
10.12.19
16:50
(65) Так в том то и дело, что у меня нет никаких упоминаний "ДополнительныеСвойства"....
68 elevika
 
10.12.19
16:53
(63) это вы про ошибку из начального поста? Там другая причина. В плане обмена не отрабатывается ПВД со стандартной обработкой, поэтому в ПКО входящие данные не передавались
69 elevika
 
10.12.19
17:00
(62) в ПКО "ЗначенияСвойстОбъектов" для всех ПКС "ПолучитьИзВходящих"?
70 runoff_runoff
 
10.12.19
17:02
надо использовать функцию ВыгрузитьРегистр()
71 elevika
 
10.12.19
17:04
(70) У меня регистры совсем не совпадают по структуре
72 hhhh
 
10.12.19
17:07
(69) а у вас как? не для всех?
73 elevika
 
10.12.19
17:13
(72) для всех ((
74 runoff_runoff
 
10.12.19
17:15
Отбор = Новый ТаблицаЗначений;
Отбор.Колонки.Добавить("Имя");
Отбор.Колонки.Добавить("Значение");
Отбор.Колонки.Добавить("Использование");

Строки = Новый ТаблицаЗначений;
Строки.Колонки.Добавить("Объект");
Строки.Колонки.Добавить("Свойство");
Строки.Колонки.Добавить("Значение");

СтруктураНабораЗаписей = Новый Структура("Отбор, Строки", Отбор, Строки);

Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Ссылка", Объект.Ссылка);

Запрос.Текст = Запросы.ЗаказПоставщику_СвойстваГотовыхФильтров.Текст;

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

Пока Выборка.Следующий() Цикл
    Отбор.Очистить();
    
    СтрокаОтбор = Отбор.Добавить();
    СтрокаОтбор.Имя = "Объект";
    СтрокаОтбор.Значение = Выборка.Объект;
    СтрокаОтбор.Использование = Истина;
    
    СтрокаОтбор = Отбор.Добавить();
    СтрокаОтбор.Имя = "Свойство";
    СтрокаОтбор.Значение = Выборка.Свойство;
    СтрокаОтбор.Использование = Истина;
    
    Строки.Очистить();
    
    ЗаполнитьЗначенияСвойств(Строки.Добавить(), Выборка);
    
    ВыгрузитьРегистр(СтруктураНабораЗаписей, , , Истина, "ДополнительныеСведения");
КонецЦикла;
75 hhhh
 
10.12.19
17:15
(73) и для всех пкс задано свое пко, ПКО Номенклатура, ПКО коллекции?
76 runoff_runoff
 
10.12.19
17:16
а запрос вот такой простой

ВЫБРАТЬ
    ДополнительныеСведения.Объект,
    ДополнительныеСведения.Свойство,
    ДополнительныеСведения.Значение
ИЗ
    РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения
ГДЕ
{тут что-то, какие-то условия}
77 hhhh
 
10.12.19
17:21
(76) читал (0) ? Там написано

В источнике есть независимый непериодический РС: изм. Номенклатура, ресурсы Комплект (спр. Комплеты) и Коллекция (спр. Коллекции).
78 elevika
 
10.12.19
17:24
(75) нет, этого не требуется в данные момент. Все данные по ссылкам в базе есть. Но даже если прописать ПКО, ничего не меняется. Пробовалось неоднократно. Проблема не в этом ((
79 hhhh
 
10.12.19
17:27
(78) пко обязательно пропишите. а то Объект он составной реквизит, хрен его знает по какому правилу они будет преобразовываться. Также и Значение.
80 hhhh
 
10.12.19
17:30
(78) а точно там РС ЗначенияСвойствОбъектов? Вообще-то свойства обычно находятся в ТЧ ДополнительныеРеквизиты справочника Номенклатура.
81 elevika
 
10.12.19
17:31
(79) Значение - из двух разных справочников, т.ч. ПКО не пропишешь
Свойство - передаю код ПВХ, т.ч. тоже без ПКО
82 elevika
 
10.12.19
17:33
(80) У нас наверное разные конфигурации. В моей - точно РС ЗначениеСвойстОбъектов. И в режиме файлового обмена то, что написано в (0) отбрабатывает на ура. Проблемы начались при использовании Плана обменов, т.к. там ПВД не отрабатываются
83 hhhh
 
10.12.19
17:37
(81) как это из двух.? Говорите же Номенклатура
84 elevika
 
10.12.19
17:38
(83) Номенклатура - это Объект, а значение - либо Коллекция, либо Комплект. Потому и надо две записи регистра из одной-источника
85 scanduta
 
10.12.19
18:00
(0)
(70)

правильный ответ в (70)
все делается просто
86 elevika
 
10.12.19
18:07
(85) я так понимаю, чтобы ВыгрузитьВРегистр все значения реквизитов должны быть ссылками.
У меня в реквизит Свойство передается код ПВХ, который только при загрузке превращается в ссылку на объект ПВХ
87 mistеr
 
10.12.19
18:53
(69) Нет, входящие данные здесь не нужны. Код (62) я использовал не раз.
88 Ёпрст
 
гуру
10.12.19
19:03
Так, для начала
https://cloud.mail.ru/public/3Gfw/98d8ymdwb
89 elevika
 
11.12.19
09:59
(87) Этот вариант отрабатывает правила, но ошибка выдается на этапе загрузки объекта. В конфе-приемнике в стандартной Обработка.КонвертацияОбъектовИнформационныхБаз в функции ПрочитатьОбъект() есть строка:
Объект.ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов");

Вот на ней и затыкается, пишет, что ДополнительныеСвойства у объекта не обнаружены
ДополнительныеСвойства - это свойство кот. есть почти у всех объектов конфигурации, в т.ч. и у всех рег. сведений. Не пойму, почему так происходит...
90 elevika
 
11.12.19
10:01
(88) не поняла в чем отличие этого варианта от того, что я выложила... Может, я невнимательна, но не вижу.
91 elevika
 
11.12.19
10:42
(87) Через файловый обмен все отрабатывается отлично! А через план обменов - увы (см. ошибку в (89))
92 Ёпрст
 
гуру
11.12.19
10:46
(90) Но пробовала хоть ?
93 elevika
 
19.12.19
17:07
Вернулась к этой теме.
Вариант (62) в файловом варианте обмена отрабатывает. А в варианте через план обмена ошибка: ВНЕШНЕЕ СОЕДИНЕНИЕ: Ошибка при загрузке данных: {Обработка.КонвертацияОбъектовИнформационныхБаз.МодульОбъекта(9604)}: Поле объекта не обнаружено (ДополнительныеСвойства)
Ошибка на стороне загрузки. ДополнительныеСвойства - это предопределенное свойство почти всех объектов конфы. У всех регистров оно точно есть. Не могу понять, что не так. Уже сломала голову.
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn