Имя: Пароль:
1C
1С v8
План Обмена, получение изменений порциями
0 OnCheck
 
06.02.12
09:13
Здравствуйте. Помогите советом. Интересует, есть ли возможность обмениваться пакетами Плана обмена ограниченным размером порций, например в 1 пакете отсылается максимум 10 объектов, остальное следующими пакетами. Спасибо!
1 Rlogin
 
06.02.12
09:18
Да
2 Рэйв
 
06.02.12
09:19
Смотри процедуры событий ПриОтправки и ПриПолучении
Там есть параметр ЭлементДанных. Считай сколько уже отправлено и ограничивай. Только кривая какая то у тебя задумка все равно.
3 OnCheck
 
06.02.12
09:20
(2) Почему думаешь кривая, просто хочу на этапе внедрения подстраховаться.
4 Maxus43
 
06.02.12
09:22
(3) где подстраховка то? если с файлом чонить случится в пути - заново пошлёт, ответа о получении не будет же
5 Рэйв
 
06.02.12
09:22
(3)Попробуй.потом расскажешь:-)
6 Поpyчик-4
 
06.02.12
09:22
(0) Если обмен на БСП,
Количество элементов в транзакции выгрузки данных
7 Рэйв
 
06.02.12
09:27
(6)Это просто разбиение на несколько транзакций по количеству элементов. Для скорости.Сам  обмен полный будет.
8 OnCheck
 
06.02.12
09:30
(6) БСП?
Насколько я понял это параметр, пакет все равно будет содержать все измененные элементы.
9 OnCheck
 
06.02.12
09:35
(2) Спасибо за наводку, пока еще не понял как, буду разбираться.
10 OnCheck
 
06.02.12
09:36
(4) ну мелкими порциями проще ладить.
11 Рэйв
 
06.02.12
09:39
(10)Не забывай что после залития каждой мелкой порции тебе надо на это мелкое нести обратный ответ. Иначе не будет подтверждения и твоя первая мелкая порция будет вечно первой.
12 Поpyчик-4
 
06.02.12
09:56
(10) Всё равно задумка ерундовая, как ни сделаешь всё криво будет.
13 OnCheck
 
06.02.12
10:02
+(10) так же, если не удалось импортировать например 99 - ый объект из 100 объектов пакета, то откатывается весь пакет целиком, поэтому если будет уходить по 10 объектов в пакете, то обломается всего 10 объектов из 100. Это снижает критичность ошибки разработчика.
14 Maxus43
 
06.02.12
10:06
(13) а при обменах не должно быть ошибок разработчика. пример такой ошибки есть? что там можно не так сделать?
15 Feanor
 
06.02.12
10:07
НЕ страдайте ерундой, почитайте классиков про обмены. Радченко, к примеру.
16 Maxus43
 
06.02.12
10:07
(14) + если у объекта зарегистрированы изменения - значит все проверки уже прошли, загрузка происходит без контроля уже (ОбменДанными = Истина), если прописать всё аналогично типовой - программных ошибок быть не должно впринципе
17 OnCheck
 
06.02.12
10:12
(16) Аналогично типовой это УнивесальныйОбменДаннымиXML?
18 Aleksey
 
06.02.12
10:13
В типовом обмене в БП при использовании правил обмена и фонового обмена можно задавать количества объектов в обмене


Хотя я не удивлюсь, если все там сделано через одно место, как обычно.

Например, есть в настройках ограничения размера пакета. Так 1С если пакет получается больше заданного размера тупо не отправляет "Ответный пакет не был отправлен. Размер исходящего пакета составил: 99 553,14 (КБт) что превышает допустимое ограничение 999 (КБт)". Может и здесь так же будет
19 OnCheck
 
06.02.12
10:18
(13) да может просто тупо файл битый прийти, конечно не разработчика ошибка, но все же, хотя вы правы. буду убеждать оппонента в этом.

(18) я полагаю лимитироваться количеством выгруженных объектов, но спасибо за наводку.
20 Maxus43
 
06.02.12
10:19
(17) нет, обычный типовой обмен данными, по плану обмена встроенному... не представляю где вобще там можно накосячить. Обмен какой? между одинаковыми конфами?
21 Maxus43
 
06.02.12
10:19
(19) про битый файл - (4), заново пошлёт
22 OnCheck
 
06.02.12
10:19
нет между 1с и Axapta
23 Maxus43
 
06.02.12
10:24
дык тут типовые механизмы обмена не канают тогда...
двухсторонний обмен? как выгружаете?
24 Feanor
 
06.02.12
10:28
(23) ну почему не канают? а вдруг программисты аксапты сделают чудо.
25 Maxus43
 
06.02.12
10:31
(24) тогда будет лепота) если они под форматы обмена данными 8.1 подстроятся... ответы о загрузке к 1с чтоб ходили и т.д.
26 Feanor
 
06.02.12
10:32
(25) но что-то мне подсказывает, что это фантастика ))))
27 Maxus43
 
06.02.12
10:32
(25) + 8.1 = 1с :)
28 OnCheck
 
06.02.12
11:12
(25) хм, поясните, а в чем проблема, если генерить из Аксапты XML ку нужного формата. или 1с генерит особые XML-ки?
29 Maxus43
 
06.02.12
11:14
(28) знаеш форматы 1с? если получится правильно сделать то норм. а сабж имхо делать не стоит, пусть выгружает-загружает всё, хмл-ки архивируются хорошо, маленький файл гоняться будет
30 Feanor
 
06.02.12
11:17
(28) когда я сапёрам обрисовал своё видение обмена, их глаза медленно приняли форму 5-ти рублевых монет, а язык уже говорил "разработка будет слишком сложной и трудоёмкой".
31 OnCheck
 
06.02.12
11:18
форматы 1с это структура XML, которые генерит 1С, верно понимаю?
32 OnCheck
 
06.02.12
11:20
(30) а в чем сложности? сгенерить XML нужной структуры, главное чтобы шапка соответствовала той, которую читает 1с, а внутри все, что хочешь, конечно исходя из того, что даст план обмена в самой 1с-ке
33 Maxus43
 
06.02.12
11:20
(31) да, в хмл 1с-ных сразу идёт представление объекта 1с, не читает она попорядку атрибуты и тэги хмл, она видит в хмл свою схему и приводит сразу преобразование в объект свой... как то так
34 OnCheck
 
06.02.12
11:22
(33) ну это если использовать XML-сериализацию, а если без нее укладывать и читать объекты?
35 Maxus43
 
06.02.12
11:24
(34) можно всё, просто в таком случае все типовые механизмы обмена выкидывай, тут получается чтение произвольных хмл, надо всё продумывать - и регистрацию изменений, и получение ответов и т.д. Если ничо не путаю
36 Feanor
 
06.02.12
11:26
(34) ну тогда ты сам выбираешь зарегистрированные изменения из плана обмена и сам формируешь файл обмена. Непонятно только, зачем тебе понадобилось спрашивать (0)
37 Serg_1960
 
06.02.12
11:27
Имхо: я бы смотрел в сторону парсинга файла обмена на принимающей стороне. Разбить "на пакеты" - не сложно. Но нужно ещё разбираться с номером сообщения, регистрацией изменений и т.д. Но всё - решаемо, без изменения типовой конфы, внешней обработкой.
38 OnCheck
 
06.02.12
11:27
регистрацию изменений, получение ответов, как раз не надо, за это и должен по задумке отвечать план обмена.
Про ПриОтправки и ПриПолучении это те что ПриОтправкеДанныхГлавному и т.д., объявляются в модуле объекта Плана обмена?
39 OnCheck
 
06.02.12
11:29
(37) план обмена все равно надо делать свой, следует настроить объекты для экспорта. Как раз и не хочется заморачиваться номером сообщения и регистрацией изменений, хочется чтобы делал это план обмена.
40 Maxus43
 
06.02.12
11:30
(38) за это план обмена отвечает когда обменивается с другой конфой 1с. как ты будеш их аксапты отправлять в 1с сообщение с ответом произвольным хмл? щас тока он регистрацию сделает сам, а об удалении регистрации думай сам
41 OnCheck
 
06.02.12
11:32
(36) изначально задача так поставлена. Просчитываю возможности удовлетворения разумов оппонентов. Если все же понадобиться то скажу, что можно.
42 OnCheck
 
06.02.12
11:34
(40) Хм, в случае когда 1с с 1с номер пакета передается в элементе XML-ки, а номер последнего принятого пакета в другом элементе, что мешает сделать так же из Аксапты, извините, не могу понять.
43 Serg_1960
 
06.02.12
11:34
ммм... напомню, на всякий случай: порядок объектов в файле обмена - не установлен.

Если будете "дробить" вывод зарегистрированных изменений на "пакеты" - есть вероятность нарваться на случай, когда "взаимосвязанные" изменения будут переданы в разных пакетах, хаотично  :(
44 OnCheck
 
06.02.12
11:36
(43) какое хорошее напоминание :-). Я почему то наивно полагал что вывод зарегистрированных изменений на "пакеты" происходит в хронологическом порядке, по мере генерации изменений! Нет?!
45 Serg_1960
 
06.02.12
11:37
(44) Нет.
46 OnCheck
 
06.02.12
11:40
Вариант: при анализе изменений выстраивать правильную очередь и выгружать именно в таком порядке. Например, сначала должно быть выгружено физЛицо, затем сотрудник, но не иначе.
47 Alex375
 
06.02.12
11:42
(46) а как же этот порядок выстроить? Кстати а какие типы объектов собираетесь гонять: справочники, документы, регистры?
48 OnCheck
 
06.02.12
11:50
(47) пока не знаю как выстроить, может и не получится. Гонять буду все 3 вида.    
Maxus43, не могу отловить где работают ПриОтправкеДанныхПодчиненному ,  ПриОтправкеДанныхГлавному, ПриОтправкеДанныхУзлаПодчиненному
49 OnCheck
 
06.02.12
11:51
+(48) модифицирую объекты, получаю выборку, выгружаю в пакет, не заходит!
50 Serg_1960
 
06.02.12
11:53
(49) Может быть план обмена - не риб?
51 Maxus43
 
06.02.12
11:53
(49) как выгружаеш?
52 Maxus43
 
06.02.12
11:54
база должна знать что она главная и у неё есть подчинённые
53 Alex375
 
06.02.12
11:55
В плане обмена у тебя должно быть минимум 2 узла.
54 OnCheck
 
06.02.12
11:55
(50) Галку в БД-источнике поставил, сначала было не РИБ.
(51) По учебнику:

Процедура ЗаписатьСообщениеСИзменениями() Экспорт


Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "-------Выгрузка в узел " + Строка(ЭтотОбъект) + "----------";
Сообщение.Сообщить();

Каталог = КаталогВременныхФайлов();

//Сформировать имя временного файла.

ИмяФайла = Каталог
+ ?(Прав(Каталог,1) = "\","","\") + "Message"
+ СокрЛП(ПланыОбмена.ОбменАксаптаЗУП.ЭтотУзел().Код)
+ "_" + СокрЛП(Ссылка.Код) + ".xml";

// Создать объект записи XML.
//***ЗаписьХМL-документов
ЗаписьХМL = Новый ЗаписьXML;
ЗаписьХМL.ОткрытьФайл(ИмяФайла);
ЗаписьХМL.ЗаписатьОбъявлениеXML();

//*** Инфраструктура сообщений
ЗаписьСообщения = ПланыОбмена.СоздатьЗаписьСообщения();
ЗаписьСообщения.НачатьЗапись(ЗаписьХМL, Ссылка);

Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Номер сообщения " + ЗаписьСообщения.НомерСообщения;
Сообщение.Сообщить();

//Получить выборку изменных данных
//***Механизм регистрации изменений
ВыборкаИзменений = ПланыОбмена.ВыбратьИзменения(ЗаписьСообщения.Получатель
, ЗаписьСообщения.НомерСообщения);
Пока ВыборкаИзменений.Следующий() Цикл
   //Записать данные в сообщение XML сериализации
   ЗаписатьXML(ЗаписьХМL, ВыборкаИзменений.Получить());
   
   //Прервать;
КонецЦикла;

ЗаписьСообщения.ЗакончитьЗапись();
ЗаписьХМL.Закрыть();
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "------Конец выгрузки --------------";
Сообщение.Сообщить();

КонецПроцедуры
55 Maxus43
 
06.02.12
11:55
в данном случае я бы произвольный обмен данными писал вобще. планы обмена использовал бы для регистрации изменений и из аксапты простенькие ответы бы присылал, мол такой то док с таким уидом и номером сообщения - загружен, после чего удалял регистрацию изменеий для данного сообщения
56 OnCheck
 
06.02.12
11:57
(55) да, я так и хочу. Вопрос: можно ли из очереди регистраций изменений выдирать только нужные на данный момент, их укладывать в пакет, и в дальнейшем работать с этими изменениями как с отдельным пакетом, не теряя остальных изменений.
57 Aleksey
 
06.02.12
11:59
(55) И получил бы косяк, когда во время пути документ уже поменяли еще раз
58 Maxus43
 
06.02.12
12:00
(56) я никак не пойму что значит "нужные на данный момент". всё что изменено - выгружай, не думаю что стоит пытаться разбить на порции вобще
59 OnCheck
 
06.02.12
12:00
как сказать узлу, что он главная база? или надо соблюсти правильно создание подчиненной базы? а то я тупо скопипастил план обмена, в другую ЗУП, и отзеркалировал структуру узлов.
60 Maxus43
 
06.02.12
12:01
(57) нет, косяка ж нет в типовых обменах. удалять регистрации только по если совпадают номера сообщений
61 Aleksey
 
06.02.12
12:02
(60) Правильно, ибо юзаются номера сообщение. Но мы же про обход штатного метода говорим? Тогда еще нужно поддерживать механизм нумерации сообщений
62 Maxus43
 
06.02.12
12:02
(59) РИБ надо делать ЕМНИП
63 OnCheck
 
06.02.12
12:03
(58) я понял твою мысль, просто хочется опробовать возможность ручной резки на пакеты-сообщения.
64 Maxus43
 
06.02.12
12:04
(61) да, нумерацию надо оставить, чтоб коллизий не возникало, без этого никак
65 OnCheck
 
06.02.12
12:05
спасибо за диалог, Господа!
66 Maxus43
 
06.02.12
12:06
(63) нетривиальная задача, связанные данные должны идти вместе, например ФизЛица - к ним надо тянуть паспортные данные, контакную инфу и т.д. это с точки зрения 1с инфа связанная. в аксапте хз как, но надо чтоб одинаковые данные были и там и там же. Номенклатура с единицами измерения, Сотрудники с регистрами должностей и т.д.
67 Feanor
 
06.02.12
12:07
(66) да ладно, можно что-то универсальное написать для этого.
68 Maxus43
 
06.02.12
12:12
(67) всё вместе одним махом в одном файле - вот и универсальность) загружено всё или ничего
69 Feanor
 
06.02.12
12:14
(68) по сути да, но автор ведь хочет извращений :)
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс