Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

Помогите настроить обмен.

Помогите настроить обмен.
Я
   НеПапоКарло
 
07.06.18 - 09:59
Доброго дня!
Разработчик правил обмена данных предоставил правила, которые не работают в один этап, а в два. Необходимо допилить чтоб выгружалась/загружалось в один заход.

Имеем  в источнике документ  Документ с реквизитами в табчасти Номенклатура и Партия (создаётся автоматически при проведении).
По текущим правилам Документ загружается в приемник, а также загружаются партии, но в таб.часть не проставляются. При повторной выгрузке/загрузке Документа партии в табчасти Документа проставляются.

Анализируя файл выгрузки данных обнаружил, что данные по партиям находятся в конце файла. Думаю, что в этом проблема, записи по партиям должны быть раньше данных о документе.

Где и как в Конвертация данных версии 2.1 настроить порядок выгрузки?

Дополнительные настройки правил конвертации объектов имеют Истину у следующих значений:
- Искать объект приемника по внутреннему идентификатору
- Не замещать существующие объекты в приемнике при загрузке, а только создавать новые и заполнять их
- Не создавать новый объект в приемнике, если он НЕ найден
 
 
   Cool_Profi
 
1 - 07.06.18 - 10:00
Отпинать разработчика, чтобы он сделал нормальные правила - не вариант?
   НеПапоКарло
 
2 - 07.06.18 - 10:12
(1) Его ответ таков: "Данные выгружаются? Выгружаются, а в сколько этапов у нас договора не было".
   aleks_default
 
3 - 07.06.18 - 10:12
Не очень понятно. Посмотрите в файле выгрузки данных, там в табличной части документа уже указана партия (как минимум GUID)?. Если указана, то порядок выгрузки данных значения не имеет. Или же партии заполняются в документ уже после загрузки какой-то постобработкой?
   Cool_Profi
 
4 - 07.06.18 - 10:14
(2) вы деньги уже заплатили? Если нет, тогда пинок.
Если да - ещё добавьте. Пинка, разумеется. Ну и копейку, когда исправит.
Накосячил - пусть правит
   НеПапоКарло
 
5 - 07.06.18 - 10:21
(3) Постобработки нет.
   Cyberhawk
 
6 - 07.06.18 - 10:22
Порядок выгрузки ни в типовой обработке обмена, ни в обычных правилах конвертации (забор объектов с узла) не "настраивается".
Но добиться нужного порядка обмена все-таки можно, но не нужно.
   Serg_1960
 
7 - 07.06.18 - 10:23
(3) Фишка в том, что GUIDы разработчик не используют. И это правильное решение. Это не РИБ.
   Cyberhawk
 
8 - 07.06.18 - 10:23
Скорее всего виноват прикладной код, который очищает ссылки ("партии"), т.е. в приемнике прикладной код ориентирован на то, что объект в БД должен быть
   Ёпрст
 
9 - 07.06.18 - 10:25
(0) ну выложи свои правила на посмотреть
   Serg_1960
 
10 - 07.06.18 - 10:26
(8) Угу. Партии легко изменяются в базе-приёмнике (например при перепроведении документов). И при обмене, ориентироваться на партии, созжвнные в базе-источнике - нонсенс.
 
 Рекламное место пустует
   Serg_1960
 
11 - 07.06.18 - 10:27
"созжвнные" = "созданные"
   НеПапоКарло
 
12 - 07.06.18 - 10:29
   НеПапоКарло
 
13 - 07.06.18 - 10:30
(12) в правилах вместо Партий используются Серии.
   aleks_default
 
14 - 07.06.18 - 10:54
(8) такой код не должен срабатывать в режиме обмен данными загрузка - это залет
   Cyberhawk
 
15 - 07.06.18 - 11:20
(14) Документ может проводиться в приемнике _сразу_ (а не отложенно), тогда никакого режима загрузки не будет.
В общем случае залет может быть на трех сторонах: у автора правил конвертации (например, принудительно записывает объект в обработчике ПослеЗагрузки), у автора конфигурации (например, не учитывает запись объекта в режиме загрузки), у автора обработки обмена (типовая, которая универсальная-внешняя, например, не делает никакое отложенное проведение)
   Ёпрст
 
16 - 07.06.18 - 11:21
(12) какой документ смотреть ?
Че-то в правилах явно не хватает
   Ёпрст
 
17 - 07.06.18 - 11:21
В послеЗагрузки у ТС есть код для поиска "партий"
   НеПапоКарло
 
18 - 07.06.18 - 11:24
(16) CorrespondentExchangeRules.xml
   НеПапоКарло
 
19 - 07.06.18 - 11:26
(17) Есть:

СерияНоменклатурыУС = СтрокаПараметров.СерияНоменклатуры;
                Если ЗначениеЗаполнено(СерияНоменклатурыУС) Тогда
                    ТЧДок.ДатаВыработкиНачало = СерияНоменклатурыУС.ДатаИзготовления; 
                    ТЧДок.СпособЗаданияДатыВыработки = Перечисления.СпособыЗаданияДаты.Дата;
                    ТЧДок.ДатаОкончанияСрокаГодностиНачало = СерияНоменклатурыУС.СрокГодности;
                    ТЧДок.СпособЗаданияДатыСроковГодности = Перечисления.СпособыЗаданияДаты.Дата;
                    
НомерПартии = Справочники.НомераПроизводственныхПартий.НайтиПоНаименованию(СокрЛП(СерияНоменклатурыУС.СерийныйНомер), Истина);
   Ёпрст
 
20 - 07.06.18 - 11:27
(18) в этих правилах, вообще ничего нет :))
   НеПапоКарло
 
21 - 07.06.18 - 11:28
(19)
Обработка пытается найти "СерияНоменклатурыУС", но Серии ещё не создан в приемнике.
   Ёпрст
 
22 - 07.06.18 - 11:29
Если смотреть эти правила, то для начала, сыми галки во всех правилах -  Не создавать новый объект в приемнике, если он НЕ найден
   НеПапоКарло
 
23 - 07.06.18 - 11:31
(22) Это делал не помогло
   Ёпрст
 
24 - 07.06.18 - 11:35
Для начала, По каким правилам выгружаешь ?

По
CorrespondentExchangeRules
или по
ExchangeRules ?
   Ёпрст
 
25 - 07.06.18 - 11:35
Или, тебе их "объединить нужно" ?
   Ёпрст
 
26 - 07.06.18 - 11:35
ПВД конечно, кривовато написано.. цикл в цикле..
   НеПапоКарло
 
27 - 07.06.18 - 11:38
(24) ExchangeRules
   Ёпрст
 
28 - 07.06.18 - 11:44
(27) уверен ? Зачем тогда CorrespondentExchangeRules  ?
Их потом для регистра сведений выгружаешь, или что ?
   Ёпрст
 
29 - 07.06.18 - 11:46
Понял, ты туда-сюда грузишь..

Так какие не работают ?
из бп3 в ветеринарку ?
   НеПапоКарло
 
30 - 07.06.18 - 11:48
(29) Да, из БП в ветеринарку
   hhhh
 
31 - 07.06.18 - 11:51
(28) CorrespondentExchangeRules это правила из второй базы.
   Ёпрст
 
32 - 07.06.18 - 12:36
(30) должно всё и так выгружаться. Максимум, попробуй сдвинуть номенклатуру вниз в ПКО справочник Номенклатура.
   Ёпрст
 
33 - 07.06.18 - 12:39
Ну и все твои серии заполняются тут:

    ТЧПродукция = ПараметрыОбъекта["ТаблицаПродукцииТабличнаяЧасть"];
    Объект.ТаблицаПродукции.Очистить();
    Для каждого СтрокаПараметров Из ТЧПродукция Цикл
        НоменклатураУС = СтрокаПараметров.Номенклатура;
        Если ЗначениеЗаполнено(НоменклатураУС) Тогда
            ТЧДок = Объект.ТаблицаПродукции.Добавить();
            Запрос = Новый Запрос("ВЫБРАТЬ              
            |    СоответствиеПродукцииНоменклатуреУчетнойСистемы.Продукция
            |ИЗ
            |    РегистрСведений.СоответствиеПродукцииНоменклатуреУчетнойСистемы КАК СоответствиеПродукцииНоменклатуреУчетнойСистемы
            |ГДЕ
            |    СоответствиеПродукцииНоменклатуреУчетнойСистемы.НоменклатураУчетнойСистемы = &НоменклатураУС");
            Запрос.УстановитьПараметр("НоменклатураУС",НоменклатураУС);
            Выборка = Запрос.Выполнить().Выбрать();
            Если Выборка.Следующий() Тогда
                ТчДок.Продукция = Выборка.Продукция;
                ТчДок.НоменклатураУчетнойСистемы = НоменклатураУС;
                ТЧДок.ПодвидПродукции = ТчДок.Продукция.Владелец;
                ТЧДок.ВидПродукции = ТЧДок.ПодвидПродукции.Владелец;
                ТЧДок.ТипПродукции = ТЧДок.ВидПродукции.Владелец;
            КонецЕсли;      
            ЕдиницаИзмеренияУС = СтрокаПараметров.ЕдиницаИзмерения;
            Если ЗначениеЗаполнено(ЕдиницаИзмеренияУС) Тогда
                Запрос = Новый Запрос("ВЫБРАТЬ
                |    КлассификаторЕдиницИзмерения.Ссылка
                |ИЗ
                |    Справочник.КлассификаторЕдиницИзмерения КАК КлассификаторЕдиницИзмерения
                |ГДЕ
                |    КлассификаторЕдиницИзмерения.ЕдиницаИзмеренияУчетнойСистемы = &ЕдиницаИзмеренияУчетнойСистемы");
                Запрос.УстановитьПараметр("ЕдиницаИзмеренияУчетнойСистемы",ЕдиницаИзмеренияУС);
                
                Выборка = Запрос.Выполнить().Выбрать();
                Если Выборка.Следующий() Тогда
                    ТчДок.ЕдиницаИзмерения = Выборка.Ссылка;
                КонецЕсли;      
                ТчДок.Количество = СтрокаПараметров.Количество;
            Конецесли; 
            СерияНоменклатурыУС = СтрокаПараметров.СерияНоменклатуры;
            Если ЗначениеЗаполнено(СерияНоменклатурыУС) Тогда
                ТЧДок.ДатаВыработкиНачало = СерияНоменклатурыУС.ДатаИзготовления; 
                ТЧДок.СпособЗаданияДатыВыработки = Перечисления.СпособыЗаданияДаты.Дата;
                ТЧДок.ДатаОкончанияСрокаГодностиНачало = СерияНоменклатурыУС.СрокГодности;
                ТЧДок.СпособЗаданияДатыСроковГодности = Перечисления.СпособыЗаданияДаты.Дата;
                //ТЧДок.Маркировка = СерияНоменклатурыУС.Наименование;

                НомерПартии = Справочники.НомераПроизводственныхПартий.НайтиПоНаименованию(СокрЛП(СерияНоменклатурыУС.СерийныйНомер), Истина);
                
                Если НомерПартии = Неопределено ИЛИ НомерПартии = Справочники.НомераПроизводственныхПартий.ПустаяСсылка() Тогда
                    ПроизвПартия = Справочники.НомераПроизводственныхПартий.СоздатьЭлемент();
                    ПроизвПартия.Наименование = СокрЛП(СерияНоменклатурыУС.СерийныйНомер);
                    ПроизвПартия.Записать();
                    ТЧДок.НомерПартии = ПроизвПартия.Ссылка;
                Иначе    
                    ТЧДок.НомерПартии = НомерПартии;
                КонецЕсли;
                
            Конецесли;     
            ТЧДок.ПроводиласьВетсанэкспертиза = Справочники.РезультатыЛабораторногоИсследования.ПодвергнутоСырье;
            ТЧДок.ФорматЗаданияДат = Перечисления.СпособыЗаданияДаты.Дата;
        КонецЕсли;    
    КонецЦикла;
 
 
   Ёпрст
 
34 - 07.06.18 - 12:41
И.. нафига было вот так писать, неясно:

      НомерПартии = Справочники.НомераПроизводственныхПартий.НайтиПоНаименованию(СокрЛП(СерияНоменклатурыУС.СерийныйНомер), Истина);
                
                Если НомерПартии = Неопределено ИЛИ НомерПартии = Справочники.НомераПроизводственныхПартий.ПустаяСсылка() Тогда
                    ПроизвПартия = Справочники.НомераПроизводственныхПартий.СоздатьЭлемент();
                    ПроизвПартия.Наименование = СокрЛП(СерияНоменклатурыУС.СерийныйНомер);
                    ПроизвПартия.Записать();
                    ТЧДок.НомерПартии = ПроизвПартия.Ссылка;
                Иначе    
                    ТЧДок.НомерПартии = НомерПартии;
                КонецЕсли;



Когда проще сразу сделать это в ПКО
   Ёпрст
 
35 - 07.06.18 - 12:42
Т.е выгружать серию в реквизит Партия.
   aleks_default
 
36 - 07.06.18 - 12:53
(34) это все хорошо но проблема видимо не в этом
   hhhh
 
37 - 07.06.18 - 13:19
может действительно CorrespondentExchangeRules правила из второй базы надо поправить?
   НеПапоКарло
 
38 - 07.06.18 - 13:40
(33) В том то и дело, что серий на момент загрузки документа в приёмнике нет.
   НеПапоКарло
 
39 - 07.06.18 - 13:45
Может дело в том, что в блоке "ИнформациияОТипахДанных" в файле данных обмена "Message_БП_УВ" данные по документу стоят раньше?

<ИнформацияОТипахДанных>
    <ТипДанных Имя="ДокументСсылка.ПроизводственныеОперации">
        <Дата>Дата</Дата>
        <Проведен>Булево</Проведен>
        <НезавершенноеПроизводство>Булево</НезавершенноеПроизводство>
        <Номер>Строка</Номер>
        <ПометкаУдаления>Булево</ПометкаУдаления>
        <ЗавершитьПроизводство>Булево</ЗавершитьПроизводство>
        <ИдентификаторТранзакции>СправочникСсылка.ИдентификаторыПроизводственныхТранзакций</ИдентификаторТранзакции>
    </ТипДанных>
    <ТипДанных Имя="СправочникСсылка.СерииНоменклатурыУчетнойСистемы">
        <Код>Строка</Код>
        <СрокГодности>Дата</СрокГодности>
        <ПометкаУдаления>Булево</ПометкаУдаления>
        <Владелец>СправочникСсылка.НоменклатураУчетнойСистемы</Владелец>
        <СерийныйНомер>Строка</СерийныйНомер>
        <Наименование>Строка</Наименование>
        <ДатаИзготовления>Дата</ДатаИзготовления>
    </ТипДанных>
</ИнформацияОТипахДанных>
   Cyberhawk
 
40 - 07.06.18 - 13:49
Что-то никто из отписавшихся верно про CorrespondentExchangeRules не написал, ибо не знают походу.
Не знают, что загрузка в приемник идет по этим правилам (хранящимся в приемнике), а на те правила что в файле выгрузки прилетают подсистеме обмена из БСП уже пох )
   Cyberhawk
 
41 - 07.06.18 - 13:49
Добро пожаловать в мир типовых на БСП
   НеПапоКарло
 
42 - 07.06.18 - 14:07
Перенес блок с данными Серий выше блока с данными Документа в файле "Message_БП_УВ" и всё залетело с первого раза. Значит необходимо при выгрузке выставить порядок записи данных в "Message_БП_УВ". А где выставить этот порядок никак не вижу.
   НеПапоКарло
 
43 - 07.06.18 - 14:08
(32) Не помогло
   craxx
 
44 - 07.06.18 - 14:10
(0) а ты там кем будешь?
   НеПапоКарло
 
45 - 07.06.18 - 14:13
(44) В смысле? Когда настрою обмен?)
   Ёпрст
 
46 - 07.06.18 - 14:18
(40) это как ? :)

правила при загрузке берутся всегда из прилетевшего файла обмена и никак иначе.
   Ёпрст
 
47 - 07.06.18 - 14:22
А у автора вся фигня, только из-за когда в ПослеЗагрузки, где он сам лепит по-новой всю ТЧ документа.
Тут только ставить галку - режим отладки обработчиков и в пофигураторе посмотреть в отладке, как идёт загрузка в этом коде.
   Ёпрст
 
48 - 07.06.18 - 14:24
Ну и ... у него реально за 2 раза, ибо первый раз он лепит сами серии, а второй раз, они уже "находятся в его рег соответствий".
Зачем так сделано - к автору правил.
Проще было не писать этот код в ПослеЗагрузки , а сразу выгрузить как надо, т.е как в (35)
   Cyberhawk
 
49 - 07.06.18 - 14:34
(46) Терретик? Не тупи, вроде Я все понятно написал, откуда там берется.
 
 Рекламное место пустует
   Ёпрст
 
50 - 07.06.18 - 14:36
(49) Спорим на пузырь конины, что в кд1 правила при загрузки всегда берутся из прилетевшего файла обмена и никак иначе ?
   Ёпрст
 
51 - 07.06.18 - 14:36
в кд2.1
   Cyberhawk
 
52 - 07.06.18 - 14:36
Прежде чем спорить, нужно договориться о понятиях.
Что значит твое "всегда"?
   Cyberhawk
 
53 - 07.06.18 - 14:37
Ты на (41) посмотри. Тебе назвать конфу и релиз что ли, где правила (формата КД 2) и где выполняется озвученное мною?
   Ёпрст
 
54 - 07.06.18 - 14:41
(53) Так спорить будешь, или нет ?
   Cyberhawk
 
55 - 07.06.18 - 14:42
Ясно, теоретик и не читатель
   Ёпрст
 
56 - 07.06.18 - 14:42
(55) Слился ?
   Ёпрст
 
57 - 07.06.18 - 14:44
Обработка ОбменДаннымиXML, если что, во всех конфах типовых, одинаковая, как и УниверсальныйОбменXML..
   Ёпрст
 
58 - 07.06.18 - 14:44
и пофик там, на твою бсп, она только для кд3 нужна.
   Ёпрст
 
59 - 07.06.18 - 14:44
и в кд2.1 нет отдельных правил для загрузки в базе приёмнике
   Cyberhawk
 
60 - 07.06.18 - 14:46
Почему слился - вроде Я все понятно написал выше
   Ёпрст
 
61 - 07.06.18 - 14:50
(60) Слился - не стал спорить.
   aleks_default
 
62 - 07.06.18 - 14:53
(60) У тебя есть эта конфа? Ветеринарка или как там?
   Cyberhawk
 
63 - 07.06.18 - 15:08
(62) Типовые от 1С
   Cyberhawk
 
64 - 07.06.18 - 15:09
(61) Так смысл с тобой спорить, если ты даже предмет спора внятно огласить не можешь
   hhhh
 
65 - 07.06.18 - 15:26
(61) у меня реальный случай был. Действительно при загрузке правила берутся не из файла выгрузки. А находятся в самой базе приемнике и берутся оттуда. Я полдня потерял на этом, что такое, меняю правила, а ничего не происходит.

Это обусловлено политикой безопасности - не передавать программный код через файлы.
   Ёпрст
 
66 - 07.06.18 - 15:31
(64) в типовых конфах, при загрузке что обработкой по планам обмена с галкой "обмен по правилам" (через обменДаннымиXML которая), что через обработку УниверсальныйОбменXML, при загрузке файла обмена в базе приёмника загрузка всегда идёт по правилам, прилетевшим вместе с файлом обмена.
Ты утверждаешь обратное, что правила берутся из базы приёмника.
   Cyberhawk
 
67 - 07.06.18 - 15:35
(66) Ты что-то напутал и добавил моим словам отсебятины
   Ёпрст
 
68 - 07.06.18 - 15:36
(67) Да ? А в (40) как-то по-другому написано разве ?
   Cyberhawk
 
69 - 07.06.18 - 15:45
Конечно - ни о какой "загрузке обработкой" с какими-то там галками речь не идет
   Cyberhawk
 
70 - 07.06.18 - 16:00
Но - справедливости ради - все зависит не столько от конфигурации (типовая или не типовая), а от правил конвертации - конкретно от свойства "Режим совместимости". Если он в значении "БСП 2.0 и ниже", то все будет работать как мы привыкли.
Если же он в значении "БСП 2.1 и выше" (= "Не использовать") и обработка обмена в приемнике поддерживает этот режим, то правила для загрузки будут браться из соответствующего регистра сведений приемника.
Для интересующихся - типовой обмен между УНФ и БП (из сведего по памяти - приемником была инфобаза БП). Ну и (65) тоже, вон, подтверждает мои слова.
С чем там собирался спорить ник "Епрст" (и что за галки / обработки обмена, если это все скрыто в пользовательском режиме в подсистеме БСП) - не ясно, но это и не важно: совершенно понятно, что утвержать (50) было явной дичью )
   НеПапоКарло
 
71 - 07.06.18 - 16:56
(70) "то правила для загрузки будут браться из соответствующего регистра сведений приемника. "

В каком регистре сведений может хранится?
   Cyberhawk
 
72 - 07.06.18 - 17:08
(71) Это неправильный вопрос
   Cyberhawk
 
73 - 07.06.18 - 17:10
Ибо ответ на твой вопрос тебе вряд ли что-то даст.
Куда лучше интересоваться, а что сделать, чтобы посмотреть / скачать / изменить / загрузить обратно эти правила.
И здесь тебе даст ответ документация на ИТС по подсистеме БСП "Обмен данными".
   Cyberhawk
 
74 - 07.06.18 - 17:12
Также отбор по соответствующей подсистеме в дереве метаданных тебе тоже даст ответ на твой вопрос.
В УНФ этот регистр, например, называется "ПравилаДляОбменаДанными".
   Cyberhawk
 
75 - 07.06.18 - 17:13
(ну и в других конфах на БСП он должен называться так же)


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует