Прием конвертации, который позволит решить много задач

0. SergeMalikov 553 16.01.13 15:52 Сейчас в теме
Описанный в данной публикации прием позволяет инициировать выгрузку информации из источника, когда нет прямого сопоставления объектов источника и приемника что можно использовать для решения широкого круга прикладных задач.


Перейти к публикации

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Филин 138 16.01.13 21:47 Сейчас в теме
Со всеми примерами еще подробно не разобрался, но по первому есть вопросы.

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

Получается что-то вроде такого:

ПВД:
 ..тут может быть какой-то цикл...

данныеДокумента = создатьОбъект("СписокЗначений");
данныеДокумента.добавитьЗначение(1,"НомерДок");
данныеДокумента.добавитьЗначение("Перенос данных","Комментарий");

тчДокумента = создатьОбъект("ТаблицаЗначений");
тчДокумента.новаяКолонка("Сумма");
тчДокумента.новаяСтрока();
тчДокумента.сумма = 100;

данныеДокумента.добавитьЗначение(тчДокумента, "Платежи");

выгрузитьПоПравилу("заглушка",,данныеДокумента,,"Платежка");

...конец цикла...
Показать


В ПКО у реквизитов шапки и у ПКГС табличной части ставим флаг "получить из входящих данных". Бонус: в ПКС полей табличной части не надо ничего писать или ставить какие-то галки, все само схватится
Spacer; echo77; wowik; V_Ladeska; GreenEye; alon; xavi; servs; fancy; +9 Ответить
2. LexSeIch 206 17.01.13 05:56 Сейчас в теме
Мир этому дому!
Конвертация - как шаманство - есть инструмент и правила, а все остальное свобода творчества. Судя по статье - это результат практического использования. Это всегда плюс.
3. Азбука Морзе 17.01.13 09:56 Сейчас в теме
После того как познакомился с XDTO-серилизацией конфигурацию "Конвертация данных" вспоминаю как страшный сон. Автор молодец. На конкретном примере показал убогость и неестественность правил и приемов КД при обмене данными между разнородными системами. За это и плюсую.
avz_1C; V_Ladeska; servs; +3 2 Ответить
4. stanru1 86 17.01.13 12:02 Сейчас в теме
(3) особенно в 7.7 XDTO сериализация рулит :)
на практике перенос (планирование - разработка - тестирование - эксплуатация) из конфигурации 77 в 82 с помощью КД выполняется в несколько раз быстрее, чем альтернативные варианты.
echo77; avz_1C; the1c; RomanBor; 1vasia1; gavrikprog; Spacer; dimas103; +8 Ответить
5. Istur 1436 17.01.13 13:15 Сейчас в теме
(3) xotr, раз такой крутой механизм для тебя, то почему нет ни одной твоей статьи про XDTO-сериализацию?
avz_1C; V_Ladeska; Ish_2; +3 Ответить
6. AlexO 129 17.01.13 13:49 Сейчас в теме
(5) Istur,
так одно в страшном сне, другое - видимо, в прекрасном сне :)
7. Азбука Морзе 17.01.13 14:17 Сейчас в теме
(5) xotr не писатель, xotr читатель:)

п.с. В соседней ветке про XDTO целый цикл статей замутили, желающие могут ознакомится.
9. ARL 299 17.01.13 16:02 Сейчас в теме
Автор заслуживает громадное уважение за то, что самостоятельно разобрался с системой КД, т.к описание КД оставляет желать лучшего (мягко говоря). Но сейчас для программистов появился громадный помощник - курсы Гилева. Все подобные задачи на курсах выполняются в качестве домашнего задания, от "шаманства" ничего не остается.

