03.07.13 — 13:24
Задача: есть сторонний сервис в интернете у которого прописано API команды получения данных из сервиса
Соединение и выполнение некоторых API команд происходит успешно, если в параметрах команд простые типы (Число, Дата, Булево), а если в параметрах необходимо передать Массив, или структуру то вызов не проходит.
Скорей всего необходимо Объект 1с (Массив, Структуру и т.п.) перевести в Тип который ожидает сервис.
ОбъектXDTO = Сериализатор.ЗаписатьXDTO(Новый Массив());
Ответ=Client.getCurrencyList(«demo_api», «demo@example.com», «demo»,ОбъектXDTO);
в первых 3 параметрах указывается информация аутентификации, а в 4 параметр надо для этой функции передать пустой массив.
При этом при вызове функции выдается ошибка
«Ошибка установки соответствия префикса и URI пространства имен»
Видимо надо каким то образом указать, что мой массив принадлежит тому пространству имен который ожидает сервис. Не пойму как это сделать
Доп. инфа:
URIПространстваИмен = «urn:ddengi»
Подключение к веб сервису:
ОпределениеТ=Новый WSОпределения(«http://www.drebedengi.ru/soap/dd.wsdl»);
WSСервис=ОпределениеТ.Сервисы[0];
Client=Новый WSПрокси(ОпределениеТ, WSСервис.URIПространстваИмен, WSСервис.Имя, WSСервис.ТочкиПодключения[0].Имя);
1 — 03.07.13 — 13:27
Либо надо при создании параметра использовать ФабрикуXDTO которую выдает WSПрокси.
Там вот такая фабрика
http://s2.hostingkartinok.com/uploads/images/2013/07/dc4753781301978e1ad90ab84d99ba61.jpg
За ранее хочу сказать, что с XDTO и сервисами только пытаюсь, что то делать, поэтому возможно неправильно использую термнилагию.
2 — 03.07.13 — 13:27
*терминалогию.
3 — 03.07.13 — 14:15
Что типа такого
Типа такого
Фабрика=Прокси.ФабрикаXDTO;
ТипТаблица = Фабрика.Тип(ПространствоИмен, «Таблица»);
Таблица = Фабрика.Создать(ТипТаблица);
ТипСтрокаТаблицы = Фабрика.Тип(ПространствоИмен,»СтрокаТаблицы»);
СтрокаТаблицы = Фабрика.Создать(ТипСтрокаТаблицы );
ОтветТаблицаЦен.СвойствоСписок.Добавить(СтрокаТаблицыЦен);
или
v8: Заполнение массива XDTO
4 — 03.07.13 — 14:18
Фабрика=Прокси.ФабрикаXDTO;
ТипТаблица = Фабрика.Тип(ПространствоИмен, «Таблица»);
Таблица = Фабрика.Создать(ТипТаблица);
ТипСтрокаТаблицы = Фабрика.Тип(ПространствоИмен,»СтрокаТаблицы»);
СтрокаТаблицы = Фабрика.Создать(ТипСтрокаТаблицы );
…. Заполняем поля СтрокаТаблицы
Таблица.СвойствоСписок.Добавить(СтрокаТаблицыЦен);
(СвойствоСписок это сойство тип СтрокаТаблицы у которой максимальное количество -1
5 — 03.07.13 — 15:36
(3) если у меня у Прокси.ФабрикаXDTO;
только один пакет «http://www.w3.org/2001/XMLSchema»
Получается, что в ней нету типов «Таблица» «СтрокаТаблицы»
или «array»
Пробовал написать вот так:
ПространствоИмен=»http://www.w3.org/2001/XMLSchema»;
Фабрика=Client.ФабрикаXDTO;
Объект = Фабрика.Создать(Фабрика.Тип(ПространствоИмен, «anyType»));
Объект.Добавить(ФормаXML.Элемент, ПространствоИмен, «elem»,ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(ПространствоИмен, «string»), «Значение Элемента»));
Но выдается сообщение
«Ошибка SOAP сервера: getCurrencyList: Parameter ‘idList’ must be an array»
Если передаешь просто «anyType»
«Ошибка при вызове метода объекта модели XDTO.
Неверный параметр.»
6 — 03.07.13 — 15:48
При использовании anyType массивом он будет только когда 2 элемента
7 — 03.07.13 — 15:51
Связывался с разработчиком, он говорит что этот параметр должен быть пустой, он служебный и заполнять его не надо.
Но при этом он ругается, что параметр не заполнен при вызове из 1с.
8 — 03.07.13 — 15:53
(6) 2 элемента ситуацию не спасло… все равно пишет
«Ошибка SOAP сервера: getCurrencyList: Parameter ‘idList’ must be an array»
попробовал записать этот объект в хмл вот такой код:
<anyType xmlns=»http://www.w3.org/2001/XMLSchema» xmlns:xsi=»http://www.w3.org/2001/XMLSchema-instance»>
<elem>Значение Элемента</elem>
<elem>Значение Элемента1</elem>
</anyType>
9 — 03.07.13 — 15:59
Передай пустую строку
Фабрика.Создать(Фабрика.Тип(ПространствоИмен, «string»),»»);
или можно попробовать
ТипNull=Фабрика.Тип(«http://www.w3.org/2001/XMLSchema»,»anySimpleType»);
СсылкаNull=ФабрикаДляКомплексной.Создать(ТипNull);
и эту ссылку передать
10 — 03.07.13 — 15:59
СсылкаNull=Фабрика.Создать(ТипNull);
11 — 03.07.13 — 16:04
(9)
Первый вариант
«Ошибка при вызове метода объекта модели XDTO.
Неверный параметр.»
Второй вариант:
«Обязательный параметр не задан: {urn:ddengi}:ddengiService:getCurrencyList(…idList…)»
12 — 03.07.13 — 16:12
Вообще
-<message name=»getCurrencyList»><part name=»apiId» type=»xsd:string»/><part name=»login» type=»xsd:string»/><part name=»pass» type=»xsd:string»/><part name=»idList» type=»xsd:anyType»/></message>
там эни тайп. Спроси у разработчика какой должен быть xml запроса
13 — 03.07.13 — 16:16
Он посоветовал, поставить php там есть рабочий пример на пхп.
Пошел, ставить, поидее там же и будет видно какой должен быть XML запрос.
14 — 03.07.13 — 17:28
Если посмотреть на http://www.drebedengi.ru/soap/getRecordList.xml
то подключают они
-<SOAP-ENV:Envelope SOAP-ENV:encodingStyle=»http://schemas.xmlsoap.org/soap/encoding/» xmlns:SOAP-ENC=»http://schemas.xmlsoap.org/soap/encoding/» xmlns:ns2=»http://xml.apache.org/xml-soap»
map из http://xml.apache.org/xml-soap
можешь сохранить в файл и дописать ипорт
смотри v8: Заполнение массива XDTO
82
<import namespace=»http://schemas.xmlsoap.org/soap/encoding/»/>
<import namespace=»http://xml.apache.org/xml-soap/»/>
и попробу передать пустой map. Эти пэхэпэшники пространства имен по умолчанию не указывают в дерективах импорта
15 — 03.07.13 — 17:55
Не знаю где лежит описание http://xml.apache.org/xml-soap
но тебе нужно импортировать наподобие
<import namespace=»http://schemas.xmlsoap.org/soap/encoding/» schemaLocation=»http://schemas.xmlsoap.org/soap/encoding/»/>
16 — 03.07.13 — 17:59
Или можешь сохранить в файл описание и сохранить в файл
<schema elementFormDefault=»qualified»
targetNamespace=»http://xml.apache.org/xml-soap»
xmlns=»http://www.w3.org/2001/XMLSchema»
xmlns:wsdl=»http://schemas.xmlsoap.org/wsdl/»
xmlns:xsd=»http://www.w3.org/2001/XMLSchema»>
<complexType name=»Item»>
<all>
<element name=»key» type=»xsd:anyType»/>
<element name=»value» type=»xsd:anyType»/>
</all>
</complexType>
<complexType name=»Map»>
<sequence>
<element maxOccurs=»unbounded» minOccurs=»0″ name=»item» type=»tns4:Item»/>
</sequence>
</complexType>
</schema>
и в schemaLocation указать путь к этому файлу
17 — 04.07.13 — 09:05
(16) Сохранил в файл, что ты указал. Далее в конфу в пакеты XDTO загрузил эту схему далее:
Объект = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(«http://xml.apache.org/xml-soap»,»Map»));
Ответ=Client.getCurrencyList(«demo_api», «demo@example.com», «demo»,Объект);
Ошибка:
«Ошибка установки соответствия префикса и URI пространства имен»
Попробовал в этом XDTO указать пространство имен «urn:ddengi»
выдало «Неверный параметр»
как выглядит MAP в ХМЛ:
<Map xmlns=»http://xml.apache.org/xml-soap» xmlns:xs=»http://www.w3.org/2001/XMLSchema» xmlns:xsi=»http://www.w3.org/2001/XMLSchema-instance»/>
Что касается (14) (15) не совсем понял как импортировать это, поидее (16) уже готовый тип.
18 — 04.07.13 — 10:12
Тебе нужно это надо прописать в файле wsdl
То есть скачать http://www.drebedengi.ru/soap/dd.wsdl
<import namespace=»http://schemas.xmlsoap.org/soap/encoding/»/>
<import namespace=»http://xml.apache.org/xml-soap» schemaLocation=»ПутьКФайлуСхемыОписания»/>
Тогда тебе будут доступны при загрузке этого файла все определения пространств имен у прокси
ОпределениеТ=Новый WSОпределения(«ПутьКСохраненнойСхемеurn:ddengi.wsdl»);
Там в файле есть секция определяющая путь к первису и точки подключения
-<service name=»ddengiService»>-<port name=»SoapPort» binding=»typens:SoapBinding»><soap:address location=»http://www.drebedengi.ru/soap/»/></port></service></definitions>
И тогда этот пакет появится у прокси фабрики и бебе будет доступно
Объект = Прокси.ФабрикаXDTO.Создать(Прокси.ФабрикаXDTO.Тип(«http://xml.apache.org/xml-soap»,»Map»));
19 — 04.07.13 — 10:31
(18) Сохранил wsdl далее в какое место файла необходимо вставить:
<import namespace=»http://schemas.xmlsoap.org/soap/encoding/»/>
<import namespace=»http://xml.apache.org/xml-soap» schemaLocation=»ПутьКФайлуСхемыОписания»/>
Вставлял вначало сразу же после объявления.
Выдается ошибка при выполнении:
ПутьКСохраненнойСхеме=»C:Tempdd.wsdl»;
ОпределениеТ=Новый WSОпределения(ПутьКСохраненнойСхеме);
«Фатальная ошибка:
Extra content at the end of the document
SystemId: file://C:Tempdd.wsdl»
Не совсем понял, для чего ты указываешь:
«Там в файле есть секция определяющая путь к первису и точки подключения»
20 — 04.07.13 — 10:46
Смотри v8: Заполнение массива XDTO
82 там после
импорт идет в секции типов Попробуй создать эту секцию со свои пространством имен
-<types>-<schema targetNamespace=»urn:Magento» xmlns=»http://www.w3.org/2001/XMLSchema»>
<import namespace=»http://schemas.xmlsoap.org/soap/encoding/» schemaLocation=»http://schemas.xmlsoap.org/soap/encoding/» />—>
-<complexType name=»FixedArray»>-<complexContent>-<restriction base=»soapenc:Array»><attribute wsdl:arrayType=»xsd:anyType[]» ref=»soapenc:arrayType»/></restriction></complexContent></complexType></schema></types>
21 — 04.07.13 — 10:50
Вернее
<import namespace=»http://schemas.xmlsoap.org/soap/encoding/» schemaLocation=»http://schemas.xmlsoap.org/soap/encoding/» />
22 — 04.07.13 — 10:50
Добавил вот это:
<schema xmlns=»http://www.w3.org/2001/XMLSchema» targetNamespace=»urn:ddengi»>
<import namespace=»http://schemas.xmlsoap.org/soap/encoding/»/>
</schema>
</types>
В прокси появились доп. пакеты:
«http://schemas.xmlsoap.org/soap/encoding/»
23 — 04.07.13 — 10:52
Добваь еще
<import namespace=»http://xml.apache.org/xml-soap» schemaLocation=»ПутьКФайлуСхемыОписания»/>
для получения map
24 — 04.07.13 — 10:57
25 — 04.07.13 — 11:09
26 — 04.07.13 — 11:38
(23) добавил
Пакет в прокси появился
Выполняю
Объект = Фабрика.Создать(Фабрика.Тип(«http://xml.apache.org/xml-soap»,»Map»));
Ответ=Client.getCurrencyList(«demo_api», «demo@example.com», «demo»,Объект);
Ошибка:
«Свойство ‘item’ не обнаружено»
27 — 04.07.13 — 11:39
Представление в ХМЛ
<Map xmlns=»http://xml.apache.org/xml-soap» xmlns:xs=»http://www.w3.org/2001/XMLSchema» xmlns:xsi=»http://www.w3.org/2001/XMLSchema-instance»/>
28 — 04.07.13 — 11:40
29 — 04.07.13 — 11:47
(26) Добавь какой нибудь элемент или как в демо
http://www.drebedengi.ru/?module=soap&action=soapTest
echo «nSet currency list:n»;
// $currencyList = array(
// array(
// ‘server_id’ => 18,
// ‘name’ => ‘USgrn’,
// ‘course’ => 5.9215,
// ‘code’ => ‘USD’,
// ‘is_default’ => true,
// ‘is_autoupdate’ => true,
// ‘is_hidden’ => false,
// ),
// array(
// ‘client_id’ => 11111,
// ‘name’ => ‘TUGRIK’,
// ‘course’ => 34.3232,
// ‘code’ => ‘USD’,
// ‘is_default’ => false,
// ‘is_autoupdate’ => true,
// ‘is_hidden’ => false,
// ),
// );
// print_r($client->setCurrencyList(‘demo_api’, ‘demo@example.com’, ‘demo’, $currencyList));
30 — 04.07.13 — 11:54
Выполняю код
ПространствоИмен=»http://xml.apache.org/xml-soap»;
Объект = Фабрика.Создать(Фабрика.Тип(ПространствоИмен,»Map»));
Объект.Добавить(ФормаXML.Элемент, ПространствоИмен, «item»,Фабрика.Создать(Фабрика.Тип(«http://www.w3.org/2001/XMLSchema», «string»), «»));
Ошибка:
Несоответствие типов XDTO:
Тип ‘{http://xml.apache.org/xml-soap}Map’ не найден
Тип объекта не является открытым
31 — 04.07.13 — 12:00
ошибка выдается при выполнении строки Объект.Добавить…
32 — 04.07.13 — 12:16
Тебе нужно
Строка=Объект = Фабрика.Создать(Фабрика.Тип(ПространствоИмен,»Item»));
Строка.key=Фабрика.Создать(Фабрика.Тип(«http://www.w3.org/2001/XMLSchema», «string»), «name»);
Строка.value=Фабрика.Создать(Фабрика.Тип(«http://www.w3.org/2001/XMLSchema», «string»), «USgrn»);
Объект.Item.Добавить(строка);
итак для всех кей валуе
33 — 04.07.13 — 12:19
тебе нужно заполнять как в 3 только таблица это map а
СтрокаТаблицы это Item
и простанчтво имен http://xml.apache.org/xml-soap
34 — 04.07.13 — 12:54
(29) ты указал на код «Set currency list»
поидее, это какая то запись в базу.
В параметрах надо указать «list» думаю это не тоже самое, что и «idList» в параметрах вызова операции getCurrencyList
Судя по всему Веб сервис там ожидает только числовые значения, т.к. выдается ошибка на какой то другой
Попробовал указать 0, тогда вызов проходит getCurrencyList (думал это уже не случится=)), но ответ приходит пустой.
35 — 04.07.13 — 13:03
Написал еще разработчику, может подскажет какими значениями надо заполнить параметр idList чтобы получить норм ответ.
36 — 04.07.13 — 13:53
Serginio1, а как то можно в схеме wsdl которую мы указываем, для параметра idList указать, что он не является обязательным?
Когда в конфу загружаешь по ссылке wsdl, то там у параметров показывается свойство: Возможно пустое, там оно везде Ложь
37 — 04.07.13 — 13:58
(34) Возможно ошибки были при возврате значения
v8: Заполнение массива XDTO
см 100 Там точно возвращался map а 1С не могла разобрать этот тип
(36) МинимальноеКоличество=0
minOccurs=»0″ maxOccurs=1
38 — 04.07.13 — 14:05
(37) у меня возвращается Неопределено, и ошибки не выскакивает
«МинимальноеКоличество=0
minOccurs=»0″ maxOccurs=1″
Поставил вот так
<part name=»idList» type=»xsd:anyType» minOccurs=»0″ maxOccurs=1/>
Ошибка:
Ошибка разбора XML: — [79,28]
Фатальная ошибка:
AttValue: » or ‘ expected
SystemId: file://C:Tempdd.wsdl
Попробовал просто удалить эту строку idList, тогда параметр не требуется но при вызове функции, но сервер все равно выдает ошибку:
«Свойство ‘item’ не обнаружено»
Т.е. это на стороне сервера…
39 — 04.07.13 — 14:17
(38) Знач проблема на сервере или что то нужно подставлять по умолчанию
minOccurs это для полей структуры. Хрень сморозил. Есть понятие возможно пустое значение, но туда передается anySimpleType
40 — 04.07.13 — 15:10
41 — 05.07.13 — 16:11
Нашел еще один варинат работы через SOAP клиент, с помощью , но результат тот же.
ИмяСервиса = "http://www.drebedengi.ru/soap/dd.wsdl";
Login="demo@example.com";
Password="demo";
Попытка
oSOAPClient = Новый COMОбъект("MSSOAP.SoapClient30");
Исключение
#Если Клиент Тогда
Сообщить(ОписаниеОшибки());
#КонецЕсли
Возврат;
КонецПопытки;Попытка
Инициализация = oSOAPClient.mssoapinit(ИмяСервиса, "", "", "");
Исключение
#Если Клиент Тогда
Сообщить(ОписаниеОшибки());
#КонецЕсли
Возврат;
КонецПопытки;
Ответ=oSOAPClient.getCurrencyList("demo_api", "demo@example.com", "demo");
Ошибка:
«Произошла исключительная ситуация (Client): Client:Incorrect number of parameters supplied for SOAP request HRESULT=0x80070057: Параметр задан неверно.
— Client:Unspecified client error. HRESULT=0x80070057: Параметр задан неверно.»
Уже можно указать «» в качестве параметра, но при попытке выполнить выдает:
Произошла исключительная ситуация (SoapMapper): SoapMapper:Restoring data into SoapMapper anyType failed HRESULT=0x8007000E: Недостаточно памяти для завершения операции.
— Client:Unspecified client error. HRESULT=0x8007000E: Недостаточно памяти для завершения операции.
Ссылка на описание: http://infostart.ru/public/189959/
42 — 05.07.13 — 16:30
Думал, мб с 1с что то. Сделал подключение через SoapClient с помощью AutoIT результат, тот же не удается выполнить команды.
43 — 05.07.13 — 16:39
П на php то что выдает?
44 — 05.07.13 — 16:49
(43) у меня что то проблемы с установкой PHP на комп, точнее с портом 80.
Пробовал Денвер, поидее ничего не надо прописывать, устанавливаешь и все.
Вообщем пока php код не могу выполнить.
45 — 05.07.13 — 17:32
(43) похоже на php все работает… вызов проходит нормально. Приплыли…
46 — 05.07.13 — 21:53
Значит надо смотреть какой запрос выдает php
47 — 05.07.13 — 22:04
48 — 08.07.13 — 09:16
<?xml version=»1.0″ encoding=»UTF-8″?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV=»http://schemas.xmlsoap.org/soap/envelope/» xmlns:ns1=»urn:ddengi» xmlns:xsd=»http://www.w3.org/2001/XMLSchema» xmlns:xsi=»http://www.w3.org/2001/XMLSchema-instance» xmlns:SOAP-ENC=»http://schemas.xmlsoap.org/soap/encoding/» SOAP-ENV:encodingStyle=»http://schemas.xmlsoap.org/soap/encoding/»><SOAP-ENV:Body><ns1:getCurrencyList><apiId xsi:type=»xsd:string»>demo_api</apiId><login xsi:type=»xsd:string»>demo@example.com</login><pass xsi:type=»xsd:string»>demo</pass><idList xsi:nil=»true»/></ns1:getCurrencyList></SOAP-ENV:Body></SOAP-ENV:Envelope>
49 — 08.07.13 — 09:18
добавил в wsdl строку
<import namespace=»http://www.w3.org/2001/XMLSchema-instance»/>
Далее в коде пытаюсь выполнить:
Объект = Фабрика.Создать(Фабрика.Тип(«http://www.w3.org/2001/XMLSchema-instance»,»nil»));
50 — 08.07.13 — 09:18
Не может выполнить
51 — 08.07.13 — 09:18
Фабрика.Тип(«http://www.w3.org/2001/XMLSchema-instance»,»nil»)
52 — 08.07.13 — 10:01
53 — 08.07.13 — 10:06
добавил в wsdl строку
<import namespace=»http://www.w3.org/2001/XMLSchema-instance»/>
54 — 08.07.13 — 10:07
В пакетах у прокси она появилась
55 — 08.07.13 — 11:04
Вообщето такую строку формирует
ТипNull=Фабрика.Тип(«http://www.w3.org/2001/XMLSchema»,»anySimpleType»);
СсылкаNull=Фабрика.Создать(ТипNull);
Ответ=Прокси.getCurrencyList(«demo_api», «demo@example.com», «demo»,СсылкаNull);
56 — 08.07.13 — 11:10
СсылкаNull=Фабрика.Создать(ТипNull);
57 — 08.07.13 — 11:10
В этом случае СсылкаNull= Неопределено
58 — 08.07.13 — 11:22
Это неопределено в отладчике.
А вот если присвоить это значение какомунибудь anyType она правильно прописывает.
Например Стр.Проект=СсылкаNull;
при записи в файл дает
<Проект xsi:nil=»true»/>
59 — 08.07.13 — 11:31
«А вот если присвоить это значение какомунибудь anyType она правильно прописывает.»
Возможно, но как это сделать, чтобы передать в параметр WS операции…
60 — 08.07.13 — 11:32
Объект=Фабрика.Создать(Фабрика.Тип(«http://www.w3.org/2001/XMLSchema», «anyType»));
Объект.Добавить(ФормаXML.Атрибут,»http://www.w3.org/2001/XMLSchema-instance»,»nil»,Фабрика.Создать(Фабрика.Тип(«http://www.w3.org/2001/XMLSchema», «boolean»), «true»));
В XML файле получается так:
<anyType xmlns=»http://www.w3.org/2001/XMLSchema» xmlns:xsi=»http://www.w3.org/2001/XMLSchema-instance» xsi:nil=»true»/>
При вызове операции выдается ошибка…
Ошибка SOAP сервера: getCurrencyList: Parameter ‘idList’ must be an array
61 — 08.07.13 — 11:40
Процедура ПоказатьОбъектПоФабрике(Фабрика,ОтветТаблицаЦен)
ЗаписьХМЛ= новый ЗаписьXML;
ЗаписьХМЛ.УстановитьСтроку();
попытка
Фабрика.записатьXML(ЗаписьХМЛ,ОтветТаблицаЦен,,,,НазначениеТипаXML.Явное);
исключение
Фабрика.записатьXML(ЗаписьХМЛ,ОтветТаблицаЦен,»Тест»,,,НазначениеТипаXML.Явное);
КонецПопытки;
//записатьXML(ЗаписьХМЛ,ОтветТаблицаЦен);
текст=Новый ТекстовыйДокумент;
Текст.УстановитьТекст(ЗаписьХМЛ.Закрыть());
Текст.Показать();
КонецПроцедуры
ссылкаNULL выдает
<anyType xmlns=»http://www.w3.org/2001/XMLSchema» xmlns:xsi=»http://www.w3.org/2001/XMLSchema-instance» xsi:type=»anyType»/>
62 — 08.07.13 — 11:44
63 — 08.07.13 — 11:59
61 Выдает
<Тест xmlns=»» xmlns:xs=»http://www.w3.org/2001/XMLSchema» xmlns:xsi=»http://www.w3.org/2001/XMLSchema-instance» xsi:nil=»true»/>
Если неявное то и прописать соответствие пространства имен
Процедура ПоказатьОбъектПоФабрике(Фабрика,ОтветТаблицаЦен)
ЗаписьХМЛ= новый ЗаписьXML;
ЗаписьХМЛ.УстановитьСтроку();
ЗаписьХМЛ.ЗаписатьОбъявлениеXML();
ЗаписьХМЛ.ЗаписатьНачалоЭлемента(XMLСтрока(«Данные»));
// ЗаписьХМЛ.ЗаписатьСоответствиеПространстваИмен(«», «http://v8.1c.ru/8.1/data/enterprise/current-config»);
ЗаписьХМЛ.ЗаписатьСоответствиеПространстваИмен(«xsi», «http://www.w3.org/2001/XMLSchema-instance»);
ЗаписьХМЛ.ЗаписатьСоответствиеПространстваИмен(«xs», «http://www.w3.org/2001/XMLSchema»);
попытка
//Фабрика.записатьXML(ЗаписьХМЛ,ОтветТаблицаЦен,,,,НазначениеТипаXML.Явное);
Фабрика.записатьXML(ЗаписьХМЛ,ОтветТаблицаЦен);
исключение
// Фабрика.записатьXML(ЗаписьХМЛ,ОтветТаблицаЦен,»Тест»,,,НазначениеТипаXML.Явное);
Фабрика.записатьXML(ЗаписьХМЛ,ОтветТаблицаЦен,»Тест»);
КонецПопытки;
//записатьXML(ЗаписьХМЛ,ОтветТаблицаЦен);
ЗаписьХМЛ.ЗаписатьКонецЭлемента();
текст=новый ТекстовыйДокумент;
Текст.УстановитьТекст(ЗаписьХМЛ.Закрыть());
Текст.Показать();
КонецПроцедуры
то
<?xml version=»1.0″?>
<Данные xmlns:xs=»http://www.w3.org/2001/XMLSchema» xmlns:xsi=»http://www.w3.org/2001/XMLSchema-instance»>
<Тест xmlns=»» xsi:nil=»true»/>
</Данные>
64 — 08.07.13 — 12:34
65 — 08.07.13 — 12:51
(62) тоже не понял к чему
66 — 08.07.13 — 14:17
Попробуй прописать nillable=»true»
message name=»getCurrencyList»><part name=»apiId» type=»xsd:string»/><part name=»login» type=»xsd:string»/><part name=»pass» type=»xsd:string»/><part name=»idList» type=»xsd:anyType» nillable=»true»/>
В 1с для параметров создантся структура
<xs:element name=»ReturnPricesTable»>
<xs:complexType>
<xs:sequence>
<xs:element name=»StructPrice»
type=»tns:StructPrice»
nillable=»true»/>
</xs:sequence>
</xs:complexType>
</xs:element>
67 — 08.07.13 — 14:18
У параметра StructPrice стоит возможно пустое
68 — 08.07.13 — 15:06
<message name=»getCurrencyList»>
<part name=»apiId» type=»xsd:string»/>
<part name=»login» type=»xsd:string»/>
<part name=»pass» type=»xsd:string»/>
<part name=»idList» type=»xsd:anyType» nillable=»true»/>
</message>
69 — 08.07.13 — 15:06
В wsdl прописал
Результат:
{Форма.Форма.Форма(60)}: Недостаточно фактических параметров
Ответ=Client.getCurrencyList(«demo_api», «demo@example.com», «demo»);
70 — 08.07.13 — 15:19
(69) Вообще то nillable=»true» для anyType это не совсем то. Кстати, а что возвращает то сервис?
и что возвращает http://www.soapui.org
‘idList’ must be an array
71 — 08.07.13 — 15:22
Ответ от разработчика:
«Вам нужно добиться, чтобы передаваемый XML был таким-же, как у PHP скрипта.
На самом деле не только у PHP скрипта, многие стандартные библиотеки, в частности под все мобильные устройства — тоже умеют это делать, т.к. независимые разработчики это реализовали в приложениях.
Каким должно быть значение параметра, чтобы 1с сгенерил такой XML — вам нужно разобраться.»
72 — 08.07.13 — 15:24
(70) сервис вернет, поидее массив записей о движениях, вроде как.
«и что возвращает http://www.soapui.org»
Честно говоря не понял, для чего этот сервис.
«Нагрузочное тестирование веб сервисов» ?
73 — 08.07.13 — 15:58
74 — 08.07.13 — 16:16
Кстати попробовал создал структуру соответсвующую параметрам
Фабрика=ФабрикаXDTO;
ТипNull=Фабрика.Тип(«http://www.w3.org/2001/XMLSchema»,»anySimpleType»);
СсылкаNull=Фабрика.Создать(ТипNull);
Тип=Фабрика.Тип(«http://www.TestShema.ru/sample»,»getCurrencyList»);
Объект=Фабрика.Создать(Тип);
Объект.apiId=»demo_api»;
Объект.login=»demo@example.com»;
Объект.pass=»demo»;
Объект.idList=СсылкаNull;
ПоказатьОбъект(Объект);
выдает
<getCurrencyList xmlns=»http://www.TestShema.ru/sample» xmlns:xs=»http://www.w3.org/2001/XMLSchema» xmlns:xsi=»http://www.w3.org/2001/XMLSchema-instance» xsi:type=»getCurrencyList»>
<apiId>demo_api</apiId>
<login>demo@example.com</login>
<pass>demo</pass>
<idList xsi:nil=»true»/>
</getCurrencyList>
75 — 08.07.13 — 16:24
или можно попробовать
part name=»idList» type=»ns2:Map» nillable=»true»/>
странно, что он выдает ответ
Ошибка SOAP сервера: getCurrencyList: Parameter ‘idList’ must be an array
А какой эррай если передается nil?
76 — 08.07.13 — 16:25
(72) Это по идее, а что реально возвращает PHP?
77 — 08.07.13 — 17:02
Еххууууу
78 — 08.07.13 — 17:02
нашел как
79 — 08.07.13 — 17:03
DOC=New COMОбъект("MSXML2.DOMDocument");
hostName="SoapPort";
urlAddress="http://www.drebedengi.ru/soap/";
DOC.loadXML("<?xml version=""1.0"" encoding=""utf-8""?>
|<SOAP-ENV:Envelope
| xmlns:SOAP-ENV=""http://schemas.xmlsoap.org/soap/envelope/""
| xmlns:ns1=""urn:ddengi""
| xmlns:xsd=""http://www.w3.org/2001/XMLSchema""
| xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance""
| xmlns:ns2=""http://xml.apache.org/xml-soap""
| xmlns:SOAP-ENC=""http://schemas.xmlsoap.org/soap/encoding/""
| SOAP-ENV:encodingStyle=""http://schemas.xmlsoap.org/soap/encoding/"">
| <SOAP-ENV:Body>
| <ns1:getCurrencyList>
| <apiId xsi:type=""xsd:string"">demo_api</apiId>
| <login xsi:type=""xsd:string"">demo@example.com</login>
| <pass xsi:type=""xsd:string"">demo</pass>
| <idList xsi:nil=""true""/>
| </ns1:getCurrencyList>
| </SOAP-ENV:Body>
|</SOAP-ENV:Envelope>");If DOC.parseError.errorCode <> 0 Then
Сообщить("Ошибка разбора XML " + DOC.parseError.reason);
Возврат;
EndIf;
DOC.save( "c:Temp2.xml");Состояние("Выполнение запроса..." + hostName);
xmlHttp = New COMОбъект("MSXML2.xmlHttp");
xmlHttp.OPEN ("POST", urlAddress, False);
// False- отвечает за то, что запррос асинхронный и ожидаем ответаxmlHttp.setRequestHeader ("Host", hostName);
xmlHttp.setRequestHeader ("Content-type", "application/soap+xml; charset=""utf-8""");
xmlHttp.SEND (DOC);
Сообщить("" + xmlHttp.statusText);
DOCToSave=New COMОбъект("MSXML2.DOMDocument");
DOCToSave.loadXML(xmlHttp.responseText);
If DOCToSave.parseError.errorCode <> 0 Then
Сообщить("Ошибка разбора XML результата: " + DOC.parseError.reason);
Возврат;
EndIf;
DOCToSave.save("c:TempGetData.xml");
80 — 08.07.13 — 17:03
по этой теме: хз как на нее вышел
v8: MSSOAP 1C
81 — 08.07.13 — 17:13
Понимаю, что это не особо средствами 1с… Но все же, лучше чем ничего.
Огромное спасибо за помощь Serginio1
82 — 08.07.13 — 17:31
(81) А объекты ты можешь из XML ответа подгружать используя прокси фабрику.
ЧтениеXML=Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(Файл);
ЧтениеXML.ПерейтиКСодержимому();
// ЧтениеXML.Прочитать(); читать до появления результата
// Пока ЧтениеXML.ТипУзла<>ТипУзлаXML.КонецЭлемента Цикл
ОбъектXDTO=Фабрика.ПрочитатьXML(ЧтениеXML,Фабрика.Тип(ЧтениеXML.URIПространстваИмен,ЧтениеXML.Имя));
// КонецЦикла;
ЧтениеXML.Закрыть();
83 — 08.07.13 — 17:40
(80) А 64 не подошел?
httpServer=»www.drebedengi.ru»;
Адрес=»soap»;
Соединение = Новый HTTPСоединение(«httpServer»);
ТД = Новый ТекстовыйДокумент;
ТД.УстановитьТекст((«<?xml version=»»1.0″» encoding=»»utf-8″»?>
|<SOAP-ENV:Envelope
| xmlns:SOAP-ENV=»»http://schemas.xmlsoap.org/soap/envelope/»»
| xmlns:ns1=»»urn:ddengi»»
| xmlns:xsd=»»http://www.w3.org/2001/XMLSchema»»
| xmlns:xsi=»»http://www.w3.org/2001/XMLSchema-instance»»
| xmlns:ns2=»»http://xml.apache.org/xml-soap»»
| xmlns:SOAP-ENC=»»http://schemas.xmlsoap.org/soap/encoding/»»
| SOAP-ENV:encodingStyle=»»http://schemas.xmlsoap.org/soap/encoding/»»>
| <SOAP-ENV:Body>
| <ns1:getCurrencyList>
| <apiId xsi:type=»»xsd:string»»>demo_api</apiId>
| <login xsi:type=»»xsd:string»»>demo@example.com</login>
| <pass xsi:type=»»xsd:string»»>demo</pass>
| <idList xsi:nil=»»true»»/>
| </ns1:getCurrencyList>
| </SOAP-ENV:Body>
|</SOAP-ENV:Envelope>»);
»
);
ИмяФайлаОтправки = ПолучитьИмяВременногоФайла(«.snd»);
ТД.Записать(ИмяФайлаОтправки);
ИмяФайлаПолучения = ПолучитьИмяВременногоФайла(«.rsv»);
Соединение.ОтправитьДляОбработки(ИмяФайлаОтправки,Адрес, ИмяФайлаПолучения);
УдалитьФайлы(ИмяФайлаОтправки);
ПараметрыЧтенияXML = Новый ПараметрыЧтенияXML(,,,, true, true, true, true, true);
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(ИмяФайлаПолучения, ПараметрыЧтенияXML);
Пока ЧтениеXML.Прочитать() Цикл
Сообщить(«» + ЧтениеXML.ТипУзла + » — » + ЧтениеXML.Имя + » — » + ЧтениеXML.Значение);
КонецЦикла;
ЧтениеXML.Закрыть();
УдалитьФайлы(ИмяФайлаПолучения);
84 — 08.07.13 — 17:53
(83) не выполяется
поставил
httpServer=»http://www.drebedengi.ru/soap/»;
Адрес=»SoapPort»;
все равно ошибку выдает
85 — 08.07.13 — 18:02
(84) Ну и . Главное 79 Работает
86 — 08.07.13 — 18:33
(82) +
ИмяФайлаПолучения=»c:tmpGetData.xml»;
ЧтениеXML = Новый ЧтениеXML;
ПараметрыЧтенияXML = Новый ПараметрыЧтенияXML(,,,, true, true, true, true, true);
ЧтениеXML.ОткрытьФайл(ИмяФайлаПолучения, ПараметрыЧтенияXML);
Пока ЧтениеXML.Прочитать() Цикл
Сообщить(«» + ЧтениеXML.ТипУзла + » — » + ЧтениеXML.Имя + » — » + ЧтениеXML.Значение);
Если ЧтениеXML.Имя=»ns1:getCurrencyListResponse» Тогда
ОбъектXDTO=Фабрика.ПрочитатьXML(ЧтениеXML,Фабрика.Тип(ЧтениеXML.URIПространстваИмен,ЧтениеXML.Имя));
КонецЕсли;
КонецЦикла;
ЧтениеXML.Закрыть();
Читает объект map
87 — 08.07.13 — 18:43
Для каждого стр Из ОбъектXDTO.getCurrencyListReturn.item Цикл
Для каждого валюта Из стр.item Цикл
Сообщить(валюта.key+»=»+валюта.value)
КонецЦикла;
КонецЦикла;
88 — 08.07.13 — 18:48
Там кстати достаточно
responseText=xmlHttp.responseText;
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(responseText);
89 — 08.07.13 — 19:01
Если
responseText=xmlHttp.responseText;
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(responseText);
ЧтениеXML.ПерейтиКСодержимому();
То пропускаются определения и сначала идет
SOAP-ENV:Body —
потом
ns1:getCurrencyListResponse
тоесть можно создать универсальную функцию для чтения результата, который будет 2
То есть
responseText=xmlHttp.responseText;
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(responseText);
ЧтениеXML.ПерейтиКСодержимому();
ЧтениеXML.Прочитать(); //считываем SOAP-ENV:Body
ОбъектXDTO=Фабрика.ПрочитатьXML(ЧтениеXML,Фабрика.Тип(ЧтениеXML.URIПространстваИмен,ЧтениеXML.Имя));
90 — 09.07.13 — 08:39
(86) Почему то при чтении выдает ошибку
{Форма.Форма.Форма(395)}: Ошибка при вызове метода контекста (ПрочитатьXML)
ОбъектXDTO=Фабрика.ПрочитатьXML(ЧтениеXML,Фабрика.Тип(ЧтениеXML.URIПространстваИмен,ЧтениеXML.Имя));
по причине:
Ошибка преобразования данных XDTO:
Чтение объекта типа: {http://www.w3.org/2001/XMLSchema}anyType - [2,555]
Проверка дополнительного свойства:
форма: Элемент
имя: getCurrencyListReturn
по причине:
Ошибка преобразования данных XDTO:
Чтение объекта типа: {http://schemas.xmlsoap.org/soap/encoding/}Array - [2,555]
Проверка дополнительного свойства:
форма: Элемент
имя: item
по причине:
Ошибка преобразования данных XDTO:
Чтение объекта типа: {http://xml.apache.org/xml-soap}Map - [2,555]
Проверка дополнительного свойства:
форма: Элемент
имя: item
по причине:
Ошибка проверки данных XDTO:
Структура объекта не соответствует типу: {http://xml.apache.org/xml-soap}Map
91 — 09.07.13 — 08:44
в wsdl в шапке прописано
<definitions name="ddengi" targetNamespace="urn:ddengi" xmlns:typens="urn:ddengi" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns="http://schemas.xmlsoap.org/wsdl/">
<types>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:ddengi">
<import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
<import namespace="http://xml.apache.org/xml-soap" schemaLocation="C:TempMap.xsd" />
<import namespace="http://www.w3.org/2001/XMLSchema-instance"/>
</schema>
</types>
92 — 09.07.13 — 08:49
в файле map
<schema elementFormDefault="qualified"
targetNamespace="http://xml.apache.org/xml-soap"xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<complexType name="Item">
<all>
<element name="key" type="xsd:anyType"/>
<element name="value" type="xsd:anyType"/>
</all>
</complexType>
<complexType name="Map">
<sequence>
<element maxOccurs="unbounded" minOccurs="0" name="item" type="tns4:Item"/>
</sequence>
</complexType>
</schema>
93 — 09.07.13 — 10:11
Сохранил схему «http://xml.apache.org/xml-soap/» в файл
d:tmpapachmap.xsd и прописал импорт
<schema xmlns=»http://www.w3.org/2001/XMLSchema» targetNamespace=»urn:ddengi»>
<import namespace=»http://schemas.xmlsoap.org/soap/encoding/»/>
<import namespace=»http://xml.apache.org/xml-soap/» Location=»d:tmpapachmap.xsd»/>
</schema>
94 — 09.07.13 — 10:15
Да у меня еще стоит 8.3
95 — 09.07.13 — 13:03
Стал разбираться с возможно пустой параметр. nillable в параметрах не прокатывает
в 1с для параметров городится структура г де у параметра указывается nillable например
<xs:element name=»GetOrderStatusReport»>
<xs:complexType>
<xs:sequence>
<xs:element name=»StructOrderStatusReportIn»
type=»tns:StructOrderStatusReportIn»
nillable=»true»/>
<xs:element name=»ShowArchive»
type=»xs:boolean»/>
<xs:element name=»ConversationStatus»
type=»xs:string»/>
<xs:element name=»ShowClosed»
type=»xs:boolean»/>
</xs:sequence>
</xs:complexType>
затем формирует
<message name=»GetOrderStatusReportRequestMessage»>
<part name=»parameters»
element=»tns:GetOrderStatusReport»/>
</message>
<operation name=»GetOrderStatusReport»>
<input message=»tns:GetOrderStatusReportRequestMessage»/>
<output message=»tns:GetOrderStatusReportResponseMessage»/>
</operation>
96 — 09.07.13 — 13:08
Можешь скинуть файл Map и dd.wsdl ?
Платформу 8.3 поставил, ошибка не уходит.
97 — 09.07.13 — 13:33
<schema elementFormDefault=»qualified»
targetNamespace=»http://xml.apache.org/xml-soap»
xmlns=»http://www.w3.org/2001/XMLSchema»
xmlns:wsdl=»http://schemas.xmlsoap.org/wsdl/»
xmlns:xsd=»http://www.w3.org/2001/XMLSchema»>
<complexType name=»Item»>
<all>
<element name=»key» type=»xsd:anyType»/>
<element name=»value» type=»xsd:anyType»/>
</all>
</complexType>
<complexType name=»Map»>
<sequence>
<element maxOccurs=»unbounded» minOccurs=»0″ name=»item» type=»tns4:Item»/>
</sequence>
</complexType>
</schema>
98 — 09.07.13 — 13:34
<?xml version=’1.0′ encoding=’UTF-8′?>
<!— WSDL file generated by Zend Studio. —>
<definitions name=»ddengi» targetNamespace=»urn:ddengi» xmlns:typens=»urn:ddengi» xmlns:xsd=»http://www.w3.org/2001/XMLSchema» xmlns:soap=»http://schemas.xmlsoap.org/wsdl/soap/» xmlns:soapenc=»http://schemas.xmlsoap.org/soap/encoding/» xmlns:wsdl=»http://schemas.xmlsoap.org/wsdl/» xmlns=»http://schemas.xmlsoap.org/wsdl/»>
<schema xmlns=»http://www.w3.org/2001/XMLSchema» targetNamespace=»urn:ddengi»>
<import namespace=»http://schemas.xmlsoap.org/soap/encoding/»/>
<import namespace=»http://xml.apache.org/xml-soap/» Location=»d:tmpapachmap.xsd»/>
</schema>
<message name=»deleteAll»>
<part name=»apiId» type=»xsd:string»/>
<part name=»login» type=»xsd:string»/>
<part name=»pass» type=»xsd:string»/>
</message>
<message name=»deleteAllResponse»/>
<message name=»deleteObject»>
<part name=»apiId» type=»xsd:string»/>
<part name=»login» type=»xsd:string»/>
<part name=»pass» type=»xsd:string»/>
<part name=»id» type=»xsd:integer»/>
<part name=»type» type=»xsd:string»/>
</message>
<message name=»deleteObjectResponse»>
<part name=»deleteObjectReturn» type=»xsd:integer»/>
</message>
<message name=»getAccessStatus»>
<part name=»apiId» type=»xsd:string»/>
<part name=»login» type=»xsd:string»/>
<part name=»pass» type=»xsd:string»/>
</message>
<message name=»getAccessStatusResponse»>
<part name=»getAccessStatusReturn» type=»xsd:integer»/>
</message>
<message name=»getAccumList»>
<part name=»apiId» type=»xsd:string»/>
<part name=»login» type=»xsd:string»/>
<part name=»pass» type=»xsd:string»/>
<part name=»idList» type=»xsd:anyType»/>
</message>
<message name=»getAccumListResponse»>
<part name=»getAccumListReturn» type=»xsd:anyType»/>
</message>
<message name=»getBalance»>
<part name=»apiId» type=»xsd:string»/>
<part name=»login» type=»xsd:string»/>
<part name=»pass» type=»xsd:string»/>
<part name=»params» type=»xsd:anyType»/>
</message>
<message name=»getBalanceResponse»>
<part name=»getBalanceReturn» type=»xsd:anyType»/>
</message>
<message name=»getCategoryList»>
<part name=»apiId» type=»xsd:string»/>
<part name=»login» type=»xsd:string»/>
<part name=»pass» type=»xsd:string»/>
<part name=»idList» type=»xsd:anyType»/>
</message>
<message name=»getCategoryListResponse»>
<part name=»getCategoryListReturn» type=»xsd:anyType»/>
</message>
<message name=»getChangeList»>
<part name=»apiId» type=»xsd:string»/>
<part name=»login» type=»xsd:string»/>
<part name=»pass» type=»xsd:string»/>
<part name=»revision» type=»xsd:string»/>
</message>
<message name=»getChangeListResponse»>
<part name=»getChangeListReturn» type=»xsd:anyType»/>
</message>
<message name=»getCurrencyList»>
<part name=»apiId» type=»xsd:string»/>
<part name=»login» type=»xsd:string»/>
<part name=»pass» type=»xsd:string»/>
<part name=»idList» type=»xsd:anyType»/>
</message>
<message name=»getCurrencyListResponse»>
<part name=»getCurrencyListReturn» type=»xsd:anyType»/>
</message>
<message name=»getCurrentRevision»>
<part name=»apiId» type=»xsd:string»/>
<part name=»login» type=»xsd:string»/>
<part name=»pass» type=»xsd:string»/>
</message>
<message name=»getCurrentRevisionResponse»>
<part name=»getCurrentRevisionReturn» type=»xsd:integer»/>
</message>
<message name=»getExpireDate»>
<part name=»apiId» type=»xsd:string»/>
<part name=»login» type=»xsd:string»/>
<part name=»pass» type=»xsd:string»/>
</message>
<message name=»getExpireDateResponse»>
<part name=»getExpireDateReturn» type=»xsd:string»/>
</message>
<message name=»getOrderList»>
<part name=»apiId» type=»xsd:string»/>
<part name=»login» type=»xsd:string»/>
<part name=»pass» type=»xsd:string»/>
<part name=»idList» type=»xsd:anyType»/>
</message>
<message name=»getOrderListResponse»>
<part name=»getOrderListReturn» type=»xsd:anyType»/>
</message>
<message name=»getPlaceList»>
<part name=»apiId» type=»xsd:string»/>
<part name=»login» type=»xsd:string»/>
<part name=»pass» type=»xsd:string»/>
<part name=»idList» type=»xsd:anyType»/>
</message>
<message name=»getPlaceListResponse»>
<part name=»getPlaceListReturn» type=»xsd:anyType»/>
</message>
<message name=»getRecordList»>
<part name=»apiId» type=»xsd:string»/>
<part name=»login» type=»xsd:string»/>
<part name=»pass» type=»xsd:string»/>
<part name=»params» type=»xsd:anyType»/>
<part name=»idList» type=»xsd:anyType»/>
</message>
<message name=»getRecordListResponse»>
<part name=»getRecordListReturn» type=»xsd:anyType»/>
</message>
<message name=»getRightAccess»>
<part name=»apiId» type=»xsd:string»/>
<part name=»login» type=»xsd:string»/>
<part name=»pass» type=»xsd:string»/>
</message>
<message name=»getRightAccessResponse»>
<part name=»getRightAccessReturn» type=»xsd:string»/>
</message>
<message name=»getServerSubs»>
<part name=»url» type=»xsd:string»/>
</message>
<message name=»getServerSubsResponse»>
<part name=»getServerSubsReturn» type=»xsd:anyType»/>
</message>
<message name=»getSourceList»>
<part name=»apiId» type=»xsd:string»/>
<part name=»login» type=»xsd:string»/>
<part name=»pass» type=»xsd:string»/>
<part name=»idList» type=»xsd:anyType»/>
</message>
<message name=»getSourceListResponse»>
<part name=»getSourceListReturn» type=»xsd:anyType»/>
</message>
<message name=»getSubscriptionStatus»>
<part name=»apiId» type=»xsd:string»/>
<part name=»login» type=»xsd:string»/>
<part name=»pass» type=»xsd:string»/>
</message>
<message name=»getSubscriptionStatusResponse»>
<part name=»getSubscriptionStatusReturn» type=»xsd:string»/>
</message>
<message name=»getTagList»>
<part name=»apiId» type=»xsd:string»/>
<part name=»login» type=»xsd:string»/>
<part name=»pass» type=»xsd:string»/>
<part name=»idList» type=»xsd:anyType»/>
</message>
<message name=»getTagListResponse»>
<part name=»getTagListReturn» type=»xsd:anyType»/>
</message>
<message name=»getUserIdByLogin»>
<part name=»apiId» type=»xsd:string»/>
<part name=»login» type=»xsd:string»/>
<part name=»pass» type=»xsd:string»/>
</message>
<message name=»getUserIdByLoginResponse»>
<part name=»getUserIdByLoginReturn» type=»xsd:string»/>
</message>
<message name=»setAccumList»>
<part name=»apiId» type=»xsd:string»/>
<part name=»login» type=»xsd:string»/>
<part name=»pass» type=»xsd:string»/>
<part name=»list» type=»xsd:string»/>
</message>
<message name=»setAccumListResponse»>
<part name=»setAccumListReturn» type=»xsd:anyType»/>
</message>
<message name=»setCategoryList»>
<part name=»apiId» type=»xsd:string»/>
<part name=»login» type=»xsd:string»/>
<part name=»pass» type=»xsd:string»/>
<part name=»list» type=»xsd:anyType»/>
</message>
<message name=»setCategoryListResponse»>
<part name=»setCategoryListReturn» type=»xsd:anyType»/>
</message>
<message name=»setCurrencyList»>
<part name=»apiId» type=»xsd:string»/>
<part name=»login» type=»xsd:string»/>
<part name=»pass» type=»xsd:string»/>
<part name=»list» type=»xsd:anyType»/>
</message>
<message name=»setCurrencyListResponse»>
<part name=»setCurrencyListReturn» type=»xsd:anyType»/>
</message>
<message name=»setPaymentTransaction»>
<part name=»apiId» type=»xsd:string»/>
<part name=»login» type=»xsd:string»/>
<part name=»pass» type=»xsd:string»/>
<part name=»transactionReceipt» type=»xsd:string»/>
<part name=»amount» type=»xsd:string»/>
</message>
<message name=»setPaymentTransactionResponse»>
<part name=»setPaymentTransactionReturn» type=»xsd:string»/>
</message>
<message name=»setPlaceList»>
<part name=»apiId» type=»xsd:string»/>
<part name=»login» type=»xsd:string»/>
<part name=»pass» type=»xsd:string»/>
<part name=»list» type=»xsd:anyType»/>
</message>
<message name=»setPlaceListResponse»>
<part name=»setPlaceListReturn» type=»xsd:anyType»/>
</message>
<message name=»setRecordList»>
<part name=»apiId» type=»xsd:string»/>
<part name=»login» type=»xsd:string»/>
<part name=»pass» type=»xsd:string»/>
<part name=»list» type=»xsd:anyType»/>
</message>
<message name=»setRecordListResponse»>
<part name=»setRecordListReturn» type=»xsd:anyType»/>
</message>
<message name=»setSourceList»>
<part name=»apiId» type=»xsd:string»/>
<part name=»login» type=»xsd:string»/>
<part name=»pass» type=»xsd:string»/>
<part name=»list» type=»xsd:anyType»/>
</message>
<message name=»setSourceListResponse»>
<part name=»setSourceListReturn» type=»xsd:anyType»/>
</message>
<message name=»setTagList»>
<part name=»apiId» type=»xsd:string»/>
<part name=»login» type=»xsd:string»/>
<part name=»pass» type=»xsd:string»/>
<part name=»list» type=»xsd:anyType»/>
</message>
<message name=»setTagListResponse»>
<part name=»setTagListReturn» type=»xsd:anyType»/>
</message>
<message name=»userRegister»>
<part name=»apiId» type=»xsd:string»/>
<part name=»login» type=»xsd:string»/>
<part name=»name» type=»xsd:string»/>
<part name=»lang» type=»xsd:string»/>
</message>
<message name=»userRegisterResponse»>
<part name=»userRegisterReturn» type=»xsd:string»/>
</message>
<portType name=»SoapPortType»>
<documentation>
drebedengi.ru web-service description; In this document term «waste» means expense.
</documentation>
<operation name=»deleteAll»>
<documentation>
Delete all data (transactions, waste category, income source, place list, currency and tags; Used for synchronization in case of the conflicts; Returns void if success, or throws SoapFault exception;
</documentation>
<input message=»typens:deleteAll»/>
<output message=»typens:deleteAllResponse»/>
</operation>
<operation name=»deleteObject»>
<documentation>
Delete any object; [id] => ID of the object to delete; [type] => The type of the object, must be one of: ‘waste’ ‘income’ ‘move’ ‘change’ ‘object’ ‘currency’ ‘tag’ ‘accum’; ‘object’ is waste category, income source or place; If ‘id’ identifies ‘move’ or ‘change’, both records will be deleted on the server; Returns 1 on success; if an error accures — generates SoapFault message; if there is other object connected to this ID — delete them first;
</documentation>
<input message=»typens:deleteObject»/>
<output message=»typens:deleteObjectResponse»/>
</operation>
<operation name=»getAccessStatus»>
<documentation>
Get current payment status; Returns 1 if Ok, throw SoapFault otherwise.
</documentation>
<input message=»typens:getAccessStatus»/>
<output message=»typens:getAccessStatusResponse»/>
</operation>
<operation name=»getAccumList»>
<documentation>
Gets list of purchases (accums); For purchase list logic is only needed fields ‘id, name, sum_need, sum_currency_id, user_id, is_family, created, comment, priority, order_id’, other fields is for accum logic and should not be changed; ; If parameter [idList] is given, it will be treat as ID list of objects to retrieve# this is used for synchronization;
</documentation>
<input message=»typens:getAccumList»/>
<output message=»typens:getAccumListResponse»/>
</operation>
<operation name=»getBalance»>
<documentation>
Retrievs balance list (array of arrays) grouped by places; [params] => array of parameters: ‘restDate’ [YYYY-MM-DD (NOW default)] — rests will be retrieved relative to this value; ‘is_with_accum’ [true|false (default)] — If true, the the accumulation will be subtracted; ‘is_with_duty’ [true|false (default)] — If true, duties will be subtracted;
</documentation>
<input message=»typens:getBalance»/>
<output message=»typens:getBalanceResponse»/>
</operation>
<operation name=»getCategoryList»>
<documentation>
Retrievs waste category list (array of arrays): [id] => Internal category ID; [parent_id] => For tree structure; [budget_family_id] => User family ID (for multiuser mode); [type] => Type of object, 3 — waste category; [name] => Category name given by user; [is_hidden] => is category hidden in user interface; [sort] => User sort of category tree; If parameter [idList] is given, it will be treat as ID list of objects to retrieve# this is used for synchronization;
</documentation>
<input message=»typens:getCategoryList»/>
<output message=»typens:getCategoryListResponse»/>
</operation>
<operation name=»getChangeList»>
<documentation>
Get all changes (array of arrays) from server relative to given revision: [revision] => the revision of the change, [action_id] => the action of the change ‘1’ — add, ‘2’ — update, ‘3’ — delete’; [object_type_id] => type of the object changed ‘1’ — any record (transction), ‘2’ — income source, ‘3’ — waste category, ‘4’ — place, ‘5’ — currency, ‘6’ — budget_tags, ‘7’ — budget_accum, ‘8’ — budget_accum_order; [object_id] => ID of the object for subsequent calls getRecordList, getCategoryList etc; [date] => the date of the change; Parameter [revision] => int8 number, usually saved on the client from last successfull sync.
</documentation>
<input message=»typens:getChangeList»/>
<output message=»typens:getChangeListResponse»/>
</operation>
<operation name=»getCurrencyList»>
<documentation>
Retrievs currency list (array of arrays) with codes and courses: [id] => Internal currency ID; [name] => Currency name, given by user; [course] => current course from sbrf(dot)ru; [code] => International currency code (for course autoupdating); [family_id] => User family ID (for multiuser mode); [is_default] => is default currency# There should be only one default currency; [is_autoupdate] => autoupdate course once per day, from sbrf(dot)ru; [is_hidden] => is currency hidden in user interface; If parameter [idList] is given, it will be treat as ID list of objects to retrieve# this is used for synchronization;
</documentation>
<input message=»typens:getCurrencyList»/>
<output message=»typens:getCurrencyListResponse»/>
</operation>
<operation name=»getCurrentRevision»>
<documentation>
Get current server revision number.
</documentation>
<input message=»typens:getCurrentRevision»/>
<output message=»typens:getCurrentRevisionResponse»/>
</operation>
<operation name=»getExpireDate»>
<documentation>
Get expire date of active subscription (payed until) for the user — [YYYY-MM-DD]; If there is no active subscription return 0; If an error accur return -1;
</documentation>
<input message=»typens:getExpireDate»/>
<output message=»typens:getExpireDateResponse»/>
</operation>
<operation name=»getOrderList»>
<documentation>
Gets list of orders for purchases; If parameter [idList] is given, it will be treat as ID list of objects to retrieve# this is used for synchronization;
</documentation>
<input message=»typens:getOrderList»/>
<output message=»typens:getOrderListResponse»/>
</operation>
<operation name=»getPlaceList»>
<documentation>
Retrievs place list (array of arrays): [id] => Internal place ID; [budget_family_id] => User family ID (for multiuser mode); [type] => Type of object, 4 — places; [name] => Place name given by user; [is_hidden] => is place hidden in user interface; [is_for_duty] => Internal place for duty logic, Auto created while user adds «Waste or income duty»; [sort] => User sort of place list; [purse_of_nuid] => Not empty if place is purse of user# The value is internal user ID; [icon_id] => Place icon ID from http://www(dot)drebedengi(dot)ru/img/pl[icon_id](dot)gif; If parameter [idList] is given, it will be treat as ID list of objects to retrieve# this is used for synchronization; There is may be empty response, if user access level is limited;
</documentation>
<input message=»typens:getPlaceList»/>
<output message=»typens:getPlaceListResponse»/>
</operation>
<operation name=»getRecordList»>
<documentation>
Retrievs record list (array of arrays) or report table by parameters; [params] => array of following parameters: ‘is_report’ [true|false (no default)] — retrievs data for report only or full records (waste, incomes, moves, changes) for export; ‘relative_date’ [YYYY-MM-DD (NOW by default)] — all data will be retrieved relative to this value, according to ‘r_period’ value; ‘period_to’, ‘period_from’ [YYYY-MM-DD] — custom period, if ‘r_period’ = 0; ‘is_show_duty’ [true(default)|false] — whether or not include duty record; ‘r_period’ [custom period = 0, this month = 1, today = 7, last month = 2, this quart = 3, this year = 4, last year = 5, all time = 6, last 20 record = 8 (default)] — period for which data will be obtained; ‘r_what’ [income = 2, waste = 3 (default), move = 4, change = 5, all types = 6] — type of data you want to get; ‘r_who’ [0 (default) — all users, int8 = user ID] — The data of the user to obtain, in the case of multiplayer mode; ‘r_how’ [show record list by detail = 1 (default), group incomes by source = 2, group wastes by category = 3] — Values 2 and 3 are for ‘report’ mode only# How to group the result record list; ‘r_middle’ [No average = 0 (default), Average monthly = 2592000, Average weekly = 604800, Averaged over days = 86400] — How to average the data, if r_how = 2 or 3; ‘r_currency’ [Original currency = 0 (default), int8 = currency ID] — Convert or not in to given currency; ‘r_is_place’, ‘r_is_tag’, ‘r_is_category’ [Include all = 0 (default), Include only selected = 1, All except selected = 2] — Exclude or include ‘r_place’, ‘r_tag’ or ‘r_category’ respectively; ‘r_place’, ‘r_tag’, ‘r_category’ [Array] — Array of numeric values for place ID, tag ID or category ID respectively; If parameter [idList] is given, it will be treat as ID list of objects to retrieve# this is used for synchronization;
</documentation>
<input message=»typens:getRecordList»/>
<output message=»typens:getRecordListResponse»/>
</operation>
<operation name=»getRightAccess»>
<documentation>
Get user right access for multi user mode; Returns 0 — full access, 1 — limited access; For limited access it is neccessary to use getBalance method to display user balance in the application; In this case local transactions must simple increment balance, but not compute that as sum of all transactions;
</documentation>
<input message=»typens:getRightAccess»/>
<output message=»typens:getRightAccessResponse»/>
</operation>
<operation name=»getServerSubs»>
<documentation>
Internal method; Don’t use it;
</documentation>
<input message=»typens:getServerSubs»/>
<output message=»typens:getServerSubsResponse»/>
</operation>
<operation name=»getSourceList»>
<documentation>
Retrievs income source list (array of arrays): [id] => Internal source ID; [parent_id] => For tree structure; [budget_family_id] => User family ID (for multiuser mode); [type] => Type of object, 2 — income source; [name] => Source name given by user; [is_hidden] => is income hidden in user interface; [sort] => User sort of source tree; If parameter [idList] is given, it will be treat as ID list of objects to retrieve# this is used for synchronization;
</documentation>
<input message=»typens:getSourceList»/>
<output message=»typens:getSourceListResponse»/>
</operation>
<operation name=»getSubscriptionStatus»>
<documentation>
Get Premium subscription status; returns 1 — Premium active, 0 — otherwise;
</documentation>
<input message=»typens:getSubscriptionStatus»/>
<output message=»typens:getSubscriptionStatusResponse»/>
</operation>
<operation name=»getTagList»>
<documentation>
Retrievs tag list (array of arrays): [id] => Internal tag ID; [family_id] => User family ID (for multiuser mode); [name] => Tag name given by user; [is_hidden] => is tag hidden in user interface; [is_family] => is tag visible for all family user, or user only; [sort] => User sort of tag list; If parameter [idList] is given, it will be treat as ID list of objects to retrieve# this is used for synchronization;
</documentation>
<input message=»typens:getTagList»/>
<output message=»typens:getTagListResponse»/>
</operation>
<operation name=»getUserIdByLogin»>
<documentation>
Get internal user ID by login; For multi user mode, this value contained in ‘purse_of_nuid’ field of the current user;
</documentation>
<input message=»typens:getUserIdByLogin»/>
<output message=»typens:getUserIdByLoginResponse»/>
</operation>
<operation name=»setAccumList»>
<documentation>
Insert or update accum list; [list] => array of arrays: ‘server_id’ or ‘client_id’ [int8] — server or client ID of the record# If client ID is present — try to insert new record, and return server2client correspondence in the result array# If server_id is present — try to update existing record, see getAccumList description for other detail; Returns the array of server IDs, successfully changed; The client MUST save server IDs corresponded to client IDs, for subsequent ‘update’ and ‘delete’ calls;
</documentation>
<input message=»typens:setAccumList»/>
<output message=»typens:setAccumListResponse»/>
</operation>
<operation name=»setCategoryList»>
<documentation>
Insert or update waste category list; [list] => array of arrays: ‘server_id’ or ‘client_id’ [int8] — server or client ID of the record# If client ID is present — try to insert new record, and return server2client correspondence in the result array# If server_id is present — try to update existing record, see getCategoryList description for other detail; Returns the array of server IDs, successfully changed; The client MUST save server IDs corresponded to client IDs, for subsequent ‘update’ and ‘delete’ calls;
</documentation>
<input message=»typens:setCategoryList»/>
<output message=»typens:setCategoryListResponse»/>
</operation>
<operation name=»setCurrencyList»>
<documentation>
Insert or update currency list; [list] => array of arrays: ‘server_id’ or ‘client_id’ [int8] — server or client ID of the record# If client ID is present — try to insert new record, and return server2client correspondence in the result array# If server_id is present — try to update existing record, see getCurrencyList description for other detail; Returns the array of server IDs, successfully changed; If ‘is_default’ flag set to another currency, then previos updated too and sent in return array; The client MUST save server IDs corresponded to client IDs, for subsequent ‘update’ and ‘delete’ calls;
</documentation>
<input message=»typens:setCurrencyList»/>
<output message=»typens:setCurrencyListResponse»/>
</operation>
<operation name=»setPaymentTransaction»>
<documentation>
Approve payment from Apple; [transactionReceipt] — is a signed ricept string returned from apple while purchasing, this shoud be base64 decoded; [amount] — the sum amount of the purchase, in USD; Return expire date of the subscription, see getExpireDate for the description of the return values;
</documentation>
<input message=»typens:setPaymentTransaction»/>
<output message=»typens:setPaymentTransactionResponse»/>
</operation>
<operation name=»setPlaceList»>
<documentation>
Insert or update place list; [list] => array of arrays: ‘server_id’ or ‘client_id’ [int8] — server or client ID of the record# If client ID is present — try to insert new record, and return server2client correspondence in the result array# If server_id is present — try to update existing record, see getPlaceList description for other detail; Returns the array of server IDs, successfully changed; The client MUST save server IDs corresponded to client IDs, for subsequent ‘update’ and ‘delete’ calls;
</documentation>
<input message=»typens:setPlaceList»/>
<output message=»typens:setPlaceListResponse»/>
</operation>
<operation name=»setRecordList»>
<documentation>
Insert or update record list; [list] => array (indexes must be 0,1,2…N) of arrays: ‘server_id’ or ‘client_id’ [int8] — server or client ID of the record# If client ID is present — try to insert new record, and return server2client correspondence in the result array# If server_id is present — try to update existing record; ‘server_move_id’ or ‘client_move_id’ [int8] — for «move» operations only, to identify second part of move# The value must point to first part ‘server_id’ or ‘client_id’ respectively; ‘server_change_id’ or ‘client_change_id’ [int8] — for «currency change» operations only, to identify second part of change# The value must point to first part ‘server_id’ or ‘client_id’ respectively; ‘place_id’ [int8] — place ID, of which the record; ‘budget_object_id’ [int8] — object ID of which the record: category ID for waste, source ID for incomes, place ID for moves and currency changes; ‘sum’ [int8] — absolute value of sum (hundredths); ‘operation_date’ [YYYY-MM-DD HH:mm:SS] — transaction date; ‘comment’ [UTF8 text] — the comment of the record, 2048 chars max length; ‘currency_id’ [int8] — currency ID of the record; ‘is_duty’ [true|false] — not used; ‘operation_type’ [income = 2, waste = 3 (default), move = 4, change = 5] — transaction type; Returns the array of server IDs, successfully changed; The client MUST save server IDs corresponded to client IDs, for subsequent ‘update’ and ‘delete’ calls;
</documentation>
<input message=»typens:setRecordList»/>
<output message=»typens:setRecordListResponse»/>
</operation>
<operation name=»setSourceList»>
<documentation>
Insert or update income source list; [list] => array of arrays: ‘server_id’ or ‘client_id’ [int8] — server or client ID of the record# If client ID is present — try to insert new record, and return server2client correspondence in the result array# If server_id is present — try to update existing record, see getSourceList description for other detail; Returns the array of server IDs, successfully changed; The client MUST save server IDs corresponded to client IDs, for subsequent ‘update’ and ‘delete’ calls;
</documentation>
<input message=»typens:setSourceList»/>
<output message=»typens:setSourceListResponse»/>
</operation>
<operation name=»setTagList»>
<documentation>
Insert or update tag list; [list] => array of arrays: ‘server_id’ or ‘client_id’ [int8] — server or client ID of the record# If client ID is present — try to insert new record, and return server2client correspondence in the result array# If server_id is present — try to update existing record, see getTagList description for other detail; Returns the array of server IDs, successfully changed; The client MUST save server IDs corresponded to client IDs, for subsequent ‘update’ and ‘delete’ calls;
</documentation>
<input message=»typens:setTagList»/>
<output message=»typens:setTagListResponse»/>
</operation>
<operation name=»userRegister»>
<documentation>
Reqister new user; Return user password on successfully register; If an error accur return -1 (such email already exist), -2 (register not allowed), -3 (email incorrect), -4 (other error); [lang] — ‘en’ or ‘ru’;
</documentation>
<input message=»typens:userRegister»/>
<output message=»typens:userRegisterResponse»/>
</operation>
</portType>
<binding name=»SoapBinding» type=»typens:SoapPortType»>
<soap:binding style=»rpc» transport=»http://schemas.xmlsoap.org/soap/http»/>
<operation name=»deleteAll»>
<soap:operation soapAction=»urn:SoapAction»/>
<input>
<soap:body namespace=»urn:ddengi» use=»encoded» encodingStyle=»http://schemas.xmlsoap.org/soap/encoding/»/>
</input>
<output>
<soap:body namespace=»urn:ddengi» use=»encoded» encodingStyle=»http://schemas.xmlsoap.org/soap/encoding/»/>
</output>
</operation>
<operation name=»deleteObject»>
<soap:operation soapAction=»urn:SoapAction»/>
<input>
<soap:body namespace=»urn:ddengi» use=»encoded» encodingStyle=»http://schemas.xmlsoap.org/soap/encoding/»/>
</input>
<output>
<soap:body namespace=»urn:ddengi» use=»encoded» encodingStyle=»http://schemas.xmlsoap.org/soap/encoding/»/>
</output>
</operation>
<operation name=»getAccessStatus»>
<soap:operation soapAction=»urn:SoapAction»/>
<input>
<soap:body namespace=»urn:ddengi» use=»encoded» encodingStyle=»http://schemas.xmlsoap.org/soap/encoding/»/>
</input>
<output>
<soap:body namespace=»urn:ddengi» use=»encoded» encodingStyle=»http://schemas.xmlsoap.org/soap/encoding/»/>
</output>
</operation>
<operation name=»getAccumList»>
<soap:operation soapAction=»urn:SoapAction»/>
<input>
<soap:body namespace=»urn:ddengi» use=»encoded» encodingStyle=»http://schemas.xmlsoap.org/soap/encoding/»/>
</input>
<output>
<soap:body namespace=»urn:ddengi» use=»encoded» encodingStyle=»http://schemas.xmlsoap.org/soap/encoding/»/>
</output>
</operation>
<operation name=»getBalance»>
<soap:operation soapAction=»urn:SoapAction»/>
<input>
<soap:body namespace=»urn:ddengi» use=»encoded» encodingStyle=»http://schemas.xmlsoap.org/soap/encoding/»/>
</input>
<output>
<soap:body namespace=»urn:ddengi» use=»encoded» encodingStyle=»http://schemas.xmlsoap.org/soap/encoding/»/>
</output>
</operation>
<operation name=»getCategoryList»>
<soap:operation soapAction=»urn:SoapAction»/>
<input>
<soap:body namespace=»urn:ddengi» use=»encoded» encodingStyle=»http://schemas.xmlsoap.org/soap/encoding/»/>
</input>
<output>
<soap:body namespace=»urn:ddengi» use=»encoded» encoding
99 — 09.07.13 — 13:38
ОпределениеТ=Новый WSОпределения(«d:Загрузкиdd.wsdl»);
WSСервис=ОпределениеТ.Сервисы[0];
прокси=Новый WSПрокси(ОпределениеТ, WSСервис.URIПространстваИмен, WSСервис.Имя, WSСервис.ТочкиПодключения[0].Имя);
Фабрика=Прокси.ФабрикаXDTO;
100 — 09.07.13 — 13:39
<!— WSDL file generated by Zend Studio. —> <definitions name=»ddengi» targetNamespace=»urn:ddengi» xmlns:typens=»urn:ddengi» xmlns:xsd=»http://www.w3.org/2001/XMLSchema» xmlns:soap=»http://schemas.xmlsoap.org/wsdl/soap/» xmlns:soapenc=»http://schemas.xmlsoap.org/soap/encoding/» xmlns:wsdl=»http://schemas.xmlsoap.org/wsdl/» xmlns=»http://schemas.xmlsoap.org/wsdl/»> drebedengi.ru web-service description; In this document term «waste» means expense. <documentation> Delete all data (transactions, waste category, income source, place list, currency and tags; Used for synchronization in case of the conflicts; Returns void if success, or throws SoapFault exception; </documentation> Delete any object; [id] => ID of the object to delete; [type] => The type of the object, must be one of: ‘waste’ ‘income’ ‘move’ ‘change’ ‘object’ ‘currency’ ‘tag’ ‘accum’; ‘object’ is waste category, income source or place; If ‘id’ identifies ‘move’ or ‘change’, both records will be deleted on the server; Returns 1 on success; if an error accures — generates SoapFault message; if there is other object connected to this ID — delete them first; Get current payment status; Returns 1 if Ok, throw SoapFault otherwise. Gets list of purchases (accums); For purchase list logic is only needed fields ‘id, name, sum_need, sum_currency_id, user_id, is_family, created, comment, priority, order_id’, other fields is for accum logic and should not be changed; ; If parameter [idList] is given, it will be treat as ID list of objects to retrieve# this is used for synchronization; Retrievs waste category list (array of arrays): [id] => Internal category ID; [parent_id] => For tree structure; [budget_family_id] => User family ID (for multiuser mode); [type] => Type of object, 3 — waste category; [name] => Category name given by user; [is_hidden] => is category hidden in user interface; [sort] => User sort of category tree; If parameter [idList] is given, it will be treat as ID list of objects to retrieve# this is used for synchronization; Get all changes (array of arrays) from server relative to given revision: [revision] => the revision of the change, [action_id] => the action of the change ‘1’ — add, ‘2’ — update, ‘3’ — delete’; [object_type_id] => type of the object changed ‘1’ — any record (transction), ‘2’ — income source, ‘3’ — waste category, ‘4’ — place, ‘5’ — currency, ‘6’ — budget_tags, ‘7’ — budget_accum, ‘8’ — budget_accum_order; [object_id] => ID of the object for subsequent calls getRecordList, getCategoryList etc; [date] => the date of the change; Parameter [revision] => int8 number, usually saved on the client from last successfull sync. Retrievs currency list (array of arrays) with codes and courses: [id] => Internal currency ID; [name] => Currency name, given by user; [course] => current course from sbrf(dot)ru; [code] => International currency code (for course autoupdating); [family_id] => User family ID (for multiuser mode); [is_default] => is default currency# There should be only one default currency; [is_autoupdate] => autoupdate course once per day, from sbrf(dot)ru; [is_hidden] => is currency hidden in user interface; If parameter [idList] is given, it will be treat as ID list of objects to retrieve# this is used for synchronization; Get current server revision number. <documentation> Get expire date of active subscription (payed until) for the user — [YYYY-MM-DD]; If there is no active subscription return 0; If an error accur return -1; </documentation> <documentation> Gets list of orders for purchases; If parameter [idList] is given, it will be treat as ID list of objects to retrieve# this is used for synchronization; </documentation> Get user right access for multi user mode; Returns 0 — full access, 1 — limited access; For limited access it is neccessary to use getBalance method to display user balance in the application; In this case local transactions must simple increment balance, but not compute that as sum of all transactions; Retrievs income source list (array of arrays): [id] => Internal source ID; [parent_id] => For tree structure; [budget_family_id] => User family ID (for multiuser mode); [type] => Type of object, 2 — income source; [name] => Source name given by user; [is_hidden] => is income hidden in user interface; [sort] => User sort of source tree; If parameter [idList] is given, it will be treat as ID list of objects to retrieve# this is used for synchronization; Retrievs tag list (array of arrays): [id] => Internal tag ID; [family_id] => User family ID (for multiuser mode); [name] => Tag name given by user; [is_hidden] => is tag hidden in user interface; [is_family] => is tag visible for all family user, or user only; [sort] => User sort of tag list; If parameter [idList] is given, it will be treat as ID list of objects to retrieve# this is used for synchronization; <documentation> Get internal user ID by login; For multi user mode, this value contained in ‘purse_of_nuid’ field of the current user; Insert or update accum list; [list] => array of arrays: ‘server_id’ or ‘client_id’ [int8] — server or client ID of the record# If client ID is present — try to insert new record, and return server2client correspondence in the result array# If server_id is present — try to update existing record, getAccumList description for other detail; Returns the array of server IDs, successfully changed; The client MUST save server IDs corresponded to client IDs, for subsequent ‘update’ and ‘delete’ calls; <documentation> Insert or update waste category list; [list] => array of arrays: ‘server_id’ or ‘client_id’ [int8] — server or client ID of the record# If client ID is present — try to insert new record, and return server2client correspondence in the result array# If server_id is present — try to update existing record, getCategoryList description for other detail; Returns the array of server IDs, successfully changed; The client MUST save server IDs corresponded to client IDs, for subsequent ‘update’ and ‘delete’ calls; <documentation> Insert or update currency list; [list] => array of arrays: ‘server_id’ or ‘client_id’ [int8] — server or client ID of the record# If client ID is present — try to insert new record, and return server2client correspondence in the result array# If server_id is present — try to update existing record, getCurrencyList description for other detail; Returns the array of server IDs, successfully changed; If ‘is_default’ flag set to another currency, then previos updated too and sent in return array; The client MUST save server IDs corresponded to client IDs, for subsequent ‘update’ and ‘delete’ calls; </documentation> Approve payment from Apple; [transactionReceipt] — is a signed ricept string returned from apple while purchasing, this shoud be base64 decoded; [amount] — the sum amount of the purchase, in USD; Return expire date of the subscription, getExpireDate for the description of the return values; Insert or update place list; [list] => array of arrays: ‘server_id’ or ‘client_id’ [int8] — server or client ID of the record# If client ID is present — try to insert new record, and return server2client correspondence in the result array# If server_id is present — try to update existing record, getPlaceList description for other detail; Returns the array of server IDs, successfully changed; The client MUST save server IDs corresponded to client IDs, for subsequent ‘update’ and ‘delete’ calls; <documentation> Insert or update income source list; [list] => array of arrays: ‘server_id’ or ‘client_id’ [int8] — server or client ID of the record# If client ID is present — try to insert new record, and return server2client correspondence in the result array# If server_id is present — try to update existing record, getSourceList description for other detail; Returns the array of server IDs, successfully changed; The client MUST save server IDs corresponded to client IDs, for subsequent ‘update’ and ‘delete’ calls; Insert or update tag list; [list] => array of arrays: ‘server_id’ or ‘client_id’ [int8] — server or client ID of the record# If client ID is present — try to insert new record, and return server2client correspondence in the result array# If server_id is present — try to update existing record, getTagList description for other detail; Returns the array of server IDs, successfully changed; The client MUST save server IDs corresponded to client IDs, for subsequent ‘update’ and ‘delete’ calls; <documentation> Reqister new user; Return user password on successfully register; If an error accur return -1 (such email already exist), -2 (register not allowed), -3 (email incorrect), -4 (other error); [lang] — ‘en’ or ‘ru’;
Ошибка при вызове метода контекста (СоздатьЭлемент)
{ВнешняяОбработка.ирНастройкаТехножурнала.МодульОбъекта(863)}: ЭлементДОМ = Документ.СоздатьЭлемент(Документ.ЭлементДокумента.URIПространстваИмен, Документ.ЭлементДокумента.Префикс + ":" + ЛокальноеИмяЭлемента);
{ВнешняяОбработка.ирНастройкаТехножурнала.Форма.НастройкаКаталога.Форма(78)}: ЭлементДОМ = СоздатьЭлементДОМ(Строка.Сравнение);
{ВнешняяОбработка.ирНастройкаТехножурнала.Форма.НастройкаКаталога.Форма(964)}: УстановитьЭлементОтбораСобытий(РедактированиеУсловийСобытия, мТекущийИндексУзлаСобытия, ЭлементыФормы.ТабличноеПолеСписокСобытий.ТекущаяСтрока);
по причине:
Указан недопустимый префикс или URI пространства имен
Иногда требуется настроить синхронизацию между базами 1с через каталог обмена. Но настройка не всегда так очевидна, как казалось бы…
В этой статье я привел решение ошибки «Каталог обмена информацией не существует» в случае, если сервер 1с установлен на Linux и Windows сервере.
- Решение для Linux сервера 1с
- Решение для Windows сервера и файлового режима работы 1с
Решение для сервера 1с на Linux на примере Centos Stream.
Скорее всего вы получаете одну из нескольких ошибок:
Прямое подключение к информационной базе недоступно на сервере под управлением ОС Linux — ошибка говорит сама за себя, нам потребуется настройка сетевого обмена.
Ошибка подключения: Каталог обмена информацией не существует — данная ошибка возникает из-за того, что при настройке обмена авторизация в сетевой папке происходит учетной записью usr1cv8 из под Linux.
Для решения данной проблемы нам придется смонтировать сетевую папку в Linux под учетной записью, под которой работает сервер 1с.
1) Расшариваем сетевую папку на вашем файловом сервере и даем права на запись для учетной записи guest.
У меня будет //192.168.128.32/public/1C_Share
2) Установим cifs-utils на Linux сервере 1с:
yum install cifs-utils #для Centos
apt install cifs-utils #для Ubuntu
3) Создадим каталог для обмена, в который будет монтироваться сетевая папка:
mkdir /1C_Share
4) Посмотрим uid пользователя usr1cv8, чтобы при монтировании указать его владельцем: каталога
less /etc/passwd
5) Смонтируем нашу сетевую папку в каталог 1С_Share:
mount -t cifs //192.168.128.32/public/1C_Share /1C_Share -o user=guest,password=,uid=993
Теперь в настройках 1с указываем каталог для обмена 1C_Share и смотрим есть ли подключение:
6) Сейчас сделаем так, чтобы сетевая папка в Linux монтировалась автоматически после перезагрузки:
nano /etc/fstab и в конфиге добавляем внизу
//192.168.128.32/public/1C_Share /1C_Share cifs username=guest,password=,uid=993,iocharset=utf8,nofail 0 0
Решение для сервера 1с установленном на Windows Server.
Здесь все гораздо проще. Нужно авторизоваться в сетевом каталоге под учетной записью с которой у вас запущена служба 1с. У меня это USR1CV8.
Для этого под пользователем USR1CV8 переходим в Панель управления — Диспетчер учетных данных — Учетные данные Windows и добавляем адрес сервера //192.168.128.32 с данными авторизации, которые вы указали на файловом сервере.
Если вдруг у вас появляется подобная ошибка при файловом режиме работы 1с, то вам не хватает прав на запись для вашей учетной записи в каталоге, в котором вы настраиваете обмен.
Стоит посмотреть права для пользователя на вкладке Безопасность:
Содержание:
При попытках синхронизировать некие базы 1С при помощи каталога обмена может возникать ошибка «Каталог обмена информацией не существует», которая имеет следующий вид:
1. Устранение ошибки «Каталог обмена информацией не существует» для Linux
В случае операционной системы Linux возможно несколько вариаций отображения одной и той же ошибки:
· «Прямое подключение к информационной базе недоступно на сервере под управлением ОС Linux» — в случае вывода этой строки на экран – необходимо настроить сетевой обмен;
· «Ошибка подключения: Каталог обмена информацией не существует» — эти строки означают, что во время настройки обменных процессов авторизация в папке сети проводится учётным профилем Linux.
Устранение данной неполадки будет происходить при помощи монтажа сетевой папки в ОС Linux с той учётной записи, с которой работает система на базе 1С, для этого:
1. Необходимо открыть доступ на сетевую папку на сервере для гостевой учётной записи, к примеру:
2. Устанавливаем cifs-утилиты для сервера Linux 1C:
3. Далее нужно создать обменный каталог, в нём будет происходить монтаж сетевой папки:
4. Нужно узнать uid 1С юзера, от имени которого происходил запрос на обмен в 1С:
5. Монтируем сетевую папку в каталог 1С_Share:
Следующий шаг – запустить настройки системы 1С и указать обменный каталог 1С_Share, после чего, можно проверять подключение.
6. Последний пункт – это автоматическая монтировка сетевой папки в Linux, она будет монтироваться каждый раз, когда произошла перезагрузка:
А снизу, внутри конфигурации, нужно написать:
2. Устранение ошибки «Каталог обмена информацией не существует» для Windows в 1С
Рассмотрим теперь аналогичную ситуацию, с разницей в том, что сервер находится на ОС Windows. В этом случае действий будет меньше.
Для начала, нужно войти в сетевой каталог с той учётки, на которой запущена система на базе 1С.
Чтобы это сделать – нужно перейти в «Панель управления в 1С», кликнуть на «Диспетчер учётных данных на сервере 1С» и выбрать «Учётные данные Windows», где вносим адрес сервера, для примера:
Также вносим данные авторизации, те же, которые указывались на сервере с файлами.
В случае, если неполадка возникла во время файлового режима системы 1С Предприятие, — это значит, что данному аккаунту не хватает прав для создания записи в обменном каталоге.
Чтобы это исправить – необходимо обратиться к панели «Безопасность» и проверить настройки конкретного юзера 1С, как демонстрируется ниже:
Специалист компании «Кодерлайн»
Айдар Фархутдинов
|
|||
assasu
30.03.17 — 09:35 |
Есть розница в которой настроен типовой обмен по магазину. обмен через фтп, проверка соединения работает и сам обмен при запуске вручную тоже работает. А когда запуск происходит рег. заданием — не работает . Обработка: ТранспортСообщенийОбменаFILE: Ошибка подключения: Каталог обмена информацией не существует. база файловая. Подскажите куда смотреть , копать? |
||
Kis-Kis
1 — 30.03.17 — 09:49 |
Возможно, в самом сценарии обмена указано, что обмен не через ftp, а через каталог. А каталога не существует. |
||
assasu
2 — 30.03.17 — 09:56 |
(1) там верно . это я проверил сразу же |
||
Kis-Kis
3 — 30.03.17 — 10:02 |
Но откуда-то ведь вызывается обработка ТранспортСообщенийОбменаFILE? Если бы действительно был указан ftp, то вызывалась бы обработка ТранспортСообщенийОбменаFTP. Возможно, в сценарии есть обмен не с одной базой, а с двумя, и во втором настроено через каталог. |
||
assasu
4 — 30.03.17 — 10:15 |
(3) все поборол.. спасибо за (1) — это была наводка. есть справочник настроек синхронизации. где мы указываем возможные варианты обмена и способ по умолчанию. А еще есть справочник настроек синхронизации, где мы указываем что делать выгружать или загружать. Так вот там тоже почему то сидит вариант обмена. Он там и был не верным. |
||
MaxS 5 — 30.03.17 — 10:19 |
Вчера на последней КА 2.2.2.227 наткнулся на подобную ошибку. Синхронизация через универсальный формат обмена, ftp, сжимать файл. Когда везде выключил флаг сжимать файл, ошибка пропала. |
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой |
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку «Обновить» в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Содержание
- Ошибка 1с «Каталог обмена информацией не существует» — Решение
- Решение для сервера 1с на Linux на примере Centos Stream.
- Решение для сервера 1с установленном на Windows Server.
- Обработка ошибок, возникающих при обмене данными в распределенной информационной базе
- Общие ошибки, возникающие при работе с XML
- Ситуации, возникающие при обмене данными в рамках распределенной информационной базы
Ошибка 1с «Каталог обмена информацией не существует» — Решение
Иногда требуется настроить синхронизацию между базами 1с через каталог обмена. Но настройка не всегда так очевидна, как казалось бы…
В этой статье я привел решение ошибки «Каталог обмена информацией не существует» в случае, если сервер 1с установлен на Linux и Windows сервере.
Решение для сервера 1с на Linux на примере Centos Stream.
Скорее всего вы получаете одну из нескольких ошибок:
Прямое подключение к информационной базе недоступно на сервере под управлением ОС Linux — ошибка говорит сама за себя, нам потребуется настройка сетевого обмена.
Ошибка подключения: Каталог обмена информацией не существует — данная ошибка возникает из-за того, что при настройке обмена авторизация в сетевой папке происходит учетной записью usr1cv8 из под Linux.
Для решения данной проблемы нам придется смонтировать сетевую папку в Linux под учетной записью, под которой работает сервер 1с.
1) Расшариваем сетевую папку на вашем файловом сервере и даем права на запись для учетной записи guest.
У меня будет //192.168.128.32/public/1C_Share
2) Установим cifs-utils на Linux сервере 1с:
yum install cifs-utils #для Centos
apt install cifs-utils #для Ubuntu
3) Создадим каталог для обмена, в который будет монтироваться сетевая папка:
4) Посмотрим uid пользователя usr1cv8, чтобы при монтировании указать его владельцем: каталога
5) Смонтируем нашу сетевую папку в каталог 1С_Share:
mount -t cifs //192.168.128.32/public/1C_Share /1C_Share -o user=guest,password=,uid=993
Теперь в настройках 1с указываем каталог для обмена 1C_Share и смотрим есть ли подключение:
6) Сейчас сделаем так, чтобы сетевая папка в Linux монтировалась автоматически после перезагрузки:
nano /etc/fstab и в конфиге добавляем внизу
//192.168.128.32/public/1C_Share /1C_Share cifs username=guest,password=,uid=993,iocharset=utf8,nofail 0 0
Решение для сервера 1с установленном на Windows Server.
Здесь все гораздо проще. Нужно авторизоваться в сетевом каталоге под учетной записью с которой у вас запущена служба 1с. У меня это USR1CV8.
Для этого под пользователем USR1CV8 переходим в Панель управления — Диспетчер учетных данных — Учетные данные Windows и добавляем адрес сервера //192.168.128.32 с данными авторизации, которые вы указали на файловом сервере.
Если вдруг у вас появляется подобная ошибка при файловом режиме работы 1с, то вам не хватает прав на запись для вашей учетной записи в каталоге, в котором вы настраиваете обмен.
Стоит посмотреть права для пользователя на вкладке Безопасность:
Источник
Обработка ошибок, возникающих при обмене данными в распределенной информационной базе
При организации обмена данными в рамках распределенной информационной базы могут возникать различные ситуации, приводящие к сообщениям об ошибках. Однако не все подобные ситуации являются ошибками в чистом виде: некоторые из них могут быть отнесены к штатным ситуациям, соответствующим протоколу обмена данными, некоторые — к неадаптированности конфигурации для работы в рамках распределенной информационной базе.
Общие ошибки, возникающие при работе с XML
Сообщение обмена данными является документом XML, поэтому имеет смысл описать возможные ошибки, которые могут возникнуть во время чтения/записи сообщений обмена данными при использовании средств чтения/записи данных XML, предоставляемых платформой «1С:Предприятие 8». При работе с данными в формате XML может возникать множество различных ситуаций, однако в данной статье будут рассмотрены только те, которые так или иначе имеют отношение к обмену данными в рамках распределенной информационной базы.
Значение URI пространства имен должно соответствовать рекомендации Namespaces in XML (см. http://www.w3.org/TR/REC-xml-names)
Производится попытка записи в XML значения, для типа которого не определена процедура записи в XML. Или производится попытка чтения из XML значения неизвестного типа или типа, для которого не определена процедура чтения из XML.
При обмене данными в рамках распределенной информационной базы используются штатные механизмы записи/чтения XML — ситуации, связанные с передачей некорректных данных, могут возникать только вследствие искажения сообщения обмена данными. В таком случае необходимо получить новое сообщение обмена данными от информационной базы — источника сообщения.
Если же сообщение содержит корректные данные и ошибка возникает в процессе считывания данных из базы данных (для последующего изменения их данными из сообщения обмена), то необходимо проверить наличие прав пользователя, от имени которого производится чтения сообщения обмена.
Также необходимо удостовериться, что в процессе чтения сообщения не возникает блокировки данных (например, чтение производится в рамках транзакции, а данные заблокированы другим пользователем), можно предпринять попытку чтения сообщения в монопольном режиме доступа к информационной базе.
Если вышеперечисленные способы не привели к устранению ошибки, то необходимо проверить целостность данных информационной базы
Ситуации, возникающие при обмене данными в рамках распределенной информационной базы
Сообщение об ошибке | Описание ошибки |
Возможные пути исправления ошибки | |
Не установлен MS XML Core Services 4.0 | На компьютере не установлен Microsoft XML Core Services 4.0, используемый «1С:Предприятием 8» для работы с XML |
Установить Microsoft XML Core Services 4.0. При установке «1С:Предприятия 8» Microsoft XML Core Services 4.0 устанавливается автоматически | |
Ошибка разбора XML | Ошибка, возникающая при синтаксическом анализе данных XML в процессе чтения. Все ошибки, определенные в SAX2, трансформируются в данную ошибку, генерируемую платформой «1С:Предприятие 8» |
Проверить правильность оформления и синтаксис данных XML (см. http://www.w3.org/TR/REC-xml). | |
Ошибочный порядок записи XML | Методы записи содержимого документа XML вызываются в неправильном порядке. Например, запись атрибута вызывается после записи текста элемента. |
Выявить и исправить места некорректного порядка вызова методов | |
Текст XML содержит недопустимые символы | Записываемый текст XML содержит недопустимые символы. |
Текст XML должен соответствовать требованиям, изложенным в главе 2.2 рекомендации XML (см. http://www.w3.org/TR/REC-xml#charsets) | |
Недопустимое имя XML | Записываемое имя XML содержит недопустимые символы. |
Имя XML должно соответствовать требованиям, изложенным в главе 2.3 рекомендации XML (см. http://www.w3.org/TR/REC-xml#NT-Name) | |
Пустое значение URI допустимо только для пространства имен по умолчанию | Производится попытка записать соответствие пространства имен, в котором URI пространства имен, представленному пустой строкой, соответствует непустой префикс. |
Переопределение пространства имен по умолчанию для текущего элемента XML недопустимо | Текущий записываемый элемент не относится ни к какому пространству имен. Поэтому для него недопустимо определение непустого пространства имен по умолчанию. |
Переопределение пространства имен по умолчанию для элемента, не относящегося ни к какому пространству имен -запрещено | |
Ошибка преобразования данных XML | Ошибка возникает вследствие нарушения структуры передаваемых данных. При чтении данных XML платформой производится автоматическое определение типа получаемых данных, кроме случаев, когда тип данных указан при вызове операции чтения. Если структура данных XML не соответствует структуре данных, определяемых типом, то будет сгенерировано данное сообщение об ошибке. |
При обмене данными в рамках распределенной информационной базы используются штатные механизмы записи/чтения XML. Данная ошибка является следствием искажения сообщения обмена. Необходимо повторно получить сообщение от информационной базы — источника сообщения | |
Значения данного типа не могут быть представлены в XML | |
Ошибка может возникнуть при участии в обмене информационных баз, имеющих различные конфигурации. Однако при обмене данными в рамках распределенной информационной базы поддерживается идентичность конфигураций информационных баз, участвующих в обмене. Данная ошибка является следствием искажения сообщения обмена. Необходимо повторно получить сообщение от информационной базы — источника сообщения | |
Ошибка данных XML | Ошибка возникает при получении некорректных данных из источника XML или же в случаях неудачного считывания из базы данных содержимого объекта, данные которого должны быть прочитаны из источника XML: блокировка объекта или же отсутствие прав на чтение данного объекта. Например, чтение существующего элемента справочника: если элемент справочника является группой, а было прочитано то, что является элементом, будет сгенерирована данная ошибка. |
В случае чтения сообщения обмена данными от подчиненного узла в главном узле данная ситуация является штатной и означает наличие изменений конфигурации, которые еще не были получены в подчиненном узле — источнике сообщения.
Если же чтение сообщения от главного узла производится в подчиненном узле, то данная ситуация является следствием изменения конфигурации в подчиненном узле. Необходимо удостовериться, что обмен производится в правильно настроенной распределенной информационной базе (создание подчиненных узлов производилось при помощи рекомендованных способов) и в процессе работы не производилось изменения конфигурации подчиненной информационной базы (изменение в штатном режиме невозможно). Изменения конфигурации подчиненного узла может быть осуществлено только после отключения информационной базы от распределенной информационной базы — установка значения главного узла в Неопределено . В случае несанкционированного изменения конфигурации в подчиненном узле необходимо восстановить соответствие конфигураций путем полной загрузки конфигурации из главного узла
Сообщение об ошибке | Описание ошибки |
Возможные пути исправления ошибки | |
Узел не является узлом распределенной ИБ | При вызове одного из методов встроенного языка, относящегося к распределенной ИБ, значение переданного параметра — узла плана обмена — не принадлежит плану обмена с установленным признаком «Распределенная информационная база». |
Необходимо убедиться в правильности передаваемого в метод параметра | |
Запись сообщения обмена данными не начата | В метод записи изменения данных передан в качестве параметра объект ЗаписьСообщенияОбмена , у которого не был вызван метод НачатьЗапись или был вызван метод завершения записи ( ПрерватьЗапись , ЗакончитьЗапись ). |
Убедиться, что вызов записи изменений вызывается в рамках процесса записи объекта ЗаписьСообщенияОбмена | |
Чтение сообщения обмена данными не начато | В метод чтения изменения данных передан в качестве параметра объект ЧтениеСообщенияОбмена , у которого не был вызван метод НачатьЧтение или был вызван метод завершения записи ( ПрерватьЧтение , ЗакончитьЧтение ). |
Убедиться, что вызов чтения изменений вызывается в рамках процесса чтения объекта ЧтениеСообщенияОбмена . | |
Номер сообщения распределенной ИБ должен быть больше номера ранее принятого сообщения | Производится попытка чтения старого (возможно, уже принятого) сообщения обмена данными. |
Необходимо произвести синхронизации номера принятого сообщения в текущем узле распределенной ИБ и номера отправленного сообщения в узле — источнике сообщения обмена данными. Этого можно достичь при помощи непосредственного изменения соответствующих реквизитов у узлов плана обмена, по которому осуществляется работа, или выполнить запись необходимого количества сообщений обмена данными в узле — источнике сообщения | |
Начальный образ может быть выгружен только во вновь созданную или пустую ИБ | По указанному месторасположению начального образа уже существует другая информационная база. |
Необходимо убедиться, что при создании начального образа указано место, в котором не существует информационной базы | |
Ошибка формата представления изменений | Структура и порядок следования элементов сообщения обмена данными не соответствуют требуемому. |
При обмене данными в рамках распределенной информационной базы используются штатные механизмы записи/чтения XML. Данная ошибка является следствием искажения сообщения обмена данными. Необходимо повторно получить сообщение от информационной базы — источника сообщения | |
Попытка приема изменений от неизвестной конфигурации | При попытке чтения сообщения обмена данными в рамках распределенной информационной базы обнаружено несоответствие конфигураций источника и приемника сообщения. |
По всей видимости, сообщение обмена было записано для информационной базы, имеющей конфигурацию, отличную от данной. Подобная ситуация может произойти в случае ручной настройки распределенной информационной базы. Если подчиненный узел распределенной информационной базы создавался путем объединения конфигурации информационной базы и конфигурации главного узла, то внутренняя идентификация объектов метаданных не будет соответствовать конфигурации главного узла, что приводит к данной ошибке. Рекомендуется создавать информационные базы подчиненных узлов либо при помощи создания начального образа, либо при помощи полной загрузки конфигурации в информационную базу | |
Искажены изменения конфигурации! | При попытке чтения сообщения обмена данными обнаружены искажения в передаваемых изменениях конфигурации. |
Необходимо получить от источника сообщения новое сообщение обмена данными | |
Конфигурация узла распределенной ИБ не соответствует ожидаемой! | Конфигурация текущей информационной базы была изменена по отношению к конфигурации информационной базы источника сообщения. |
Изменения конфигурации не могут быть получены из подчиненного узла распределенной ИБ | При чтении сообщения обмена, полученного от подчиненного узла, в нем обнаружены изменения конфигурации. |
Подобная ситуация может возникнуть если имеет место искажение сообщения обмена, либо обмен производится в распределенной информационной базе с незавершенным процессом перестроения иерархии узлов. Необходимо убедится, что сообщение обмена получено без искажений и правильно заполнены узлы соответствующего плана обмена в обоих узлах распределенной информационной базы (источнике и приемнике сообщения). | |
Из главного узла распределенной ИБ получены изменения конфигурации. Необходимо выполнить обновление конфигурации базы данных. Обновление может быть выполнено в режиме Конфигуратор |
Из главного узла получены изменения конфигурации. |
Необходимо запустить систему в режиме Конфигуратор , произвести обновление конфигурации базы данных, после чего повторить чтение данного сообщения обмена в режиме 1С:Предприятие для завершения чтения сообщения. | |
Данные не входят в состав плана обмена | При чтении сообщения обмена обнаружены данные, не входящие в состав плана обмена. |
При обмене данными в рамках распределенной информационной базы используются штатные механизмы записи/чтения XML. Данная ошибка является следствием искажения сообщения обмена. Необходимо повторно получить сообщение от информационной базы — источника сообщения |
При чтении сообщения обмена производится автоматическая запись полученных изменений данных в информационную базу. Если в процессе записи данных происходит ошибка, то процесс чтения сообщения прерывается. Для определения в процедурах записи элементов данных (объектов и наборов записей) режима записи после загрузки из сообщения обмена существует свойство Загрузка . Для корректной работы в рамках распределенной информационной базы процедуры записи элементов данных должны быть написаны с учетом произвольного порядка загрузки данных из сообщений обмена (например, не должны выполняться проверки связанной с записываемым элементом данных информации.
Источник
Показывать по
10
20
40
сообщений
Новая тема
Ответить
knigina
Дата регистрации: 12.02.2012
Сообщений: 380
Настраиваю обмен между УТ 10.3.28.1 (клиент-серверный вариант) платформа 8.2.19.83 и БП 3.0.30.12 (базовая) платформа 8.3.4.437.<br>Запускаю УТ на компе, на котором установлена БП.<br>При попытке настройки обмена в УТ через сетевой каталог (папка создана на компе, где установлена БП, папка существует и доступ к ней есть для всех в сети) появляется ошибка «Ошибка подключения: Каталог обмена информацией не существует».<br>Ранее, до обновления БП с 2.0 до 3.0 всё отличненько работало по аналогичной схеме. <br>При попытке настройки той же УТ, но в файловой режиме, всё тоже работает.<br>Фокус в чём? Как решается?
Денис (САМАРА)
Дата регистрации: 09.04.2008
Сообщений: 8351
УТ пытается получить доступ к сетевой папке от имени пользователя, от которого запущена служба сервера 1С Предприятия. Именно этот пользователь должен иметь доступ к сетевой папке. Путь к этой папке должен быть задан как абсолютный (<имя компьютера><имя папки>).
knigina
Дата регистрации: 12.02.2012
Сообщений: 380
Всё именно так, как говорите. Полный доступ к папке есть у всех, и у этого пользователя тоже. И путь задан как Вы указали. И имя папки — не кириллица.<br>Кучу вариантов перепробовано. Нет доступа даже к той папке, доступ к которой у той же самой УТ есть при уже действующем обмене с БП 2.0.<br>Куда ещё можно рыть?
Дина
Дата регистрации: 21.05.2010
Сообщений: 2981
В БП 3.0 настроена в синхронизации сетевая папка?
knigina
Дата регистрации: 12.02.2012
Сообщений: 380
В БП 3.0 пока ничего не настроено. Обмен только настраиваю. Нужен односторонний, из УТ в БП. Начинаю с настройки в УТ. И сразу упираюсь в проблему. А вообще схема настрйки обмена не раз опробована и отработана. Только на файловой УТ.<br>Проблема возникает при попытке произвести настройку с клиент-серверным вариантом УТ. А БП базовая. Соответственно, файловый вариант.
Денис (САМАРА)
Дата регистрации: 09.04.2008
Сообщений: 8351
Покажите скриншот закладки «Вход в систему» из свойств службы сервера 1С и скриншот закладки «Безопасность» из свойств общей папки.
Показывать по
10
20
40
сообщений
Ошибки обмена, выгрузки из 1С: Управление торговлей 10.3 в 1С: Бухгалтерия предприятия 3.0
Описание ошибки:
Обмен перестал работать после обновления платформы до релиза 8.3.6.2421. Ошибка — индикатор проблемы в обмене: Обработка: ТранспортСообщенийОбменаFILE: В каталоге обмена информацией не был обнаружен файл сообщения с данными.
Найденные решения:
Решение проблемы оказалось достаточно тривиальным. Но понимаю сути проблемы мешало недавнее обновление платформы 1С:Предприятие с релиза 8.3.6.2332 на релиз 8.3.6.2421 в сочетании с тем, что в настройке обмена была упразднена настройка обмена через каталог обмена и был оставлен вариант подключения только через «Прямое подключение».
А получилась на самом деле какая ситуация. От нового релиза платформы не было установлено новая подверсия com-соединения. Поэтому при выполнении обмена, т.к. не получалось осуществить выгрузку через прямое подключение к базе, обмен как бы «цеплялся» за «остатки» ранее настроенного обмена через каталог, от настроек которого в общем то ничего не осталось. Точно стало понятно, когда было решено проверить настройку подключения в настройке обмена.
Ошибка: «Ошибка при установке подключения ко второй информационной базе: Не удалось подключится к другой программе: {ОбщийМодуль.ОбщегоНазначения.Модуль(4076)}: Ошибка при вызове метода контекста (Connect)
Результат.Соединение = COMConnector.Connect(СтрокаСоединения);
по причине:
Произошла исключительная ситуация (V83.COMConnector.1): Версия компоненты ‘comcntr’ (8.3.6.2332) отличается от версии корневого модуля ‘core83’ (8.3.6.2421)»
говорила сама за себя.
И вот тут то пришел момент истины — необходимо было обновить com-компоненту именно от новой версии платформы 1С: Предприятие 8.3. Что и было сделано:
Но сразу компонента не захотела работать, при проверке соединения возникала ошибка снова:
В настройке обмена после неудачной попытки проверки появилась кнопка «Исправить ошибки установки внешнего соединения», нажатие по кнопке и согласие с перезагрузкой решило проблему окончательно. Только вот перезагрузку пришлось после нажатия на кнопку «Да» выполнить вручную, т.к. автоматически это не произошло, а казалось должно было по формулировке окна-предупреждения. Но проблема оказалась решена.
Оцените, помогло ли Вам предоставленное описание решения ошибки?
© www.azhur-c.ru 2014-2020. Все права защищены. Использование текстов и изображений с данной страницы без письменного разрешения владельца запрещено. При использовании материалов с данной страницы обязательно указание ссылки на данную страницу.
11-12-2015
Журавлев А.С.
(www.azhur-c.ru)