Имя: Пароль:
1C
1С v8
И снова знатокам Конвертации данных!
🠗 (Волшебник 20.07.2013 23:30)
0 Грызлик
 
18.07.13
13:58
у меня ПВХ (источник) имеет свойства разных типов(составные) http://hostingkartinok.com/show-image.php?id=f2519366eef56493efc974d92f084400. Когда я выгружаю из источника, типы составных данных выгружаются корректно, НООО вот в приемнике, эти типы загружаются только одним...и все, хотя в приемнике тоже свойства составной тип http://hostingkartinok.com/show-image.php?id=a5e5adb0d398d93768bd6ee57f0476b7. И в итоге получается, в приемнике, где тип строка или дата, Типы разные. Как сделать, что бы ПВХ типы передавались корректно. Ведь в ПКС, я передаю только наименование ПВХ, а его свойство не определяется как реквизит, и соответственно в приемнике подхватывается последний составной тип и подставляется.. Как сделать так, что бы реквизит ПВХ, имеющее составной тип строка, в приемнике, отобразился строкой, а не составным типом?
1 NcSteel
 
18.07.13
14:00
Передать параметром и при записи менять.
2 Грызлик
 
18.07.13
17:02
(1) Что-то не получается.. Создал параметр в самой конвертации (где вообще выбираю базу приемника и источника). При выгрузки задал ему значение и сообщением проверил что ему назначалось. При загрузки, я считываю этот параметр, а он пустой.
3 Грызлик
 
18.07.13
18:04
Я часть плана раскусил! Просмотрев файл XML, я понял что у меня выгружается из ПВХ только Код и Наименование. Тип не передается.. т.к. он задается в окне свойства объекта. И соответственно не передается. Теперь другая мысль, как задать параметр, куда закинуть свои необходимые данные, а при загрузке или после загрузки эти данные считать!???
4 Жан Пердежон
 
18.07.13
18:07
в ПКС галка "выгружать в параметр"  или как-то так
5 acsent
 
18.07.13
18:10
поле типзначения не передается через конвертацию стандартным способом
6 NcSteel
 
18.07.13
18:13
(5) Ну естественно не тип знч передавать, а по своемому сериализовать.
7 acsent
 
18.07.13
18:39
(6) самый простой вариант передавать пустую ссылку/значение
8 acsent
 
18.07.13
18:40
это если тип не составной
9 ramir
 
18.07.13
19:20
Для сериализации используй ЗначениеВСтрокуВнутр()

Можно не заморачиваться с параметрами и в выгрузке сформировать коллекцию с нужными полями. И конвертировать элементы коллекции в элементы ПВХ.

Выборка = ПланыВидовХарактеристик.Выбрать();

Коллекция = Новый ТаблицаЗначений;
Коллекция.Колонки.Добавить("....

Пока Выборка.Следующий() Цикл
НовСтр = Коллекция.Добавить();
...
НовСтр.Тип = ЗначениеВСтрокуВнутр(Выборка.ТипЗначения);
КонецЦикла;


В обработке при загрузке
Объект.ТипЗначения = ЗначениеИзСтрокиВнутр(Источник.Тип);

Код писал прямо здесь, возможно где-то ошибся в синтаксисе. Просто показываю как можно сделать.
10 KAO111
 
18.07.13
20:26
В книжке Бояркина прямой пример есть
11 Грызлик
 
19.07.13
01:19
(9) Пробую ваш код... Выгружается корректно. Но ругается на последнюю сточку перед загрузкой..Типа не нравится слово тип.. Источник.Тип.. или просто тип.

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

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

[code]
УзелТипов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);
[/code]

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

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

Так вот, как это сделать, не правя обработку? что не так делается?
12 KAO111
 
19.07.13
08:15
Не знаю, та ли ошибка.
Сейчас открыл свои правила. Оказывается я ОбъектМодифицирован устанавливаю сам.

ПВХ СвойстваОбъектов, кофигурация Бух 2.0.

ПКО ПриВыгрузке:
УзелТиповXML =  одПолучитьXMLПредставлениеОписанияТипов(Источник.ТипЗначения);
ДобавитьПодчиненный(Приемник, УзелТиповXML);

ПКО ПослеЗагрузки:

ОбъектМодифицирован = Ложь;

//КАО_120914 Небольшая ошибка в обработке загрузки, если изменяются только типы - не проверяет
Если ОбъектНайден И НЕ ОбщегоНазначенияЗК.МассивыИдентичны(Объект.ТипЗначения.Типы(), Ссылка.ТипЗначения.Типы()) тогда
   ОбъектМодифицирован = Истина;
КонецЕсли;
13 Грызлик
 
20.07.13
15:07
(12) НЕ та ошибка. У меня это не канает. Блин. И то делать то? Самое простое.... как пережать произвольный параметр вместе с этим объектом?? я бы засовывал с каждым выгруженным объектом свои параметры и вставлял бы их
14 ramir
 
20.07.13
18:38
(11) Ну так используй другое слово.
15 Грызлик
 
20.07.13
19:09
(14) :) В смысле? Другое слово? В строке обработке, где ошибка?
16 KAO111
 
20.07.13
19:49
(13) у меня все работает в разных местах, в приемнике точно в ПВХ разрешен приходящий тип? Сообщение об ошибке очень странное.
17 Грызлик
 
20.07.13
20:19
(16)  Да Тип Строка точно разрешена... Сейчас играюсь... в общем создал обработку в ней одна кнопка.. пробую искать данный ПВХ в базе.. нахожу... и задаю ему код ..

   Ист = ПланыВидовХарактеристик.ПрочиеСвойстваТовара.НайтиПоНаименованию("ROD 1");
   КвЧисла = Новый КвалификаторыСтроки(50);
   Стр = Новый ОписаниеТипов("Строка",,,,КвЧисла);
   Ист.Ссылка.ПолучитьОбъект().ТипЗначения = Стр;

И.....Не работает....бррррррр.....Текст ошибки вточ вточ такой же что и при обмене у КД.

Но этот же код из формы самого объекта пвх... в процедуре при открытии на сервере

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


И работает!!... вотё...к... не понимаю что за хрень.. думал в управляемой форме траблы.. но нет же.. в обычном приложении тоже самое..
18 Грызлик
 
20.07.13
22:51
ООООДА!!!!!!!!!!!!  РЕШИЛ ПРОБЛЕМУ!
ФУУХ ИИИХА!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Правда немного туповато.... НОООО я ЕЕ РЕШИЛ!!! Надо выпить пойти!

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

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

Если Строка(ТипЗНЧ(Объект.Значения)) = "Дата" Тогда
   //находим ПВХ по наименованию
   Об = Строка(Объект.СвойстваТовара);
   Ист = ПланыВидовХарактеристик.ПрочиеСвойстваТовара.НайтиПоНаименованию(Об);
   Обк = Ист.ПолучитьОбъект();
       //определим параметры строки
       КвДата = Новый КвалификаторыДаты(ЧастиДаты.Дата);
       Стр = Новый ОписаниеТипов("Дата",,,,,КвДата);
   Обк.ТипЗначения = Стр;
   Обк.Записать();
КонецЕсли;