|
КД перенос остатков произвольным алгоритмом | ☑ | ||
---|---|---|---|---|
0
kanalex
19.11.24
✎
17:02
|
Доброго времени суток!
Помогите. Что-то я залип:( Переношу остатки из одной базы в другую. Сделал ПВД с произвольным алгоритмом. Запросом получаю остатки материалов, например... Выгружаю результат запроса в ТЗ. Формирую Структуру, в которую вставляю в том числе и эту ТЗ как элемент Материалы... В приемнике есть документ с ТЧ Материалы. Но при попытке выгрузки пишет ошибку: Ошибка при выгрузке данных. Поле объекта не обнаружено (Материалы) Что не так делаю? |
|||
1
Волшебник
19.11.24
✎
17:05
|
Какие базы? Какая версия КД?
|
|||
2
kanalex
19.11.24
✎
17:07
|
КД 2
БП3 и БГУ2 |
|||
3
Климов Сергей
19.11.24
✎
17:22
|
(0) Дык ТЧ Материалы есть в Приёмнике. А выгрузка происходит в Источнике. К каким Материалам в Источнике вы обращаетесь? (2) БП3 и БГУ2. Безумству храбрых поём мы песню!
|
|||
4
kanalex
19.11.24
✎
17:40
|
(3) источник в ПКО пуст
в ПВД я получаю запросом нужные остатки. И формирую Структуру для выгрузки. Данные = Новый Структура("Номер, Дата, Организация, ПометкаУдаления, Материалы");Заполняю ее... и потом ВыборкаДанных = Данные; или через ВыгрузитьПоПравилу(..) пытался. |
|||
5
Franchiser
гуру
19.11.24
✎
21:56
|
ПКГС "материалы" может быть не создал.
|
|||
6
DiMel_77
19.11.24
✎
22:51
|
(4) Скорее всего, ошибка в этой строке:
ВыборкаДанных = Данные; ВыборкаДанных - это коллекция, которую необходимо обходить. Т.е. например так: ВыборкаДанных = Новый Массив; ВыборкаДанных.Добавить(Данные); (При этом надо не забывать обязательно в ПКО ставить галку "Не запоминать выгруженные объекты"). А вот почему через ВыгрузитьПоПравилу(Данные,,,,<ИмяПКО>); не работает - загадка... Может какие то корявые алгоритмы в ПКС ПКГС "Материалы"? |
|||
8
Franchiser
гуру
20.11.24
✎
00:19
|
(6) нужно было лучше определить переменную входящиеданные вместо выборкаданных и передать ее в третий параметр выгрузитьпоправилу()
|
|||
10
craxx
20.11.24
✎
04:16
|
(0) ПВД пожалуйста выложите сюда.
|
|||
11
d4rkmesa
20.11.24
✎
10:07
|
(8) Спорно, входящиеданные в ПВД наоборот неоправданно усложняют правила. Зачем, если есть штатный способ.
|
|||
12
kanalex
22.11.24
✎
09:01
|
(10)
|
|||
13
Fedor-1971
20.11.24
✎
10:27
|
(0) Таки, уточню, на всякий случай: Галку "Получать из входящих данных" на нужных реквизитах (в т.ч. и на ТЧ Материалы) поставил?
И, это, Отказ = Истина; - не забыл? Если нет, то передавай в Источник примерно так: ВыгрузитьПоПравилу(НовСтр ,,,, "ВводНачальныхОстатковМатериалы10"); Данные - таблица значений, а нужно передавать конкретный набор данных для выгрузки одного документа |
|||
14
kanalex
20.11.24
✎
10:36
|
(13) он по сути один и есть
галки ставил и не ставил - не помогает почему-то вообще ругается, что нет такого реквизита Материалы |
|||
15
kanalex
20.11.24
✎
10:35
|
(13) Отказ = Истина - куда???
|
|||
16
Fedor-1971
20.11.24
✎
10:55
|
(15) в перед выгрузкойПоПравилу - иначе будет отрабатывать стандартный механизм
(14) Если передавать во Входящие данные, то галки обязательны (в том числе и у всей ТЧ Материалы, реквизитам тч можешь не ставить) Ругается на Материалы, т.к. передана целая таблица значений в выгрузку по правилу, предай НовСтр - т.е. конкретные данные только для одного документа У ПКО Источник - почисти, может он путается, все равно, отправляешь во ВходящиеДанные |
|||
17
kanalex
20.11.24
✎
10:55
|
(16) там в принципе один документ и передается.
|
|||
18
kanalex
20.11.24
✎
10:58
|
(16) поставил галки - теперь он вообще на каждый реквизит ругается, что не нашел его
|
|||
19
Fedor-1971
20.11.24
✎
11:12
|
(18) Выгрузка выглядит вот так?
Отказ = Истина; ВыгрузитьПоПравилу(,,НовСтр,,"ВводНачальныхОстатковМатериалы10"); Наименование реквизитов в НовСтр и в ПКО точно совпадают? В ПередВыгрузкой - сделай Сообщить(ВходящиеДанные.Номер); и чётко поймёшь, правильно ли приехали данные |
|||
20
kanalex
20.11.24
✎
11:27
|
(19) Да, выгрузка именно так выглядит.
попробую... |
|||
21
kanalex
20.11.24
✎
11:51
|
написал так:
ВыгрузитьПоПравилу(,, Данные[0], , "ВводНачальныхОстатковМатериалы10"); т.е. как раз передаю одну строку ТЗ Сообщение(Данные[0].Номер); - отрабатывает Все равно ошибка Ошибка при вызове метода контекста ЗаполнитьЗначенияСвойств |
|||
22
Fedor-1971
20.11.24
✎
11:57
|
(21) Походу, развлекаемся? Я написал где сделать Сообщить?
Напомню, в ПередВыгрузкой у ПКО ВводНачальныхОстатковМатериалы10 и выгладит оно иначе: Сообщить(ВходящиеДанные.Номер); Покажи картинку с ошибкой |
|||
23
kanalex
20.11.24
✎
13:27
|
(22) из ПКО ПередВыгрузкой тоже Сообщить работает
Выдает одно и тоже, как видно на скриншоте https://screenshare.ru/s/Mfkrr349jpUBFQiRRgGa8x |
|||
24
Fedor-1971
20.11.24
✎
14:29
|
(23) Попробуй переделать на структуру вместо строки таблицы значений
|
|||
25
kanalex
20.11.24
✎
14:31
|
(24) делал структурой тоже. - ошибка такая же:(
|
|||
26
Fedor-1971
20.11.24
✎
14:48
|
(25) стандартной обработкой из КД2 пробовал перегружать?
|
|||
27
kanalex
20.11.24
✎
15:09
|
(26) как стандартной, если мне надо подготовить данные для переноса?
Источника нет такого |
|||
28
Fedor-1971
20.11.24
✎
15:13
|
(27) точно не помню, что-то типа "универсального обмена в формате ХМЛ" - там выбираешь правила, выгружаешь данные из источника, ей же в получателе загружаешь файл
Недавно из 7.7 доставал данные, но там немного другой функционал |
|||
29
DiMel_77
20.11.24
✎
15:36
|
(27) Судя по скриншоту ошибки, у вас объект пытается синхронизироваться по уникальному идентификатору. Т.е. в ПКО ошибочно установлен признак "Искать объект приемника по внутреннему идентификатору объекта источника". И если у вас выгрузка без источника, то эта строка кода вообще не выполнилась бы никогда. Т.е. вы вводите в заблуждение, когда говорите что в ПКО у вас пустой источник.
ПодробностиИначеЕсли ПКС.Имя = "{УникальныйИдентификатор}" И ПКС.Источник = "{УникальныйИдентификатор}" И ПКС.Приемник = "{УникальныйИдентификатор}" Тогда Если Источник = Неопределено Тогда Продолжить; КонецЕсли; Если ЗначениеСсылочногоТипа(Источник) Тогда УникальныйИдентификатор = Источник.УникальныйИдентификатор(); Иначе НачальноеЗначение = Новый УникальныйИдентификатор(); СтруктураДляПроверкиНаличияСвойства = Новый Структура("Ссылка", НачальноеЗначение); ЗаполнитьЗначенияСвойств(СтруктураДляПроверкиНаличияСвойства, Источник); |
|||
30
kanalex
20.11.24
✎
16:05
|
(28) ну так, после сохранения правил, этой обработкой и пользуюсь. Именно в ней, в процессе выгрузки данных и происходит ошибка
|
|||
31
kanalex
20.11.24
✎
16:06
|
(29) Спасибо!
Убрал галку поиска по идентификатору..., но ошибка осталась:( |
|||
32
Fedor-1971
20.11.24
✎
16:17
|
(30) Галка про поиск по идентификатору действует на стороне загрузки
Надо пробовать стандартной, что идёт в комплекте с КД2, возможно, что кто-то изменил код вашей |
|||
33
kanalex
20.11.24
✎
16:33
|
(32)я работаю той, что зашита в БП3 и БГУ2
из КД2, кажется вообще не открывается... что-то было такое. |
|||
34
d4rkmesa
20.11.24
✎
16:52
|
(31) "Не запоминать выгруженные объекты" отметьте, если ПКО с пустым источником для ТЗ ВыборкаДанных. Либо формировать ключ выгружаемых данных программно.
|
|||
35
kanalex
20.11.24
✎
16:59
|
(34) да. это сделано
|
|||
36
DiMel_77
20.11.24
✎
17:57
|
(31) Еще раз, у вас в строке 1927 обработки Универсальный обмен в формате XML выполняется строка:
ВыгрузитьСвойства(Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, ПКО, ПКО.СвойстваПоиска, УзелСсылки, ВыборкаДляВыгрузкиДанных, ИмяПредопределенногоЭлемента, ВыгрузитьТолькоСсылку); А дальше производится обход коллекции свойств поиска и на правиле ПКС "{УникальныйИдентификатор}" ломается выгрузка. Т.е. это означает, что в ПКО установлен поиск по уникальному идентификатору. Установка этого признака всегда выполняется установкой флага "Искать объект приемника по внутреннему идентификатору объекта источника". Да и кстати, я не знаю почему у вас в коде используются "Входящие данные", а не тупо установка структуры в качестве источника, но делаете вы это неправильно. Если внимательно читать описание обработчиков этот момент описан: 1. ПВД.ИсходящиеДанные -> ПКО.ВходящиеДанные 2. ПКО.ВходящиеДанные -> ПКС.ВходящиеДанные 3. ПКС.ИсходящиеДанные -> ПКО.ВходящиеДанные Т.е. у вас используется такой код: ВыгрузитьПоПравилу(,, Данные, , "ВводНачальныхОстатковМатериалы10"); А должен быть такой: ВыгрузитьПоПравилу(,,, Данные, "ВводНачальныхОстатковМатериалы10"); (Вы должны передавать данные в параметр "Исходящие данные", чтобы потом в ПКО получить из входящих, а не кидать во "Входящие данные"). Я не понимаю почему просто не сделать выгрузку так: ВыгрузитьПоПравилу(Данные,,,, "ВводНачальныхОстатковМатериалы10"); (Сняв соответствено галочки о необходимости получения данных из входящих данных в ПКО "ВводНачальныхОстатковМатериалы10") |
|||
37
Fedor-1971
20.11.24
✎
18:12
|
(36) В данном случае ВыгрузитьПоПравилу(,, ВходящиеДанные ... попадут в ПКО ВходящиеДанные
|
|||
38
DiMel_77
20.11.24
✎
18:37
|
(37) Да точно, тут же ВыгрузитьПоПравилу, а не установка переменной (т.е. если бы выгрузка осуществлялась без этого метода, а через использование ВыборкиДанных, тогда надо было дополнительно инициализировать "ИсходящиеДанные"). Но в любом случае в свойствах поиска присутствует ссылка (уникальный идентификатор), а этого быть не должно.
|
|||
39
kanalex
20.11.24
✎
23:11
|
(36) пробовал менять место параметра в вызове метода ВыгрузитьПоПравилу(...) - не помогает. Ошибка слегка меняется, но все равно выгрузка не происходит.
поиск по УИН отключил - не помогает |
|||
40
craxx
21.11.24
✎
00:16
|
(39) скрин ПКО в КД еще до кучи
что-то там неверно походу |
|||
41
Волшебник
21.11.24
✎
00:17
|
(39) >> Ошибка слегка меняется
Что меняется? |
|||
42
kanalex
21.11.24
✎
00:30
|
(41) если Данные поставить первым параметром, то
как будто не видит вообще структуру. Ругается не реквизиты. Галочка взять из входящих не помогает. Ошибка при выгрузке данных: Ошибка в обработчике события ПередОбработкойПравилаВыгрузки ПВД = ВводНачальныхОстатковМатериалы10 Обработчик = ПередОбработкойВыгрузкиДанных ОписаниеОшибки = Ошибка в обработчике события ПередВыгрузкойОбъекта ПКО = ВводНачальныхОстатковМатериалы10 (:) Объект = Структура (Структура) Обработчик = ПередВыгрузкойОбъекта ОписаниеОшибки = Значение не является значением объектного типа (Номер) ПозицияМодуля = ПозицияМодуля = {(1)}:Сообщить(ВходящиеДанные.Номер); {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(1750)}:Выполнить(ПКО.ПередВыгрузкой); {(61)}:ВыгрузитьПоПравилу(Данные,,, , "ВводНачальныхОстатковМатериалы10"); {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(11279)}:Выполнить(Правило.ПередОбработкой); {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(11465)}:ВыгрузитьДанныеПоПравилу(ПравилоВыгрузки); {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(13458)}:ОбработатьПравилаВыгрузки(КоллекцияПравилаВыгрузки().Строки, СоответствиеУзловИПравилВыгрузки); {Обработка.УниверсальныйОбменДаннымиXML.Форма.УправляемаяФорма.Форма(1607)}:ОбъектДляСервера.ВыполнитьВыгрузку(); [ОшибкаВоВремяВыполненияВстроенногоЯзыка, ОшибкаИспользованияВстроенногоЯзыка] КодСообщения = 41 {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(3269)}:ВызватьИсключение СтрокаСообщенияОбОшибке; {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(1755)}:ЗаписатьИнформациюОбОшибкеВыгрузкиОбработчикаПКО(41, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), {(61)}:ВыгрузитьПоПравилу(Данные,,, , "ВводНачальныхОстатковМатериалы10"); {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(11279)}:Выполнить(Правило.ПередОбработкой); {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(11465)}:ВыгрузитьДанныеПоПравилу(ПравилоВыгрузки); {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(13458)}:ОбработатьПравилаВыгрузки(КоллекцияПравилаВыгрузки().Строки, СоответствиеУзловИПравилВыгрузки); {Обработка.УниверсальныйОбменДаннымиXML.Форма.УправляемаяФорма.Форма(1607)}:ОбъектДляСервера.ВыполнитьВыгрузку(); [ОшибкаВоВремяВыполненияВстроенногоЯзыка, ИсключениеВызванноеИзВстроенногоЯзыка] КодСообщения = 31 {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(3294)}:ВызватьИсключение СтрокаСообщенияОбОшибке; {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(11285)}:ЗаписатьИнформациюОбОшибкеОбработчикиПВД(31, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(11465)}:ВыгрузитьДанныеПоПравилу(ПравилоВыгрузки); {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(13458)}:ОбработатьПравилаВыгрузки(КоллекцияПравилаВыгрузки().Строки, СоответствиеУзловИПравилВыгрузки); {Обработка.УниверсальныйОбменДаннымиXML.Форма.УправляемаяФорма.Форма(1607)}:ОбъектДляСервера.ВыполнитьВыгрузку(); [ОшибкаВоВремяВыполненияВстроенногоЯзыка, ИсключениеВызванноеИзВстроенногоЯзыка] |
|||
43
kanalex
21.11.24
✎
00:33
|
(41) Если Данные ставим в конец, предпоследним параметром, то примерно так же
Ошибка при выгрузке данных: Ошибка в обработчике события ПередОбработкойПравилаВыгрузки ПВД = ВводНачальныхОстатковМатериалы10 Обработчик = ПередОбработкойВыгрузкиДанных ОписаниеОшибки = Ошибка в обработчике события ПередВыгрузкойОбъекта ПКО = ВводНачальныхОстатковМатериалы10 (:) Объект = Структура (Структура) Обработчик = ПередВыгрузкойОбъекта ОписаниеОшибки = Значение не является значением объектного типа (Номер) ПозицияМодуля = ПозицияМодуля = {(1)}:Сообщить(ВходящиеДанные.Номер); {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(1750)}:Выполнить(ПКО.ПередВыгрузкой); {(61)}:ВыгрузитьПоПравилу(Данные,,, , "ВводНачальныхОстатковМатериалы10"); {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(11279)}:Выполнить(Правило.ПередОбработкой); {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(11465)}:ВыгрузитьДанныеПоПравилу(ПравилоВыгрузки); {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(13458)}:ОбработатьПравилаВыгрузки(КоллекцияПравилаВыгрузки().Строки, СоответствиеУзловИПравилВыгрузки); {Обработка.УниверсальныйОбменДаннымиXML.Форма.УправляемаяФорма.Форма(1607)}:ОбъектДляСервера.ВыполнитьВыгрузку(); [ОшибкаВоВремяВыполненияВстроенногоЯзыка, ОшибкаИспользованияВстроенногоЯзыка] КодСообщения = 41 {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(3269)}:ВызватьИсключение СтрокаСообщенияОбОшибке; {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(1755)}:ЗаписатьИнформациюОбОшибкеВыгрузкиОбработчикаПКО(41, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), {(61)}:ВыгрузитьПоПравилу(Данные,,, , "ВводНачальныхОстатковМатериалы10"); {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(11279)}:Выполнить(Правило.ПередОбработкой); {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(11465)}:ВыгрузитьДанныеПоПравилу(ПравилоВыгрузки); {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(13458)}:ОбработатьПравилаВыгрузки(КоллекцияПравилаВыгрузки().Строки, СоответствиеУзловИПравилВыгрузки); {Обработка.УниверсальныйОбменДаннымиXML.Форма.УправляемаяФорма.Форма(1607)}:ОбъектДляСервера.ВыполнитьВыгрузку(); [ОшибкаВоВремяВыполненияВстроенногоЯзыка, ИсключениеВызванноеИзВстроенногоЯзыка] КодСообщения = 31 {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(3294)}:ВызватьИсключение СтрокаСообщенияОбОшибке; {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(11285)}:ЗаписатьИнформациюОбОшибкеОбработчикиПВД(31, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(11465)}:ВыгрузитьДанныеПоПравилу(ПравилоВыгрузки); {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(13458)}:ОбработатьПравилаВыгрузки(КоллекцияПравилаВыгрузки().Строки, СоответствиеУзловИПравилВыгрузки); {Обработка.УниверсальныйОбменДаннымиXML.Форма.УправляемаяФорма.Форма(1607)}:ОбъектДляСервера.ВыполнитьВыгрузку(); [ОшибкаВоВремяВыполненияВстроенногоЯзыка, ИсключениеВызванноеИзВстроенногоЯзыка] |
|||
44
kanalex
21.11.24
✎
00:41
|
(40) https://screenshare.ru/s/FrpUGaE3pkxjZkWKi4BUiS
галки получать из входящих данных ставил, пробовал... писал об этом |
|||
45
Franchiser
гуру
21.11.24
✎
01:42
|
(44) что мешает выгрузить обработчики в файл для отладки?
|
|||
46
Ageres
21.11.24
✎
07:06
|
(0) У тебя структура выгружаемых данных не соответсвует ПКО.
СтруктураДокумента = Новый Структура("Дата, Материалы"); СтруктураДокумента.Дата = Дата(2024, 9, 30, 23, 59, 59); СтруктураДокумента.Материалы = Запрос.Выполнить().Выгрузить(); ВыгрузитьПоПравилу(СтруктураДок, , , , "ВводНачальныхОстатковМатериалы10 "); |
|||
47
kanalex
22.11.24
✎
09:00
|
(46) не совсем так...
там не все поля заполнены, да, но некоторые из них присваиваются через Значение в обработчиках ПКС. Их тоже надо добавлять в структуру? Сейчас так: Данные = Новый Структура; Данные.Вставить("Номер", "КД00-000001"); Данные.Вставить("Дата", Дата(2024, 9, 30, 23, 59, 59)); Данные.Вставить("Организация", "........."); Данные.Вставить("ПометкаУдаления", Ложь); Данные.Вставить("РазделУчета", "Материалы"); Данные.Вставить("Материалы", Материалы); |
|||
48
kanalex
21.11.24
✎
10:26
|
(45) нет доступа к серверу с отладкой в данном случае:(
|
|||
49
kanalex
21.11.24
✎
11:31
|
(46) прописал все поля в структуру - не помогло:(
|
|||
50
kanalex
21.11.24
✎
21:54
|
Эх! Давно не брал я в руки шашки:)!
Все сложилось... Пришлось поправить все ПКО без источника и завести новые, там, где это требовалось. Выгрузка сложилась. Щас посмотрим на загрузку... Загрузка тоже случилась после небольших штрихов! Всем спасибо за поддержку. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |