Имя: Пароль:
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)}: Поле объекта не обнаружено (ДополнительныеСвойства)
Ошибка на стороне загрузки. ДополнительныеСвойства - это предопределенное свойство почти всех объектов конфы. У всех регистров оно точно есть. Не могу понять, что не так. Уже сломала голову.
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн