Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 16:03

И снова знатокам Конвертации данных!

Автор boobzx, 16 июл 2013, 15:24

0 Пользователей и 1 гость просматривают эту тему.

boobzx

В общем объясню сначала вкратце, как в момент получения определенного справочника в ПКС запустить выгрузку Регистра Сведений с запросом на фильтр по ссылке этого справочник? А теперь подробнее и в картинках:) ну в общем я создал два ПКО (рис: снимок_1). . http://hostingkartinok.com/show-image.php?id=624265e1613a83ebbc5e1cfd53fde1b4 Пока эти два ПКО никак между собой не взаимосвязаны и выгружаются отдельно. В ПКО товары я выгружаю карточку товара (т.е. справочник номенклатура), у каждого товара есть свойства (хранятся они в регистре сведений(это как раз второе ПКО)), я хочу по наименованию товара запросом перебирать регистры сведений и найденные данные выгружать вместе с этим товаром(на данный момент у меня грузится весь регистр сведений без фильтрации по товару). Т.е. у меня есть товар "пряник", у него свойства в регистре сведений "Пряник, Вкус, Ваниль", Запросом я ищу первое измерение "пряник", если нахожу, то его переношу. Далее я во вкладе "алгоритмы/запросы" создал простецкий запрос:

ВЫБРАТЬ
ЗначенияСвойствОбъектов.Объект,
ЗначенияСвойствОбъектов.Свойство,
ЗначенияСвойствОбъектов.Значение
ИЗ
РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
ГДЕ
ЗначенияСвойствОбъектов.Объект.Наименование = &Наименование


И на этом застрял, мне нужно как то из ПКС товары, передавать наименование в этот запрос, и запускать соответственно выгрузку регистра сведения по каждому наименованию. Не знаю куда засунуть запрос, и как в него добавить параметр.

Возможно эффективнее будет создать таблицу значений, а потом уже подставлять в параметр запроса, но как в КД создать табзначений, и потом передать ее туда в запрос, и самое главное откуда этот запрос запускать??

По моей логике это должно выглядит так, идет сначала выгрузка товара, товар выгрузился который нам нужен, далее идет выгрузка регистра сведений и как раз через запрос устанавливаем параметр наименования(это структура с нашими товарами наименования) и выгружаем данные.

Четвертый день бьюсь-бьюсь! И никак. В итоге задача, нужно перенести с карточкой товара его свойства.

MuI_I_Ika

До конца не дочитал. Много текста. Хочу привести пример как выгружать записи регистров сведений по ссылкам справочников.

Например, у нас есть справочник сотрудники и регистр сведений Сотрудники_СвойстваСотрудника.

Для выгрузки этого регистра по ссылкам нам нужно в ПКО Сотрудники в обработчике событий после выгрузки написать следующий код:

НаборЗаписей = РегистрыСведений.Сотрудники_СвойстваСотрудника.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Сотрудник.Установить(Источник,Истина);
НаборЗаписей.Прочитать();

Для каждого Запись из НаборЗаписей Цикл

ВыгрузитьПоПравилу(Запись, , , , "Сотрудники_СвойстваСотрудника");

КонецЦикла;


Данный код инициирует ПКО регистра сведений и передаст туда выгружаемую запись регистра сведений.

boobzx

Да! все супер пример подошел, решил много своих проблем. Но осталось еще две. Первая, у меня ПВХ (источник) имеет свойства разных типов(составные) Снимок_1. Когда я выгружаю из источника, типы составных данных выгружаются корректно, НООО вот в приемнике, эти типы загружаются только одним...и все, хотя в приемнике тоже свойства составной тип Снимок_2. И в итоге получается, в приемнике, где тип строка или дата, Типы разные. Соответственно дата подставляется.. но при редактировании предлагается другой тип.
Добавлено: 18 июл 2013, 10:24


Коллеги, неужели никто не подскажет почему идет смещение типов ПВХ при переносе? Я даже не знаю где копать, т.к. почитав формы, пишут что в КД программно тип в приемнике задать нельзя.

GRADUS

Цитата: boobzx от 17 июл 2013, 14:25
Да! все супер пример подошел, решил много своих проблем. Но осталось еще две. Первая, у меня ПВХ (источник) имеет свойства разных типов(составные) Снимок_1. Когда я выгружаю из источника, типы составных данных выгружаются корректно, НООО вот в приемнике, эти типы загружаются только одним...и все, хотя в приемнике тоже свойства составной тип Снимок_2. И в итоге получается, в приемнике, где тип строка или дата, Типы разные. Соответственно дата подставляется.. но при редактировании предлагается другой тип.
Добавлено: 18 июл 2013, 10:24


Коллеги, неужели никто не подскажет почему идет смещение типов ПВХ при переносе? Я даже не знаю где копать, т.к. почитав формы, пишут что в КД программно тип в приемнике задать нельзя.

В ПКС же типы задаются, лучше заново выгрузи структуру в конверташку из обоих баз.

boobzx

Цитата: GRADUS от 18 июл 2013, 10:32
Цитата: boobzx от 17 июл 2013, 14:25
Да! все супер пример подошел, решил много своих проблем. Но осталось еще две. Первая, у меня ПВХ (источник) имеет свойства разных типов(составные) Снимок_1. Когда я выгружаю из источника, типы составных данных выгружаются корректно, НООО вот в приемнике, эти типы загружаются только одним...и все, хотя в приемнике тоже свойства составной тип Снимок_2. И в итоге получается, в приемнике, где тип строка или дата, Типы разные. Соответственно дата подставляется.. но при редактировании предлагается другой тип.
Добавлено: 18 июл 2013, 10:24


Коллеги, неужели никто не подскажет почему идет смещение типов ПВХ при переносе? Я даже не знаю где копать, т.к. почитав формы, пишут что в КД программно тип в приемнике задать нельзя.

В ПКС же типы задаются, лучше заново выгрузи структуру в конверташку из обоих баз.

Угу, задаются... Но есть одно большущее но! В ПВХ я перегружаю только наименования. Больше ничего нет. Я типы могу задать только реквизитам (В ПКС), А у меня ПВХ состоят из наименования и ТипСвойста, которые определяются составным типом в свойстве Объекта, а эта хрень называется в свойстве ПВХ - Типы Значения Характеристик. Вот у меня такое ощущение, что кд при приеме берет самый последний составной тип и пихает все под него. А Хотя есть и другие типы как строка и дата. А мене это нужно переносить. И как решить Х.З.
Добавлено: 18 июл 2013, 18:03


Я часть плана раскусил! Просмотрев файл XML, я понял что у меня выгружается из ПВХ только Код и Наименование. Тип не передается.. т.к. он задается в окне свойства объекта. И соответственно не передается. Теперь другая мысль, как задать параметр, куда закинуть свои необходимые данные, а при загрузке или после загрузки эти данные считать!???
Добавлено: 19 июл 2013, 01:25


Провожу дальнейшие исследование и читаю книгу Бояркина - конвертация данных. Там как раз мой пример на 155 странице. Но снова возникла проблема.

Начинаю внедрять.. вот мой код. Ниже код.. разве что только нет сопоставление с простыми типами...Строка, дата, булево.. Может вот на них и ругается.. Выгружается корректно и в XML файле все ок(есть типы). Но при загрузке ошибка.- http://hkar.ru/hEau

Код, что использую при загрузке.


УзелТиповXML = одПолучитьXMLПредставлениеОписанияТипов(Источник.ТипЗначения);

//для переноса одного типа в другой заменим наименование
УзелТиповXML = СтрЗаменить(УзелТиповXML, "СправочникСсылка.Валюты", "СправочникСсылка.СвойстваТовара");
УзелТиповXML = СтрЗаменить(УзелТиповXML, "СправочникСсылка.ЗначенияСвойствОбъектов", "СправочникСсылка.СвойстваТовара");
УзелТиповXML = СтрЗаменить(УзелТиповXML, "СправочникСсылка.КлассификаторЕдиницИзмерения", "СправочникСсылка.СвойстваТовара");
УзелТиповXML = СтрЗаменить(УзелТиповXML, "СправочникСсылка.КлассификаторСтранМира", "СправочникСсылка.СвойстваТовара");
УзелТиповXML = СтрЗаменить(УзелТиповXML, "СправочникСсылка.КонтактныеЛица", "СправочникСсылка.СвойстваТовара");
УзелТиповXML = СтрЗаменить(УзелТиповXML, "СправочникСсылка.КонтактныеЛицаКонтрагентов", "СправочникСсылка.СвойстваТовара");
УзелТиповXML = СтрЗаменить(УзелТиповXML, "СправочникСсылка.Контрагенты", "СправочникСсылка.СвойстваТовара");
УзелТиповXML = СтрЗаменить(УзелТиповXML, "СправочникСсылка.НоменклатурныеГруппы", "СправочникСсылка.СвойстваТовара");
УзелТиповXML = СтрЗаменить(УзелТиповXML, "СправочникСсылка.Номенклатура", "СправочникСсылка.СвойстваТовара");
УзелТиповXML = СтрЗаменить(УзелТиповXML, "СправочникСсылка.Организации", "СправочникСсылка.СвойстваТовара");
УзелТиповXML = СтрЗаменить(УзелТиповXML, "СправочникСсылка.Подразделения", "СправочникСсылка.СвойстваТовара");
УзелТиповXML = СтрЗаменить(УзелТиповXML, "СправочникСсылка.Пользователи", "СправочникСсылка.СвойстваТовара");
УзелТиповXML = СтрЗаменить(УзелТиповXML, "СправочникСсылка.Проекты", "СправочникСсылка.СвойстваТовара");
УзелТиповXML = СтрЗаменить(УзелТиповXML, "СправочникСсылка.Склады", "СправочникСсылка.СвойстваТовара");
УзелТиповXML = СтрЗаменить(УзелТиповXML, "СправочникСсылка.ТипыЦенНоменклатуры", "СправочникСсылка.СвойстваТовара");
УзелТиповXML = СтрЗаменить(УзелТиповXML, "СправочникСсылка.ФизическиеЛица", "СправочникСсылка.СвойстваТовара");

ДобавитьПодчиненный(Приемник, УзелТиповXML);


Далее я лезу в саму обработку. И у меня происходит стопор на этой строке http://hkar.ru/hEaP(как бы я догадываюсь, как решить проблему,- править код обработки... но не охота править стандартный код ее)
что находится в этих переменных - http://hkar.ru/hEaZ, http://hkar.ru/hEb0. Поэкспериментировав с конфигурацией, понял чтобы система смогла заменить тип нужно указать такой код


КвЧисла = Новый КвалификаторыСтроки(10);
Пероб = Новый ОписаниеТипов("Строка",,,,КвЧисла);
Объект.ТипЗначения = Пероб;


Так вот, как это сделать, не правя обработку? что не так делается?
Возможно ли при загрузке из XML файла вытащить этот параметр, да я бы сам указал что и как? Боюсь только если я сам начну указывать на прямую параметр, то будет все равно ошибка.. т.к. сначала обрабатывается код обработки. А потом мой.



boobzx

ООООДА!!!!!!!!!!!!  РЕШИЛ ПРОБЛЕМУ!
ФУУХ ИИИХА!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Правда немного туповато.... НОООО я ЕЕ РЕШИЛ!!! Надо выпить пойти!

В общем я решил так... если в карточке товара есть свойства.. а я как раз товары переношу и свойства... то я кидаю ПВХ, а с пвх и справочник СвойстваТовара(этот справочник как минимум есть во всех типовой "торговле"). Он делает движение в регистре сведение.- ЗначениеСвойствОбъектов. А там есть Объект, СвойстваТовара, и значение, а так как он выгружается по владельцу... я смотрю какой параметр передается в значение.. и смотрю его тип и далее нахожу владельца в пвх и задаю тип программно вот ниже код. Результат тот, который я хотел.

ООООДА!!!!!!!!!!!!  РЕШИЛ ПРОБЛЕМУ!
ФУУХ ИИИХА!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Правда немного туповато.... НОООО я ЕЕ РЕШИЛ!!! Надо выпить пойти!

В общем я решил так... если в карточке товара есть свойства.. а я как раз товары переношу и свойства... то я кидаю ПВХ, а с пвх и справочник СвойстваТовара(этот справочник как минимум есть во всех типовой "торговле"). Он делает движение в регистре сведение.- ЗначениеСвойствОбъектов. А там есть Объект, СвойстваТовара, и значение, а так как он выгружается по владельцу... я смотрю какой параметр передается в значение.. и смотрю его тип и далее нахожу владельца в пвх и задаю тип программно вот ниже код. Результат тот, который я хотел.

Если Строка(ТипЗНЧ(Объект.Значения)) = "Строка" Тогда
    //находим ПВХ по наименованию

    Об = Строка(Объект.СвойстваТовара);
    Ист = ПланыВидовХарактеристик.ПрочиеСвойстваТовара.НайтиПоНаименованию(Об);
    Обк = Ист.ПолучитьОбъект();
        //определим параметры строки

        КвЧисла = Новый КвалификаторыСтроки();
        Стр = Новый ОписаниеТипов("Строка",,,,КвЧисла);
    Обк.ТипЗначения = Стр;
    Обк.Записать();
КонецЕсли;

Если Строка(ТипЗНЧ(Объект.Значения)) = "Дата" Тогда
    //находим ПВХ по наименованию

    Об = Строка(Объект.СвойстваТовара);
    Ист = ПланыВидовХарактеристик.ПрочиеСвойстваТовара.НайтиПоНаименованию(Об);
    Обк = Ист.ПолучитьОбъект();
        //определим параметры строки

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

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск