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

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

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

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

Дополнительные настройки правил конвертации объектов имеют Истину у следующих значений:
- Искать объект приемника по внутреннему идентификатору
- Не замещать существующие объекты в приемнике при загрузке, а только создавать новые и заполнять их
- Не создавать новый объект в приемнике, если он НЕ найден
1 Cool_Profi
 
07.06.18
10:00
Отпинать разработчика, чтобы он сделал нормальные правила - не вариант?
2 НеПапоКарло
 
07.06.18
10:12
(1) Его ответ таков: "Данные выгружаются? Выгружаются, а в сколько этапов у нас договора не было".
3 aleks_default
 
07.06.18
10:12
Не очень понятно. Посмотрите в файле выгрузки данных, там в табличной части документа уже указана партия (как минимум GUID)?. Если указана, то порядок выгрузки данных значения не имеет. Или же партии заполняются в документ уже после загрузки какой-то постобработкой?
4 Cool_Profi
 
07.06.18
10:14
(2) вы деньги уже заплатили? Если нет, тогда пинок.
Если да - ещё добавьте. Пинка, разумеется. Ну и копейку, когда исправит.
Накосячил - пусть правит
5 НеПапоКарло
 
07.06.18
10:21
(3) Постобработки нет.
6 Cyberhawk
 
07.06.18
10:22
Порядок выгрузки ни в типовой обработке обмена, ни в обычных правилах конвертации (забор объектов с узла) не "настраивается".
Но добиться нужного порядка обмена все-таки можно, но не нужно.
7 Serg_1960
 
07.06.18
10:23
(3) Фишка в том, что GUIDы разработчик не используют. И это правильное решение. Это не РИБ.
8 Cyberhawk
 
07.06.18
10:23
Скорее всего виноват прикладной код, который очищает ссылки ("партии"), т.е. в приемнике прикладной код ориентирован на то, что объект в БД должен быть
9 Ёпрст
 
07.06.18
10:25
(0) ну выложи свои правила на посмотреть
10 Serg_1960
 
07.06.18
10:26
(8) Угу. Партии легко изменяются в базе-приёмнике (например при перепроведении документов). И при обмене, ориентироваться на партии, созжвнные в базе-источнике - нонсенс.
11 Serg_1960
 
07.06.18
10:27
"созжвнные" = "созданные"
12 НеПапоКарло
 
07.06.18
10:29
13 НеПапоКарло
 
07.06.18
10:30
(12) в правилах вместо Партий используются Серии.
14 aleks_default
 
07.06.18
10:54
(8) такой код не должен срабатывать в режиме обмен данными загрузка - это залет
15 Cyberhawk
 
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) Да, из БП в ветеринарку
31 hhhh
 
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
Т.е выгружать серию в реквизит Партия.
36 aleks_default
 
07.06.18
12:53
(34) это все хорошо но проблема видимо не в этом
37 hhhh
 
07.06.18
13:19
может действительно CorrespondentExchangeRules правила из второй базы надо поправить?
38 НеПапоКарло
 
07.06.18
13:40
(33) В том то и дело, что серий на момент загрузки документа в приёмнике нет.
39 НеПапоКарло
 
07.06.18
13:45
Может дело в том, что в блоке "ИнформациияОТипахДанных" в файле данных обмена "Message_БП_УВ" данные по документу стоят раньше?

<ИнформацияОТипахДанных>
    <ТипДанных Имя="ДокументСсылка.ПроизводственныеОперации">
        <Дата>Дата</Дата>
        <Проведен>Булево</Проведен>
        <НезавершенноеПроизводство>Булево</НезавершенноеПроизводство>
        <Номер>Строка</Номер>
        <ПометкаУдаления>Булево</ПометкаУдаления>
        <ЗавершитьПроизводство>Булево</ЗавершитьПроизводство>
        <ИдентификаторТранзакции>СправочникСсылка.ИдентификаторыПроизводственныхТранзакций</ИдентификаторТранзакции>
    </ТипДанных>
    <ТипДанных Имя="СправочникСсылка.СерииНоменклатурыУчетнойСистемы">
        <Код>Строка</Код>
        <СрокГодности>Дата</СрокГодности>
        <ПометкаУдаления>Булево</ПометкаУдаления>
        <Владелец>СправочникСсылка.НоменклатураУчетнойСистемы</Владелец>
        <СерийныйНомер>Строка</СерийныйНомер>
        <Наименование>Строка</Наименование>
        <ДатаИзготовления>Дата</ДатаИзготовления>
    </ТипДанных>
</ИнформацияОТипахДанных>
40 Cyberhawk
 
07.06.18
13:49
Что-то никто из отписавшихся верно про CorrespondentExchangeRules не написал, ибо не знают походу.
Не знают, что загрузка в приемник идет по этим правилам (хранящимся в приемнике), а на те правила что в файле выгрузки прилетают подсистеме обмена из БСП уже пох )
41 Cyberhawk
 
07.06.18
13:49
Добро пожаловать в мир типовых на БСП
42 НеПапоКарло
 
07.06.18
14:07
Перенес блок с данными Серий выше блока с данными Документа в файле "Message_БП_УВ" и всё залетело с первого раза. Значит необходимо при выгрузке выставить порядок записи данных в "Message_БП_УВ". А где выставить этот порядок никак не вижу.
43 НеПапоКарло
 
07.06.18
14:08
(32) Не помогло
44 craxx
 
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)
49 Cyberhawk
 
07.06.18
14:34
(46) Терретик? Не тупи, вроде Я все понятно написал, откуда там берется.
50 Ёпрст
 
07.06.18
14:36
(49) Спорим на пузырь конины, что в кд1 правила при загрузки всегда берутся из прилетевшего файла обмена и никак иначе ?
51 Ёпрст
 
07.06.18
14:36
в кд2.1
52 Cyberhawk
 
07.06.18
14:36
Прежде чем спорить, нужно договориться о понятиях.
Что значит твое "всегда"?
53 Cyberhawk
 
07.06.18
14:37
Ты на (41) посмотри. Тебе назвать конфу и релиз что ли, где правила (формата КД 2) и где выполняется озвученное мною?
54 Ёпрст
 
07.06.18
14:41
(53) Так спорить будешь, или нет ?
55 Cyberhawk
 
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 нет отдельных правил для загрузки в базе приёмнике
60 Cyberhawk
 
07.06.18
14:46
Почему слился - вроде Я все понятно написал выше
61 Ёпрст
 
07.06.18
14:50
(60) Слился - не стал спорить.
62 aleks_default
 
07.06.18
14:53
(60) У тебя есть эта конфа? Ветеринарка или как там?
63 Cyberhawk
 
07.06.18
15:08
(62) Типовые от 1С
64 Cyberhawk
 
07.06.18
15:09
(61) Так смысл с тобой спорить, если ты даже предмет спора внятно огласить не можешь
65 hhhh
 
07.06.18
15:26
(61) у меня реальный случай был. Действительно при загрузке правила берутся не из файла выгрузки. А находятся в самой базе приемнике и берутся оттуда. Я полдня потерял на этом, что такое, меняю правила, а ничего не происходит.

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

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