Имя: Пароль:
1C
1С v8
Перенос документов 8
0 Dimon1C
 
26.11.12
14:40
Добрый день, посоветуйте простой способ переноса документов (Поступление, Реализация) между похожими базами БП 8, то есть, конфигурация типовая одинаковая (+-1 релиз), справочники номенклатура, контрагенты общие.
1 Amra
 
26.11.12
14:42
КД 2
2 Naumov
 
26.11.12
14:43
Берем КонвертациюДанных 2, создаем правила обмена, используем Универсальный обмен в формате XML
3 Wobland
 
26.11.12
14:44
(0) не слушай их, используй КД
4 Heckfy
 
26.11.12
14:47
COM
5 Maxus43
 
26.11.12
14:48
выгрузка-загрузка xml
6 Dimon1C
 
26.11.12
14:49
А помимо КД, есть ли какие-либо готовые инструменты для переноса данных между похожими базами. КД все таки больше для разных баз, где сложные условия переноса.
Видел, ВыгрузкаЗагрузкаДанныхXML.epf, но для нее по моему нужны вообще одинаковые базы.
7 Wobland
 
26.11.12
14:50
(6) чем похожие отличаются от разных с точки зрения базы?
8 Maxus43
 
26.11.12
14:50
(6) одинаковые объекты нужны, которые выгружаешь-загружаешь
9 Dimon1C
 
26.11.12
14:58
(7) Похожие я имею ввиду, что релиз не сильно отличается, может на несколько версий, может кое-где доработано.
10 Wobland
 
26.11.12
14:59
(9) я про базу, а не про тебя
11 Wobland
 
26.11.12
15:00
+(10) похожие - значит, правила быстро сделаешь
12 Serginio1
 
26.11.12
15:04
Если конфигурации идентичны, то проще всего организовать обмен чере СериализаторXDTO или проще через
записатьxml и ПрочитатьXML
13 Serg_1960
 
26.11.12
15:05
(9) Похожие, не похожие - это не принципиально, не важно. Важно другое. Сам подумай, например, как ссылки или значения перечислений, например, передавать из одной базы в другую?
14 Serginio1
 
26.11.12
15:07
Например

Функция ПолучитьЗаписьXML(Файл) Экспорт
   ЗаписьXML=Новый ЗаписьXML;
   ЗаписьXML.ОткрытьФайл(Файл);
   ЗаписьXML.ЗаписатьОбъявлениеXML();
   
   ЗаписьXML.ЗаписатьНачалоЭлемента(XMLСтрока("Данные"));
   ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("", "http://v8.1c.ru/8.1/data/enterprise/current-config");
   ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xsi", "http://www.w3.org/2001/XMLSchema-instance");
   ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xs", "http://www.w3.org/2001/XMLSchema");
возврат ЗаписьXML
КонецФункции


ЗаписьXML=ПолучитьЗаписьXML(ИмяФайла);
Выборка = Запрос.Выполнить().Выбрать();
           Пока Выборка.Следующий() Цикл

   Объект=Выборка.Ссылка.ПолучитьОбъект();
   Если Объект<>Неопределено Тогда
         ЗаписатьXML(ЗаписьXML, Объект);
   КонецЕсли;
 КонецЦикла;
ВыгрузитьСсылочныеСправочники(ФабрикаДляКомплексной,ЗаписьXML);
ЗаписьXML.ЗаписатьКонецЭлемента();
ЗаписьXML.Закрыть()
15 Новенький_2009
 
26.11.12
15:10
справочники одинаковые, и человек ЕЩЕ ДУМАЕТ? :)

КД 2.0
16 Serginio1
 
26.11.12
15:11
И чтение
ЧтениеXML=Новый ЧтениеXML;
 
ЧтениеXML=Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(ИмяФайла);
ЧтениеXML.ПерейтиКСодержимому();
ЧтениеXML.Прочитать();

Пока ЧтениеXML.ТипУзла<>ТипУзлаXML.КонецЭлемента Цикл

//читаем очередной элемент справочника
Объект = СериализаторXDTO.ПрочитатьXML(ЧтениеXML);
Объект.ОбменДанными.Загрузка = Истина;
Объект.Записать();
//покажем что прочитали, осталось только записать объект

КонецЦикла;

ЧтениеXML.Закрыть();
17 Serginio1
 
26.11.12
15:13
В отличие от КД значительно быстрее как загрузка так и выгрузка. Между не индентичными конфигурациями использую ФабоикуXDTO и Схему загружаемой конфигурации
18 Popkorm
 
26.11.12
15:13
(6)ты проверял ВыгрузкаЗагрузкаДанныхXML?!Может работает
19 Dimon1C
 
26.11.12
15:23
(14) Интересный вариант, попробую.
20 Maxus43
 
26.11.12
15:23
(19) так и работает ВыгрузкаЗагрузкаДанныхXML
21 Новенький_2009
 
26.11.12
15:26
(17) сходи на курсы по Конвертации что ли.
22 Dimon1C
 
26.11.12
15:26
(20) Не знаю, у меня не заработала, может то что релизы немного разные.
23 Maxus43
 
26.11.12
15:28
(22) состав реквизитов этих объетов должен быть одинаков
24 Serginio1
 
26.11.12
15:28
(21) Спасибо хорошо знаю. У меня свои аналоги КД. Иногда читаю данные из готовых КД для построения процедур выгрузки через ОбъектыXDTO. Тратится на это минимум времени, а вот время выгрузки загрузки значительно сокращается
25 Новенький_2009
 
26.11.12
15:31
(24) >>У меня свои аналоги КД

Вопрос, собственно, больше не имею.
26 Новенький_2009
 
26.11.12
15:40
Кстати, не :) Есть вопрос. Как на вашем аналоге КД, например интегрироваться с онлайн обменом из БСП. Какова технология? Как изменения регистрации для планов обмена с помощью вашего аналога КД сделать? Аналогично, я надеюсь?

Зачем нужны эти велосипеды? Быстродействие, говорите, выше? Через хдто сразу сериализуете, говорите? Ну для велосипедных баз это подойдет. Куда вы в типовых ваши сериализации, с подсистемой обмена на БСП, будете только сувать? Тоже отдельной обработкой? :)
27 Serginio1
 
26.11.12
15:55
Нужны ибо обмен по КД очень медленный.
Множество настроек можно делать оптимально в коде. У меня в итоге формируются процедуры которые формируют объектXDTO
который затем записывается в файл или строку.
Когда скорость не принцпиальна пользуюсь КД, но когда такой КД нет то формирую уже свою обработку. Как между 7.7-8 так и 8-8.
Обмен хоть через Вэб сервисы, могу обходиться вообще без планов обмена данными. Все от ситуации. А здесь как раз больше свободы и все намного прозрачнее.
28 prog2012
 
26.11.12
15:56
_ COM
29 regniws
 
26.11.12
16:00
(16)(27) ну-ну.. а связанные объекты куда деваете?
30 Новенький_2009
 
26.11.12
16:00
(27) а обмены между какими конфигурациями? типовые есть там в списке тип БП 3.0, УТ 11, УНФ - там где онлайн обмен. Вот интересует - т.е. вы в них запускаете свои обработки. Я правильно понял?
31 Новенький_2009
 
26.11.12
16:01
(29) очевидно, что нужно руками закодить для начала все в его обработках )))) Зато свобода!
32 Serginio1
 
26.11.12
16:09
(29) Передаются ссылки, и по выгружаемым формируются списки, откуда уже выгружаются объекты. Иногда нужны соответствия ссылок но их очень мало () предопределенные справочники, планы счетов.
(30) Не типовые. УТ-БП, УТ-УПП, семерочные с УПП.
Руками очень мало. Все автоматически. Причем в семерках использую прямые запросы используя 1С++.
33 Serginio1
 
26.11.12
16:10
(31) А в КД обработчики разве не руками?
34 Новенький_2009
 
26.11.12
16:10
(32) поглядите как в типовых последних это все сделано.
35 Новенький_2009
 
26.11.12
16:10
(33) хм. Если вы про перед выгрузкой, да поиски (экзотические) - то да, руками. Десяточка строк кода может будет там ;)
36 Serginio1
 
26.11.12
16:11
(34) У меня не типовые. И еще раз обмен через КД очень медленный. Обмен через ОбъектыXDTO на порядок быстрее.
37 Serginio1
 
26.11.12
16:12
(34) Я смотрю. И изучаю и использую.
38 Новенький_2009
 
26.11.12
16:13
(37) когда изучишь, ответь на (26) в части "Как на вашем аналоге КД, например интегрироваться с онлайн обменом из БСП. Какова технология? Как изменения регистрации для планов обмена с помощью вашего аналога КД сделать? Аналогично, я надеюсь?"
39 Serginio1
 
26.11.12
16:19
(38) На многих базах мне не нужен онлай обмен. Пока его даже не реализовывал.Но не вижу проблем через планы обмена. Кстати а как это реализовано между 7 и 8?
40 Новенький_2009
 
26.11.12
16:21
(36) Т-SQL инжекции напрямую в приемники, будут в 5-порядков быстрее ваших хдто-сериализаций, однако ж, так мало кто делает, потому что затрахаться_можно_при_поддержке_этой_хни.
(39) у вас какие-то гипотезы есть на этот счет? :)
41 regniws
 
26.11.12
16:27
(32) штошто?? с документа подтянуть контрагента, вы чего делаете? Контрагентов не синкаете? Или синкаете? А у контрагентов есть договора, а с ними что делать? Тоже не синкать? отл, чо..
42 Serginio1
 
26.11.12
16:29
(40) А зачем? Записывает очень быстро. Между 7 и 8 видел только перенос остатков. Помню как в одной из обработок мучился для выгрузки нескольких объетов. Сначала все объекты нужно разрегистрировать, только затем зарегистрировать нужные и выгрузить, т.к. обмен идет жестко по планам обмена. Здесь я сам могу сформировать списки не трогая планы обмена.
43 kabanoff
 
26.11.12
16:30
(6) "А помимо КД, есть ли какие-либо готовые инструменты для переноса данных между похожими базами"

Конечно есть! Это же 1С:Телепат! Создан специально для "похожих баз".

А по сути: используй КД и не парь мозги ни себе, ни другим.
44 Serginio1
 
26.11.12
16:32
(41) Если в документе или справочнике выгружаются ссылочные данные то они добавляются в списки для выгрузок. Например

Процедура ВыгрузитьСсылочныеСправочники(Фабрика,ЗаписьXML) Экспорт
   счСпр=0;
   ЕстьДанные=Ложь;
   Если СписокВыгружаемыхСправочников=Неопределено Тогда
       СписокВыгруженныхСправочников=Неопределено;
       возврат
   КонецЕсли;
   
   Для каждого стр из СписокВыгружаемыхСправочников Цикл
               //Стр=СписокВыгружаемыхСправочников[СчСпр];
       Спр=Стр.Значение;
       Вид=Стр.Ключ;
       
       Если Найти("КлассификаторЕдиницИзмерения,Валюты,Организации,СтатьиДвиженияДенежныхСредств,",Вид+",")<>0 Тогда
         Продолжить
       КонецЕсли;
   
       СпрВыгруженные=ПолучитьСписокВыгруженныхСпрПоТипу(Стр.Ключ);
       МассивУдаляемыхДанных=Новый Массив;
       Сообщить("Выгрузка "+Вид);
       Для каждого Стр из Спр Цикл
           Ссылка=Стр.Ключ;
           Если СпрВыгруженные[Ссылка]=Неопределено Тогда
               Объект=Ссылка.ПолучитьОбъект();
               Попытка
               Выполнить("CatalogObject_"+Вид+"(Фабрика,Объект,ЗаписьXML)");
               ЕстьДанные=истина;

           Исключение
               Сообщить(Вид);
               Сообщить(ОписаниеОшибки());
               КонецПопытки;
                           КонецЕсли;
           МассивУдаляемыхДанных.Добавить(Ссылка);
       КонецЦикла;
       
       Для каждого стр из МассивУдаляемыхДанных Цикл
           Спр.Удалить(стр);
       КонецЦикла;
       
       
   КонецЦикла;    
   
   Если ЕстьДанные Тогда
   ВыгрузитьСсылочныеСправочники(Фабрика,ЗаписьXML)
     Иначе
    СписокВыгружаемыхСправочников=Неопределено;
    СписокВыгруженныхСправочников=Неопределено;
   КонецЕсли;    
КонецПроцедуры
45 regniws
 
26.11.12
16:38
(44) и в чем отличие от кд!? ))) Ах, да, в том что КД масштабируема и кастомизируема, точно!
46 regniws
 
26.11.12
16:43
+(45) не надо изобретать велосипеды. КД работает по скорости приемлемое количество времени; всегда можно оптимизировать, как уже и написали, что можно вплоть до т-скуля дойти, там еще быстрее; а советовать людям какое-то заплаточное решение, сделанное на коленке с полным отстутствием возможности поддержки данного на коленке, с отсутствием масштабируемости и адскими трудозатратами - не круто.
47 Serginio1
 
26.11.12
16:49
(45) В том, что намного быстрее КД, прозрачна для кодера.
Не вижу проблем в использовании своих инструментов. Я трачу на создание обмена минимум времени без готового КД. Когда скорость удовлетворяет использую КД. Да и изобретать велосипеды намного интереснее и полезнее. В отличие от тебя у меня есть множество инстркментов.
А человеку всегда пригодится знание что такое ФабрикаXDTO, СериализаторXDTO , Схема и прочее на чем кстати и стоит нынешняя 1С
48 regniws
 
26.11.12
16:55
(47) это называется задротство. Умелое повторное использование готового фреймворка - вот главное умение. А не писать по 100500 раз то, что уже реализовано в БСП.
Изобретать велосипеды - это бич программистов, культ карго, если хотите. Прочитали где-то про сериализацию и начали лепить ее без повода.

И да, указанные механизмы, уже стоят в основе КД, знать о том, как они работают - есть ваша работа. Умение реализовать самостоятельно - похвально. Использование в продакшене - должно караться.
49 Йохохо
 
26.11.12
16:59
(47) смысл то понятен, а как выгружать только необходимые реквизиты? хардкодить?
ЗЫ ты не писал обмен для электронного документооборота и 1с?
50 Serginio1
 
26.11.12
17:00
(48) Ну потратил я 3 дня на написание обработки для создания процедур обмена. В чем проблема? У меня на изучение разных версий УниверсальныйОбменДаннымиXML и КД ушло намного больше времени.
Еще раз ну например нет обмена между 7 и 8. Я сделал обмен добавив в 7 поле ref и через него веду обмен данными.
Поверь я знаю как оно работает. Для 7 ки это вообще финиш.
В памяти данные не помещаются.
51 Serginio1
 
26.11.12
17:04
(49) Не совсем. Есть аналог того КД, для выбора полей. Можно испльзовать готовый КД для получения данных и отображения на ОбъектXDTO.
У меня много всякого рода обменов, между различными базами в том числе и вэб сервисы.
52 regniws
 
26.11.12
17:04
(51) А потом приходит другой программист и тратит еще 30 дней на то, чтобы разобраться в сгенерированных процедурах.
Ваши знания должны постоянно актуализироваться под современную действительность, а не жить в вакууме из собственных наработок.

Что значит нет обмена между 7 и 8?

какие данные не помещаются? данные транзакции? А для кого сделано ограничение в КД для таких случаев? Про это и разговор, что нужно смотреть, что происходит вокруг.. Мир шире, нежели ваше окно конфигуратора.
53 Новенький_2009
 
26.11.12
17:04
(50) если есть желание скрестить 7 с бсп-онлайн-обменом, очевидно, что нужно эмулировать со стороны 7.7 обменные мессаджи. А как по другому - если бсп токма для 8-ки? :) Вот и весь изюм.
54 acsent
 
26.11.12
17:08
Кстати вариант из (16) это и есть ВыгрузкаЗагрузкаXML
55 Йохохо
 
26.11.12
17:14
(51) мне это интересно ) Ты не писал обмен для системы электронного документооборота и 1с?
56 regniws
 
26.11.12
17:17
(55) тебе для 7ки нужен?
57 Serginio1
 
26.11.12
17:22
(53) Ну вот видишь и твоя бсп-онлайн-обмен  не является серебрянной пулей. А значит нужно строить велосипед. И поверь я всегда применю оптимальный инструмент. Но люблю я велосипеды.
(54) Уже и не помню откуда взял.
(55) Нет. Но изучал. По сути там как раз Схема то и есть
CML402 но она вроде как не применяется. Вообще обмен лучше производить по схемам XDTO
58 Йохохо
 
26.11.12
17:22
(56) неть, мне нужен автор того, что мне дали )
59 Йохохо
 
26.11.12
17:23
(57) ффух )
60 acsent
 
26.11.12
17:23
(57) Ну ты же не рисуешь отдельно схему, а юзаешь стандартную. Или все таки рисуешь?
61 acsent
 
26.11.12
17:24
(57) кстати если в кд не выгружать по ссылкам, то достаточно быстро работает
62 Новенький_2009
 
26.11.12
17:33
(57) онлайн обмен точно не мой. И он предполагает, что старообрядцы уже почили в глухих сибирских лесах :)
(60) видимо сериализация то у него по своим схемам.
63 Serginio1
 
26.11.12
17:35
(60) Использую схему Базы в которую загружаются данные.
(61) А их нужно выгружать. На прошлой работе там  номенлатура оочень большая. Автозапчасти многомиллионные.
Еще раз на обработку формирования процедур обмена  Между 8 ками потратил всего 3 дня. Получил бонысы ввиде углубленного изучения XDTO, так и бонус по скорости выгрузки загрузки.
64 Serginio1
 
26.11.12
17:41
(62) Загружаю сразу сериализатором. Просто там есть проблема с выгрузкой загрузкой Регистров сведений их приходится отдельно загружать так как по разному форимрут записи ФабрикаXdto и СериализаторXDTO

Функция ЗагрузитьРегистрСведений(Менеджер,ОбъектXDTO)
   Набор=Менеджер.СоздатьНаборЗаписей();

   Отборы=ОбъектXDTO.Filter.FilterItem;
   Для каждого стр из Отборы Цикл
   Набор.Отбор[Стр.Name].Установить(Стр.Value);
   КонецЦикла;    
   
   Записи=ОбъектXDTO.Record;
   Для каждого стр из Записи Цикл
       СтрНабор=Набор.Добавить();
       ЗаполнитьЗначенияСвойств(СтрНабор,Стр);
       
   КонецЦикла;
   
   Возврат Набор
КонецФункции
65 Serginio1
 
26.11.12
17:43
(62) Я Атеист.
66 Serginio1
 
26.11.12
17:50
(61) но кстати  можно было бы и промежуточныую схему использовать, просто руки не дошли для автоматического форимрования схемы xsd. Вот в этом то напрвлении КД может и развиваться.
67 acsent
 
26.11.12
17:52
(64) А если базы различаются? В твоем случае одинаковых баз и огород не стоит городить
68 Serginio1
 
26.11.12
18:15
Так они и различаются. Просто например контактная информация одинаковая в базах. Но не суть
Процедура CatalogObject_ВидыКонтактнойИнформации(Фабрика,Док,ЗаписьXML) Экспорт

ПространствоИмен="http://v8.1c.ru/8.1/data/enterprise/current-config";
Имя="CatalogObject.ВидыКонтактнойИнформации";
Объект = Фабрика.Создать(Фабрика.Тип(ПространствоИмен, Имя));
ТипРеал=ФабрикаXDTO.Тип(ПространствоИмен,Имя);
ТекОбъект=  СериализаторXDTO.ЗаписатьXDTO(Док);
ЗаполнитьЗначенияСвойств(Объект,ТекОбъект);
Фабрика.ЗаписатьXML(ЗаписьXML, Объект);
ДобавитьВыгруженныйСправочник("ВидыКонтактнойИнформации",Док.Ссылка)
КонецПроцедуры

Фабрика.ЗаписатьXML
отличается от
СериализаторXDTO.ЗаписатьXML(ЗаписьXML,Объект)
и если объектом является Набор Регистров сведений, то форимруются различные файлы
69 Serginio1
 
26.11.12
18:16
(67) Ну семерки и восьмерки сильно отличаются
70 prog2012
 
26.11.12
23:01
COM рулит, остальное тормоза неудобоваримые
71 Худой
 
27.11.12
02:43
А как на Linux "COM рулит"?
72 Serginio1
 
27.11.12
10:47
(70) Ну вопервых СОМ не пригоден когда базы находятся в разных сетках и без VPN или с узким каналом.

66+ Я уже лет 12 занимаюсь кодогенерацией и не только я один. Те же шаблоны С++ не что иное как кодогенерация во время компиляции. В C# присутствуют Т4, в Немерле макросы.
Ну и инлайн.
Для примера по КД можно сгенерировать схему XML и сгенерировать процедуры выгрузки и загрузки объектов.
При этом мы значительно повысим скорость выгрузки загрузки, так как не нужно какдый раз  компилировать в байт код обработчики а встроить их прямо в код (инлайн) и вообще убрать кучу всякого мусора.

Мало того кодогенерация позволяет оптимизировать вручную готовый код.

Сделать все это не представляет большого труда, но требует время.

(70) Не согласен. Обмен через готовую схему загрузка и выгрузка очень быстрая

Пока ЧтениеXML.ТипУзла<>ТипУзлаXML.КонецЭлемента Цикл

//читаем очередной элемент справочника
Имя=ЧтениеXML.Имя;
Вид="";
Тип=ПолучитьТипИВидОбъекта(Имя,Вид);

ДанныеДляЗаполнения=ТипыДляЗаполненияДефолтнымиЗначениями[Имя];

ОбъектXDTO=ФабрикаXDTO.ПрочитатьXML(ЧтениеXML,ФабрикаXDTO.Тип(ЧтениеXML.URIПространстваИмен,Имя));
Если Тип="InformationRegisterRecordSet" Тогда
Объект=ЗагрузитьInformationRegisterRecordSet(Вид,ОбъектXDTO)
   Иначе
Объект=СериализаторXDTO.ПрочитатьXDTO(ОбъектXDTO);
КонецЕсли;


Если   Тип="DocumentObject" Тогда
   Объект.Ответственный=ТекПользователь;
   Отказ=ложь;
КонецЕсли;    

Объект.ОбменДанными.Загрузка = Истина;
Объект.Записать();

КонецЦикла;
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан