Имя: Пароль:
1C
1С v8
8.2. Как включить пакет XDTO в глобальную Фабрику XDTO?
0 dan001
 
03.11.11
11:34
Пытаюсь реализовать обмен по стандарту CommerceML 2 в самописной конфигурации под 8.2. (установлен релиз 8.2.13.219).
С сайта 1С по ссылке http://v8.1c.ru/edi/edi_stnd/90/CML205.XSD взял файл схемы, импортировал его в конфигурацию, в пакет XDTO, URI пространства имен «urn:1C.ru:commerceml 2». Смотрю в Отладчике состав коллекции пакетов глобальной ФабрикаXDTO, пакета «urn:1C.ru:commerceml 2» в коллекции нет.
Можно загрузить схему из файла, таким способом:
    Пути = Новый Массив();
   Пути.Добавить("D:\ CML205.xsd");
   Фабрика = СоздатьФабрикуXDTO(Пути);

В этом случае пакет в коллекции есть. Но хочется чтобы схема была в конфигурации.
Вопрос. Каким образом создать фабрику с пакетом не из внешнего файла, а созданным в самой конфигурации?
1 DmitrO
 
03.11.11
11:43
Релиз 8.2.13.219
Импортировал схему в конфигурацию, пакет есть.
Все работает вроде, например:
ТипАдресТип = ФабрикаXDTO.Тип("urn:1C.ru:commerceml 2", "АдресТип");
создается нормально.
2 mikecool
 
03.11.11
11:44
помню я бодался с импортом чужой схемы в свою конфигу
плюнул - засунул в макет обработки
3 DmitrO
 
03.11.11
11:47
(2)я тоже помню как ты бодался, там проблема была в том, что это было пространство имен ...current-config оно предопределенное для 1С и означает текущую конфигурацию, такую схему действительно нельзя в глобальную фабрику засунуть т.к. попросту получается конфликт имен.
4 dan001
 
03.11.11
12:14
У меня ни один пакет, добавленный вручную не виден в глобальной фабрике, что за ерунда
5 dan001
 
03.11.11
12:20
Разобрался. Они на клиенте не видны, а на сервере есть в полном составе )
6 dan001
 
03.11.11
12:25
Теперь другая проблема. Как по схеме CommerceML 2 создать объект Документ, если в типах объектов Документа нет, а есть он в корневых свойствах, что мне не совсем понятно?
7 DmitrO
 
03.11.11
12:59
Корневые свойства это описание допустимого состава файлов обмена.
Имхо с помощью объектов XDTO ими оперировать не получится.
8 DmitrO
 
03.11.11
13:03
вообще в этой схеме много анонимных типов, а с ними xdto не работает вроде.
9 dan001
 
03.11.11
16:28
Я реализовал следующий тестовый код:

   ЗаписьXML = Новый ЗаписьXML;
   ЗаписьXML.ОткрытьФайл("D:\111\cml_zakaz.xml");
   
   Фабрика = ФабрикаXDTO;
   КоммерческаяИнформацияТип = Фабрика.Пакеты.Получить("urn:1C.ru:commerceml 2").КорневыеСвойства.Получить("КоммерческаяИнформация").Тип;
   КоммерческаяИнформация = Фабрика.Создать(КоммерческаяИнформацияТип);
   КоммерческаяИнформация.ВерсияСхемы = "2.05";
   ДатаТип = Фабрика.Тип("urn:1C.ru:commerceml 2","ДатаТип");
   КоммерческаяИнформация.ДатаФормирования = ТекущаяДата();
   ДокументТип = Фабрика.Пакеты.Получить("urn:1C.ru:commerceml 2").КорневыеСвойства.Получить("Документ").Тип;
   Документ = Фабрика.Создать(ДокументТип);
   Документ.Ид = "111";
   Документ.Номер = "222";
   КоммерческаяИнформация.Документ.Добавить(Документ);
   Фабрика.ЗаписатьXML(ЗаписьXML,КоммерческаяИнформация,"КоммерческаяИнформация",,,НазначениеТипаXML.Явное);
   ЗаписьXML.Закрыть();

Не знаю, насколько он корректный.
10 DmitrO
 
03.11.11
16:44
Ах вот оно как можно тип получить, через пакет. (Вот она рыба моей мечты!)
А что, вроде все логично.
Только у объекта Документ обязательных свойств больше. А ты ставишь только Ид и Номер. Остальных обязательных в файле не будет.
11 dan001
 
03.11.11
16:52
Свойств больше, просто для краткости примера я все не стал брать.
12 DmitrO
 
03.11.11
16:52
тогда понятно.
13 DmitrO
 
03.11.11
16:55
Ну еще объявление xml для порядку записать надо.
Объявления пространств имен в файл пишутся? Должны вроде так-то.
AdBlock убивает бесплатный контент. 1Сергей