Бесплатный курс по Мобильной платформе 1C. Модуль 3
Модуль 3. Использование планов обмена для мобильных баз данных
В ходе третьего модуля Вы изучите:
- Создание и настройку планов обмена
- Создание узлов плана обмена
- Регистрацию изменений по условию
Порядок обучения
Скачивайте теоретические материалы в PDF и видео-формате. Рекомендуем начинать именно с изучения теории.
Выполняйте практическое задание для закрепления полученных знаний.
Выполните самоконтроль, просмотрев видео-решение преподавателя.
Теоретические материалы
Итак, приступайте к изучению теоретического материала третьего модуля курса.
Данный контент доступен только для зарегистрированных пользователей.
Пожалуйста, войдите на сайт (Войти), если Вы уже зарегистрированы или зарегистрируйтесь на сайте (Зарегистрироваться), чтобы получить доступ.
Регистрация занимает 1 минуту, но открывает доступ к материалам сайта.
Пожалуйста, войдите на сайт (Войти), если Вы уже зарегистрированы или зарегистрируйтесь на сайте (Зарегистрироваться), чтобы получить доступ.
Регистрация занимает 1 минуту, но открывает доступ к материалам сайта.
Вопросы
Если Вам необходима поддержка, мы с радостью ответим на Ваши вопросы в рамках Мастер-группы «Полного курса по разработке Мобильных приложений на платформе «1С:Предприятие 8».
Комментарии / обсуждение (491):
Комментарии закрыты
При выполнении обмена с “Сервером” выскакивает ошибка “Ошибка преобразования данных XML:”
Тоже самое. Причем когда изменения были только в номенклатуре, то обмен работал, а с документами вылетает ошибка
При нажатии на ВыполнитьСинхронизацию на сервере выдаёт ошибку:
{ОбщаяКоманда.ВыполнитьСинхронизацию.МодульКоманды(20)}: Ошибка при вызове конструктора (WSОпределения): При создании описания сервиса произошла ошибка. http://10.50.13.49/day3/ws/ОбменДанными.1cws?wsdl: При создании описания сервиса произошла ошибка. http://10.50.13.49/day3/ws/ОбменДанными.1cws?wsdl
Подставляла IP и свой, и чужой, и 127.0.0.0.1, Apache перезагружала. Версия учебная. Какой же IP там надо указывать? Как это можно обойти, чтобы не через IP обращаться?
а в телефоне если в браузере вбить http://10.50.13.49/day3/ws/ОбменДанными.1cws?wsdl – что увидите?
Добрый день , а где ссылки на 4 – задание ? на почту так и не пришло
Вся навигация в главном меню курса – Мобильная разработка
4 модуль и дз
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-4-%D1%87%D0%B0%D1%81%D1%82%D1%8C-1-%D0%B3%D0%B5%D0%BE%D0%BB%D0%BE%D0%BA%D0%B0%D1%86%D0%B8%D1%8F/
У меня упорно не хочет работать обмен данными:-( После двухдневных попыток запустить обмен между собсвтенными конфигурациями решила попробовать на конфигурациях из ДЗ. Результат плачевный: при попытке запустить обмен с клиента появляется ошибка разбора XML: фатальная ошибка. Перезагрузка не помогает((( К сожалению возможности протестировать на реальном устройстве у меня сейчас нет, может ли быть дело в виртуалке(у меня стоит Blue Stacks)?
С комментариями знакомились? Планы обменов идентичны на клиенте и на сервере? Номера сообщений обнуляли?
Случайно не опубликовали вместе веб клиент и мобильное приложение?
По заданию.
Если не принимать во внимание установку “Делай как сказано!”, возникает вопрос: зачем в регистре хранить координаты в виде объекта (тип ХранилищеЗначения)? Не экономнее ли (и по памяти, и по скорости доступа) в виде 3-х чисел (широта, долгота, высота – все равно там больше ничего нет)? Ну, на крайняк – структурой…
Сравните :) Мы не ограничены в средствах.
Вполне допустимо хранить 3 ресурса – нагляднее :)
а дата? а точность?
Еще раз для самых тупых: можно ли производить пошаговую отладку кода, выполняемого на мобильном устройстве?
нет
Про отключение автообновления координат.
По моему, в выложенной конфе в метод ОтключитьОбработчикИзмененияМестоположения передается совсем не та процедура, что в метод ПодключитьОбработчикИзмененияМестоположения.
Оп = Новый ОписаниеОповещения(“ОбработкаОповещения”, ЭтаФорма);
Это надо определить вне процедур Включить…/Отключить… и передавать в них параметром (или глобальной переменной).
(пробовать самому некогда – не поспеваю с контрольным заданием :))
Работа с геопозиционированием.
Планшет: dell streak 7, gps включен, позиционирование разрешено.
Виртуалка.
1. Команда “ПоказатьОпции” (код команды: http://yadi.sk/d/O5wRNSsjN9Bgx) на виртуалке показывает сначала ошибку “Значение не является значением объектного типа (Имя)” (http://yadi.sk/d/fzMX7vxwN9B3y), а потом все показывает; на планшете показывает весь список без сообщения об ошибке.
Почему, откуда?
2. Установлено разрешение на отладку и адрес отладчика 192.168.0.102. При запуске приложения на планшете отладчик не запускается. Это нормально?
похоже что это норма. Будь это стабильные данные, они были бы структурой. А так, видимо сама 1С получает из системы этот массив не зная толком его содержимое.
*фиксированный структурой
ЭЭЭ … отчет тут выкладывать ?!
з.ы. тут, как я вижу только обсуждение, а где выкладываются решения ?!
обязательно опубликовать ход решения только ДЗ №4 (что-бы получить доступ к дальнейшим материалам
Решение 3 модуля
http://курсы-по-1с.рф/post-2014-04/%D1%84%D0%BC-%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-%D0%B4%D0%B73/
При публикации на веб-сервере выскакивает ошибка ADSI (ошибка в файле), подскажите что мне делать, как исправить ошибку?
Запустите 1С как администратор.
Обмен между Клиентом и Сервером работет.
Конфу с сервера опубликовал, приложение с клиента обновил, на планшете на всякий случай старый вариант приложения убил, поставил только что опубликованный. На планшете добавил узлы ЦБ и М2.
Нажимаю на планшете “Выполнить обмен” и получаю ошибку “Неизвестный получатель”.
Что я сделал не так? Вроде все как у тренера…
А стационарник про узел М2 знает? Кста, М2 и ЦБ – это ведь коды узлов у Вас?
Совершенно верно, эти же коды – ЦБ, М2 и М1 (для тонкого клиента) – прописаны и на сервере.
на мобильном должен быть только один из М1, М2,… у вас так?
Да. На тонком клиенте – М1, на планшете – М2.
что за тонкий клиент? Мобильная база на стационарном компьютере? Тогда там-же можно посмотреть внутрь отладчиком что куда передаёт (значения)
можно, конечно, но там все отрабатывает нормально, без ошибок.
беда была в том, что на мобилках текущим узлом был ЦБ (первый заполненный) или был только один М2(М3). И то, и другое неверно.
ВАЖНО:
– на мобильном устройстве сразу после установки приложения первым заполненным узлом должен быть узел, присвоенный этому устройству (потом его поменять мне не удалось)
– на мобилке обязательно должен присутствовать узел назначения (может это и азбука, но для меня было неочевидно)
Кроме того, надо было скорректировать адрес WS-ссылки (с 127.0.0.1 на 192.168.х.х).
После всех этих корректировок обязательно(!) переопубликовать конфу с сервера и мобильное приложение, а также не забыть рестартануть апач!
Обмен заработал и с мобилок (планшет, виртуалка), правда как-то кособоко: не понравился объект – не переносит, изменил что-то в объекте – перенёс…
Словом, живет своей таинственной жизнью.
более точно стоит сказать не “первый заполненный”, а отмеченный зеленым кружочком предустановленный узел. Какой он в списке значения не имеет. Но именно тот что с зеленым кружочком отвечает за идентификацию текущей базы данных.
решение 3-го урока заканчивается подключением мобильного устройства 2-м узлом к серверу.
У меня возникает проблема – при запуске обмена приложение (телефон HTC Desire Z) уходит “в себя” (крутит волчок выполнения обмена) и ни на что больше не реагирует. Прибить 1С процесс невозможно – его нет в списке запущенных.
Повторил на проверочных конфигурациях (mobile-apps-fm-module03) – результат аналогичный: узел М1 обмен отрабатывает, узел М2 – зависание процесса.
Как мне закончить 4-е задание?
У вас 2 мобильных устройства?
Одно – HTC Desire Z
М1, М2 и т.д. – это разные мобильные устройства и все записи одного устройства для обмена должны соответствовать 1 узлу, т.е. на М1 должны быть записи от имени узла М1 для узла ЦБ, на М2 только записи от имени узла М2 для узла ЦБ. Если вы с узла М1 пытаетесь отправить на М2 – это не правильно, про такой узел М1 вообще ничего не должен знать т.к. каждое мобильное устройство живёт своей автономной от других мобильных устройств жизнью!
Я делаю – аналогично решению 3-го урока:
М1 – лектор делает на компьюторе,
М2 – подключает мобильное устройство.
для М1 (приложение на компьютере) выполнение обмена происходит “как по писаному”
для М2 (HTC Desire Z) – уходит в никуда. После нажатия “Выполнить обмен” крутится кружок, сообщений нет, ошибок нет. Сбросить – невозможно (только перезагрузкой телефона).
Взяв эталонные конфигурации из лекторского архива получаю аналогичный вариант. Видимо проблема все таки в телефоне.
P.S.
Заказал планшет Asus, получу завтра. Хоть я уже и “пролетаю мимо кассы” – посмотрю на результат на планшете. Досадно ну и ладно.
Не печальтесь. Делайте пока 4 модуль.
И отпишитесь. Баги бывают, и никто от них не застрахован
в отсутствии дебагера нужно попробовать писать логи в файл.. Сам еще не мобильной платформе не пробовал, но это лучше чем ничего.
Уже не успею :(
1. обмен данных понятен, но проверить нет возможности – обмен “М2-ЦБ” у меня не работает (я упоминал – как в данном задании, так и в конфигурации “Контроль расходов” тоже, как моей так и лекторской, из архива)
2. с аудио, видео не работал – без отладки “путаюсь в показаниях” (теоретически понимаю, что надо вынуть данные из хранилища, как – не представляю)
В итоге: за 2 тыс получить грамотно расписанный механизм веб-сервиса, который ранее не использовал, и то хлеб :)
Desire Z это же андройд 2.2 – весьма старый
Все же меня не покидают сомнения что не так уж и хорошо сборки на 17 апи совместимы со старыми версиями.
Уточнение: практическая работа 3 и 4 (конфигурация “Контроль расходов”) с мобильника работает, хотя есть проблемы с данными: широта, долгота у координат отсутствует, но на карте позиционирует точно.
координат нет по всем 3 геопровайдерам?
Координаты есть, нет долготы и широты.
географические координаты в геопозиционировании = {широта;долгота;высота}. Есть 3 геопровайдера: GPS, Passive, NteWork которые могут выдавать несколько разные результаты определения местоположения (илди не выдавать их). Про координаты вы проверили для всех 3 геопровайдеров?
В ветке по 4-му заданию я говорил:
– на команду “Показать текущие координаты” выдает: “1С Предприятие Получение элемента по индексу для значения не определено”.
– “Обновить местоположение gps” – Не удалось получить координаты.
– регистр, координатами не заполняется.
если убрать gps, то “Passive” (данные в регистр выбираются из него) подхватывает “NеtWork” и регистр заполняется данными.
Меня интересовало, почему gps неработает – ведь в гугле и 2ГИС он работает.
Подскажите, где может быть ошибка?
На клиенте при обмене:
“Ошибка при вызове метода контекста (ПрочитатьXML): Ошибка разбора XML
Фатальная ошибка:
Extra content at the end of the document”
Такая же ошибка при обмене с телефона. С клиентской конфигурации запущенной на компьютере обмен проходит нормально :-( Что не так делаем ?
Переопубликуйте веб-сервис, рестартуйте Апач, обновите веб-ссылку на клиенте, обновите мобильное приложение.
Подозреваю, что ошибка у вас уйдет, а процесс на телефоне “уйдет в себя” (как у меня).
P.S.
Potovskiy попробуйте тоже. Еще бы модели телефонов сообщили, случаем не НТС ?
Действительно HTC
Desire ? с родной прошивкой на 2-м андроиде?
HTC Rhyme S510b. Так ничего и не получается. Ошибка разбора XML: -[1,1] Фатальная ошибка: Extra content at the end of the document. Проблема связана с телефоном?
DmitriyVa Спасибо! Благодаря Вашим советам получилось! Поменял на сервере Имя файла публикации на DataTrasfer , переопубликовал, на клиенте Urlисточника WS-ссылки поменял, Обмен пошел…
У меня планшет Huawei, но в данном случае это не имеет значения, на виртуалке точно такая же ошибка, уже взяла конфу тренера, и все равно та же ошибка :(
Елена, сделайте так как я выше говорил – переопубликуйте веб-сервис и прочее.
И переименуйте на латиницу, так у меня эту ошибку выдавать перестало:
http://192.168.0.171/srv3/ws/DataTrasfer.1cws?wsdl
и так:
Соединение = WSСсылки.ОбменДанными.СоздатьWSПрокси(“DataTrasfer”,”ExchangeData”,”ExchangeDataSoap”);
Операцию не переименовывал, осталась на русском.
Решение проблемы:
Код узла на планшете М1 – кириллица,
на сервере М1 – латиница.
Сделала вывод, что если такая ошибка проблема в узлах обмена.
читайте комментарии, у многих такая ошибка была, варианты решения там предложены
Во вложении два файла.
ВыполнитьСинхронизациюНаСервереКакВПрактике
и
ВыполнитьСинхронизациюНаСервереКакВРешенииДЗ
В первом файле пытался написать функцию как в практике. Выдаёт ошибку во время подключения к серверу:
(Ответ = ВСПрокси.Синхронизация(ДанныеXDTO);)
Во втором файле переписал так, как показано в решении ДЗ. Добавил
WS-ссылку и все заработало.
Вопрос: что я не учел в первом файле?
Не вложились файлы
Не хотят цепляться файлы. Попробовал их переименовать
если глаз не подвел, то минимум одно отличие в том, что 1 посылает ХЗ, а второй строку
Что за ошибка возникает?
При работе с андроидом сегодня вышла ошибка работы с интернет: connection to http://127.0.0.1 refused. До этого все было нормально. Базы 1С на телефоне обновляются. Ошибка появляется при синхронизации. Клиент на компьютере работает без проблем.
127.0.0.1 на локальный ip адрес компьютера измените
Получилось :) Спасибо!
При обмене между клиентом и сервером на ПК все отрабатывает правильно, а на телефоне появляется предупреждение: “Сервис не найден. {DataTransfer}:ОбменДанными”. Причем появляется и на самописных конфигурация и на скачанных решениях.
И еще почему-то не отображаются справочники и документы на моб. устройсте. Команда “Выполнить обмен” есть, Обмен данными с мобильным устройством есть, а номенклатуры и ПТУ нет.
>почему-то не отображаются справочники и документы
Где-то всплывал такой момент. И решился он просто загадочным способом… Кажется удалили WS ссылку и команды вернулись О_о
>Сервис не найден. {DataTransfer}:ОбменДанными
Ну явно какая-то проблема в обращении с мобильного устройства на ПК. В браузере на мобилке все хорошо? Там деталей не пишется?
Если в браузере все ок, то какое имя и URI у Вашего веб сервиса? Опечаток точно нет?
Удаление WS ссылки действительно помогла, спасибо. Но это очень странно..
>Ну явно какая-то проблема в обращении с мобильного устройства на ПК. В браузере на мобилке все хорошо?
Нет, не хорошо. Не удается подключиться ни к одному WS, пишет, что адрес не доступен сейчас, но при этом сама конфигурация спокойно обновляется
Чтобы команды все же отображались заменила ссылку на динамическую. Теперь при попытке обмена с моб. устройства вылезает ошибка “Неверный формат”. А на ПК обмен проходит на ура
Взята база решения пз 2-го модуля. На ее основе начата разработка решения пз 3 модуля. При выполнении обмена ошибка, апатч перезапускала. Помогите разобраться в чем дело?
{ОбщаяКоманда.ВыполнитьОбмен.МодульКоманды(11)}: Ошибка при вызове метода контекста (ВыполнитьОбмен)
Ответ = Соединение.ВыполнитьОбмен(СтрокаДанных);
по причине:
Ошибка вызова операции сервиса: {ОбменДанными}:ОбменДанными:ВыполнитьОбмен()
по причине:
Неизвестная ошибка. Ошибка работы с Интернет: Не могу установить соединение
по причине:
Ошибка работы с Интернет: Не могу установить соединение
Интернет работает. Строка данных для передачи сформирована. Где поискать?
Видимо ошибка в работе с интернетом? Где работаете? На мобильном? На виртуалке? Браузер успешно отрабатывает? Коннект до сервиса “не в 1С” есть?
Самое начало выполнения практического задания (взята конфа практического задания 2 дня), ошибка в конфигурации клиент (Мобильное устройство).
Видимо из-за этого ругается. Хотя где не определен Узел не понятно.
Разобралась. Узел был реально пропущен((( Опять невнимательность….
В задании №3 URL указвается 192.168.1.6/day2p/ws и т.д. что это за адрес, если я указываю IP своего компьютера и свою папку публикации задания №3, то мне дает ошибку и IE тоже ошибка?
192.168.1.6 – IP адрес компьютера в локальной сети (вместо локального – внутреннего 127.0.0.1)
day2p – имя опубликованной базы
Я указываю http://192.168.??.??/day3p/ws/ОбменДанными.1cws в IE (IP 192.168.??.?? мой машины в сети) получаю ошибку Не удается найти страницу в сети. Если указываю http://192.168.??.??/day3p/ то получаю HTML код, публикация вроде без проблем прошла. Как все таки получить URL?
вот по это адресу http://192.168.??.??/day3p/ru_RU/ в IE открывается опубликованный клиент. Как из всего это получить URL ссылку, чтобы вставить в WS-ссылки. На виртуальную машину приложение добавить не удается пишет “Не правильный формат конфигурации”, адрес указываю http://192.168.??.??/day3p
выпубликуете веб-сервер, а надо опубликовать мобильное приложение: Конфигурация=мобприложение=публиковать
При этом ВАЖНО что бы, не дай бог, мобильное приложение приложение не опубликовали в каталог куда уже засунули веб клиент :)
Сразу придем к еще одной ошибке ))
ОК опубликовала мобильное приложение, получила файл 1cema. А дальше?
Дальше конфигурация у вас должна на андройд загрузиться.
Скриншот публикации покажите
Скрин публикации
Вы все-таки опубликовали мобильное приложение в ту же папку, что и сервер. Поэтому у вас неправильный формат конфигурации. Веб-сервер и мобильное приложение надо публиковать в РАЗНЫЕ папки, о чем вас Игорь недавно предупредил
в методичке http://127.0.0.1/day3/ws/ОбменДанными.1cws?wsdl
если у вас 192.168. – это внутренний IP (а я знаю что это именно так без вариантов) и ну никак не хотите пользоваться эмулятором… имхо, самый простой способ достучаться до этого IP – подключить к стационарному компьютеру и настроить Wi-Fi роутер, но можно так-же и прокинуть порты вашего компьютера вовне (но вовне будет другой адрес, естественно – его и указать для УРЛ) – но тут вам нужен сетевой администратор
У меня эмулятор, тогда я оставляю 127.0.0.1?
ДА!
Спасибо за помощь. все получилось!
А можно настроить план обмена так, чтобы при проведении документа на сервере, его можно было бы увидеть на клиенте и при этом же можно было бы увидеть и ту номенклатуру из документа?
Не очень понятный вопрос. Вы хотите чтобы сразу после проведения обмен проходил? можно так сделать, но вот стоит ли:)
нет, обмен инициирует мобильный клиент а не стационарно размещённая база 1С.
точно же, все никак в категориях мобильной платформы думать не привыкну:(
Сейчас, на основе баз третьего занятия, на клиенте ничего нет, не в справочнике, ни в документе, провожу документ на сервере,он появляется на клиенте, но в тч нет номенклатуры(только битая ссылка), и справочник номенклатур пуст, а хотелось бы, чтобы после проведения документа, если нет номенклатуры из документа в справочнике, то она должена добавиться.
Здравствуйте!
При обмене вылетает ошибка (см. приложение). Базы с заданием скачены с сайта. В чем может быть причина
Проблема в первом параметре метода УстановитьСтроку в модуле веб сервиса в строке кода №132
Вот все что удается понять из Вашего скриншота :)
Глянул в базе – это строка ЧтениеХМЛ.УстановитьСтроку(СтрокаСообщения);
Проверьте что в переменной СтрокаСообщения
Ошибка вылетает на клиенте строка 11
Ответ = Соединение.ВыполнитьОбмен(СтрокаДанных)
При этом СтрокаДанныхэто значение XDTO
А как можно проверить что в этой переменной, если это передается с клиента и там можно поставить точку останова, а в серверной части в момент приема как это сделать?
Посмотрите настройку отладки веб сервисов. В теоретичесих материалах текущего – вторго модуля страница 27 “Отладка веб-сервиса”
СтрокаСообщения это ХранилищеЗначения, а должен быть XML на сколько я понимаю?
Он же приходит с клиента
Да именно XML на вход чтению XML идет. А как у вас туда ХЗ затесалось? Прикрепите скрин кода, может поймем. Так сложно “гадать”
Я разобрался!
Дело в том, что я для web-сервиса (поле пакеты XDTO), его операции и данных тип возвращаемого значения выставил http://v8.1c.ru/8.1/data/core, и ValueStorage.
Здесь он меня и не понял что нужно вернуть/передать.
А должно быть
web-сервиса (поле пакеты XDTO) – пусто
в его операции и данных тип возвращаемого значения- string (http://www.w3.org/2001/XMLSchema)
Почему-то не хочет синхронизироваться от сервера на мобилу.
С мобилы данные уходят на сервер замечательно, ошибок никаких нигде не выдает, а изменения на сервере остаются только там, на мобилу не уходят. В чем может быть проблема?
не в номерах сообщений проблема?
На сервере регистрация объектов для обмена включена?
да
Решил “обнулением” базы, как тут где-то советовали.
т.е. выгрузил .CF и создал на её основе новую. Всё заработало.
Переустановил апач. На локальной машине и по 127.0.0.1, и по localhost, и по ip открывается “It works”, т.е. типа работает.
Но по локалке (http://ip) – ни в какую!
Что не доделал? Помогите, плиз!
Порты открыты? На ПК брэндмауер настраивали?
отключаю апач, запускаю дэнвер (с .htaccess в нужной папке) – все работает; отключаю дэнвер, запускаю апач – не работает.
Имхо дело не в открытости портов или настройках брандмауэра…
Может какие-то конфликты, увы, дальше не помогу. Чисто технический момент. Подождем, может кто чего подскажет полезного :)
У кого-то была уже такая проблема с денвером, вроде тоже не смогли решить
Free PortScanner говорит, что 80 порт открыт!
с самого ПК по http://ip – нормально открывается?
Если да – то, дело скорее всего в брандмауэре/файрволе/антивирусе, которые могут блокировать прохождение пакетов.
Пинг до ПК проходит?
PS: где-то Дмитрий упоминал, что с Денвером – возможны проблемы.
Такая же проблема. Возникла именно сегодня. До этого все работало.
Все-таки это был Брандмауэр… когда он успел включиться? не ясно.
Долго пытался заставить 1С работать не с чистым апачем (win-службой), а с Дэнвером (там апач запускается НЕ как служба), так и не получилось (URL WS-ссылок сбивается на схему file:).
С апачем локально обмен между Клиентом и Сервером заработал.
Конфу с сервера опубликовал, приложение с клиента обновил, на планшете на всякий случай старый вариант приложения убил, поставил только что опубликованный. На планшете добавил узлы ЦБ и М2.
Нажимаю “Выполнить обмен”… и получаю “Неизвестный получатель”…
Что я сделал не так? Вроде все как у тренера…
При нажатии на кнопку “Выполнить синхронизацию” в мобильном устройстве у тренера появляется сообщение “Синхронизация прошла успешно!”. У меня же – нет ничего. Ни сообщения об ошибке, ни подтверждения, что синхронизация выполнена (у меня БлюСтик). Как проверить – ошибка это или нормальная ситуация?
Проверить-то как раз очень просто – создаёте Объект в базе, выполняете синхронизацию – открываете другую базу – смотрите результат. :)
Выяснила – это была ошибка. :) Грызем дальше.
у многих здесь мелькала ошибка при обращении мобильного приложения к веб-сервису вида ошибка разбора XML: – [1,1]
Ответов уже было много, но может кому пригодится.
На очередной стадии напоролся и сам на нее.
Главная проблема этой ошибки не в том что xml битый (это было бы слишком просто), а в том что вместо xml может быть все что угодно. Сообщение о том что 1С нет доступа к каталогу, требование авторизации (мой случай т.к. добавил пользователей в 1С), так же это может быть вызвано работой прокси. Т.е. 1С пытается представить как wsdl лубой ответ сервера не вникая в суть.
Вот чего я не понял, так это можно ли добавить ws-ссылку при наличие пользователей в 1С (авторизацию он даже не предлагает, а просто вылетает с этой ошибкой). решил проблему переходом на динамические ссылки.
Наличие пользователей в базе не должно влиять на добавление ws-ссылки, иначе смысл существования объекта? Только для баз без пользователей? Сомнительно.
Посмотрите комментарии, у кого-то были проблемы после добавления пользователей в базы, там вроде бы решали путём добавления дополнительных параметров аутентификации в ссылке. (точно не помню – могу ошибаться.)
Все сделал и получаю на планшете – 1С:Предприятие Не правильный формат конфигурации. и как с этим бороться?
проверьте каталог который указываете в мобильной платформе, там должен лежать опубликованный файл 1cema.xml
В каталоге три файла 1cema, 1cemarun и default.vrd.
А мобильный клиент на планшете не грузится….
Странно. Заново опубликовал, апач перегрузил. все заработало. спасибо.
А что делать, если этого файла нет? Администрирование – Публикация на веб-сервере его не создает.
Моб.клиент публикуется по другому – Конфигурайия – Мобильное приложение – Публиковать
Что именное не публикует: веб-сервер или мобильное приложение? Хотя в любом случае обычно ошибка в правах доступа
В предыдущие дни – всё нормально подключилась? У Вас arm c x86 файлы не перепутаны?
Спасибо. разобрался, не так и не там публиковал мобильное приложение.
При попытке выполнить синхронизацию, появляется ошибка: “{ОбщаяКоманда.ВыполнитьСинхронизацию.МодульКоманды(14)}: Ошибка при вызове конструктора (WSОпределения): При создании описания сервиса произошла ошибка. http://192.168.1.11/day3/ws/ОбменДанными.1cws?wsdl: При создании описания сервиса произошла ошибка. http://192.168.1.11/day3/ws/ОбменДанными.1cws?wsdl”
Т.е. не отрабатывает вот эта строка кода:
ВСОпределение = Новый WSОпределения(“http://192.168.1.11/day3/ws/ОбменДанными.1cws?wsdl”);
Почему? IP мой, все остальное делала как тренер. :(
Кстати, ссылка “http://127.0.0.1/serv/ws/ОбменДанными.1cws?wsdl” у меня не рабочая. Наверное, из-за этого. Но почему она не рабочая?
у вас в этой ссылке serv а в предыдущем сообщениии day3. Разберитесь куда публиковали и укажите правильную ссылку
Ошибка во втором сообщении. ссылка “http://127.0.0.1/Day3/ws/ОбменДанными.1cws?wsdl” – это верная ссылка. Но она все равно – не работает. :(
Опять day3 по разному написан
А, все уже, незаметил что снизу вы разобрались с этой ошибкой.
Давайте с начала:
В браузере http://192.168.1.11/day3/ws/ОбменДанными.1cws?wsdl верно отображается?
Апач после публикации вручную перезапускаете? (можно даже пару раз – для верности.)
Давайте. :)
В браузере http://192.168.1.11/day3/ws/ОбменДанными.1cws?wsdl – не отображается. Пишет – Not Found
The requested URL /day3/ws/ОбменДанными.1cws was not found on this server.
Такой же ответ дает ссылка http://127.0.0.1/day3/ws/ОбменДанными.1cws
Хотя 127.0.0.1 – It works!
Апач перезапускаю. Ну, ни в какую не работает! :(
Попробуйте отказаться от кириллицы в пользу латиницы
Пробовала уже. Результат – тот же самый. :(
Но самое обидное то, что я нашла ошибку!!! Как можно быть такой невнимательной!!! :( У меня при публикации Day3, а в строке я пишу “day3”!!! :( Вопрос снят.
Нормально ) тут 80% ошибок по невнимательности
“Пишет – Not Found
The requested URL /day3/ws/ОбменДанными.1cws was not found on this server.”
Это характерно для браузера Chrome – из-за наличия кириллицы в именах/путях.
Для начала – переведите всё на латиницу: имя web-сервиса, операции и их параметры (не забудьте про URI-пространство имён). После этого переопубликуйте, перезапустите апач и попробуйте на ПК снова открыть ссылку (уже с изменениями).
и у меня та же ошибка, подскажите пожалуйста, что не так:{ОбщаяКоманда.ВыполнитьСинхронизацию.МодульКоманды(13)}: Ошибка при вызове конструктора (WSОпределения): При создании описания сервиса произошла ошибка. http://192.168.0.41/control/ws/DataTr.1cws?wsdl: При создании описания сервиса произошла ошибка. http://192.168.0.41/control/ws/DataTr.1cws?wsdl
(IP- правильный, потому что планшет подключался для обновления в прошлом уроке, http://127.0.0.1/control/ws/DataTr.1cws?wsdl – открывается)
А с планшета в браузере открывается ссылка?
Да, с планшета в браузере открывается ссылка(показывает содержимое файла)
Взял базы решения от 3-го модуля, изменил ip сервиса, опубликовал мобильное приложение и веб-сервис, загрузил на телефоне мобильную базу, добавил узлы плана обмена, добавил номенклатуру “tst”. А при попытке выполнения обмена –
ошибка разбора XML: – [1,1]
Фатальная ошибка: Extra content at the end of the document
Смотрю в отладчике: падает на строке
ЧтениеСообщения.НачатьЧтение(ЧтениеХМЛ);
При этом СтрокаСообщения =
”
ОбменДаннымиСМобильнымУстройством
ЦБ
М1
5
0
4af74675-5c99-0955-af1b-d7fdf26704b5
false
false
00000000-0000-0000-0000-000000000000
tst
”
Никак не пойму как с этим бороться. Пробовал по совету Дениса Глазырина на аналогичной проблеме пересоздавать мобильную базу, создать заново узлы плана обмена, номенклатуру – тоже самое. Даже если не создавать номенклатуры или другой полезной информации к обмену – та же самая ошибка.
XML искаверкался, приложу txt
Посмотрите внимательно, (у меня к сожалению из-за наличия кириллицы не видно названия, но подозреваю, что там написано “Номенклатура”) у Вас есть такой тег: “” в четвёртой снизу строке – из-за него и происходит ошибка.
Это тег
Да, “ЕденицаИзмерения”. Получается нарушение структуры xml-файла, нет закрывающего тега. У меня с тегом Body так происходило, когда с клиента при первой синхронизации ничего не передавалось.
Насколько знаю, это поддерживается стандартом XML, да и текст XML же генерируется не вручную, его генерирует платформа 1С. Вот попробовал заполнить единицу измерения, чтобы был и открывающий и закрывающий тег, ошибка осталась та же.
В списке узлом обмена есть узлы с кодами ЦБ, М1?
Да, в XML файле можно увидеть:
To: ЦБ
From: М1
не в сообщении а в вашей базе
Да, в базах (как десктопной, так и в мобильной) узлы есть. В десктопной *ЦБ и М1, в мобильной ЦБ и *М1.
ох уж помучался с этой ошибкой. Решил. Оказалось, что возникала ошибка: “Номер сообщения меньше или равен номеру ранее принятого сообщения”. Вот только не выдается она нигде в мобильном приложении, только ошибка разбора XML: – [1,1] Extra content at the end of the document.
А получилось ее увидеть только присвоив текст XML из отладчика веб сервиса при выполнения обмена из мобильного приложения переменной “СтрокаСообщения”, которая подается на вход функции “ПринятьИзменениеПоПлану” и инициировав обмен уже из тонкого клиента десктопа базы мобильного приложения :)
А случилось это, как я теперь уже понимаю, потому, что базу серверную я взял готовую из решения, а мобильная база на телефоне создается пустой, поэтому номера сообщений не соответствуют.
Все верно. Поэтому и советовали уже неоднократно – или обнуляем номера сообщений, или из базы преподавателя берем только конфигурацию (базы создаем пустые). Решения альтернативны.
Я пересоздавал план обмена (обнуляя нумерацию), заново публиковал приложения, перебивал имена узлов на английский из 2 букв, чтобы не ошибиться, но синхронизация на ПК вылетает с ошибкой (на мобильном все ок):
{ОбщаяКоманда.ВыполнитьСинхронизацию.МодульКоманды(24)}: Ошибка при вызове метода контекста (Синхронизация): Ошибка вызова операции сервиса: {DataTransfer}:ОбменДанными:Синхронизация(): Ошибка SOAP сервера: Неизвестная ошибка. {WebСервис.ОбменДанными.Модуль(11)}: Ошибка при вызове метода контекста (НачатьЧтение)
по причине:
{WebСервис.ОбменДанными.Модуль(11)}: Ошибка при вызове метода контекста (НачатьЧтение)
по причине:
по причине:
Неизвестный получатель
Уже и модуль 4 посмотрел, и рад бы сделать отчет, но 3 задание не пускает. Расстроен.
На мобильном устройстве все ок, а на ПК вышибает… Т.е. запускаете обмен и серверная часть (сторона веб сервиса) вышибает? А отладку пробовали смотреть?
Да смотрел, формируется сообщение верно, но после вызова операции веб-сервиса Синхронизация, доходит до
Функция Синхронизация(Данные)
ОтветКлиенту = ЗарегестрироватьВыгрузку(Данные.Получить());
…
Данные.Получить() отдает полноценный законченный XML
Функция ЗарегестрироватьВыгрузку(СтрокаСообщения)
ЧтениеХМЛ = Новый ЧтениеXML;
ЧтениеХМЛ.УстановитьСтроку(СтрокаСообщения);
ЧтениеСообщения = ПланыОбмена.СоздатьЧтениеСообщения();
ЧтениеСообщения.НачатьЧтение(ЧтениеХМЛ);
…
и на чтении вылетает ошибка
У меня была эта ошибка, срабатывала из-за того, что забыл прописать еще и в центральной базе в планах обмена мобильную базу.
В отчаянной попытке нагнать отставание отложил командировку, взялся за 3-й блок. Работаю с выданными базами Сервер, Клиент.
Создаю на Сервере новые товар/док, делаю “Выполнить обмен”… При выполнении оператора
“Ответ = Соединение.ВыполнитьОбмен(СтрокаДанных);” в
“Функция ВыполнитьОбменДанными()” вылетает ошибка
“Ошибка вызова операции сервиса: {DataTrasfer}:ОбменДанными:ВыполнитьОбмен()
по причине:
Ошибка разбора SOAP сообщения: неверная версия сообщения”
Ссылка “http://127.0.0.1/serv/ws/ОбменДанными.1cws?wsdl” рабочая.
Параметр “СтрокаДанных”:
ОбменДаннымиСМобильнымУстройством
ЦБ
М1
23
17
14e69337-ca99-11e3-a4cf-c80aa99229ba
false
false
00000000-0000-0000-0000-000000000000
Food
st
14e69338-ca99-11e3-a4cf-c80aa99229ba
false
2014-04-23T07:52:54
М1-000001
true
14e69337-ca99-11e3-a4cf-c80aa99229ba
2
Где искать корни “неверной версии сообщения”?
Простите, не ожидал такой реакции на xml содержимое в комментарии.
Прилагаю файл с содержимым СтрокаДанных.
пробовали обнулить номера сообщений?
как это сделать?
Для узла обмена – создайте форму, на которую (при создании формы это доступно) выведите реквизиты “НомерОтправленного” и “НомерПринятого”. Можете посмотреть – как это сделано у Дмитрия в выгрузках учебных конфигураций.
Выполнил. На пк и на планшете/телефоне обмен идет, префикс устанавливается соответствующий. Сложность там только одна: правильно указать последовательность чтения и регистрации изменений: на клиенте в одной последовательности, на сервере наоборот.
ну и глюки с андроидом – которые встретил в 2-ом домашнем задании – это само обновление – проще выйти и зайти снова на андроиде в 1С и потом нажать Обновить :), хотя выходить не обязательно – можно жать несколько раз, авось когда-то срабатывает :)
Не могу понять в чём причина ошибки.
Пробую провести первый обмен, ещё когда в регистрах планов обмена всё пусто.
С клиента – запускается обмен, формируется сообщение,
на сервере – запускается процедура сервиса.
Но при попытке прочитать сообщение вылетает фатальная ошибка.
Строка, которая приходит на север:
———–
ОбменДанными
ЦБ
М1
1
0
——–
Фрагмент функции:
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(СтрокаСообщения);
^^^^^- соответственно строка сообщения.
ЧтениеСообщения = ПланыОбмена.СоздатьЧтениеСообщения();
ЧтениеСообщения.НачатьЧтение(ЧтениеXML);
^^^^^^- а вот при вызове этого метода вылетает:
“Ошибка при вызове метода контекста НачатьЧтение”
Ругается на какой-то “extra content of the end of the document”
Скриншот ошибки прикладываю.
Подскажите, в какую сторону смотреть?
Пардон, извините, разобрался.
остальным расскажи
у меня возникла, из-за двух элементов в разных базах с одинаковыми кодами.
Глаз замылился – поэтому пропустил строчку:
ЗаписьСообщения.ЗакончитьЗапись();
В результате – получался недописанный XML.
Он – спокойно передавался на сервер,
и там уже провоцировал ошибку при его чтении.
Нужно очень внимательно относиться к коду –
ошибки многие вылезают совсем не там, где ожидается.
Чуть позже – обнаружил, что потерял ещё одну строчку:
ЧтениеСообщения.ЗакончитьЧтение();
Вызывает ту же ошибку.