Материалы 3-го модуля Полного курса по разработке Мобильных приложений на платформе «1С:Предприятие 8»

Добрый день, коллеги!

В закрытой части страницы расположены ссылки на скачивание видео-уроков и методических материалов тренинга Полный курс по разработке Мобильных приложений на платформе «1С:Предприятие 8».

К сожалению, у Вас недостаточно прав для дальнейшего просмотра.

Если Вы приобрели курс, но еще не активировали токен — пожалуйста, активируйте доступ по инструкциям, высланным на Ваш email после покупки.

Если Вы не залогинены на сайте — залогиньтесь, вернитесь на эту страницу и обновите ее.

Если Вы залогинены, у Вас активирован токен доступа, но Вы все равно видите эту запись — напишите нам на e-mail поддержки.

Комментарии / обсуждение (284):

  1. FunnyGarik

    Добрый день!
    Подскажите пожалуйста каким образом в мобильной платформе использовать фоновое задание по расписанию, например, «обмен раз в 3 минуты» в связи с тем, что объект Регламентированные задание недоступен?

    • Поддержка курса по EDT


      (текст комментария доступен только участникам Мастер-группы)

  2. FunnyGarik

    Добрый день. Столкнулся с тем что в справочнике есть на сервере предопределенные элементы как в данном случаи реализовать код загрузки справочников учитывая данный фактор?

    • Поддержка курса по EDT


      (текст комментария доступен только участникам Мастер-группы)

  3. Rikitiki_snub

    И снова здравствуйте!
    При выполнении того же пункта (3.14).
    У преподавателя при синхронизации выскакивала ошибка:
    Описание ошибки: {ОбщийМодуль.ОсновныеФункции.Модуль(33)}: Ошибка при вызове метода контекста (ПрочитатьXDTO): Несоответствие типов (параметр номер ‘1’)

    Ошибку он исправил. Однако, у меня после таких же манипуляций, ошибка не ушла.

    Прочитала вашу переписку с Dmitri на странице материалов для 2 модуля.

    Там вы пишете следующее:
    Читайте комментарии :)
    Сериализуйте параметр до отправки.

    Модернезировала код таким образом:
    Выполнить(“Ответ = ВСПрокси.” + СтруктураПодключения.ИмяФункции + “(СериализаторXDTO.ЗаписатьXDTO(ПараметрДляОтправкиНаСервер));”);
    Возврат СериализаторXDTO.ПрочитатьXDTO(Ответ);

    Результата это не дало :-)

    • Поддержка курса по EDT


      (текст комментария доступен только участникам Мастер-группы)

        • Поддержка курса по EDT


          (текст комментария доступен только участникам Мастер-группы)

          • Rikitiki_snub

            Насколько я понимаю это один из параметров функции:-)
            И нигде она однозначно не определяется кроме как в функции.

            • Поддержка курса по EDT


              (текст комментария доступен только участникам Мастер-группы)

              • Rikitiki_snub

                в функции:
                Функция ПодключениеКВебСервису(ПараметрДляОтправкиНаСервер) Экспорт

                Структура

                в функции:

                Функция ПодключениеКВебСервисуЦентральнойБД(ПараметрДляОтправкиНаСервер, СтруктураПодключения = Неопределено) Экспорт

                Неопределено

                • Rikitiki_snub

                  проверила еще раз.
                  переменная: “ПараметрДляОтправкиНаСервер” везде структура
                  после перехода на строку:
                  Выполнить(“Ответ = ВСПрокси.” + СтруктураПодключения.ИмяФункции + “(ПараметрДляОтправкиНаСервер);”);

                  делаем шаг и сразу идет переход на:

                  &НаКлиенте
                  Процедура ПроверитьСоединение(Команда)
                  Попытка
                  ПроверитьСоединениеНаСервере();
                  Исключение
                  ОбработкаОшибок(ОписаниеОшибки());
                  КонецПопытки;
                  КонецПроцедуры

                  в итоге вылетает на:

                  &НаКлиенте
                  Процедура ОбработкаОшибок(ОписаниеОшибки = “”) Экспорт
                  ОткрытьФорму(“Обработка.ОбработкаОшибокНаКлиента.Форма”, Новый Структура(“ТекстОшибки”, ОписаниеОшибки));
                  КонецПроцедуры

                  • Поддержка курса по EDT


                    (текст комментария доступен только участникам Мастер-группы)

  4. Rikitiki_snub

    Здравствуйте,
    при выполнении урока 3.14 при синхронизации вылетает ошибка:

    Описание ошибки:  {ОбщаяКоманда.Синхронизация.МодульКоманды(68)}: Поле объекта не обнаружено (ЭтоГруппа)
    Это Процедура ЗагрузкаСправочников()

    Привожу код:

    Процедура ЗагрузкаСправочников(ТЗ, ТипСпр, СтрРеквизитов)
        Для Каждого Стр Из ТЗ Цикл
            Если Стр.Ссылка.ПолучитьОбъект() = Неопределено Тогда
                Нов = ?(НЕ Стр.ЭтоГруппа, Справочники[ТипСпр].СоздатьЭлемент(), Справочники[ТипСпр].СоздатьГруппу());
                Нов.УстановитьСсылкуНового(Стр.Ссылка);
            Иначе
                Нов = Стр.Ссылка.ПолучитьОбъект();
            КонецЕсли;
            ЗаполнитьЗначенияСвойств(Нов,Стр,СтрРеквизитов.Получить(Стр.ЭтоГруппа));
            Нов.Записать();
        КонецЦикла;
       
    КонецПроцедуры

    Спасибо.

    • Поддержка курса по EDT


      (текст комментария доступен только участникам Мастер-группы)

      • Rikitiki_snub

        Дмитрий,спотыкается на справочнике аГорода.
        Справочник иерархический и на сервере и не клиенте.
        У всех остальных иерархических справочников иерархию проверила.
        В запросе все указано верно.
        Однако, в переменную Стр “ЭтоГруппа” передается со значением Ложь.
        Почему, могу только гадать.
        Может дело в том, что на справочник аГорода потом ссылается другой справочник?

        Спасибо :-)

        • Rikitiki_snub

          и еще была проблема с этим справочником.
          В нем было несколько предопределенных элементов, но они передавались на клиент как простые элементы.
          Я ручками их сделала предопределенными…
          Мб удалить справочник и заново создать и потом разбираться сначала с предопределенными?
          Т.к. после неудачной синхронизации в справочник опять передаются непредопределенные элементы, которые на сервере являются предопределенными.

          • Rikitiki_snub

            Удалила справочник, ссылку на него в др справочнике.
            Почистила код запроса и синхронизации.
            Проблема не ушла.

            Эх…непруха :-)

            • Поддержка курса по EDT


              (текст комментария доступен только участникам Мастер-группы)

              • Rikitiki_snub

                а ларчик просто открывался :-)
                У меня был тип иерархии по группам и элементам.
                а в продолжении урока как раз таки необходимый кусок кода дописали!
                Спасибо за помощь!
                Замучила я вас.

                • Поддержка курса по EDT


                  (текст комментария доступен только участникам Мастер-группы)

                • Rikitiki_snub

                  Вот теперь еще вопрос.
                  Делаю по примеру на своей базе и при синхронизации документов вылетает ошибка:
                  Описание ошибки: {ОбщаяКоманда.Синхронизация.МодульКоманды(101)}: Ошибка при вызове метода контекста (Записать): Значение “999-00009” поля “Номер” не уникально

                  Однако, документы переносятся:-)
                  Это говорит о том, что на сервере есть дублированные документы?
                  Что лучше сделать?

                  • Поддержка курса по EDT


                    (текст комментария доступен только участникам Мастер-группы)

    • Поддержка курса по EDT


      (текст комментария доступен только участникам Мастер-группы)

      • sweettanya

        Все-таки не поняла до конца, почему при одинаковых названиях экспортных функций ОбработкаОшибок(), находящихся в разных глобальных общих модулях на Клиенте (директива компиляции у модулей разная), не возникает конфликта. Откуда платформа знает, какую функцию в какой момент вызывать? Причем, действительно, при нажатии на F12 оказываемся не в той процедуре…

        • Поддержка курса по EDT


          (текст комментария доступен только участникам Мастер-группы)

  5. skatya

    Здравствуйте.
    Подскажите по практическому заданию №6.
    “В конфигурации «Заказы», которая находится в раздаточных материалах, необходимо предусмотреть удаление всех возможных документов и справочников.”

    Имеется в виду удаление объектов конфигурации?

    • Поддержка курса по EDT


      (текст комментария доступен только участникам Мастер-группы)

  6. bytecoded

    Касаемо реализации перехватчика ошибок, который формирует баг-репорт. Что посоветуете делать в случаях, когда ошибка формируется на сервере клиентского приложения? Например, обработчик при создании формы, который выполняется на серверной стороне, дал исключение; теперь это исключение нужно как-то показать для клиента.

    Напрямую форму баг-репорта из сервера вызывать нельзя, если я правильно понимаю.

    • Поддержка курса по EDT


      (текст комментария доступен только участникам Мастер-группы)

  7. ildarcheg

    Если кратко – то не получается загрузить файл обмена в базу, в которой есть разделители данных.

    Исходные данные:

    База Тест1, в ней Справочник1, Справочик2, Документ1. Также ПланОбмена.Типовой.
    В базе созданы узлы: с кодом 1 (этот узел) и с кодом 2 (куда будут выгружаться изменения).
    В базе в режиме предприятия создано два элемента справочника и два документа.

    База Тест2, в ней Справочник1, Справочик2, Документ1. Также ПланОбмена.Типовой.
    В базе созданы узлы: с кодом 2 (этот узел) и с кодом 1 (откуда будут загружаться изменения).

    Данные из базы Тест1 выгружаются следующим кодом:

        ИмяФайла = "C:\1.xml";
       
        Узел = ПланыОбмена.Типовой.НайтиПоКоду("2");
        ЗаписьXML = Новый ЗаписьXML;
        ЗаписьXML.ОткрытьФайл(ИмяФайла);
        ЗаписьXML.ЗаписатьОбъявлениеXML();
       
        ЗаписьСообщения = ПланыОбмена.СоздатьЗаписьСообщения();
        ЗаписьСообщения.НачатьЗапись(ЗаписьXML, Узел);
       
        ВыборкаИзменений = ПланыОбмена.ВыбратьИзменения(ЗаписьСообщения.Получатель,ЗаписьСообщения.НомерСообщения);
       
        Пока ВыборкаИзменений.Следующий() Цикл
           
            ЗаписатьXML(ЗаписьXML, ВыборкаИзменений.Получить());
           
        КонецЦикла;
       
        ЗаписьСообщения.ЗакончитьЗапись();
       
        ЗаписьXML.Закрыть();

    Данные в базу Тест2 загружаются следующим кодом:

        ИмяФайла = "C:\1.xml";
       
        ЧтениеXML = Новый ЧтениеXML();
        ЧтениеXML.ОткрытьФайл(ИмяФайла);
        ЧтениеСообщения = ПланыОбмена.СоздатьЧтениеСообщения();
        ЧтениеСообщения.НачатьЧтение(ЧтениеXML);
        ПланыОбмена.УдалитьРегистрациюИзменений(ЧтениеСообщения.Отправитель, ЧтениеСообщения.НомерСообщения);
       
        Пока ВозможностьЧтенияXML(ЧтениеXML) Цикл
           
            Данные = ПрочитатьXML(ЧтениеXML);
            Данные.ОбменДанными.Отправитель = ЧтениеСообщения.Отправитель;
            Данные.ОбменДанными.Загрузка = Истина;
            Данные.Записать();
           
        КонецЦикла;
       
        ЧтениеСообщения.ЗакончитьЧтение();

    Все отлично загружается.

    [B]Теперь в базу Тест2 добавляем разделитель и “все пропало”.[/B]

    В базу Тест2 добавлено следующее:
    – Справочник Пользователи (в плане обмена не участвует)
    – ПараметрыСеанса.ОбластьДанныхЗначение с типом справочник.Пользователи
    – ПараметрыСеанса.ОбластьДанныхИспользование с типом Булево
    – Общий реквизит ОбластьДанных, с типом Справочник.Пользователи и ссылкой на предыдущие параметры сеанса. В состав общего реквизита включен Справочник1, Справочник2, Документ1, ПланОбмена.Типовой
    – Добавлены пользователи Информационой Базы – Администратор и Пользователь (оба с полными правами).

    в модуле сеанса прописан следующий код:

        ТекущийПользователь = РаботаСПользователями.ПолучитьПользователяПоУИД();
       
        Если СокрЛП(ТекущийПользователь) = "Администратор" Тогда
           
            ПараметрыСеанса.ОбластьДанныхЗначение = ТекущийПользователь;
            ПараметрыСеанса.ОбластьДанныхИспользование = Ложь;
           
        Иначе
           
            ПараметрыСеанса.ОбластьДанныхЗначение = ТекущийПользователь;
            ПараметрыСеанса.ОбластьДанныхИспользование = Истина;
           
        КонецЕсли;
       
        ПараметрыСеанса.ТекущийПользователь = ТекущийПользователь;

    В базе Тест2 под пользователем Пользователь созданы узлы: с кодом 2 (этот узел) и с кодом 1 (откуда будут загружаться изменения).

    При попытке выполнить загрузку получаю ошибку в коде:

     ИмяФайла = "C:\1.xml";
       
        ЧтениеXML = Новый ЧтениеXML();
        ЧтениеXML.ОткрытьФайл(ИмяФайла);
        ЧтениеСообщения = ПланыОбмена.СоздатьЧтениеСообщения();
        ЧтениеСообщения.НачатьЧтение(ЧтениеXML);
        ПланыОбмена.УдалитьРегистрациюИзменений(ЧтениеСообщения.Отправитель, ЧтениеСообщения.НомерСообщения);
       
        Пока ВозможностьЧтенияXML(ЧтениеXML) Цикл
           
            Данные = ПрочитатьXML(ЧтениеXML);  // ОШИБКА ВОТ ТУТ
            Данные.ОбменДанными.Отправитель = ЧтениеСообщения.Отправитель;
            Данные.ОбменДанными.Загрузка = Истина;
            Данные.Записать();
           
        КонецЦикла;
       
        ЧтениеСообщения.ЗакончитьЧтение();

    Текст ошибки:

    {ОбщаяКоманда.ОбщаяКоманда1.МодульКоманды(23)}: Ошибка при вызове метода контекста (ПрочитатьXML)
            Данные = ПрочитатьXML(ЧтениеXML);
    по причине:
    Ошибка преобразования данных XML: [sfile://C:/1.xml][28,10][/CODE]

    Файл обмена который загружается:

       
            Типовой
            2
            1
            3
            0
       
       
           
                1c27a038-55d0-11e4-984d-d81952c74e82
                false
                <Code>000000001

    1111

    1c27a039-55d0-11e4-984d-d81952c74e82
    false

    000000001

    22222

    1c27a03a-55d0-11e4-984d-d81952c74e82
    false
    2014-10-17T11:37:36
    000000001
    true
    1c27a038-55d0-11e4-984d-d81952c74e82

    1c27a039-55d0-11e4-984d-d81952c74e82

    1c27a03b-55d0-11e4-984d-d81952c74e82
    false
    2014-10-17T11:37:34
    000000002
    true
    00000000-0000-0000-0000-000000000000

    сообщение об ошибке ссылается на строку ” 2014-10-17T11:37:36″ на начало даты 2014, однако если удалить строку из файла обмена начинает ссылаться на другие места файла…

    Вообщем вот. Как мог описал проблему. Проблема выявляется на двух тестовых базах, созданных специально для отлавливания этого бага (изначально баг выявился на двух других базах, в которых ведется разработка проекта).

    Подскажите, есть какие-нибудь особенности или нюансы в платформе, которые мешают загрузке данных? Какие как можно выявить причину ошибки?

    • Поддержка курса по EDT


      (текст комментария доступен только участникам Мастер-группы)

      • ildarcheg

        Спасибо за подсказку! Я тоже пришел к такому же пути проверки)) В итоге получил следующее.
        это файл выгружаемый из мобильного приложения: http://base.ildarcheg.ru/1.txt
        это файл выгружаемый из ЦБ http://base.ildarcheg.ru/2.txt

        разница в следующем “ОбластьДанных” 2615aabc-55d1-11e4-984d-d81952c74e82 “/ОбластьДанных”.
        Вставил эту строчку в файл, который выгрузил из мобильной базы – все загрузилось…

        Хотя казалось бы, когда я загружаю этот файл – я уже нахожусь в разделенном сеансе (и мне доступны только объекты текущего пользователя) и он должен грузить все в этот самый разделенный сеанс. Но не смотря на это, при загрузке данных он похоже все же требует, чтобы в файле обмена были данные, в какую область данных загружать…

        Выход из положения придумал – XSL преобразование. Пересмотрел весь ваш материал (нашел подробный урок в бесплатном курсе), перечитал кучу материала в инете, но все равно, не могу осмыслить, каким же кодом я могу преобразовать мой исходный xml файл?
        Могли бы вы подсказать, каким кодом или хотя бы какой командой/оператором языка xsl-преобразования я могу добавлять и удалять строчку область данных в файле такого формата http://base.ildarcheg.ru/2.txt

        З.Ы. потратил день, но xsl не осилил, теперь грешным делом смотрю на распарсивание xml как текста и редактирование… (((

        • Поддержка курса по EDT


          (текст комментария доступен только участникам Мастер-группы)

          • ildarcheg

            Дмитрий, большое спасибо за подсказку! То что нужно. Если кому-то интересно – вот результирующий код, который позволил добавить мне нужный элемент в XML:

            ЧтениеXML = Новый ЧтениеXML();
                ЧтениеXML.УстановитьСтроку(СтрокаФайлаОбмена);
                Построитель = Новый ПостроительDOM;
                Документ = Построитель.Прочитать(ЧтениеXML);
                Дочерние = Документ.ДочерниеУзлы;
                УзелДанных = Документ.ПолучитьЭлементыПоИмени("Body")[0];
                МассивУзлов = УзелДанных.ДочерниеУзлы;
               
               
                Для каждого Узел Из МассивУзлов Цикл
                   
                    НовыйЭлемент = Документ.СоздатьЭлемент("ОбластьДанных");
                    НовыйЭлемент.ТекстовоеСодержимое = СокрЛП(ПараметрыСеанса.ОбластьДанныхЗначение.УникальныйИдентификатор());

                    Узел.ДобавитьДочерний(НовыйЭлемент);
                   
                КонецЦикла;
               
                ЗаписьXML = Новый ЗаписьXML;
                ЗаписьXML.УстановитьСтроку();
                Запись = Новый ЗаписьDOM;
                Запись.Записать(Документ, ЗаписьXML);
                СтрокаФайлаОбмена = ЗаписьXML.Закрыть();
               
                Возврат СтрокаФайлаОбмена;

            P.S. единственно смущает мой последний абзац с записью XML. Не придумал другого пути, как из DOM получить строку хмл обратно). Но работает)

            • Поддержка курса по EDT


              (текст комментария доступен только участникам Мастер-группы)

  8. LDA

    Еще есть одна заминочка. Прошел 2 этапа нормально (регистрация и ввод капчи). Когда нажимаю проверить соединение 3 шаг, у меня получается ошибка типа: Несоответствие типов (параметр номер ‘1’) которую вернул сервер см. скрин. Как побороть?

      • LDA

        сделал так, заработало

        Выполнить("Ответ = ВСПрокси." + СтруктураПодключения.ИмяФункции + "(СериализаторXDTO.ЗаписатьXDTO" + "(ПараметрДляОтправкиНаСервер));");
           
        Возврат СериализаторXDTO.ПрочитатьXDTO(Ответ);
    • Поддержка курса по EDT


      (текст комментария доступен только участникам Мастер-группы)

  9. LDA

    Доброго времени суток!

    У меня никак не получается зайти в отладку и проверить данный код В БАЗЕ СЕРВЕРА (центральной базе). Хотя я подключал отладку при публикации базы как “127.0.0.1” На клиенте в конфигурации заказы вижу ошибку :
    “Сотрудник по коду не найден. (Код 2-6)
    При сообщении ошибки администратору – назовите код ошибки!”
    Куда можно покапать, чтобы добиться остановки в этом месте?

    ФизЛицо = Справочники.ФизическиеЛица.НайтиПоКоду(СтрАвторизации.КодСотрудника);
            Если ФизЛицо.Пустая() Тогда
                ЗаписатьОшибку(Ответ, "Сотрудник по коду не найден. (Код 2-6)");
            КонецЕсли;
            Возврат ФизЛицо;
    • LDA

      вопрос, снимаю )) отладка заработала после того как поставил галочку Отладка-Подключение-Автоматическое подключение – Web-сервисы на сервере

  10. gosn1ck

    Добрый день, в курсе описан универсальные и очень удобные механизм сериазации при помощи сериализатора XDTO, но в 8.1 очень мало объектов поддерживает сериализацию XDTO. какой подход вы можете посоветовать для платформы 8.1? спасибо

    • Поддержка курса по EDT


      (текст комментария доступен только участникам Мастер-группы)

      • gosn1ck

        я тоже на это надеялся, но метод СериализаторXDTO.ЗаписатьXDTO(ОбъектСериализации) “не проглатывает” ни массив, ни структуру :( ни тем более массив структур

        • Поддержка курса по EDT


          (текст комментария доступен только участникам Мастер-группы)

          • gosn1ck

            открыл справку 8.1 у объекта “Структура” – Возможен обмен с сервером. Сериализуется.
            открыл справку 8.3 – Возможен обмен с сервером. Сериализуется. Данный объект может быть сериализован в/из XDTO.
            вашего намёка не понял :(

            • Поддержка курса по EDT


              (текст комментария доступен только участникам Мастер-группы)

Комментарии закрыты