(3) xotr, "На конкретном примере показал убогость и неестественность правил и приемов КД при обмене данными между разнородными системами."
На самом деле, это вопрос компетенции. Если разобраться с КД - то никакой убогости, вполне достойная и работоспособная система.
fomix; Bukaska; +2 Ответить
15. fomix 26 18.01.13 11:36 Сейчас в теме
(3) xotr, Интересно как в XDTO можно решить задачи по конвертации одного объекта в другой, получения из одного объекта двух и более, а также наоборот, настроить поиск и прочие фичи. Сдается мне у вас есть опыт тривиального обмена через XDTO между типовыми конфами в общем виде. Не помню, чтобы при использовании XDTO, можно было бы вмешаться в процесс формирования итогового файла выгрузки.
18. Азбука Морзе 18.01.13 13:11 Сейчас в теме
(15)formix
Синтаксис-помощник:
Механизм XDTO позволяет создать модель представления данных (модель типов и значений), которая, с одной стороны, обеспечивает возможность просто и естественно манипулировать данными в среде 1С:Предприятия 8, а с другой стороны, данная модель хорошо приспособлена для прозрачного преобразования данных в другие форматы, главным образом XML.

На практике достаточно:
1.создать модель документа "Ляляля" в базе приемнике

2.создадать и описать файл для записи данных в xlm-формате
ЗаписьСообщения = ПланыОбмена.СоздатьЗаписьСообщения();
НоваяЗаписьXML = Новый ЗаписьXML;
ФайлXML = ОсновныеПараметры.ФайлВыгрузки;
НоваяЗаписьXML.ОткрытьФайл(ФайлXML, ПараметрыЗаписиXML);
ЗаписьСообщения.НачатьЗапись(НоваяЗаписьXML, СтрокаТаблицыИнформации.УзелИнформационнойБазы);

// из описания типов фабрики XDTO выберем нужные для создания объектов
Фабрика = ФабрикаXDTO;
документыТип = Фабрика.Тип("http://www.lalala.ru", "Документы");
// дальше объектные реквизиты и табличные части
ЛяляляТип = ДокументыТип.Свойства.Получить("ляляля").Тип;
ТЧляляТип =ЛяляляТип .Свойства.Получить("ТЧляля").Тип;
ЭлементТЧляляТип =ТЧляляТип.Свойства.Получить("ЭлементТЧляля").Тип;

3.запросом получить все необходимые данные для заполнения ляляля-объекта

4. обработать выборку:
Документы = Фабрика.Создать(документыТип);
Пока Выборка.Следующий() Цикл
//создадим объект XDTO и заполним его
ЛяляляОбъект = Фабрика.Создать(ЛяляляТип);
ЗаполнитьЗначенияСвойств(ЛяляляОбъект, Выборка)
документыТип.ляляля.Добавить(ЛяляляОбъект);
КонецЦикла;
5. закончить формирование XML-файла

Фабрика.ЗаписатьXML(НоваяЗаписьXML, Документы);
ЗаписьСообщения.ЗакончитьЗапись();
НоваяЗаписьXML.Закрыть();
8. Yashazz 3327 17.01.13 15:53 Сейчас в теме
Да, это идея, полезная на практике. Ещё в 2008-м пользовался точно таким подходом, разве что между двумя восьмёрочными конфами. Спасибо автору, что подробно всё разжевали и показал, мне в своё время недосуг было.
10. Stepan_1c 17.01.13 16:07 Сейчас в теме
спасибо за статью) на пару дней пораньше бы еще лучше было) эээх)
11. DoctorRoza 17.01.13 19:55 Сейчас в теме
Хорошая статья, очень нужная информация! Плюс однозначно! :)
12. KliMich 18.01.13 01:54 Сейчас в теме
Спасибо! Наглядные и показательные примеры, когда надо "приготовить из ничего..."
13. IgorXml 18.01.13 09:36 Сейчас в теме
Спасибо. Наглядно сделал.
14. OVladius 32 18.01.13 11:30 Сейчас в теме
Где вы раньше были? Всех сотрудников с 7-ки руками фигачили :(
16. Boroda 90 18.01.13 12:28 Сейчас в теме
Отличная статья! Помогла разобраться в некоторых вопросах, где раньше тупил. Спасибо автору!
17. sa1m0nn 22 18.01.13 12:49 Сейчас в теме
Спасибо за статью, нормально написано, хоть и не ново.
Видать, стал я матёрым конвертатором, ничего не удивило)
20. AlexO 129 18.01.13 14:14 Сейчас в теме
(17) sa1m0nn,
нет, просто тут затронута сугубо узкая специфика.
И все делается кодом - все преимущества КД сведены только к выгрузке в XML.
19. AlexO 129 18.01.13 14:12 Сейчас в теме
Курсы - это когда дают знания, которые потом народ не знает, куда применить.
Все это делается более наглядным и быстрым способом - через DBF.
23. saiten 230 21.01.13 15:36 Сейчас в теме
(19)
Все это делается более наглядным и быстрым способом - через DBF.

Кому-то каменным топором удобнее, кому-то - станком с ЧПУ... Каждому своё.
26. AlexO 129 24.01.13 10:05 Сейчас в теме
(23) saiten,
ну конечно, чем непонятнее и замуторнее - тем лучше: и сам не понимаешь, что там делается, и коллеги ничего не разберут, но зато сколько таинственности и значимости... :)
А вот и слушатели под стать:
Человек, победивший КД, уже достоин уважения
28. saiten 230 24.01.13 16:39 Сейчас в теме
(26) Думаю, эта тема мусолилась уже достаточно, чтобы не поднимать её ещё раз. А непонятность, собственно, - вещь относительная.
31. vkr 101 29.01.13 08:10 Сейчас в теме
(19) AlexO
Да, Вы правы...
Через DBF все получается гораздо быстрее, прозрачнее и более управляемо.
Можно из одного большого выгруженного файла с кучей информации брать
по необходимости то, что сейчас нужно, а также делать преобразования
объектов "на лету". Причем, для совершенно разных, иногда очень слабо
совместимых конфигураций ( даже и не 1С-овских иногда :) )
Но, все равно, автору большое спасибо за подробное описание процесса !
21. Tishu 3 21.01.13 04:42 Сейчас в теме
Из всей неисчерпаемой как атом КД можно зазубрить один приём - в ПВД создается таблица значений по структуре совпадающей с объектом из Приемника и вызывается ПКО - и можно быстро решать массу одноразовых задач. Достаточно посмотреть примеры конвертаций из КД.
22. AlexO 129 21.01.13 10:42 Сейчас в теме
(21) Tishu,
"одноразовых" - это только создание в приемнике тех объектов, которых нет с источнике.
24. INSh 22 22.01.13 11:38 Сейчас в теме
Человек, победивший КД, уже достоин уважения :)
А еще этот человек не поленился и поделился своими достижениями!
Молодец! Плюс.
25. karakozov 24.01.13 09:50 Сейчас в теме
XDTO Конечно отличный механизм, и не буду защищать КД, но тем не менее очень часто нужно сделать обмен и очень быстро, правильно описать большие объемы по средствам XDTO это то же серьезная работа, особенно если меняешься между разными структурами метаданных или вообще между 77 -> 8.2 . Или еще усложним, из 8.2 в иные реляционные структуры с извесной нам структурой но не свойственной 1С источнику вообще по структуре МД.Имеет место быть в общмею
27. DieseL_OFF 24.01.13 10:33 Сейчас в теме
Эххх мне бы лучше другое
29. Sasha255n 25.01.13 15:48 Сейчас в теме
Спасибо очент необходимое и интересное ренение
30. Sasha255n 25.01.13 15:48 Сейчас в теме
Как алтернатива КД имеет место на существование спасибо
32. kurvik 29.01.13 15:08 Сейчас в теме
Очень интересное решение.В практических делах пригодиться,особенно если работаешь с разными структурами метаданных или вообще между 77 -> 8.2 надо делать переброску.
33. fnv 10.02.13 19:16 Сейчас в теме
Спасибо за информацию) Оч. сложные приемы конвертации, я бы через OLE, наверное, делала, если бы мне пришлось делать такой перенос)
34. Franchiser 47 04.04.13 14:16 Сейчас в теме
Нового ничего не узнал, но статья заслуживает уважения. Рекомендую прочитать методичку О. Кузнецовой, все эти моменты там есть.
Недостаток использования переменной ВыборкаДанных с моей точки зрения - слишком много написанного кода, не всегда наглядного. То есть чтобы понять как какой объект или свойство трансформируется нужно читать весь код в обрабочике "передобработкой" ПВД. Кроме того фильтры при выгрузке из 7.7 работать не будут.
В КД есть более эффективные и наглядные механизмы: использование переменных ВходящиеДанные и Исходящиеданные, а также КлючВыгружаемыхДанных, функции ВыгрузитьПоПравилу(). Возможно в этой задаче разница особенно и не заметна, но в основной массе задач, использование указанных мной переменных более оправдано.
38. Romany 02.03.15 20:08 Сейчас в теме
(34) Franchiser, Здравствуйте. Как раз разбираюсь с этими переменными, есть много вопросов. Так например задача такая - Для простоты будем считать, что конфигурации самописные, и разные по структуре. В источнике есть документ, в приемнике надо из этого документа создать два объекта 1) справочник. 2) РегистрСведенийЗапись. Пытаюсь сделать так. 1) ПКО - Документ ->Справочник,
2) ПКО Источника нет -> РегистрСведенийЗапись, ПКС - В приемнике - структура регистра (3 поля), стоит флаг "Получить из входящих данных". Далее в ПВД Документ. В обработчике "ПослеВыгрузки" запросом получаю таблицу движений документа, для переноса их в регистр сведений в приемнике. Тут же надо вызвать функцию "ВыгрузитьПоПравилу()", но вот сложности. В какие параметры, чего пихать, и как это вообще должно работать. То есть, можно ли в параметр ИсходящиеДанные записать таблицу значений (Выгрузку запроса) или создать выборку, и в цикле формировать структуру, и вызывать выгрузить по правилу. Скажу сразу, в моем случае, ни так ни эдак не работает. Обмен происходит по средствам типовой обработки обмена. Если не сложно расскажите в двух словах, как правильно с этим работать, и использовать.
35. &rew 23 26.06.13 07:19 Сейчас в теме
Да, статья полезная. Подобный способ сам использовал при переносе из самописной 7.7 в типовую УТ 10.3, кстати методичка Кузнецовой мне помогла.
Вообще КД интересная штука, иногда осознание того, как работает правило приходит только после создания этого правила.
36. &rew 23 26.06.13 07:20 Сейчас в теме
Кстати белый серого сейчас через бедро на иппон бросит.
Зеленоград; 1vasia1; +2 Ответить
37. echo77 1161 17.07.13 16:59 Сейчас в теме
(0) ИМХО, для каждого ПКС в ПГКС создавать обработчик:

Значение = ОбъектКоллекции.ИмяКолонкиТаблицыЗначений


не надо
vermouth; +1 Ответить
39. ultrannge89 24.06.15 14:58 Сейчас в теме
Добрый день. А есть ли возможность отследить в событии после загрузки, попал ли определенный документ в выгрузку? Мне важно знать есть ли в файле, другой документ по такому же договору как мой, только с другим видом... Не могу нигде найти(
40. Pirat-37 1 06.07.15 16:03 Сейчас в теме
(39) ultrannge89, через [Сообщить()] выводите, в событии [При загрузке].
41. nems 22.09.15 17:29 Сейчас в теме
Здраствуйте! Подскажите, плиз, как перенести справочник Номенклатура по отбору
ВходящиеДанные = Новый Структура;

	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ТоварыОрганизацийОстатки.Номенклатура
		|ИЗ
		|	РегистрНакопления.ТоварыОрганизаций.Остатки КАК ТоварыОрганизацийОстатки
		|ГДЕ
		|	ТоварыОрганизацийОстатки.КоличествоОстаток > 0";

	Результат = Запрос.Выполнить();

	Выборка = Запрос.Выполнить().Выгрузить();
	
	
	ВходящиеДанные.Вставить("НоменклатураТабл", Выборка);
	
	ВыгрузитьПоПравилу(,,ВходящиеДанные,,"Номенклатура1")
Показать


Выгрузка проходит успешно.

Но есть проблема: Как правильно задать ПКО и ПКС ?
Прикрепленные файлы:
42. Kvitka_ru 14.06.17 12:30 Сейчас в теме
Спасибушки! безценная консультация!!
43. echo77 1161 30.04.19 08:59 Сейчас в теме
Обычно весь выгружаемый объект формируют в ПВД, а не в ПКГС и разных местах.
44. SergeMalikov 553 03.05.19 12:38 Сейчас в теме
(43) Да. Можно было бы сформировать в ПВД структуру соответствующую объекту в приемнике и передать нужному ПКО. Это был бы более наглядный вариант.
Оставьте свое сообщение
Вопросы с вознаграждением