Имя: Пароль:
1C
1С v8
Вопрос про XDTO
0 Alex_MA
 
09.08.11
09:27
Всем доброго дня!

Создал пакет XDTO.
http://gyazo.com/2438451f22e588b3f779d7eb374efe8f.png

Создал обработку выгрузки XDTO. Обработка имеет реквизит "Документ" - ссылка на документ "ЗаявкаНаРасходованиеДенежныхСредств"
Вот код:



Процедура КнопкаВыполнитьНажатие(Кнопка)
   
   //Создать сериализатор XDTO для глобальной фабрики
   ТекСериализаторXDTO = Новый СериализаторXDTO(ФабрикаXDTO);
   
   //Создать объект записи XML и открыть файл
   ЗаписьXML = Новый ЗаписьXML();
   ЗаписьXML.ОткрытьФайл("D:\RequestDocXDTO.xml");
   
   //Получить выгружаемый документ
   ДокументОбъект = Документ.ПолучитьОбъект();
   
   //Получаем используемые типы значений XTDO
   НомерТип        = ФабрикаXDTO.Тип("http://localhost/xdto/request", "Номер");
   НаименованиеТип = ФабрикаXDTO.Тип("http://localhost/xdto/request", "Наименование");
   
   //Получаем используемые типы объектов XDTO
   ЗаявкаНаРасходованиеСредствТип = ФабрикаXDTO.Тип("http://localhost/xdto/request", "ЗаявкаНаРасходованиеДенежныхСредств");
   ВалютаТип                      = ФабрикаXDTO.Тип("http://localhost/xdto/request", "Валюта");
   СоставЗаявкиТип                = ФабрикаXDTO.Тип("http://localhost/xdto/request", "СоставЗаявки");
   
   //Создаем объект XDTO вылюта
   ВалютаXDTO = ФабрикаXDTO.Создать(ВалютаТип);
   
   //Получаем данные по валюте
   ВалютаXDTO.Наименование = ДокументОбъект.ВалютаДокумента.Наименование;
   ВалютаXDTO.Курс         = МодульВалютногоУчета.ПолучитьКурсВалюты(Документ.ВалютаДокумента, ТекущаяДата());    
   
   //Создаем объект XDTO ЗаявкаНаРасходованиеСредств
   ЗаявкаНаРасходованиеСредстаXDTO = ФабрикаXDTO.Создать(ЗаявкаНаРасходованиеСредствТип);
   
   //Получаем данные по документу
   ЗаявкаНаРасходованиеСредстаXDTO.Дата            = ДокументОбъект.Дата;
   ЗаявкаНаРасходованиеСредстаXDTO.Номер           = ФабрикаXDTO.Создать(НомерТип);
   ЗаявкаНаРасходованиеСредстаXDTO.ВалютаДокумента = ВалютаXDTO;
   
   Для Каждого СтрокаПлатежа Из ДокументОбъект.РасшифровкаПлатежа Цикл
       
       //Получаем данные по платежу
       СоставЗаявкиXDTO = ФабрикаXDTO.Создать(СоставЗаявкиТип);
       
       СоставЗаявкиXDTO.ДоговорКонтрагента            = ФабрикаXDTO.Создать(
                                                            ФабрикаXDTO.Создать("http://localhost/xdto/request", "UUID"),
                                                            СтрокаПлатежа.ДоговорКонтрагента.УникальныйИдентификатор());
                                                 
       СоставЗаявкиXDTO.СтатьяДвиженияДенежныхСредств = ФабрикаXDTO.Создать(
                                                            ФабрикаXDTO.Создать("http://localhost/xdto/request", "UUID"),
                                                            СтрокаПлатежа.СтатьяДвиженияДенежныхСредств.УникальныйИдентификатор());
                                                           
       СоставЗаявкиXDTO.СуммаПлатежа                  = СтрокаПлатежа.СуммаПлатежа;
       
       //Добавляем новое значение в состав
       ЗаявкаНаРасходованиеСредстаXDTO.РасшифровкаПлатежа.Добавить(СоставЗаявкиXDTO);
       
   КонецЦикла;    
   
   ТекСериализаторXDTO.Фабрика.ЗаписатьXML(ЗаписьXML, ЗаявкаНаРасходованиеСредстаXDTO);
   ЗаписьXML.Закрыть();
   
КонецПроцедуры

При выгрузке возникает ошибка такого содержания:

{Форма.Форма.Форма(27)}: Ошибка при установке значения атрибута контекста (Наименование)
   ВалютаXDTO.Наименование = ДокументОбъект.ВалютаДокумента.Наименование;
по причине:

по причине:
Несоответствие типов XDTO
по причине:
Ошибка проверки данных XDTO:
Значение: 'руб' не соответствует простому типу: {http://localhost/xdto/request}Наименование
Несоответствие фасету MinLength = '100'

Как ее исправить ?
1 Alex_MA
 
09.08.11
09:28
ой, разобрался, пардон
2 Alex_MA
 
09.08.11
09:37
Подскажите, почему не создается UUID

СоставЗаявкиXDTO.ДоговорКонтрагента = ФабрикаXDTO.Создать(
                                         ФабрикаXDTO.Создать("http://v8.1c.ru/8.1/data/core", "UUID"),
                                         СтрокаПлатежа.ДоговорКонтрагента.УникальныйИдентификатор());


Ошибка:

{Форма.Форма.Форма(45)}: Ошибка при вызове метода контекста (Создать)
СтрокаПлатежа.ДоговорКонтрагента.УникальныйИдентификатор());
3 Адинэснег
 
09.08.11
09:40
в строку его попробуй
4 Alex_MA
 
09.08.11
09:42
(3)в строку можно. А суть ошибки в чем ?
В том, что пространство имен "http://v8.1c.ru/8.1/data/core" недоступно ?
5 Широкий
 
09.08.11
09:43
А так?

СоставЗаявкиXDTO.ДоговорКонтрагента = ФабрикаXDTO.Создать(
                                         ФабрикаXDTO.Создать("http://v8.1c.ru/8.1/data/core", "UUID"),XMLСтрока(СтрокаПлатежа.ДоговорКонтрагента));
6 Alex_MA
 
09.08.11
09:46
(5)не помогло
7 Alex_MA
 
09.08.11
09:48
(5)по причине:
Несоответствие типов (параметр номер '1')
8 Alex_MA
 
09.08.11
09:48
(5)в табло
ФабрикаXDTO.Создать("http://v8.1c.ru/8.1/data/core", "UUID") = Неопределено
9 Alex_MA
 
09.08.11
10:11
В СП ФабрикаXDTO.Создать() не написано про возврат "Неопределено"
10 Широкий
 
09.08.11
10:42
СоставЗаявкиXDTO.ДоговорКонтрагента = ФабрикаXDTO.Создать(
                                         ФабрикаXDTO.Создать("http://v8.1c.ru/8.1/data/core", "UUID"),

                                         СтрокаПлатежа.ДоговорКонтрагента.УникальныйИдентификатор());
11 Широкий
 
09.08.11
10:43
Тьфу...

СоставЗаявкиXDTO.ДоговорКонтрагента = ФабрикаXDTO.Создать(
                                         ФабрикаXDTO.Создать(<Пространство имен твоего пакета>, "UUID"),СтрокаПлатежа.ДоговорКонтрагента.УникальныйИдентификатор());
12 Широкий
 
09.08.11
10:48
Погоди .. у тебя есть объект "Состав заявки". У него свойство "Договор контрагента"

Судя по коду объект "СоставЗаявкиXDTO" ты уже создал..

Разве так не работает?

СоставЗаявкиXDTO.ДоговорКонтрагента=СтрокаПлатежа.ДоговорКонтрагента.УникальныйИдентификатор();
13 Alex_MA
 
09.08.11
11:09
(12)так работает, просто интересует почему не работает
ФабрикаXDTO.Создать("http://v8.1c.ru/8.1/data/core", "UUID")
14 Alex_MA
 
09.08.11
11:12
Для Каждого СтрокаПлатежа Из ДокументОбъект.РасшифровкаПлатежа Цикл
       
       //Получаем данные по платежу
       СоставЗаявкиXDTO = ФабрикаXDTO.Создать(СоставЗаявкиТип);
       
       СоставЗаявкиXDTO.ДоговорКонтрагента            = СтрокаПлатежа.ДоговорКонтрагента.УникальныйИдентификатор();
       СоставЗаявкиXDTO.СтатьяДвиженияДенежныхСредств = СтрокаПлатежа.СтатьяДвиженияДенежныхСредств.УникальныйИдентификатор();
       СоставЗаявкиXDTO.СуммаПлатежа                  = СтрокаПлатежа.СуммаПлатежа;
       
   КонецЦикла;    
   
   //Добавляем новое значение в состав
   ЗаявкаНаРасходованиеСредстаXDTO.РасшифровкаПлатежа = СоставЗаявкиXDTO;

Отработало, в результате создался файл xml

<ЗаявкаНаРасходованиеДенежныхСредств xmlns="http://xdto/request" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <Дата>2008-11-06T10:48:09</Дата>
   <Номер>00000000027</Номер>
   <ВалютаДокумента>
       <Наименование>руб</Наименование>
       <Курс>1</Курс>
   </ВалютаДокумента>
   <РасшифровкаПлатежа>
       <ДоговорКонтрагента>0b2d29b1-a6a1-11dd-b1b2-0050450097d9</ДоговорКонтрагента>
       <СтатьяДвиженияДенежныхСредств>00000000-0000-0000-0000-000000000000</СтатьяДвиженияДенежныхСредств>
       <СуммаПлатежа>5730</СуммаПлатежа>
   </РасшифровкаПлатежа>
</ЗаявкаНаРасходованиеДенежныхСредств>
15 Широкий
 
09.08.11
11:13
Тип=ФабрикаXDTO.Тип("http://v8.1c.ru/8.1/data/core", "UUID");

А так?
16 Alex_MA
 
09.08.11
11:15
(15)так тоже нет, см (8)
17 Широкий
 
09.08.11
11:15
(16) Посмотри еще раз
18 Alex_MA
 
09.08.11
11:16
(15)у себя посмотри, у тебя нормально ? может с "проксей" нашей что не так ?
19 Широкий
 
09.08.11
11:17
(18) Внимательно посмотри на (15) и на (8)
20 Alex_MA
 
09.08.11
11:18
(17) Ура! Заработало :)
21 Alex_MA
 
09.08.11
11:19
(19)не могу разницы найти, но твой вариант работает, что такое ?
22 Alex_MA
 
09.08.11
11:21
опа, заметил
23 Широкий
 
09.08.11
11:21
(21) Ну и балда

  Объект=ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://v8.1c.ru/8.1/data/core", "UUID"));
  Объект=Новый УникальныйИдентификатор;
24 Alex_MA
 
09.08.11
11:21
ФабрикаXDTO.Создать("http://v8.1c.ru/8.1/data/core", "UUID")
ФабрикаXDTO.Тип("http://v8.1c.ru/8.1/data/core", "UUID");

разные конечно вещи :)
25 Alex_MA
 
09.08.11
11:26
а дальше поднял Appach 2.2, создал web сервис
http://gyazo.com/9b8d0317dc3f013034ed1afcd1c3efab.png

Жму на Администрирование -> "Публикация на web сервере..."
http://gyazo.com/290eda424d99c1e02595a71f93faec6f.png,
web сервис не публикуется. Создается только один файлик "default.vrd" с такой структурой:

<?xml version="1.0" encoding="UTF-8"?>
<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"

       xmlns:xs="http://www.w3.org/2001/XMLSchema"

       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

       base="/websrv"
       ib="Srvr=&quot;apsrv_b&quot;;Ref=&quot;tstma2&quot;;">
   <ws>
       <point name="WebСервис_Консолидации"
               alias="ws_Cons.1cws"
               enable="false"/>
       <point name="Files"
               alias="files.1cws"
               enable="false"/>
       <point name="WebСервис_ВводЗявокДДС"
               alias="request.wsdl"/>
   </ws>
</point>

а wsdl файла не получилось
26 Alex_MA
 
09.08.11
12:11
апну?
27 Alex_MA
 
09.08.11
12:14
ведь при публикации должен wsdl файл создаться
28 Alex_MA
 
09.08.11
16:07
если web сервер настроен корректно, должен создаться файл wsdl или cws ?
29 Alex_MA
 
10.08.11
08:08
Тонкий клиент публикуется, а web сервисы нет
30 Alex_MA
 
10.08.11
08:30
Вообщем опубликовал (или нет) web сервис
http://gyazo.com/cee916bcfa5bba7de9dc47ceda990e25.png

в результате создался файл "default.vrd" файл по пути "C:\Program Files\Apache Group\Apache2\htdocs\"

Содержание:

<?xml version="1.0" encoding="UTF-8"?>
<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
       xmlns:xs="http://www.w3.org/2001/XMLSchema"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       base="/tstma2"
       ib="Srvr=&quot;apsrv_b&quot;;Ref=&quot;tstma2&quot;;">
   <ws>
       <point name="WebСервис_Консолидации"
               alias="ws_Cons.1cws"/>
       <point name="Files"
               alias="files.1cws"/>
       <point name="vscВводЗявокНаРасходованиеДенежныхСредств"
               alias="request.wsdl"/>
   </ws>
</point>


Зашел в конфигуратор, добавляю WS-Ссылку:
http://gyazo.com/e01aac4457f480946d847a773f7e5d7e.png

А дальше:
http://gyazo.com/08ba5609e9f23a40ddc5f173afa9f158.png

Что за имя пользователя и пароль ? Куда это программа "ломанулась" ?
31 Alex_MA
 
10.08.11
08:35
или в браузере по этому пути "http://localhost/tstma2/ws/request.wsdl"
"http://gyazo.com/95340d9a1ed14a4e761733ad8987fbcf.png"
32 Alex_MA
 
10.08.11
08:46
Авторизовался, ввел имя пользователя 1С:
http://gyazo.com/860cfa28e7f147af687c396476b7ea24
жму в браузере на ссылку:
http://gyazo.com/447cd457168e629e932bcb7c4380f0cd.png
33 Alex_MA
 
10.08.11
10:04
подниму
34 Alex_MA
 
10.08.11
11:10
все, господа, разобрался.

вообщем опубликовал, правда пока в папку по умолчанию аппача:
1.Ставишь последний аппач
2.В 1С публикуешь свои web сервисы и web клиента в папку "C:\Program Files\Apache Software Foundation\Apache2.2\htdocs" (Конфигурационный файл аппача на эту папке настроен)
В дальнейшем я конечно хочу разграничить логически папки, например:
C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\webcl_ws\pub - Здесь будет опубликован web клиент и web сервисы
C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\xdto\ - Пространство имен для xdto
3.Дальше заходим в браузер "http://localhost" и браузер автоматом перенаправляет на web клиента http://localhost/Public/ru_RU/
http://gyazo.com/43db88687347c8c541db70b1e176f797
Дальше в этой же адресной строке дописываешь http://localhost/Public/ru_RU/ws/files.1cws?wsdl - и Все ОК, где files - имя файла, при публикации из 1С.
Если браузер не заматерился сильно, тогда все Ок.
http://gyazo.com/78202ee4efc183895550a22f60ac788b.png - Ничего не отображается по адресу, но если в Crome выбрать пункт контекстного меню "Просмотр кода страницы", то мы увидим web сервис - Значит все ОК

Вот последний скрин:
http://gyazo.com/67ac82460d7e74e12b09d11c29117876.png

Не знаю, понятно объяснил или нет :)
Дальше буду глубже ковырять конф. файл аппача