Имя: Пароль:
1C
 
EnterpriseData новый пакет в расширении
0 Ирина1
 
16.12.24
12:45
Здравствуйте. Добавила свой пакет в расширение. В этом пакете  добавила для заказапоставщика два реквизита ТЧ. Реквизиты это справочники новые. Дописала код в процедурах соответствующих в МенеждереУниверсальногоОбмена. Но эти мои реквизиты не оявляются в xml файле. Что я делаю не так?

&ИзменениеИКонтроль("ДобавитьПКО_Документ_ЗаказПоставщику_Отправка")
Процедура адмДобавитьПКО_Документ_ЗаказПоставщику_Отправка(ПравилаКонвертации)
    ПравилоКонвертации = ОбменДаннымиXDTOСервер.ИнициализироватьПравилоКонвертацииОбъекта(ПравилаКонвертации);
    ПравилоКонвертации.ИмяПКО            = "Документ_ЗаказПоставщику_Отправка";
    ПравилоКонвертации.ОбъектДанных      = Метаданные.Документы.ЗаказПоставщику;
    #Удаление
    ПравилоКонвертации.ОбъектФормата     = "Документ.ЗаказПоставщику"; //@NON-NLS-1
    #КонецУдаления
#Вставка  
    ПравилоКонвертации.ПространствоИмен             = "http://admaurl/EnterpriseData/11.17.3";
    ОбменДаннымиXDTOСервер.ИнициализироватьРасширениеПравилаКонвертацииОбъекта(ПравилоКонвертации, ПравилоКонвертации.ПространствоИмен);
    ПравилоКонвертации.ОбъектФормата     = "адмДокумент.ЗаказПоставщику"; //@NON-NLS-1
#КонецВставки
    ПравилоКонвертации.ПриОтправкеДанных = "ПКО_Документ_ЗаказПоставщику_Отправка_ПриОтправкеДанных";
    СвойстваШапки = ПравилоКонвертации.Свойства;


.............

    ДобавитьПКС(СвойстваТЧ, "", "ЦенаЗаУпаковку", 1);
    ДобавитьПКС(СвойстваТЧ, "", "Штрихкод", 1);
#Вставка
    ДобавитьПКС(СвойстваТЧ, "", "Участок", 1, "Справочник_адмУчастокОбъектовЗаказчиков_Отправка", "http://admaurl/EnterpriseData/11.17.3");
    ДобавитьПКС(СвойстваТЧ, "", "Объект", 1, "Справочник_адмОбъектыЗаказчиков_Отправка","http://admaurl/EnterpriseData/11.17.3");
#КонецВставки
1 Волшебник
 
16.12.24
12:59
Ирина, лучше идите варить борщ.
2 Ирина1
 
16.12.24
13:02
Волшебник, разве настолько все плохо
3 Мультук
 
16.12.24
13:51
(0)

Что может пойти не так ?
а) Новичок (хотя, раз не повелась на Волшебника, может и нет)
б) Расширения (в двух базах)
в) Пакеты XDTO (в двух базах)
г) Конвертация (в двух базах)

Когда 1С поменяет (повысит) версию обмена нужно будет поправить всё еще раз ?


google:ИнициализироватьРасширениеПравилаКонвертацииОбъекта
https://infostart.ru/1c/articles/1798722/

Статью не читал, но комменты там радуют

P.S.
Я бы засунул AdditionalInfo таблицу значений


P.P.S.
Тут недавно товарищ тоже хотел (была такая тема)
ИнициализироватьРасширениеПравилаКонвертацииОбъекта

Поищите, может всё же расширил
4 Ирина1
 
16.12.24
14:27
Спасибо. если  смотреть файл xml пока только базы отправителя,  то неважно, что там прописано в базе приемнике. А у меня в xml отправителе не прописываются мои поля
5 lexushka
 
16.12.24
22:37
из (3)

Важно: чтобы объект выгрузился, нужно, чтобы узел-приёмник поддерживал получение такого типа. То есть, пока на стороне приемника не добавлены ПОД и ПКО, выгрузка самого объекта не произойдёт!
6 Ненавижу 1С
 
17.12.24
08:36
(0) а вы в обеих базах у необходимых узлов указали новую версию формата обмена?
7 Ирина1
 
17.12.24
12:38
Я сначала посмотрела версию формата в обоих базах. 17.1

потом уже заимствовала этот пакет в расширения в базах. И работала со своим добавленным

Версию формата обмена в узлах не трогала
8 Ирина1
 
17.12.24
12:44
у меня программа не заходит в  процедуру "ПКО_Справочник_адмОбъектыЗаказчиков_ПриОтправкеДанных", в базе отправителе. Это нетиповой справочник.



Процедура ДобавитьПКО_Справочник_адмОбъектыЗаказчиков_Отправка(ПравилаКонвертации)
    ПравилоКонвертации = ОбменДаннымиXDTOСервер.ИнициализироватьПравилоКонвертацииОбъекта(ПравилаКонвертации);
    ПравилоКонвертации.ПространствоИмен             = "http://admaurl/EnterpriseData/11.17.3";
    ОбменДаннымиXDTOСервер.ИнициализироватьРасширениеПравилаКонвертацииОбъекта(ПравилоКонвертации, ПравилоКонвертации.ПространствоИмен);
    
    ПравилоКонвертации.ИмяПКО                       = "Справочник_адмОбъектыЗаказчиков_Отправка";
    ПравилоКонвертации.ОбъектДанных                 = Метаданные.Справочники.адмОбъектыЗаказчиков;
    ПравилоКонвертации.ОбъектФормата                = "Справочник.адмОбъектыЗаказчиков";

    ПравилоКонвертации.ПриОтправкеДанных            = "ПКО_Справочник_адмОбъектыЗаказчиков_ПриОтправкеДанных";
    ПравилоКонвертации.ВариантИдентификации         = "СначалаПоУникальномуИдентификаторуПотомПоПолямПоиска";
    СвойстваШапки = ПравилоКонвертации.Свойства;
    ДобавитьПКС(СвойстваШапки, "Наименование",        "Наименование");
    ДобавитьПКС(СвойстваШапки, "Код",        "Код");
    ДобавитьПКС(СвойстваШапки, "Родитель",          "Родитель", 1, "Справочник_адмОбъектыЗаказчиков_Отправка", "http://admaurl/EnterpriseData/11.17.3");
    ДобавитьПКС(СвойстваШапки, "ПометкаУдаления",     "ПометкаУдаления");
    ДобавитьПКС(СвойстваШапки, "ЭтоГруппа",     "ЭтоГруппа");
    
    ПравилоКонвертации.ПоляПоиска.Добавить("Наименование,ЭтоГруппа");
КонецПроцедуры  

Процедура ПКО_Справочник_адмОбъектыЗаказчиков_ПриОтправкеДанных(ДанныеИБ, ДанныеXDTO, КомпонентыОбмена, СтекВыгрузки)
    ДанныеXDTO.КлючевыеСвойства.Вставить("Ссылка", ДанныеИБ.Ссылка);
    ДанныеXDTO.КлючевыеСвойства.Вставить("Код", ДанныеИБ.Код);
    ДанныеXDTO.КлючевыеСвойства.Вставить("Наименование", ДанныеИБ.Наименование);
    ДанныеXDTO.Родитель.Вставить("Родитель", ДанныеИБ.Родитель);
    ДанныеXDTO.ЭтоГруппа.Вставить("ЭтоГруппа", ДанныеИБ.ЭтоГруппа);
    ДанныеXDTO.ПометкаУдаления.Вставить("ПометкаУдаления", ДанныеИБ.ПометкаУдаления);
    
    
КонецПроцедуры
9 Ирина1
 
17.12.24
12:45
в "адмВыполнитьПроцедуруМодуляМенеджера" свои процедуры описала
10 Мультук
 
17.12.24
13:45
(9)

Я вижу три пути решения проблемы:

1) Сжать зубы и копать самой
Статью из (3) вы прочитали ? Можно (наверное) задать вопросы там

2) Ждать гуру, который собаку съел на
"ИнициализироватьРасширениеПравилаКонвертацииОбъекта"

3) Сделать через AdditionalInfo
11 Ирина1
 
17.12.24
15:24
По этой статье и делала изначально.
Гуру подождем - интересно было бы прийти к успеху.
Зубы больше сжимать не буду, сделаю через AdditionalInfo

Через AdditionalInfo не нравится то, что в базе приемнике нужно будет программно создавать нетиповые объекты.
Получается в процедуре "ПКО_Документ_СчетПоставщика_Получение_ПередЗаписьюПолученныхДанных"
Некрасиво.
Я так уже делала. Почему то у меня при записи нетипового объекта (в процедуре переноса типового объекта) иногда выходило сообщение , что Объект заблокирован. Его нельзя записать.
12 Ненавижу 1С
 
17.12.24
16:52
(8) оно туда вообще заходит? ПОД есть?
13 Ирина1
 
17.12.24
17:07
да, под есть. и в эту процедуру заходит
ДобавитьПКО_Справочник_адмОбъектыЗаказчиков_Отправка(ПравилаКонвертации)

а в эту не заходит

Процедура ПКО_Справочник_адмОбъектыЗаказчиков_ПриОтправкеДанных(ДанныеИБ, ДанныеXDTO, КомпонентыОбмена, СтекВыгрузки)
14 Волшебник
 
17.12.24
19:57
(13) а почему?
15 Волшебник
 
17.12.24
20:00
Подождём гуру, который умеет пользоваться отладчиком на расстоянии...
16 Ненавижу 1С
 
17.12.24
20:47
(13) ну ок. А ты ее добавила в эту безумную процедуру? Там должно быть что-то типа:
Если ИмяМетода="ПКО_Справочник_адмОбъектыЗаказчиков_ПриОтправкеДанных" Тогда
ПКО_Справочник_адмОбъектыЗаказчиков_ПриОтправкеДанных(...)
17 Ирина1
 
17.12.24
21:36
да, добавила я ее  в процедуру "ВыполнитьПроцедуруМодуляМенеджера"

Сжала зубы и пошла опять в отладчик.


у меня сейчас вылетает в процедуре

&ИзменениеИКонтроль("ДобавитьПКО_Документ_ЗаказПоставщику_Отправка")
Процедура адмДобавитьПКО_Документ_ЗаказПоставщику_Отправка(ПравилаКонвертации)
ПравилоКонвертации = ОбменДаннымиXDTOСервер.ИнициализироватьПравилоКонвертацииОбъекта(ПравилаКонвертации);

ПравилоКонвертации.ИмяПКО = Документ_ЗаказПоставщику_Отправка";

ПравилоКонвертации.ОбъектДанных      = Метаданные.Документы.ЗаказПоставщику;

#Удаление
ПравилоКонвертации.ОбъектФормата     = "Документ.ЗаказПоставщику"; //@NON-NLS-1
#КонецУдаления
#Вставка  

ПравилоКонвертации.ПространствоИмен             = "http://admaurl/EnterpriseData/11.17.3";
    ОбменДаннымиXDTOСервер.ИнициализироватьРасширениеПравилаКонвертацииОбъекта(ПравилоКонвертации, ПравилоКонвертации.ПространствоИмен);

ПравилоКонвертации.ОбъектФормата     = "адмДокумент.ЗаказПоставщику";  
#КонецВставки

ПравилоКонвертации.ПриОтправкеДанных = "ПКО_Документ_ЗаказПоставщику_Отправка_ПриОтправкеДанных";
    СвойстваШапки = ПравилоКонвертации.Свойства;
    ДобавитьПКС(СвойстваШапки, "АдресДоставки",          "АдресДоставки");

...............................................

вот на том месте, где я добавляю свой реквизит "Объект"


ДобавитьПКС(СвойстваТЧ, "", "Штрихкод", 1);

#Вставка  
ДобавитьПКС(СвойстваТЧ, "", "Объект", 1, "Справочник_адмОбъектыЗаказчиков_Отправка","http://admaurl/EnterpriseData/11.17.3");

ДобавитьПКС(СвойстваТЧ, "", "Участок", 1, "Справочник_адмУчастокОбъектовЗаказчиков_Отправка", "http://admaurl/EnterpriseData/11.17.3");
#КонецВставки
18 Ирина1
 
17.12.24
21:45
в объектеФормата тип нового реквизит "Объект" = КлючевыеСвойстваЗаказчика

В Ключевыхсвойствах три поля: Ссылка, код, наименование
19 Волшебник
 
17.12.24
21:52
У нас что тут, отладка дистанционно?
Иришка, дай фотку.
20 Garykom
 
17.12.24
22:01
Есть замечательный метод допиливания любого обмена с готовым форматом
Берем любой неограниченный строковый реквизит
И засовываем в него json с чем надо

В случае новых реквизитов в ТЧ засовываем всю ТЧ целиком с новыми реквизитами, типовые для ТЧ оставляем пустыми или без новых реквизитов
Главное при загрузке использовать ТЧ не из типового а из своего
21 Волшебник
 
17.12.24
22:05
(20) валидность где проверяется?
22 lEvGl
 
17.12.24
22:10
(20) правильно понял, что в источнике может быть 5 реквизитов, а в приемнике 7 и СериализаторXDTO это съест, оставив отсутствующее в источнике пустым в приемнике?
23 Garykom
 
17.12.24
22:09
(21) Где надо там и будет проверяться
24 Garykom
 
17.12.24
22:10
(22) А причем тут СериализаторXDTO ?
Мы его тупо обходим, чтобы не ползти в изменение схем
25 Garykom
 
17.12.24
22:12
Суть что типовая может продолжать легко обновляться, пакеты не трогаем
И легко добавляем/изменяем новые доработки, не трогая типовое кроме кода в источнике и приемнике
26 lEvGl
 
17.12.24
22:14
(24) как универсальный писатель и читатель xml
Чтобы

Источник
Сериализатор.Записать(Ссылка)

Приемник
Сериализатор.Прочитать(XML)

при том что состав (валидность(21)) разный

т к в схемы ползать совсем не хочется
27 Garykom
 
17.12.24
22:14
(25)+ Если есть AdditionlInfo можно использовать его, но не обязательно
Достаточно любого неограниченного строкового реквизита в схеме у нужного объекта
Там остается и само значение этого реквизита (в json) и все наше новое
28 Garykom
 
17.12.24
22:16
(26) Начнем с того что XML на данный момент уже устарел
Он слишком тормозной в отличие от JSON
Да у него куча ненужных (на практике) возможностей со схемами и валидацией
Но в реальности даже если значение удовлетворяет схеме - оно часто неправильное и один хрен нужна дополнительная проверка кодом
29 Волшебник
 
17.12.24
22:17
(28) когда я слышу "XML устарел", то я не понимаю вселенную...
30 lEvGl
 
17.12.24
22:19
жалдь
)
31 Garykom
 
17.12.24
22:30
(29) Ну это реальность
Когда надо перегнать много данных через текстовую сериализацию на данный момент есть выбор:
1. CSV ( или прочие из wiki:DSV )
2. XML
3. JSON

И лично я выбор делаю от типа данных
Если они сильно одинаковые по сути табличные то CSV или TSV
Если более сложные, объектно-иерархические то JSON
И никогда не выберу XML для нового проекта, без тяжкого груза legacy
32 Волшебник
 
17.12.24
23:04
(31) Ваша реальность слегка заглючила
33 Valdis2007
 
18.12.24
07:45
(20) +1

Берем любой неограниченный строковый реквизит
И засовываем в него json с чем надо

Читал, что так появилась МоногоДБ в фейсбуке
34 Ирина1
 
18.12.24
08:03
Простите, но вы засорили мне ветку
Понятно, что можно сделать через AdditionalInfo
35 Ненавижу 1С
 
18.12.24
08:19
(17) что значит "вылетает"? Журнал регистрации, что говорит? параметры у ДобавитьПКС соблюдены?
36 Ирина1
 
19.12.24
22:35
Здравствуйте. Переношу нетиповые реквизиты ТЧ через AdditionalInfo

Если документ уже был в базе приемнике, то все хорошо.
Если документа нет в базе приемнике, то в процедуре ПКО_Документ_СчетПоставщика_Получение_ПередЗаписьюПолученныхДанных(...)
есть код, который выкидывает из нее
вот он

    Если ДанныеИБ = Неопределено Тогда
        Возврат;
    КонецЕсли;
и у меня мои реквизиты в тч не заполняются

обошла так

#Вставка
Если ДанныеИБ = Неопределено Тогда
  ДанныеИБ =
  Документы.СчетНаОплатуПоставщика.СоздатьДокумент();                        
КонецЕсли;
#КонецВставки

дальше заполняю тч из AdditionalInfo

Вопрос: Я таким созданием документа не повлеку какие то проблемы в нем?
37 Ирина1
 
19.12.24
22:36
зачем это сделано
   Если ДанныеИБ = Неопределено Тогда
        Возврат;
    КонецЕсли;
38 DrShad
 
19.12.24
22:39
(37) ну так чтобы дальше не возникло критической ошибки
39 Волшебник
 
модератор
19.12.24
23:56
Ирина, идите варить борщ!
40 Ирина1
 
20.12.24
04:28
Волшебник, завтра сварю
41 Волшебник
 
20.12.24
06:34
Прикольно...