|
Как обмениваться одним документом планами обмена? | ☑ | ||
|---|---|---|---|---|
|
0
MaxS1
07.08.06
✎
09:31
|
Как через планы обмена организовать обмен только одним документом? (можно без регистров).
Загвоздка в том, что если небыло изменений в документах, а, например, внесли новый элемент в справочник номенклатуры, этот элемент попадает в обмен... А нужно лишь то, что относится к документу. |
|||
|
1
Neco
07.08.06
✎
09:41
|
У всех объектов убрать авторегистрацию и регистрировать при записи документа, например регистрация самого документа:
См. также Книга знаний: v8: УРБД на v8 за четыре шага.; |
|||
|
2
MaxS1
07.08.06
✎
09:48
|
(1) Спасибо, про авторегистрацию я сразу не подумал. Сейчас буду копать дальше ;) А то чуть было не ушел в анализ выгружаемых данных в модуле плана обмена... ;)
|
|||
|
3
MaxS1
07.08.06
✎
14:34
|
А как запретить передавать изменения конфигурации?
ps. пока настраивается обмен 1С-1С, но потом будет 1С-какой-то Делфи софт. |
|||
|
4
France_как франс
07.08.06
✎
14:40
|
(3) лементарно.. создать план обмена, и не устанавливать у него флаг "Распределенная"
|
|||
|
5
MaxS1
08.08.06
✎
06:15
|
(1) Допустим научился программно регистрировать документ при его записи. А как поступить с номенклатурой? Как при изменении номенклатуры, а потом при изменении документа узнать о необходимости включения изменений и по номенклатуре?
Пока приходит только такая мысль. Создать еще один план обмена с авторегистрацией(П2) и при записи документа, регистрировать его в плане обмена без авторегистрации(П1) и если номенклатура зарегистрирована в П2, регистрировать её в П1, сбросив регистрацию в П2. Так? |
|||
|
6
MaxS1
08.08.06
✎
07:53
|
up
Создал в конфигураторе план обмена. А предопределённые узля планов обмена бывают? |
|||
|
7
MaxS1
09.08.06
✎
11:44
|
(5) Тот подход верный?
Как узнать что элемент справочника зарегистрирован в таком-то узле? Если ДокументОбъект[РеквизитДокумента.Имя].ПолучитьОбъект().ОбменДанными.Получатели.Количество()>0 Тогда // так не выходит всегда =0 ;( Выб = ПланыОбмена.ВыбратьИзменения(Узел, Узел.НомерОтправленного); // - так, что-ли? |
|||
|
8
MaxS1
09.08.06
✎
13:10
|
(7) ПланыОбмена.ИзменениеЗарегистрировано(Узел, Объект)
|
|||
|
9
Херрес
09.08.06
✎
13:15
|
Нужно планом обмена регистрировать изменившиеся документы.
А сами документы выгружать посредством конвертации данных - она позволит выгрузить по ссылкам |
|||
|
10
MaxS1
09.08.06
✎
13:34
|
(9) Конвертацией повторно выгрузятся справочники... Хотя можно в конвертации справочника проверять Если НЕ ИзменениеЗарегистрировано(...) Тогда отказ...
Да, идея интересная, но хочется обойтись только планами обмена... Тем более, что не всё дерево по ссылкам нужно вытаскивать, а достаточно до первого уровня... Или написать универсальную функцию в плане обмена, которая рекурсивно по метаданным вытаскивает все ссылки... |
|||
|
11
Херрес
09.08.06
✎
13:38
|
А вообще не очень понятно зачем такое может понадобиться.
|
|||
|
12
Херрес
09.08.06
✎
13:39
|
А вот ещё идея (вернее половина идеи)
обработка выгрузка и загрузка XML уже умеет определять какие объекты связаны по ссылкам. |
|||
|
13
MaxS1
09.08.06
✎
13:43
|
Еще нашел как сделать, что можно формировать XML файл: ЗаписатьXML(ЗаписьXML, ВыборкаОбъект); только нужными данными... Значит (5) неверно, достаточно одного плана обмена.
(12) планируется наладить обмен между 1С и делфи софтом только одним документом с авторегистрацией как положено в планах обмена... |
|||
|
14
MaxS1
09.08.06
✎
13:45
|
(12) как? речь про универсальную загрузку - выгрузку?
|
|||
|
15
Херрес
09.08.06
✎
13:46
|
(14) да, которая DtUDXML.epf
|
|||
|
16
MaxS1
09.08.06
✎
13:57
|
ВыгрузкаЗагрузкаДанныхXML.epf
|
|||
|
17
MaxS1
09.08.06
✎
13:58
|
ой ...
(15) спасибо. на редкость полензный диалог получился ;) Увидел там рекурсивно вызываемую функцию Процедура ДобавитьВыгружаемыеОбъекты наверное её приделаю к планам обмена... |
|||
|
18
MaxS1
09.08.06
✎
14:31
|
Пока получилось так, если кому вдруг пригодиться ;) (может и мне пригодиться)
Процедура ЗарегистрироватьДанныеОбъектаДляОбмена(ОбъектДляОбмена,ЗаписьXML) Для Каждого РеквизитОбъекта Из ОбъектДляОбмена.Метаданные().Реквизиты Цикл ОбъектРеквизитИмя = ОбъектДляОбмена[РеквизитОбъекта.Имя]; Если Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(ОбъектРеквизитИмя)) Тогда Если НЕ (ОбъектРеквизитИмя = Новый(ТипЗнч(ОбъектРеквизитИмя)) ) Тогда // НЕ ЗначениеНеЗаполнено ИзмененныйОбъект = ОбъектРеквизитИмя.ПолучитьОбъект(); Если ПланыОбмена.ИзменениеЗарегистрировано(ЭтотОбъект.Ссылка,ИзмененныйОбъект) Тогда ЗаписатьXML(ЗаписьXML, ИзмененныйОбъект); КонецЕсли; ЗарегистрироватьДанныеОбъектаДляОбмена(ИзмененныйОбъект,ЗаписьXML); КонецЕсли; КонецЕсли; КонецЦикла КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // ЭКСПОРТНЫЕ ПРОЦЕДУРЫ // // Процедура записи сообщения с измененными данными // Процедура ЗаписатьСообщениеСИзменениями() Экспорт Сообщить("-------- Выгрузка в узел " + Строка(ЭтотОбъект) + " ------------"); Каталог = КаталогВременныхФайлов(); // Формируем имя временного файла ИмяФайла = Каталог + ?(Прав(Каталог, 1) = "\", "", "\") + "Message" + СокрЛП(ПланыОбмена.Склады.ЭтотУзел().Код) + "_" + СокрЛП(Ссылка.Код) + ".xml"; // Создаем объект записи XML ЗаписьXML = Новый ЗаписьXML; ЗаписьXML.ОткрытьФайл(ИмяФайла); ЗаписьXML.ЗаписатьОбъявлениеXML(); // Создаем новое сообщение ЗаписьСообщения = ПланыОбмена.СоздатьЗаписьСообщения(); ЗаписьСообщения.НачатьЗапись(ЗаписьXML, Ссылка); Сообщить(" Номер сообщения: " + ЗаписьСообщения.НомерСообщения); // Получаем выборку изменённых данных ВыборкаИзменений = ПланыОбмена.ВыбратьИзменения(ЗаписьСообщения.Получатель, ЗаписьСообщения.НомерСообщения); Пока ВыборкаИзменений.Следующий() Цикл ВыборкаОбъект = ВыборкаИзменений.Получить(); Если ТипЗнч(ВыборкаОбъект) = Тип("ДокументОбъект.ПриходнаяНакладная") Тогда ЗарегистрироватьДанныеОбъектаДляОбмена(ВыборкаОбъект,ЗаписьXML); // Записываем данные в сообщение ЗаписатьXML(ЗаписьXML, ВыборкаОбъект); КонецЕсли; КонецЦикла; // Завершаем запись сообщения ЗаписьСообщения.ЗакончитьЗапись(); ЗаписьXML.Закрыть(); Сообщить(ИмяФайла); Сообщить("-------- Конец выгрузки------------"); КонецПроцедуры // ЗаписатьСообщениеСИзменениями() |
|||
|
19
MaxS1
09.08.06
✎
14:34
|
сразу увидел баг :(
ЗарегистрироватьДанныеОбъектаДляОбмена(ИзмененныйОбъект,ЗаписьXML); нужно перенести ниже. под КонецЕсли, а ИзмененныйОбъект = выше, над Если |
|||
|
20
Херрес
09.08.06
✎
14:38
|
А ещё такое ощущение, что эта конструкция не будет заходить в реквизиты табличных частей
|
|||
|
21
MaxS1
09.08.06
✎
14:49
|
(20) Ага, надо будет доработать, или комментарий в код написать, что есть такая фича, т.к. ТЧ в справочниках, учавствующих в обмене у нас нет.
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |