Бесплатный курс по Мобильной платформе 1C. Модуль 2
Модуль 2. Обмен данными с мобильным приложением через веб-сервисы
Изучив второй модуль, Вы научитесь:
- Создавать и публиковать веб-сервисы
- Сериализовать и десериализовать данные при передаче между клиентом и сервером
- Производить перенос справочников из одной базы в другую
![]()
Порядок обучения
Скачивайте теоретические материалы в PDF и видео-формате. Рекомендуем начинать именно с изучения теории.
Выполняйте практическое задание для закрепления полученных знаний.
Выполните самоконтроль, просмотрев видео-решение преподавателя.
![]()
Теоретические материалы
Итак, приступайте к изучению теоретического материала второго модуля курса.
Данный контент доступен только для зарегистрированных пользователей.
Пожалуйста, войдите на сайт (Войти), если Вы уже зарегистрированы или зарегистрируйтесь на сайте (Зарегистрироваться), чтобы получить доступ.
Регистрация занимает 1 минуту, но открывает доступ к материалам сайта.
Пожалуйста, войдите на сайт (Войти), если Вы уже зарегистрированы или зарегистрируйтесь на сайте (Зарегистрироваться), чтобы получить доступ.
Регистрация занимает 1 минуту, но открывает доступ к материалам сайта.
Вопросы
Если у Вас возникли вопросы, Вы можете просто просмотреть комментарии ниже, наверняка Вы найдете ответ.
Обратите внимание, для навигации по комментариям внизу страницы есть ссылки
Если же Вам необходима поддержка, мы с радостью ответим на Ваши вопросы в рамках Мастер-группы «Полного курса по разработке Мобильных приложений на платформе «1С:Предприятие 8».
![]()
Комментарии / обсуждение (873):
Комментарии закрыты

Соединение = WSСсылки.FancForCalcClient.СоздатьWSПрокси(«F_f_C»,»F_f_C»,»F_f_CSoap»);
Операция = Соединение.ТочкаПодключения.Интерфейс.Операции.Получить(«PS»);
СтруктураДанных = Соединение.ФабрикаXDTO.Создать(Операция.Параметры.Получить(«SD»).Тип);
СтруктураДанных.KolElMass = 2;
СтруктураДанных = Неопределено
НЕ могу понять: в чем причина?
Получаю {ОбщаяФорма.Форма.Форма(14)}: Значение не является значением объектного типа (KolElMass)
СтруктураДанных.KolElMass = 2;
СтруктураДанных = Неопределено
Это у вас в коде прописано или имеете ввиду что структура не стала Значением XDTO?
В отладчике составные кода смотрели? Операция успешно была получена? Тип параметра который вы передаете фабрике — тоже успешно определился?
Структура не стала Значением XDTO. Была строка. Переписал всё кирилицей — заработало. Спасибо.
Попытался воспользоваться сериализатором(хоть так бы успеть, без пакетов хдто), пробую загрузить ПТиУ на сервер — ругается на ТЧ Товары, подумал что это оттого, что в выгрузке нет номенклатуры(ибо только ссылка), добавил выгрузку на сервер номенклатуры — ошибка осталась аналогичной:
{ОбщаяФорма.РабочийСтол.Форма(18)}: Ошибка при вызове метода контекста (LoadFromClient)
Соединение.LoadFromClient(СтрокаНоменклатура);
по причине:
Ошибка вызова операции сервиса: {MPTest_Packet}:WSTest:LoadFromClient()
по причине:
Ошибка SOAP сервера: Неизвестная ошибка. {WebСервис.WSTest.Модуль(24)}: Ошибка при вызове метода контекста (ПрочитатьXML)
по причине:
{WebСервис.WSTest.Модуль(24)}: Ошибка при вызове метода контекста (ПрочитатьXML)
по причине:
по причине:
Ошибка преобразования данных XDTO:
НачалоСвойства: {http://v8.1c.ru/8.1/data/enterprise/current-config}CatalogObject.Номенклатура Форма: Элемент Тип: {http://v8.1c.ru/8.1/data/enterprise/current-config}CatalogObject.Номенклатура
по причине:
Ошибка преобразования данных XDTO:
КонецСвойства: {http://v8.1c.ru/8.1/data/enterprise/current-config}CatalogObject.Номенклатура Форма: Элемент Тип: {http://v8.1c.ru/8.1/data/enterprise/current-config}CatalogObject.Номенклатура
сами функции:
Функция LoadFromClient(InputData)
Объект = Десериализовать(InputData);
Если ТипЗнч(Объект) = Тип(«СправочникОбъект.Номенклатура») Тогда
Объект.Записать();
ИначеЕсли ТипЗнч(Объект) = Тип(«ДокументОбъект.ПоступлениеТоваровУслуг») Тогда
Объект.Комментарий = ТекущаяДата();
Объект.Записать();
КонецЕсли;
КонецФункции
Функция Десериализовать(ОбъектСтрока)
ХМЛ = Новый ЧтениеXML;
ХМЛ.УстановитьСтроку(ОбъектСтрока);
Объект = СериализаторXDTO.ПрочитатьXML(ХМЛ);
ХМЛ.Закрыть();
Возврат Объект;
КонецФункции
где я напортачил?
а вы объект сериализуете? или ссылку?
объекты
что то посчитал это правильным
Сериализую ссылки — вроде пошло дальше, спасибо
такая ошибка может возникнуть, если структура баз не совпадают, когда из XML производится чтение — сразу делается попытка привести прочитанное к структуре базы-приемника, если не хватает какого-либо свойства, или наоборот — есть лишнее, то вываливается ошибка чтения XML.
Я обмен делал сериализуя Объекты — это позволяет после чтения сразу записывать Объект в базу. Недастающие/Лишние теги вырезал банально через СтрЗаменить(). (ну вот сейчас с 5-м блоком разберёмся — и будет всё проще.)
По своей сути — такой подход не сильно отличается от эталонного решения, и тут и там — много ручной работы при добавлении в базу новых объектов.
Не дает прохода ошибка:
{ОбщаяФорма.Форма.Форма(17)}: Ошибка при вызове метода контекста (ПолучитьСреднее)
Ответ = Соединение.ПолучитьСреднее(СтруктураДанных);
по причине:
Ошибка вызова операции сервиса: {ФункцииДляРассчета}:ФункцииДляРассчета:ПолучитьСреднее()
по причине:
Ошибка SOAP сервера: Обязательное возвращаемое значение не задано: ФункцииДляРассчета}:ФункцииДляРассчетаSoapBinding:ПолучитьСреднее()
Перезапуски Apache не помогают…
>>»Обязательное возвращаемое значение не задано»
в функции обработки веб-сервиса не возвращается значение. Либо возвращаемое значение не заполнено.
Если уверены в своем коде, то измените описание веб сервиса, установив атрибут «Возможно пустое значение» у свойства веб-сервиса (и не забудьте обновить ws-ссылку). Хотя уверен что ошибка в коде.
Код очень маленький… Ошибок не замечено.
У функции ПолучитьСреднее проверьте тип возвращаемого значения в свойствах, должно быть decimal
именно decimal (http://www.w3.org/2001/XMLSchema)
:(
перезагрузите ссылку на мобильное приложение. Если не поможет то включайте отладку на сервере, может что отваливается или кэш, или конфа не применена…
Прошлась отладкой на сервере… 1-й раз ошибка. Второй раз получила результат, причина ошибки осталась тайной, но главное она исчезла. :) спасибо всем за помощь.
Что такое Ответ? и куда он передается?
Это должна быть не процедура, а функция
и в конце должно быть
Возврат Ответ;
Мне просто интересно. Это так хитро наши преподаватели выкладывают конфигурации? :)
извините.. я затупил.. мой предыдущий коммент бессмысленен и пуст
Решил немного изменить пример в видео.
Изменил тип параметра «СериализованнаяСтруктураДанных» со String на Structure (http://v8.1c.ru/8.1/data/core), не забыл подключить пакет http://v8.1c.ru/8.1/data/core (Основные типы данных в 1С) в настройках Веб-сервиса.
Структуру в коде получаю с помощью все того-же СериализаторXDTO
В итоге заработало)))
Правильно ли я понимаю, что если структура метаданных на мобильном приложении и персональном компьютере отличаются, то простого обмена без расписывания каждого реквизита не получить?
Смотря что для Вас являетя простым :)
Но стандартная сериализация и планы обмена не будут работать — это да.
Во. Теория модуля 5го дает еще одно средство :)
Опять что-то не то делаю…
{ОбщаяКоманда.ВыполнитьОбмен.МодульКоманды(14)}: Ошибка при вызове метода контекста (СоздатьWSПрокси)
Соединение = WSСсылки.ОбменДанными.СоздатьWSПрокси(«ОбменДанными»,»ОбменДанными»,»ОбменДаннымиSoap»);
по причине:
Сервис не найден. {ОбменДанными}:ОбменДанными
Вы же выше сами сервис переименовали из ОбменДанными в changedata.
Код не хотите поправить? :)
У вас уже как минимум будет
Соединение = WSСсылки.ОбменДанными.СоздатьWSПрокси(“ОбменДанными”,”changedata”,”ОбменДаннымиSoap”);
а если еще и URI поменяли, то первый параметр также перепишет. В общем проверьте все…
Ну, я вернул все так же, как в примере.
На сервере, забыл поменять URI
Зря, привыкали бы к латинице в веб сервисах.
При добавлении web-ссылки в базе “клиент” выскакивает ошибка: Ошибка разбора XML: – [1,1]
Фатальная ошибка:
Extra content at the end of the document
Подскажите, пожалуйста, как исправить.
Вопрос уже был. Ошибку осправить не удалось :( Есть еще какие нибудь варианты?
Если просто заходить по ссылке, все нормально. Теги везде закрыты
А какие варианты вы пробовали? На латиницу перевели все названия?
Да
https://www.dropbox.com/s/shr6erk50m80kki/1.png
а какую веб-ссылку добавляете?
http://127.0.01/day2p/ws/changedata.1cws?wsdl
ну да, все верно, тут много странных ошибок у людей с учебной версией 1с, может это ваш случай? тогда вам надо закрыть все, перегрузить апач и попробовать снова.
Эм.. а Базу «Клиент» запускаете на мобильном устройстве? Про необходимость смены ip на нормальный помните?
(не переводимый местный диалект)
Ссылка, ссылка кривая…
127.0.0.1 должно быть. Вот странно, почему в браузере открылось :(
:))) тоже не заметил
На компе обмен идет а
На эмуляторе Андроида во время выполнения «Выполнить обмен» появилась ошибка «1C предприятие
Ошибка разбора XML: -[1,1]
Фатальная ошибка:
Extra contetnt at the end of the document
Подскажите куда смотреть?
доп инфа:
пространство имен URI в латинице
версия 1с 8.3.4.465
мобильная 8.3.4.21
Смотрите настройки плана обмена на эмуляторе. Возможно узел не завели для эмулятора или с кодом ошиблись.
Это второй модуль, тут нет планов обмена :)
Блин, точно:)
В хроме открывается все? Через браузер на мобильном — видно xml схему?
в хроме Видно следующее
This XML file does not appear to have any style information associated with it. The document tree is shown below.
по адресу http://192.168.0.3/InfoBasePubl/ws/DataTransfer.1cws?wsdl
В IE видно все теги, в Хроме тоже видно, но в первой строке пишет
This XML file does not appear to have any style information associated with it. The document tree is shown below.
А в браузере на мобильном по адресу http://192.168.0.3/InfoBasePubl/ws/DataTransfer.1cws?wsdl
выдает Service not found
:(
была синтаксическая ошибка. Пардон. пропустила букву при указании имени Сервиса :(
Дмитрий Шерстобитов, может в следующий раз в записи сразу веб-сервисы назвать латиницей, у многих бы проблем меньше было при повторении.
Тогда как бы люди научились? :)
Так бы и научились: «люминий!», кто сделал по-другому = наступил на грабли. Пару раз так получил — внимательно посмотрел как надо = научился.
Доброго времени суток возникли вопросы:
1) xdto. Можно ли при помощи пакета хdto описать скажем объект конфигурации. Например справочник «Контрагенты».
Допустим такой структуры:
id — соответствует уникальному идентификатору аля ссылка.ПолучитьУникальныйИдентификатор.
Строковые реквизиты определенной длины код, наименование, БИН/ИИН.
Числовой реквизит «Рейтинг».
ЮрФиз.Лицо — соответсвует ссылке на перечисления по виду контрагентов — юридические лица или физические лица.
Физ.Лицо — ссылка на справочник физических лиц.
При этом чтобы в реквизите по физ.лицу была «вложенная информация» уникальный идентификатор БИН/ИИН код, наименование, дата рождения. и фио.
Что то по аналогии файлов обмена на конвертации — когда например выгружается договор контрагента и еще захватывается владелец договора контрагент.
2) У объектов есть дополнительные свойства (тип структура) — при сериализации объекта эта структура тоже сериализуется?
3) Например из одной базы в другой пришел сериализованный объект при его десериализации он всегда новый или если он раньше приходил то опредилится как уже существующий?
с помощью xdto все это можно сделать. можно описать структуру равнозначную сериализованному xml объекту. В сущности, Xdto это и есть xml структура для конкретного объетка созданная с целью его передачи (это, собственно, я расшифровал аббревиатуру). Но в итоге вы же получите тот же самый xml обмен только потратите кучу сил на описание пакетов.
2) Какие объекты сериализуются описано в справке. Структура есть среди них.
3) Определение был ли маль.. объект есть в самом задании (уникальный идентификатор для того и нужен).
Да собственно ответ на все ваши вопросы был в вэбинаре.
Смотрите решение 2 дня
На планшете появилось предупреждение «Ошибка работы с Интернет.Connection to http://127.0.0.1 refused».
На персональном компьютере все работает. Не пойму в чем проблема…
Так, думаю, что на клиенте те то надо настоящий адрес писать! Все, спасибо!
замените адрес 127.0.0.1 на ip адрес компьютера. Вы пытаетесь с планшета к самому планшету и подключиться
Добрый день. Если написать ip адрес машины в локальной сети (192.168…) — все работает. Но внешний ip — refused.
Учитывая что апач работает, а с другими программами работающими с 80 (тим, скайп) проблем не было, думаю дело не в порте.
Боюсь при переходе на реальное устройство с этим могут быть проблемы.
а на этот внешний IP снаружи пинг есть? Если попробовать зайти на этот сервер (из браузера) — он показывает то-же что и для 127.0.0.1? Если нет — не обеспечен требуемый доступ, или если у вас прокси — «не проброшены порты».
Благодарю, так и есть — нужно было пробросить порт.
Если у кого-то будет такая же проблема, и в наличии роутер TP-LINK:
http://forums.drom.ru/it/t1151949715.html
Добрый день. Споткнулся на публикации. В предыдущих вопросах не нашел ответа.
Добрый день! У меня была такая же ошибка в хроме, связана она видимо с кодировкой, но времени разобраться не было, поэтому открыла все нормально в IE
Спасибо. Понятно, где искать.
Отвечали уже неоднократно. Проблема в кириллице. Замените URI пространства имен на латинское, избавит от многих проблем в дальнейшем.
Имя сервиса, имя операции, URI, имена команд, параметров и т.п. от греха подальше — все лучше писать латиницей.
Спасибо. Понятно, где искать.
Тоже в Chrome выдало такое же сообщение, а в Explorer все отлично!
При запуске обмена на клиенте вот такая ошибка: {ОбщаяКоманда.ВыполнитьОбмен.МодульКоманды(11)}: Ошибка при вызове метода контекста (ВыполнитьОбмен)
Ответ = Десериализовать(Соединение.ВыполнитьОбмен(СтрокаДанных));
по причине:
Ошибка вызова операции сервиса: {ОбменДанными}:ОбменДанными:ВыполнитьОбмен()
по причине:
Ошибка SOAP сервера: Неизвестная ошибка. {WebСервис.ОбменДанными.Модуль(73)}: Поле объекта не обнаружено (Ссылка)
по причине:
{WebСервис.ОбменДанными.Модуль(73)}: Поле объекта не обнаружено (Ссылка)
Не могу понять, что это.
Разобралась сама,была ошибка в коде.
Не могу получить ссылку на WSDL. Что сделал не так? Спасибо.
Вы апач после публикации вручную перезапускали?
Apache/2.4.4 (Win64), инсталляция проходила без ошибок.
Служба перезапускается вручную неоднократно, без проблем.
После публикации на веб-сервере 1С, нажимаю «ДА» на автоматический перезапуск службы. Перезапуск не выдает сообщений. Монитор Apache зеленый.
При ручном перезапуске сервиса Apache появляется ошибка.
«The requested operation has failed!»
служба не активна и не перезапускается.
Повторная инсталляция Apache выдает ошибку.
Удаляю компонент «модули расширения веб-сервера» платформы 1С 8.3.4.465 либо восстанавливаю httpd.conf, тогда Apache стартует.
На что еще можно обратить внимание?
P.S.
Новые строки в файле httpd.conf после публикации на веб-сервере 1С
…
LoadModule _1cws_module «C:/Program Files (x86)/1cv8/8.3.4.465/bin/wsap22.dll»
…
# 1c publication
Alias «/serv» «c:/www/serv/»
AllowOverride All
Options None
Order allow,deny
Allow from all
SetHandler 1c-application
ManagedApplicationDescriptor «c:/www/serv/default.vrd»
…
Спасибо.
Развернул VW Windows XP, Apache 2.2.
Описанная ранее ситуация не изменилась.
Нужна помощь. Не могу идти дальше :(
Коллеги, кто подскажет, чтот я подтупил. У меня попытка запуска мобильного приложения на Ведроиде материться при загрузке. Ему схема не нравится и ругается на :
На что ругается не присоединилось, попробуйте латиницей все связанное с веб-сервисами переименовать
Пишет, что Пространство «ОбменДанными» не есть корректно
переименовывайте в латиницу, такое бывает с кириллицей, начните с URI
Таки ДА. Изменил все на Инглиш и заработало.
При этом. Обычным клиентом, браузерами открывается и все механизмы работают
а браузер это не среда андроида! Для разработки под мобильную платформу правило №1 — никакой кириллицы! Если будете не публиковать базы а собирать пакеты (*.apk) то там и имя конфигурации и синоним её и ещё много чего строго без кириллицы!
Задание сделал, разделив функции Получения и передачи объектов.
В мобильном клиенте сформировал список разрешенных реквизитов по которым и происходит обмен.
Обмен делал через сериализацию и десериализацию, без формирования пакетов XDTO.
Наглядно и поучительно спасибо авторам курса.
Если не работает точка остановке при вызове веб-сервиса (всё сделал как в инструкции опубликовал адрес сервере отладки и автоматически подключаться к веб-сервисам, перезагрузил apache). Что ещё попробовать?
Проверьте ещё раз адрес 127.0.0.1
Туда могли запятыет вместо точек затесаться
Вот это у меня в файле публикации, порт у меня 3030
debug enable=»true»
url=»http://127.0.0.1:3030″
При этом все процедуры выполняются, но остановка не срабатывает, или просто происходит ошибка?
Все работает
Попробуйте перезапустить апач, говорят, что он иногда в этом плане подглюкивает.
Если не поможет — попробуйте перезагрузить ПК.
А «Все работает» не значит что «Все получилось, спасибо»? О_о
Возможно — значит :)
Но в момент написания комментария — я мог воспринять это как ответ на вопрос — все ли процедуры выполняются.
Ошибка SOAP сервера: Обязательное возвращаемое значение не задано: ФункцииДляРасчета}:ФункцииДляРасчетаSoapBinding:ПолучитьСреднее()
Доходит до оператора
Ответ=Соединение.ПолучитьСреднее(СтруктураДанных);
Все проверила, так и не пойму, где засада
Откройте модуль веб-сервиса и посмотрите что возвращает процедура обработчик ПолучитьСреднее.
Так я туда и не попадаю («галку» разрешить отладку и 127.0.0.1 на закладке Прочее поставила)
отладчик иногда загибается, нужно перезапустить апач чтобы он опять заработал. Но в этом первом задании код достаточно простой чтобы в большинстве случаев увидеть все без отладки.
Стоит условие обязательного возврата значений, а возврата то и нет, значит ничего ваш веб сервис не возвращает, или возвращает пустую строку/неопределено и т.д.
На счет точки останова — перезагрузите апач , просто на нем нажмите внизу и нажмите рестарт. Такой глюк — частое явление.
Спасибо, все получилось, хотя вроде все это же делала (что-то из серии «черт-черт, поиграй, да отдай»)
При просмотре Модуля 2 на момент добавления СериализованнаяСтруктураДанных при обновлении WSСсылки ошибка
Ошибка при выполнении файловой операции ‘http://127.0.0.1/serv/ws/ФункцииДляРасчета.1cws?wsdl’
по причине:
Ошибка работы с Интернет: внутренняя ошибка сервера (500).
soap:Client
Операция не найдена: {ФункцииДляРасчета}:ФункцииДляРасчета:ПолучитьСреднее()
по причине:
Ошибка работы с Интернет: внутренняя ошибка сервера (500)
Если убрать СериализованнаяСтруктураДанных то файл http://127.0.0.1/serv/ws/ФункцииДляРасcчета.1cws?wsdl просматривается.
В чем может быть ошибка?
А в функции параметр добавили?
Сейчас добавил. Теперь выдает ошибку
Ошибка при выполнении файловой операции ‘http://127.0.0.1/serv/ws/ФункцииДляРасcчета.1cws?wsdl’
по причине:
Ошибка работы с Интернет: внутренняя ошибка сервера (500).
A server error occurred.
Сервис не найден.
An error occurred processing this request.
по причине:
Ошибка работы с Интернет: внутренняя ошибка сервера (500)
Все спасибо была ошибка в строке
http://127.0.0.1/serv/ws/ФункцииДляРассчета.1cws?wsdl
На сервере через ФункцииДляРасчета
На клиенте ФункцииДляРассчета
А еще существует проблема со статической wsСсылкой, работа выходить тока через динамическое добавление
Вы бы хоть упомянули что за проблема :)
http://virtualmso1c.cloudapp.net/BuhDemo/ws/BuhWS/?wsdl — Вот WSDL. Когда добавляю его как статическую WSСсылку выходит такая ошибка. Но веб-сервис отрабатывает если добавить адрес динамический.
Читайте форум, уже рассказывали
Это баг платформы.
Веб-сервисы написаны и зпущены на 8.3 поледней версии, а клиентская сторона на 8.2. Если клиентскую часть поменять на 8.3 этот баг исчезнит?
После публикации на сервере, у меня почему то создается только один файл default.vrd, и при заходе на ip, запускается web приложение 1с. Что я сделал не так?
меню «Конфигурация — Мобильное Приложение — Публиковать»
и меню «Администрирование — Публикация на веб-сервере» это разные вещи. Нужно и то и другое, и пути у них разные лучше сделать.
Но я это меню “Конфигурация – Мобильное Приложение – Публиковать” и не делал. И в решении преподавателя этого не делается.
на сколько я помню, не проговорено устно, но отчетливо видно на экране.
Все получилось, но, почему в каталоге публикации, я не вижу не подкаталога ws, ни файла ОбменДанными.1cws?
Их там и не будет, пути к ним прописаны в default.vrd — откройте, увидите
веб сервис работает?
Файла и каталога там быть и не должно, как я помню.
На стороне сервера выполняете публикацию базы с веб сервисами: Администрирование – Публикация на веб-сервере — это нужно для того, что бы опубликовался веб сервис обмена, и ка краз в этом случае при переходе по адресу базы в браузере будет открываться сама база 1С.
На стороне клиента выполняете публикацию Мобильного приложения: Конфигурация – Мобильное Приложение – Публиковать. Это нужно для того, что бы из этой публикации можно было загрузить приложение в платформу разработчика на мобильном устройстве.
Чего-то расписать решил ))
1)А будет в дальнейшем показана работа на веб-сервере IIS
2)Ко мне тки не пришел токен к 3 модулю.
Если вы не получили никаких писем с токеном доступа (он один на весь тренинг), то обратитесь на саппорт
На IIS работает также, а настройки веб серверов в курс не входит. В интернете полно описаний. В 32битной версии как я понял проблем никаких, с 64битной частно бывают сложности в настройке, но после их решения тоже все четко работает
1. Нет, так как это специфика работы с 1С, в контексте мобильной платформы — без разницы на чем сервер крутится. Так что ищите на профильных форумах. А то если начнем еще и про ИИС, то никогда не закончим этот курс :)
2. Напишите в саппорт
На счёт «никогда не закончим» — возможно оно того стоит… Добавить рассмотрение IIS, потом ещё установку/настройку/компиляцию/публикацию готового apk-файла с конфигурацией, растянуть курс на полгода и в последующем — предлагать его пал соответствующей стоимости.
А вообще — замечательный курс, отличный материал, лично для меня — много новой информации. Большое спасибо! (я ещё не прощались:)
ок, подумаем.
Если делаем обмен без привязке к структуре конфигурации, то обмен через сериализацию, то есть ли разница какой выбрать способ сериализации (передаем ХранилищеЗначений) ? . К примеру
1.) СериализаторXDTO
2.) функция XMLСтрока,XMLЗначение
3.) ЗначениеВСтрокуВнутр, ЗначениеИзСтрокиВнутр
4.) Можно создать свою сериализацию..
Наверное ещё есть способы сериализации
1. Это мы разобрали
2. На сколько я помню — далеко не все можно таким образом сериализовать
3. 1С рекомендует это использовать только в связке с 7.7, т.е не использовать в 8.х. Там вроде так в справке и написано. + тут выходит вроде аналог json, а с ним в 1С работать совсем не удобно, хотя он и меньше весит.
4. Можно, а смысл?
Вариантов огромное количество, стоит всегда только один вопрос — что быстрее, универсальней и «удобочитаемей»:)
>>4. Можно, а смысл?
Если мы не делаем промежуточную базу обмена, с конфигурацией идентичной мобильными приложением, то придётся всегда придумывать свою сериализацию, то ли через пакеты XTDO, то ли свой стандарт как к примеру делали во 2-ом дне.
5 модуль ответит на ваш вопрос.
Доброе утро!
В решении синхронизация выполняется по уникальному идентификатору, сам делал также. Вопрос в том, насколько это безопасно? Ведь базы разные, и есть вероятность (пусть и маленькая), что УИДы совпадут. Например, в центральной базе создали номенклатуру «Товар 1» с определенными значениями реквизитов. В клиентской базе создали «Товар 2» с абсолютно другими значениями реквизитов. Получается при обмене кто первый принимает данные (клиент или центральная база), тот и затрёт свой элемент. К примеру, сначала изменения принимает центральная база, тогда «Товар 1» затрётся входящим «Товар 2» и значения реквизитов будут изменены. Возможно ли как-то обработать такую ситуацию?
обычно на этот вопрос отвечают «вероятность есть, но она мала, и ей можно пренебречь»
Ну у меня на практике в 30 распределенных базах за два года работы в несколько миллионов документов — был только один раз такой глюк, что ИД документов совпал. И то, 100% доказать не смог это.
Посмотрите как сделаны стандартные обмены между типовыми конфигурациями (подсистема обмена из БСП) — что-то подобное можно реализовать и в связке с мобильной платформой. Но просто не будет — это точно :)
В типовых во-первых определяют приоритет данных по умолчанию, во-вторых при возникновении коллизии в отдельный регистр записываются обе версии объекта — и старая, и новая. Далее в базе применяется и записывается версия в соответствии с приоритетом по умолчанию. Но также предусмотрен механизм, позволяющий пользователю изменить решение системы, и принять другую версию объекта.
Такое если и случится, то один раз за жизнь базы, а написать для корректной обработки такой ситуации придется ой как много.
А почему бы и нет!? Вдруг соорудят БСП для мобильных приложений? Вполне вполне. Во «взрослой» БСП механизмы разрешения конфликтов уже есть. А вдруг? )
А смысл? Если понять суть данного курса, то это реально сделать в течении нескольких часов. И даже с откатом на ранние версии и т.д.
Я на проектах так и делаю. Тогда если возникает ситуация, когда изменили документ и на телефоне и в ЦБ, то я могу две версии сравнить и даже объединить, например, если в телефоне поменяли таблицу товаров, а менеджер в ЦБ поменял договор.
А я разве против? :) Я только за!
Хочу Библиотеку мобильных подсистем! ))
А что, звучать будет грозно: «…при реализации подобного механизма, использовал БМП…»=)
Поддержу, в решении которое применяется на моей работе есть регистр сведений с одним из измерений типа «строка». В измерение пишется сгенерированный УИД. На тек момент в регистре более 25000 уникальных стро к- уид-ов.
а что дает их хранение?
коллеги , добрый день !
подскажите, тема новая для меня и тяжела сразу для понимания .
с ДЗ справился только в части номенклатуры , и то частично .
с документами не смог разобраться , буду смотреть пример от преподавателя.
можно ли было использовать такой метод для создания номенклатуры получаемой с сервера ?
ТЗ=Десериализировать(Ответ);
Если ЗначениеЗаполнено(ТЗ) Тогда
Для Каждого Стр из ТЗ Цикл
Если Стр.ЭтоГруппа Тогда
Если Справочники.Номенклатура.ПолучитьСсылку(Стр.Ссылка.УникальныйИдентификатор()).ПолучитьОбъект() = Неопределено Тогда
НовыйОбъект = Справочники[«Номенклатура»].СоздатьГруппу();
НовыйОбъект.Наименование = Стр.Наименование;
НовыйОбъект.Код =Стр.Код ;
НовыйОбъект.УстановитьСсылкуНового(Стр.Ссылка);
НовыйОбъект.Записать();
КонецЕсли;
ИначеЕсли не Стр.ЭтоГруппа Тогда
Если Справочники.Номенклатура.ПолучитьСсылку(Стр.Ссылка.УникальныйИдентификатор()).ПолучитьОбъект() = Неопределено Тогда
НовыйОбъект = Справочники[«Номенклатура»].СоздатьЭлемент();
НовыйОбъект.Наименование = Стр.Наименование;
НовыйОбъект.Код = Стр.Код ;
буду признателен , если дадите комментарии .
в итоге все равно сделаю , как по курсу идет.
все логично, кроме того что происходит только запись новых. А обновление существующих игнорируется.
L0z4
с обновлением сущесвующих не знал как определить, изменился ли объект или нет
Ну самый простой вариант — безусловно перезаписывать поступающие данные. О контроле изменений — в модуле 3.
как я понимаю на данном этапе этому просто не стоит придавать значение. Просто переписывать реквизиты существующих объектов и все.
L0z4
Игорь Сапрыгин
смотрел с прогнозом на будущее , если кол — во объектов номенклатуры будет очень много, не зависнет ли 1с при безусловной записи ?
может, но к счастью, в будущем этим методом пользоваться не придется (это эдакий спойлер к модулю 3)
Добрый день.
Просто представьте, что будет, когда Вы доберетесь до документов, у которых нет свойства ЭтоГруппа?
И ещё: для документов Вы делаете проверку — есть такой элемент в справочнике или нет, а для групп?
Денис Глазырин
=====
Если Стр.ЭтоГруппа Тогда
Если Справочники.Номенклатура.ПолучитьСсылку(Стр.Ссылка.УникальныйИдентификатор()).ПолучитьОбъект() = Неопределено Тогда
тестировал на обмене сервер — клиент
у группы свой «УИ», если не нашли, то создаем группу.
Справочники.Номенклатура.ПолучитьСсылку(Стр.Ссылка.УникальныйИдентификатор()).ПолучитьОбъект()
А почему не просто Стр.Ссылка.ПолучитьОбъект() ?
И разное обращение к справочнику Справочники.Номенклатура и Справочники[«Номенклатура»] — экспериментируете?
Вложенность условий поменял бы местами. Код стал бы проще.
Отличий в создании группы или элемента не так много что бы дублировать весь код.
Вот Ваш же пример, но в другом виде
Если Стр.ЭтоГруппа Тогда
НовыйОбъект = Справочники.Номенклатура.СоздатьГруппу();
Иначе
НовыйОбъект = Справочники.Номенклатура.СоздатьЭлемент();
КонецЕсли;
НовыйОбъект.Наименование = Стр.Наименование;
НовыйОбъект.Код =Стр.Код ;
НовыйОбъект.УстановитьСсылкуНового(Стр.Ссылка);
НовыйОбъект.Записать();
КонецЕсли
Плюс не заполняете родителя — все элементы и группы будут в корне.
Игорь Сапрыгин
============
1.
Справочники.Номенклатура.ПолучитьСсылку(Стр.Ссылка.УникальныйИдентификатор()).ПолучитьОбъект()
А почему не просто Стр.Ссылка.ПолучитьОбъект() ?
методом ПолучитьОбъект() пользовался ранее только по существующим объектам в ИБ, не знал как правильно описать , предположил, что нужно сначала получить ссылку по УИ, а потом получить объект
2. Родителя для элемента заполнял ,а вот для группы нет
забыл .
3.И разное обращение к справочнику Справочники.Номенклатура и Справочники[«Номенклатура»] – экспериментируете?
синтаксис читал, решил попробовать.
ранее не пользовался обращением к объекту через скобки
спасибо за помощь
Все получилось, но вот только закончила. На чтение методички с пониманием и прощелкиванием уходит часа 3. Плюс час вебинар. Моменты, которые не дублируются в методичке приходится останавливать и пересматривать — в прямом эфире не восприняла бы, хорошо что вебинары в записи, особенного с учетом того что живу не по московскому времени. К ночи мозг уже работает ели-ели. Задание делала 4 часа чистого времени за два подхода.
Обмен номенклатурой сделала сама полностью, что сериализуете соответствие, а документ в структуре — подсмотрела, ради экономии времени.
Тренинг — супер, но очень плотно приходится заниматься. Надеюсь осилить весь.
Отлично!
всем, привет. Appach работает, публикацию сделал, но сервис не доступен пишет. где может быть ошибка?
Самое простое — попробуйте перезапустить апач.
Дополнительно посмотрите что у Вас в файле default.vrd в каталоге публикации, гляньте все ли там хорошо.
все также, перезапустил апач, проверил файлик default.vrd
в нем:
где «C:\MobilePl\BaseServer» путь к моей базе «сервера»
но в строке браузера когда набираю
http://127.0.0.1/BaseServ/ws/%D0%A4%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B8%D0%94%D0%BB%D1%8F%D0%A0%D0%B0%D1%81%D1%87%D0%B5%D1%82%D0%B0.1cws?wsdl
также пишет Сервис не найден. … в чем может быть причина?
сам файлик, почему то не скопировалось сюда содержимое
заархивируйте его и прикрепите
добрый день!
Проблема аналогичная.
смущает содержание файла default.vrd :
прикрепил, надеюсь архив прикрепится к сообщению.
Misha, у вас ошибка в слове Рассчета. В 1С две буквы «с», а в браузере вы пишете одну.
Игорь, спасибо большое, помогли!! пол дня убил :) научите быть таким же внимательным! :)
Годы усердных тренировок в преодолении таких же «мегаграблей» )))
Решение детально рассмотрел, воспроизвел, если, конечно, не учитывать многих тонкостей, которые в реальной жизни встречаются и пренебречь этим — сделать можно (но если учитывать, за один день не справится, при чем тема абсолютно новая и сложная — три дня разбирался до костей мусолил)… но в задании это не сказано: что универсальных вещей делать не надо, сериализовать в одну строку списки объектов сразу догадался, т.к. была подсказка в теории, и на практике до этого делал (эксперименты проводил с ТЗ и переносом таким образом из одной базы в другую), затруднения были в определении нового объекта — подсмотрел в решении… фу… взмок весь :) урок интересный очень! жаль мало времени на проработку всех тонкостей дают…
семь дней мало :-\ остальные бы успеть…
Ну у вас же материалы потом никто не отбирает :)
Подход не универсальный, можно было вытащить структуру реквизитов с сервера, потом на клиенте по этой структуре занести значения какие совпали и перенести обратно на сервер все справочники/документы? или это плохо?
Тут скорее рассказывают о принципах работы с Мобильным приложением, чем выполняют поиск оптимального решения для всех типов задач. Можно конечно оптимизировать код и разрабатывать универсальные решения, но это уже наверное за рамками курса.
У веб-сервиса мы описываем процедуру, для процедуры потом описываем параметр, а у параметра есть три свойства:
«Входной»
«Выходной»
«Входной-Выходной»
как используют «Выходной» и «Входной-Выходной»?
Почему на клиентской базе в процедуре ВыполнитьОбменДанными() передают второй параметр ПолучившуюсяСериализованнуюСтроку в Соединение.ФабрикаXDTO.Создать, а не в Ответ = Соединение.ВыполнитьОбмен(ПолучившаясяСериализованнаяСтрока)?
т.е. пишут вот так:
СтрокаДанных = Соединение.ФабрикаXDTO.Создать(Операция.Параметры.Получить(«Данные»).Тип, СформироватьДанныеДляСервера());
Ответ = Соединение.ВыполнитьОбмен(СтрокаДанных);
а скажем, не так:
СтрокаДанных??? = Соединение.ФабрикаXDTO.Создать(Операция.Параметры.Получить(«Данные»).Тип);
Ответ = Соединение.ВыполнитьОбмен(СформироватьДанныеДляСервера());
в принципе, получается тоже самое, на сервер уходит XML…
и при таком раскладе:
СтрокаДанных = Соединение.ФабрикаXDTO.Создать(Операция.Параметры.Получить(«Данные»).Тип);
возвращается Неопределено, вместо типа XDTO — почему? потому что в XDTO не создали такой «тип»?
Смотрите видео, там есть про это
оба параметра обязательные
Описание варианта метода:
Создаёт значение XDTO, указанного типа.
в теории возвращает XDTO (второй параметр не указан), в решении ДЗ, если второй параметр убрать — возвращает неопределено — ошибка платформы, что ли… должно вернуть строку, хотя б пустую… про неопределено в справке ничего не написано
он же возвращает не строку, а типизированное значение на заполненное на основании введенных данных. Он не должен преобразовывать «неопределено» в пустую строку. А вот почему исключение не вызывается действительно вопрос к разработчику.
ну да, типизированный :) про пустую строку я загнул :)
При добавлении web-ссылки в базе «клиент» выскакивает ошибка: Ошибка разбора XML: — [1,1]
Фатальная ошибка:
Extra content at the end of the document
Подскажите, пожалуйста, как исправить.
Если это происходит при экспериментах со скаченной базой из материалов 3-го дня, то попробуйте создать новую базу и перенести в неё конфигурацию. (пользователи smetа и PaNaCeA сообщали, что им помогло.)
Нет, это на моей базе происходит, которую по видео делаю.
Судя по содержанию ошибки — у Вас xml-файл «потерял» закрывающие теги в конце документа.
Попробуйте посмотреть содержимое файла перед началом процедуры чтения, обратив внимание — как этот файл заканчивается.
Значит есть пользователи в базе. Есть такой глюк в 1С. Или удалите пользователей, или используйте динамическую ссылку.
Такая же ошибка.Пользователей на сервере удалить? А если база рабочая, и в ней работают сотню человек (как у меня)? удалить пользователей точно не получится. Заметил что это ошибка появляется когда идет передача именно XML Данных, т.е. если передавать просто строку без тэгов то все работает нормально. НО, можно передавать и с тегами, но в процедуре на сервере не должно быть обращения к метаданным сервера а только работа над простыми типами (сложение, вычитание и т.д.). Платформы мобильного клиента перепробовал штук 5 точно. разницы ни какой. попробовал на планшете. (леново) на смартах самсунги s2 и ace. тоже самое. пока что в процессе решения проблемы.
Еще одна шибка появилась
«Неизвестная ошибка. Достигнуто ограничение учебной версии Достигнуто предельное количество подключений к ИБ по причине: Достигнуто ограничение учебной версии Достигнуто предельное количество подключений к ИБ»
Я всего пару часов работаю, запускала только со своего телефона и с виртуального андроила
Обидно(
невозможно продолжать занятия
Чего-то где-то не так. Попробуйте перезагрузить компьютер, что бы все сеансы гарантированно сбросились.
помогло, спс
Это ошибка часто возникает
Работаю с полнофункциональной платформой, поэтому ограничений таких не встречается.
Учебная она такая… учебная =))
Вроде бы достаточно перезапускать апач (он сессии на себе подвешивает, а у учебки их количество ограничено).
Дмитрий об этом говорит в видео (примерно 40:20), он рекомендует перезапустить сначала Апач.
перезапуск апача не помогает, помогает перезагрузка компьютера.
Это проблема с учебной версией.
Или снесите учебную поставьте нормальную, если есть возможность. Или перезагружайте апач. Если не помогает, то весь комп. Такой глюк есть.
Добрый день.
Подскажите, плиз,
при выполнении примера на странице 22 «использование ws-ссылки»
у меня возникает ошибка
«{ОбщаяФорма.Форма.Форма(15)}: Ошибка при вызове метода контекста (avr)
Ответ = Соединение.avr(СтруктураДанных);
по причине:
Ошибка вызова операции сервиса: {forAvr}:forAvr:avr()
по причине:
Ошибка разбора SOAP сообщения: неверная версия сообщения. »
Вначале были все методы на кирилице и была такая же ошибка,
переименовала все — не помогло.
Из-за чего такое может быть?
В соседней ветке Дмитрий рекомендовал в первую очередь проверить как прописаны параметры в функции веб-сервиса.
Кроме того, он рекомендовал, при наличии реальной 1С — удалить учебную.
Прописано все на латинице, всего один параметр, перепроверила несколько раз
Реальная 1С не установлена, стоит только тестовая.
я Вам процитирую сообщение Dmitri, у которого была схожая проблема:
«…
Выяснилось, что у меня непонятная проблема с апачем.
В конфигурациооном файле httpd.conf есть строка
LoadModule _1cws_module “D:/1c_83/8_3_Install/8.3.4.465/bin/wsap22t.dll”
после каждой публикации сервиса на вебсервере эта строка
меняет текущий путь к базе 1с на старый
LoadModule _1cws_module “D:/1c_83/8_3_Учебная/8.3.4.465/bin/wsap22t.dll”
В результате сервис перестает работать и апач не стартует. Приходится руками менять файл после каждой публикации, чтобы увидеть результат работы сервиса.
…»
может чем-то поможет.
(но видимо дело в том, что база учебная.)
проверила конфигурационный файл апача
httpd.conf
в нем корректно указан путь к библиотеки 1С.
короче, я снесла эту учебную версию, в ней невозможно работать, каждые 5 минут ошибка «превышено количество подключений»
и еще этот баг «Ошибка разбора SOAP сообщения» (проверила на реальной 1С 100% все работает)
и динамические ссылки тоже не создаются в учебной версии
Сложный вопрос.
А что у вас на веб сервисе?
Если вы взяли базу учебную, то там два параметра, а мы тут указали только один. Добавьте еще один параметр, или у второго поставьте, что он может быть пустым.
А у меня при загрузке на реальное мобильное устройство вылезла ошибка разбора xml «Недопустимое URI ОбменДанными». Пришлось менять имя Web-сервиса на DataChange и в коде на клиенте при установке соединения, соответственно. Название операций оставила по-русски.
Также была описанная выше ошибка работы с Internet при выполнении обмена «connection to http://127.0.0.1 refused» …
Вобщем, всё заработало :)
При создании ws-ссылки в базе «клиент» возникает ошибка «Ошибка доступа к файлу ‘http://127.0.0.1/day2p/ws/day2p.1cws?wsdl’
по причине:
Ошибка работы с Интернет: Server returned nothing (no headers, no data)»
В браузере ссылка http://127.0.0.1/day2p/ws/day2p.1cws не открывается — «не удается отобразить страницу».
При публикации базы «сервер» ошибок не было, апач перезапускала — не помогло. С чем может быть связана эта ошибка?
Попробуйте Публикацию ещё раз (или два) выполнить, у Вас файл не опубликовался. (после этого — Апач перезапустите вручную.)
Конфигуратор под Администратором был при этом запущен?
Запускала под администратором, публикацию выполняла много раз, апач перезапускала, не помогло
Выложите пожалуйста скриншот с основными настройками Публикации.
Нашла ошибку — в ип-адресе для отладки пропустила одну точку)))))) Исправила и все заработало
В браузере ссылка http://127.0.0.1/day2p/ws/day2p.1cws
day2p.1cws — это у вас адрес веб сервиса такой же как и у базы данных?
Добрый день с чем может быть связана ошибка.
{ОбщаяФорма.Форма.Форма(22)}: Ошибка при вызове метода контекста (ПолучитьСреднее)
Ответ = Соединение.ПолучитьСреднее(СтруктураДанных);
по причине:
Ошибка вызова операции сервиса: {ФункцияДляРсчета}:ФункцияДляРассчета:ПолучитьСреднее()
по причине:
Ошибка SOAP сервера: Неизвестная ошибка. Ошибка проверки данных XDTO:
Значение: ‘4.5’ не соответствует простому типу: {http://www.w3.org/2001/XMLSchema}positiveInteger
Несоответствие фасету FractionDigits = ‘0’
по причине:
Ошибка проверки данных XDTO:
Значение: ‘4.5’ не соответствует простому типу: {http://www.w3.org/2001/XMLSchema}positiveInteger
Несоответствие фасету FractionDigits = ‘0’
Если на сервере возвратить целое, то работает без ошибок.
В чём ошибка?
«Значение: ’4.5′ не соответствует простому типу: {http://www.w3.org/2001/XMLSchema}positiveInteger»
данный тип данных не позволяет использовать дробные числа, в материалах курса была табличка с описанием.
Страница 12-я материалов за второй день.
Разобрался.
Тип возвращаемого значения для сервиса на сервере был positiveInteger.
После изменения типа на сервере, придётся заново создавать ссылку, так как статическая ссылка, данные не обновляет.
Вот это взрыв мозга! :)
Нигде в сети не встречал более толковой информации по веб-сервисам. Теперь не возникает вопросов, что это за XDTO или WS-ссылка, или как делать сложные обмены с помощью веб-сервисов.
Честно говоря, на апач забил. т.к. 80 порт занят «каким-то» kernel процессом — поэтому всё делаю на IIS. На мой взгляд с ним работать всяко проще.
Вобщем, наконец-то появилось понимание что это такое и как оно работает. Но было жёстко, до сих пор мозг ахреневает)))
у Вас IIS до установки Апача уже был?
Если так, возможно он и занимает 80-й порт?
и правда…был…
А я как-то об этом даже не подумал)))
В сети есть информация, что при наличии ISS служба Apache2.2 не стартует.
Как я понял сериализовать можно разными способами, например так:
ОбХДТО = СериализаторXDTO.ЗаписатьXDTO(Данные);
МойХМЛ = Новый ЗаписьXML;
МойХМЛ.УстановитьСтроку();
ФабрикаXDTO.ЗаписатьXML(МойХМЛ, ОбХДТО);
Или так:
МойХМЛ = Новый ЗаписьXML;
МойХМЛ.УстановитьСтроку();
СериализаторXDTO.ЗаписатьXML(МойХМЛ, Данные);
Есть ли в этих способах различие и каким предпочтительнее пользоваться?
СериализаторXDTO.ЗаписатьXML согласно СП: «Записывает значения в формате XML без указания имени элемента. В качестве имени элемента будет использован тип значения. » т.е. если есть 2 разных элемента одного типа то это вызовет проблему, да и с обратным разворотом и получением оригинального имени тоже проблема.
Добрый день. Вопрос по вебинару второго тренинга. Создал WS XDTO, опубликовал как полагается. Начинаю прописывать в браузерной строке 127.0.0.1/serv/ws/ФункцииДляРасчета.1cws вылетает ошибка 404 не найдено. Пробовал и по латинице написать /FunctionForCalculation.1cws. Что может быть? Но вот 127.0.0.1/fm работает
Вы после публикации Апач вручную пробовали перезапустить?
Да пробовал. Ничего не получается.. Уже и другой каталог создавал
В папке serv (или какая там новая?) появился файл default.vrd после публикации?
Приложите пожалуйста скриншоты а) окошка с настройкой публикации; б) адресной строки в браузере — где пытаетесь посмотреть результат публикации; и на всякий случай ещё — скриншот конфигурации с развёрнутой веткой web-сервисов.
Здравствуйте, у меня такая же проблема была.
там просто ошибка в методичке на странице 20.
Адрес на рисунке один а ссылка ниже для перехода в браузер другая.
вот так попробуйте 127.0.0.1/serv/ws/СтруктураДляПолученияСреднего.1cws
это если по методичке делали
Вы адрес этот прописываете в браузере компьютера на котором запущен веб сервер? ip адрес корректный?
Иногда все бывает столь очевидно. Проблема была в том, что при написании в браузерной строке я по своей невнимательности неучел регистр букв и в Serv при опубликации написал с большой буквы соответственно, при подключении 127.0.0.1/serv/… у меня ничего не сработало. Благодарю за помощь.
Да… Очевидных граблей здесь насобирали несчетное количество =)
Здравствуйте, пришлите, пожалуйста ссылки на модуль3. Я сначала подумала — выходной, но по плану-графику есть занятия. Может Вебинар был, а я пропустила? Ничего в новостях не вижу. Спасибо заранее.
Вебинара не было, до среды пока всё обещали выкладывать в записи.
Ссылка на страницу с материалами: http://курсы-по-1с.рф/%D0%BC%D0%BE%D0%B1%D0%B8%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F-%D0%BF%D0%BB%D0%B0%D1%82%D1%84%D0%BE%D1%80%D0%BC%D0%B0/%D1%84%D0%BB%D0%B5%D1%88%D0%BC%D0%BE%D0%B1/%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8C-3-%D1%87%D0%B0%D1%81%D1%82%D1%8C-1/
Добрый день.
Создал веб-сервис, опубликовал, захожу через браузер по адресу:
http://127.0.0.1/Obmen2/ws/ws1Obmen.1cws?wsdl
Выдает такую ошибку:
soap:ClientОперация не найдена: {wsObmen}:wsObmen:opRunObmen()
В чем может быть причина?
Для операции в модуле web-сервиса создана процедура?
Точно. Когда переименовывал все на английские названия, удалил процедуру из модуля. Сейчас добавил, все заработало. Спасибо.
хорошо что получилось :)
Пожалуйста.
Служба не запускается
Windows 32 или 64? Реальная или в виртуальной среде?
По симптомам — всё-таки похоже на занятый 80-й порт. Проверьте его пожалуйста ещё раз.
Среда реальная, windows 64, порт перепроверил — не занят.
а Internet Information Services у Вас случаем не работает? из-за этого бывает Апач тоже не стартует (не могут они параллельно работать).
Может у Вас антивирус так хорошо работает? Есть что-то подобное в системе?
наберите для верности в командной строке «net stop iisadmin» (без кавычек), была такая же проблема — iis работал а netstat показывал что порт не занят
прям точно так, как показывал автор курсов проверили? А что в «Журнале системных сообщений»?
При публикации на сервере вылетает ошибка. Апач переустанавливал, перезапускал и Апач, и компьютер.
необходим запуск 1С с административными правами, как в видео
Запустил под админом. Опубликовал. Открываю в браузере вылезает ошибка. Апач вообще не запускается.
в каталоге logs (там где установлен апач) в логах можно найти более подробную информацию о том почему апач не смог стартовать с новым конфигом.
Смотреть в файле error, если да то на что обратить внимание?
да, error. В строке после даты, в скобках указан тип сообщения. notice не интересны. error и т.п. нужно смотреть
«…
Пуск — все программы — Apache HTTP Server — Configure Apache Server — Test Configuration… появится чёрное окно, в котором он напишет, что именно ему не нравится в конфиге. Если это окно только мелькнёт и сразу исчезнет, значит в конфиге он проблем не видит. Тогда в error.log должна быть какая-то запись.
…»
На компьютере, при просмотре в браузере адреса 127.0.0.1 сообщение появляется?
Its works не появляется.
Проверяли 80-й порт, может о занят какой нибудь программой?
попробуй поменять порт, как ниже писали, установить не 80, а другой — возможно какая-то другая программа заняла этот порт и не дает запустить. Через командную строку можешь посмотреть какая программа его заняла — в лекции это рассматривается.
Мышку навожу на иконку Апач, пишет: running none of 1 apache services
На иконке Апача нажмите правой кнопкой мыши и выберите второй пункт — «Open Services». В открывшемся окне найдите службу Apache2.2
Какое у неё состояние?
80 свободен, на прошлом занятии смотрел. В httpd.conf прописал Listen 81. не помогло
аналогичная проблема была: служба не запускалась, пока не удалил программу, которая занимала 80 порт, в моем случае это NetPolice, правда в командной строке писал как «Неизвестный источник» :)
В столбце состояние пусто. Запускать?
Конечно запускайте, и Тип запуска проверьте на всякий случай, чтоб было значение «Автоматически».
У меня выпадала ошибка при обмене:
«Ошибка SOAP сервера: Внутренняя ошибка. Ошибка инициализации библиотеки модулей». Оказалось, что в модуле сервера при формировании структуры ответа клиенту в конце одной строки не стояла «;» из-за этого выпадала ошибка.
а в каком месте не стояла «;»? Интересно просто, может по невнимательности тоже такое сделаю. Или просто в 1Сном коде не поставили?
Такая ошибка вознимкает при разных ошибках синтаксиса в процедурах веб-сервиса. Например, если вместо КонецЦикла поставить КонецЕсли — причем проверка не выявляет такие несоответствия.
не разобрался как посмотреть файлы выложеные по ссылкам .1cd. Возможно просто не умею )))). Как бы догадался что можно создать пустую конфигурацию, и в ней заменить этот файлик. Но у меня получилась проблема, дело в том что версия моей 1с 8.3.3, и соответственно возникла ошибка что нужно повысить версию платформы для работы с этой конфигурацией. Подскажите как нибудь понизить версию в этих файликах можно?
нет. Проще и правильнее обновить свою платформу
Для просмотра этого курса нужна платформа 1С-Предприятие версии 8.3.4.*. Вообще есть универсальное требование: у платформы и мобильной платформы 3 первых числа номера версии должны совпадать
Спасибо за науку. Все отрабатывает. Единственное долго доходило, что при работе клиентской части на реальном телефоне IP в статической ws-ссылке надо указывать не 127.0.0.1, а машины на которой расположен Apache. Хотя на прошлом занятии Вы на это специально обратили внимание.
хотела избавиться от ошибки:
планшете пишет “Connection to http://127.0.0.1 refused”.
при смене 127.0.0.1 на IP ПК с веб-сервером (192.168.*.*) выдается тут же ошибка без конца — 1с-ка не реагирует ни на что, можно закрыть только аварийно:
Ошибка доступа к файлу ‘http://192.168.*.*/server/ws/WebServiceFunctionForCounting.1cws?wsdl’
по причине:
Ошибка работы с Интернет: Server returned nothing (no headers, no data)
это WS-ссылка в клиентской конфе (ситуация: на ПК по кнопке в конфе все отрабатывается, на мобильнике — ошибка про refuse). по советам, надо было IP поменять в WS-ссылке клиентской конфы с 127… на свой, но я смысл не очень поняла почему так.
127.0.0.1 — это стандартный адрес ТЕКУЩЕГО компьютера. На ПК все отрабатывает, т.к. и сервис сервера и клиент размещены на текущем ПК, и клиент обращаясь к сервису по адресу 127.0.0.1 успешно его находит.
Запуская клиент на планшете с тем же адресом 127.0.0.1, клиент пытается обратиться к самому планшету и искать опубликованный сервис там. Конечно же его там нет.
Вот как-то так :)
Почему тогда при замене 127.0.0.1 на свой IP перестает все работать, конфигуратор 1С не дает ее даже вбить и сохранить, а в браузере не отображается по новой ссылке с замененным IP xml?
сейчас смотрю третий модуль, там в процедуре работают с динамической ссылкой:
ВСОпределение = Новый WSОпределения(«http://192.168.*.*/paycontrolws/ws/WebServiceExchangeDataPayControl.1cws?wsdl»);
У меня в этом случае выдается при запуске:
Ошибка при вызове конструктора(WSОпределения).При содании описания сервиса произошла ошибка и эта ссыль
а у Вас точно от планшета до ПК есть связь?
на ПК попробуйте в браузере открыть с 192.168итд. — должна открыться схема.
Если на ПК по такому адресу открывается, а с планшета нет — значит у планшета нет доступа по сети (роутер/брандмауэр и т.п.). Если не откроется, значит с публикацией что-то не так (тогда попробуйте просто IP адрес набрать 192итд — апач должен показать It works!).
Источник проблем найден — Брандмауер. Сегодня снова повторилось, после нескольких перепубликаций и перезапуске апача. вылечилось после обезвреживания брандмауера, перепубликаций из конфигуратора заново, тогда ссылки в браузере снова заработали
Хорошо, что разобрались :)
первый вопрос решен, в браузере ссыль не отображалась вчера и в конфигуратор 1с не хотела вписываться с вылетом ошибки, сегодня чудным образом все отображается и вводится, хотя конфигурацию не трогала — вопрос снят. осталась только проблема по третьему модулю, там ссыль в браузере отображается с IP компа, но xml какой-то подозрительный…
Вам там уже ответили :)
При создании двустороннего обмена столкнулся с неожиданной проблемой. При загрузке с клиента на сервер не происходит десериализации загружаемой строки. Она так и остается строкой XML. При этом, загрузка с сервера на клиент проходит совершенно нормально. Алгоритмы выгрузки и загрузки абсолютно одинаковые и на клиенте, и на сервере. Кто-нибудь сталкивался? С чем это может быть связано?
функция ПрочитатьXML не может вернуть строку xml вместо данных (если, конечно, в xml не записали строку содержащую xml). Она может выдать ошибку, но ни как не вернуть исходный текст. Наверняка ошибка в коде.
Ага. Только что сам разобрался. Оказывается я дважды сериализовал данные. Определенно, по ночам следует спать! Спасибо за помощь.
(поиском мои предыдущие сообшения не находятся)
в общем печалька :(
на VitrualBox 4.3.10, ОС Windows XP sp3,
1С 8.3.4.465 (и учебная 8.3.4.389) работать с Апачем отказываются.
полная отказываетя запускать веб-сервер (ошибка обнаружения лицензии), при этом мобильное приложение работает.
учебная запускает, но выдает сообщение «неизвестная ошибка, достугнуто ограничение» (дословно непомню, устал)
1С 8.2.19.83 работает во всех вариантах (файловая, серверная) для проверки использовал рабочую «Розница для Казахстана» 1.0.8.1
Если ставить Апач на «железо» (сервер Dell, ОС Windows 8 x64) — 1C 8.3 работает без всяких нареканий (да и в ролике вединара использована винда 7-ка).
Вот такой результат, может кому поможет сберечь время и нервы в будущем :)
P.S.
Желающим посоветовать: «Ставь винду 7-ку», у нас 38 (тридцать восемь) лицензий на ХР, ее вполне хватает для работы (офис 2003, 1С 8.2), и вот так — списать и купить 7-ки из-за 1С 8.3? А для учебы я и крякнутую 7-ку найду и поставлю, до вечера время есть :)
Как-то так сложилось, что изначально решил ставить «чистый эксперимент» — чтобы не бороться со всякими конфликтами ПО и занятыми портами — поставил на VMWare чистую WinXP SP3 и на нее установил все, что указано в методичке — все заработало сразу и без проблем. Когда для удобства захотел прикрутить Snegopat, возникла проблема, которую я попытался решить установив все актуальные обновления для XP, но проблема оказалась проще — Snegopat’у требовалось наличие в системе установленной 8.2, а была только 8.3
Т.о. как оригинальная так и «полностью обновленная» WinXP справляется со всеми поставленными в данном курсе задачами.
Однако переходом на Win7 (или Win8-Win81) все равно имеет смысл заняться с точки зрения безопасности — WinXP больше не обновляется…
«(поиском мои предыдущие сообшения не находятся)»
Возможно, что комментарий просто «переместился» на другую страницу.
Попробуйте внизу страницы нажать ссылку «Предыдущие комментарии» и повторить поиск, если комментариев много — таких страниц может быть несколько.
У меня отлично работает под VirtualBox 1С:Предприятие 8.3 (8.3.4.465) с Apachee 2.2 на Win XP SP 2 (брал тут: http://www.modern.ie/en-us)
Обращайтесь — помогу!
SP3 (корректировка)
Вопрос:
Собственнно делаю синхронизацию через сериализацию и, есчетественно, как только добавляю реквизит на сервере, а на клиенте его нет, то при разворачивании сериализованного XML выдается ошибка.
Если передавать объекты — то ошибка сразу при развороте, если передавать ссылки — то в ТЗ «объект не найден». Что делаю не так?
Все делаете так :)Можете посмотреть решение. Вы пошли верно, но не дошли до конца