|
Конвертация данных 2, регистр сведений в справочник | ☑ | ||
---|---|---|---|---|
0
baboon
09.07.19
✎
13:12
|
Конвертация данных 2, регистр сведений в справочник
Всем привет! Потребовалось поправить обмен данными между самопиской и УТ 11.2 Я не проф. разработчик 1С- админ, пытался сам учиться, и кое-что иногда делаю по образу и подобию :) Влез в эту тему, понял, что сделано через конвертацию данных, через ком-соединение из УТ в самописку обращается. Поставил конфу Конвертация Данных, поразбирался пару дней, и методом подобия добавил правило для выгрузки и правило для конвертации. Источник - регистр сведений, приемник в УТ - справочник. Ну по сути это кодификаторы, там надо передать код, наименование и пару числовых реквизитов. Но вот так проги написали, что в УТ это справочник, а в самописке - регистр. Вроде все понятно (думал я), сделал правило конвертации, но обмен не проходит, возникает ошибка. Я только смог запустить под отладчиком обмен и увидел там вот такое сообщение: {Обработка.КонвертацияОбъектовИнформационныхБаз.МодульОбъекта(3404)}: ВНЕШНЕЕ СОЕДИНЕНИЕ: {Обработка.КонвертацияОбъектовИнформационныхБаз.МодульОбъекта(9105)}: Поле объекта не обнаружено (СправочникСсылка.КоэфКоррекции) Объект = РегистрыСведений[ИмяРегистра].СоздатьНаборЗаписей(); ВызватьИсключение СтрокаСообщения; Увидел, что в ИмяРегистра - там СправочникСсылка.СпрКоэфКоррекции. Не понимаю - источник в правиле у меня указан РегистрСведенийЗапись. ЗначенияКоррекции, а вот приемник в УТ и есть СправочникСсылка.СпрКоэфКоррекции, так почему он в регистрах-то ищет по этому имени? В нынешнем обмене я ни одного такого правила не нашел, где регистр в справочник выгружается, но там и правил немного. Или это вообще нельзя в конвертации так делать, регистр сведений в справочник передавать? |
|||
1
vicof
09.07.19
✎
13:17
|
Гуглом пользоваться не учили?
http://1c-esse.buter.ru/konvertaciya-dannyx-2-1-iz-registra-v-spravochnik.html |
|||
2
baboon
09.07.19
✎
13:22
|
Спасибо за ссылку, только это вроде хоть и близко, но не совсем то, и вопрос все же остается - просто указать в источник регистр, в приемнике - справочник, и реквизиты сопоставить, так нельзя и аллес? Только запрос писать в правиле выгрузки как в этом примере?
|
|||
3
hhhh
09.07.19
✎
13:22
|
(0) смотрите в каком событии вы это ваяете. Если ПриВыгрузке или ПередВыгрузкой то это в УТ. Если в ПриЗагрузке или ПослеЗагрузки, то это уже самописка у вас. Вы там наверно налепили загрузку в выгрузку и наоборот.
|
|||
4
hhhh
09.07.19
✎
13:24
|
(3) да, наоборот. выгрузка -самописка, загрузка ут.
|
|||
5
vicof
09.07.19
✎
13:26
|
(2) Запрос можешь не писать, а через объектную модель. Но будет в 99% случаев тормознее.
|
|||
6
hhhh
09.07.19
✎
13:28
|
(2) и вообще, покажите скрин вашего правила.
|
|||
7
baboon
09.07.19
✎
13:29
|
(3) да я сделал совсем просто - выгрузка из регистра способ - стандартная выборка. И правило указал.
правило тоже простейшее - источник, приемник да реквизиты сопоставил, ничего не программировал, ток из списков выбирал и имена давал. Если отключаю своё правило - то данные из самописки в ут передаются. Я так понимаю, что именно при загрузке на той стороне (УТ) сбой происходит. |
|||
8
Йохохо
09.07.19
✎
13:41
|
вроде при правильном коде ошибка должна быть Поле объекта не обнаружено КоэфКоррекции, лучше переписать правило с нуля
и еще проверить что Вы в конвертации обновили структуру УТшки |
|||
9
Ёпрст
09.07.19
✎
13:42
|
(0)
в Перед выгрузкой формируй структуру +ВыгрузитьПоПравилу в приёмнике заполняй из входящийданных. Итого 2 правила ПКО |
|||
10
baboon
10.07.19
✎
18:57
|
Благодарю всех за участие. После суток мозголомки в итоге установил:
1. В штатной реализации в контексте типового обмена обработка КонвертацияОбъектовИнформационныхБаз не умеет передавать РегистрСведений в Справочник без лишних ухищрений. Просто потому, что исходящие данные, невзирая на тип приемника сразу определяет как набор записей регистра - Процедура ВыгрузитьРегистр(...). Переопределять объект в событии ПередВыгрузкой - не поможет, так как в выходных данных тип уже будет безусловно определен как "НаборЗаписейРегистра", да и сам код предполагает наличие отбора и определенной структуры именно под регистр, через который, как я понял передаются отборы по зарегистрированным измененным записям: Если ТипЗнч(НаборЗаписейДляВыгрузки) = Тип("Структура") Тогда ОтборНабораЗаписей = НаборЗаписейДляВыгрузки.Отбор; СтрокиНабораЗаписей = НаборЗаписейДляВыгрузки.Строки; Иначе // НаборЗаписей ОтборНабораЗаписей = НаборЗаписейДляВыгрузки.Отбор; СтрокиНабораЗаписей = НаборЗаписейДляВыгрузки; КонецЕсли; // записываем сначала отбор потом набор записей // отбор Приемник = СоздатьУзел("НаборЗаписейРегистра"); ///<< вот так, без всякого усложнения... Я просто добавил небольшую врезку в Процедура ВыгрузитьРегистр(...), где делаю проверку типа приемника: Процедура ВыгрузитьРегистр(НаборЗаписейДляВыгрузки, Правило = Неопределено, ВходящиеДанные = Неопределено, НеВыгружатьОбъектыПоСсылкам = Ложь, ИмяПКО = "", ПравилоВыгрузкиДанных = Неопределено) Экспорт ИсходящиеДанные = Неопределено; ОпределитьПКОПоПараметрам(Правило, НаборЗаписейДляВыгрузки, ИмяПКО); Отказ = Ложь; Свойства = Неопределено; ВходящиеДанные = Неопределено; ПриоритетОбъектовОбмена = Правило.ПриоритетОбъектовОбмена; Если //<<<< проверим тип приемника - и если это справочник, выгрузим строки набора записей как объекты Лев(Правило.ТипПриемника, СтрДлина("СправочникСсылка.")) = "СправочникСсылка." Тогда Для каждого СтрЗаписьРег Из НаборЗаписейДляВыгрузки Цикл ВыгрузкаОбъектаВыборки (СтрЗаписьРег, ПравилоВыгрузкиДанных, , ИсходящиеДанные, НеВыгружатьОбъектыПоСсылкам,,,,ИмяПКО); КонецЦикла; Иначе //<<<< проверим тип приемника - иначе штатный код: Если ТипЗнч(НаборЗаписейДляВыгрузки) = Тип("Структура") Тогда ... и это сработало. В результате просто в КД мышкой накликано правило конвертации, сопоставлены свойства, все отработало. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |