|
Конвертация данных. Вопрос по справочнику контрагенты | ☑ | ||
---|---|---|---|---|
0
AlexKulikov
12.12.16
✎
18:57
|
Добрый вечер, уважаемые форумчане.
Источник - УТ 10.1 Приемник - УТ 10.3 Столкнулся с следующей проблемой: Когда переношу данные из Источника, а именно документ "Корректировка долга", то хотелось бы получить информацию о "контактных данных" выгружаемого контрагента. В результате у меня получилось следующее: В ПКО, для справочника "Контрагенты" в меню "После Выгрузки", написал следующий код: <code> Если (Не Источник.ЭтоГруппа) И (Не Источник.ПометкаУдаления) Тогда Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | КонтактнаяИнформация.Объект, | КонтактнаяИнформация.Тип, | КонтактнаяИнформация.Вид, | КонтактнаяИнформация.Представление, | КонтактнаяИнформация.Поле1, | КонтактнаяИнформация.Поле2, | КонтактнаяИнформация.Поле3, | КонтактнаяИнформация.Поле4, | КонтактнаяИнформация.Поле5, | КонтактнаяИнформация.Поле6, | КонтактнаяИнформация.Поле7, | КонтактнаяИнформация.Поле8, | КонтактнаяИнформация.Поле9, | КонтактнаяИнформация.Поле10, | КонтактнаяИнформация.Комментарий |ИЗ | РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация |ГДЕ | КонтактнаяИнформация.Объект = &Объект"; Запрос.УстановитьПараметр("Объект", Источник); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл ВыгрузитьПоПравилу(Выборка,,,,"КонтактнаяИнформация"); КонецЦикла; КонецЕсли; </code> Где Объект - это ссылка на элемент справочника "Контрагенты". В результате у меня всегда пустой результат запроса. Хотя данные по контрагенту в регистре сведений есть. Подскажите пожалуйста, где я ошибаюсь? |
|||
1
AlexKulikov
12.12.16
✎
18:57
|
С Уважением, Алексей.
|
|||
2
Cyberhawk
12.12.16
✎
18:58
|
Объект.Ссылка может установить в кач-ве значения параметра?
|
|||
3
Cyberhawk
12.12.16
✎
18:58
|
Ну и заодно покажи свой "пустой результат запроса", где ты его смотришь
|
|||
4
AlexKulikov
12.12.16
✎
19:10
|
В консоли запросов смотрю. Так у меня "Источник" - это значение ссылочного типа(Контрагенты).
А так, когда запускал режим отладки обработчиков в конвертации данных, ставил точку останову с условием Запрос.Выполнить().Пустой() при 11 итерациях, всегда получалась "Истина." В конфигураторе, у регистра сведений "КонтактнаяИнформация", для реквизита "Объект" указаны типы значений которые он может принимать, среди них СправончикСсылка.Контрагенты. |
|||
5
Defender aka LINN
12.12.16
✎
19:11
|
(0) "Объект - это ссылка", а устанавливаем Источник. Хотя он тоже не ссылка.
|
|||
6
Aleksey
12.12.16
✎
19:16
|
(5) а кто он?
Источник - Произвольный - выгружаемый объект источник (ссылка или произвольные данные) В данном случае стандартная выборка и Источник - Ссылка |
|||
7
Defender aka LINN
12.12.16
✎
19:18
|
(6) Ну, положим, не ссылка, а выборка...
|
|||
8
Aleksey
12.12.16
✎
19:19
|
С чего ты взял что результат пустое?
В ПКО КонтактнаяИнформация он заходит? Не запоминать выгруженные объекты - галку ставил? КлючВыгружаемыхДанных указывать пробовал? |
|||
9
Aleksey
12.12.16
✎
19:20
|
(7) А что выборка?
Выборка это как раз случай произвольных данных. Он корректно отработает. |
|||
10
AlexKulikov
12.12.16
✎
19:24
|
Вот как так. В консоли, без этого условия по контрагенту - есть информация.
Устанавливаю условие, выбираю любого контрагента, нет информации. <code> Если (Не Источник.ЭтоГруппа) И (Не Источник.ПометкаУдаления) Тогда Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | КонтактнаяИнформация.Объект, | КонтактнаяИнформация.Тип, | КонтактнаяИнформация.Вид, | КонтактнаяИнформация.Представление, | КонтактнаяИнформация.Поле1, | КонтактнаяИнформация.Поле2, | КонтактнаяИнформация.Поле3, | КонтактнаяИнформация.Поле4, | КонтактнаяИнформация.Поле5, | КонтактнаяИнформация.Поле6, | КонтактнаяИнформация.Поле7, | КонтактнаяИнформация.Поле8, | КонтактнаяИнформация.Поле9, | КонтактнаяИнформация.Поле10, | КонтактнаяИнформация.Комментарий |ИЗ | РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация |ГДЕ | КонтактнаяИнформация.Объект = &Объект"; Запрос.УстановитьПараметр("Объект", Источник); РезультатЗапроса = Запрос.Выполнить(); Если НЕ РезультатЗапроса.Пустой() Тогда Сообщить("Что то есть"); КонецЕсли; Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл ВыгрузитьПоПравилу(Выборка,,,,"КонтактнаяИнформация"); КонецЦикла; КонецЕсли; </code> |
|||
11
AlexKulikov
12.12.16
✎
19:24
|
Источник акватерм-Руссланд СправочникСсылка.Контрагенты
|
|||
12
AlexKulikov
12.12.16
✎
19:24
|
Вот так в отладчике выглядит Источник.
|
|||
13
h-sp
12.12.16
✎
19:28
|
(12) скопируй с других правил это. Вот не лень сидеть изобретать велосипед? Когда всё уже давным-давно написано, надо просто скопипастить.
|
|||
14
GANR
12.12.16
✎
19:45
|
(0) Это Запрос.УстановитьПараметр("Объект", Источник); на это Запрос.УстановитьПараметр("Объект", Источник.Ссылка); попробуйте заменить
|
|||
15
AlexKulikov
14.12.16
✎
16:53
|
Добрый день, уважаемые форумчане. Проблему с параметром я переборол, оказывается в УТ 10.1 для того, чтобы получить данные о контактной информации, нужно в качестве параметра передавать не ссылку на элемент справочника контрагенты, а ссылку на элемент справочников юридические лица или физические лица.
В итоге у меня получилась вот такая простыня для ПКО Контрагенты - закладка После выгрузки: <code> Если (Не Источник.ЭтоГруппа) И (Не Источник.ПометкаУдаления) Тогда мУсловие = ""; ЗапросКЮридЛицам = Новый Запрос; ЗапросКЮридЛицам.УстановитьПараметр("Контрагент", Источник); ЗапросКЮридЛицам.Текст = "ВЫБРАТЬ | ЮридическиеЛица.Ссылка, | ЮридическиеЛица.ПометкаУдаления, | ЮридическиеЛица.Предопределенный, | ЮридическиеЛица.Родитель, | ЮридическиеЛица.ЭтоГруппа, | ЮридическиеЛица.Код, | ЮридическиеЛица.Наименование, | ЮридическиеЛица.ИНН, | ЮридическиеЛица.КодПоОКПО, | ЮридическиеЛица.Комментарий, | ЮридическиеЛица.Контрагент, | ЮридическиеЛица.КПП, | ЮридическиеЛица.НаименованиеПолное, | ЮридическиеЛица.ОсновнойБанковскийСчет, | ЮридическиеЛица.Представление |ИЗ | Справочник.ЮридическиеЛица КАК ЮридическиеЛица |ГДЕ | ЮридическиеЛица.Контрагент = &Контрагент"; РезультатЗапросаКЮрикам = ЗапросКЮридЛицам.Выполнить(); Если РезультатЗапросаКЮрикам.Пустой() Тогда ЗапросКФизЛицам = Новый Запрос; ЗапросКФизЛицам.УстановитьПараметр("Контрагент", Источник); ЗапросКФизЛицам.Текст = "ВЫБРАТЬ | ФизическиеЛица.Ссылка, | ФизическиеЛица.ПометкаУдаления, | ФизическиеЛица.Предопределенный, | ФизическиеЛица.Родитель, | ФизическиеЛица.ЭтоГруппа, | ФизическиеЛица.Код, | ФизическиеЛица.Наименование, | ФизическиеЛица.Контрагент, | ФизическиеЛица.ОсновнойБанковскийСчет, | ФизическиеЛица.ИНН, | ФизическиеЛица.КодИМНС, | ФизическиеЛица.Фамилия, | ФизическиеЛица.Имя, | ФизическиеЛица.Отчество, | ФизическиеЛица.Комментарий, | ФизическиеЛица.ВидОбращения, | ФизическиеЛица.ДатаРождения, | ФизическиеЛица.Представление |ИЗ | Справочник.ФизическиеЛица КАК ФизическиеЛица |ГДЕ | ФизическиеЛица.Контрагент = &Контрагент"; РезультатЗапросаКФизикам = ЗапросКФизЛицам.Выполнить(); Если Не РезультатЗапросаКФизикам.Пустой() Тогда ТаблицаРезультатаЗапросаКФизикам = РезультатЗапросаКФизикам.Выгрузить(); Для Каждого Элемента Из ТаблицаРезультатаЗапросаКФизикам Цикл мУсловие = Элемента.Ссылка; КонецЦикла; КонецЕсли; Иначе ТаблицаРезультатЗапросаКЮрикам = РезультатЗапросаКЮрикам.Выгрузить(); Для Каждого Элемента Из ТаблицаРезультатЗапросаКЮрикам Цикл мУсловие = Элемента.Ссылка; КонецЦикла; КонецЕсли; КонецЕсли; Если ЗначениеЗаполнено(мУсловие) Тогда Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | КонтактнаяИнформация.Объект, | КонтактнаяИнформация.Тип, | КонтактнаяИнформация.Вид, | КонтактнаяИнформация.Представление, | КонтактнаяИнформация.Поле1, | КонтактнаяИнформация.Поле2, | КонтактнаяИнформация.Поле3, | КонтактнаяИнформация.Поле4, | КонтактнаяИнформация.Поле5, | КонтактнаяИнформация.Поле6, | КонтактнаяИнформация.Поле7, | КонтактнаяИнформация.Поле8, | КонтактнаяИнформация.Поле9, | КонтактнаяИнформация.Поле10, | КонтактнаяИнформация.Комментарий, | ИСТИНА КАК Активность |ИЗ | РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация |ГДЕ | КонтактнаяИнформация.Объект = &Условие"; Запрос.УстановитьПараметр("Условие", мУсловие); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл ВыгрузитьПоПравилу(Выборка,,,,"КонтактнаяИнформация"); КонецЦикла; КонецЕсли; </code> Однако, при выполнении данного "замечательного" кода возникают следующие ошибки: 1)Не найдено соответствие для значения Источника Источник = Справочник "Юридические лица" ТипИсточника = Виды объектов контактной информации Действительно, в источнике(УТ10.1) для регистра сведений "Контактная информация", указан реквизит составного типа "Объект", в котором присутствует данный справочник. В приемнике(УТ 10.3) такого справочника нет. Соответственно, в правилах конвертации, лезу в регистр сведений "Контактная информация", в ПКС для реквизита "Объект" - закладка Перед выгрузкой, пытаюсь написать свой собственный код и вот тут возникает вторая проблема, чтобы я не писал, я не могу остановиться в этом обработчике с помощью отладчика. Выдает такую ошибку: 2)шибка получения свойства объекта из входящих данных ПКО = КонтактнаяИнформация (Регистр сведений: Контактная информация) ПКС = 4 (--> Объект) Объект = (Выборка из результата запроса) СвойствоПриемника = Объект () ОписаниеОшибки = Получение элемента по индексу для значения не определено ПозицияМодуля = ВнешняяОбработка.УниверсальныйОбменДаннымиXML(8282) КодСообщения = 68 В итоге получается забавная ситуация, если я снимаю "Режим отладки обработчиков выгрузки", то у меня ошибок не возникает, и идет загрузка этого регистра, как только я его включаю и пишу в обработчике, к примеру: Сообщить("Остановись!"); У меня лезет эта ошибка. Помогите советом, куда дальше копать? Очень надеюсь на Вашу помощь, с уважением Алексей. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |