Вы находитесь на странице: 1из 46

Курс дистанционного обучения

Разработка мобильных
приложений на
1С:Предприятие 8.3

Модуль 4
Исследование новых объектов в мобильной
платформе

Проект Курсы-по-1С.рф
2016
Курсы-по-1С.рф Профессиональные курсы по 1С
по всей России, в любое время

Оглавление
Мультимедиа. Сканирование штрих-кодов ......................................................................................................... 4
Сканирование штрихкодов. Android ..................................................................................................................... 5
Менеджер контактов .............................................................................................................................................. 6
СредстваТелефонии................................................................................................................................................ 8
Электронная почта ................................................................................................................................................ 10
Календари ............................................................................................................................................................. 11
Геопозиционирование ......................................................................................................................................... 20
Уведомления ......................................................................................................................................................... 27
Глобальные уведомления .................................................................................................................................... 34
Сервис GCM ....................................................................................................................................................... 34
Сервис APN ........................................................................................................................................................ 41
Сервис уведомлений от 1С............................................................................................................................... 41
Нововведения в интерфейсе ............................................................................................................................... 41
Приложение 1. Маска ввода ................................................................................................................................ 42
Домашнее задание ................................................................................................................................................... 45
Задание 4.1 Маршрут ........................................................................................................................................... 45
Задание 4.2 Журнал звонков ............................................................................................................................... 46

Страница 2 из 46

Бесплатные материалы проекта: Электронная почта: support@Kursy-po-1C.ru


http://курсы-по-1с.рф/free/ Телефоны: 8-800 1000-613, +7(495) 7777-096

Copyright © 2012-2015, Насипов Фарит и Евгений Гилев, ООО «ОдинКурс»


Курсы-по-1С.рф Профессиональные курсы по 1С
по всей России, в любое время

Как было сказано ранее, у мобильной платформы есть ряд новых объектов, которые позволяют
взаимодействовать как с программным обеспечением, так и с аппаратной начинкой устройства. В
предыдущем модуле были исследованы только два объекта:

 Мультимедиа, который позволяет делать фото и видеосъемку


 И объект, при помощи которого можно взаимодействовать с разными приложениями в
мобильной экосистеме, а именно – ЗапускПриложенияМобильногоУстройства.

Но новых объектов и разных функций намного больше, а именно:

 Работа с телефонией – возможность совершать телефонные звонки, возможность получать


историю звонков (только Android)
 Работа с сообщениями (SMS и MMS) – отправка SMS и MMS (можно прикреплять вложения,
например, картинку), на Android также можно прослушивать приходящие SMS, но нельзя
считывать те, которые уже есть в телефоне
 Средства геопозиционирования – возможность получения текущих координат на основании
данных спутника или мобильных сетей. В сочетании с новыми функциями, которые позволяют
получить координаты на основании адреса и наоборот – адреса на основании координат, дают
хорошие дополнительные возможности мобильной платформе
 Работа с мультимедиа – фото, видео и аудиозапись
 Сканирование штрихкодов – возможность считывать штрих-коды камерой телефона, как
линейные (EAN13, Code39 и др.), так и двумерные (QR)
 Работа с электронной почтой – возможность отправки и получения почты. Основное отличие
от аналогичной функции в стационарной 1С – возможность использования существующей
учетки на мобильном устройстве. Т.е. не надо отдельно в 1С прописывать параметры
подключения к почте для вызова окна отправки
 Работа с контактами – возможность создавать/читать/искать/редактировать существующие
контактные данные на мобильном устройстве;
 Работа с календарем – возможность работы с календарем. Создание заметок, чтение,
редактирование встреч и т.д.
 Ориентация экрана – возможность отработать событие поворота экрана, и соответственно,
перерисовать форму с учетом новых параметров экрана.
 Новые элементы и функции у форм – у мобильной платформы появились новые функции у
управляемых форм, которые доступны только на мобильном устройстве. Например, слайд
формы (смена страницы свайпом по экрану), обновление таблиц в момент, когда мы тянем
таблицу вниз или вверх и др.

В этом модуле эти пункты будут рассмотрены более подробно.

Страница 3 из 46

Бесплатные материалы проекта: Электронная почта: support@Kursy-po-1C.ru


http://курсы-по-1с.рф/free/ Телефоны: 8-800 1000-613, +7(495) 7777-096

Copyright © 2012-2015, Насипов Фарит и Евгений Гилев, ООО «ОдинКурс»


Курсы-по-1С.рф Профессиональные курсы по 1С
по всей России, в любое время

Мультимедиа. Сканирование штрих-кодов


Все-таки ранее нами не в полной мере был исследован объект Мультимедиа, и остался
нерассмотренным еще один функционал – сканирование камерой устройства. Вот этот функционал
мыи разберем.

Пройдемся поэтапно и определим с точки зрения кода, что нам дает реализовать сама 1С.

Если СредстваМультимедиа.ПоддерживаетсяСканированиеШтрихКодов() Тогда


ОпСканирования = Новый ОписаниеОповещения("ОбработкаОтсканированногоШтрихкода",
ЭтаФорма);
ОпОтказСканирования = Новый ОписаниеОповещения("ОбработкаОтказаСканирования",
ЭтаФорма, "Отказ сканирования");
СредстваМультимедиа.ПоказатьСканированиеШтрихКодов("Просканируйте
штрихкод",ОпСканирования, ОпОтказСканирования, ТипШтрихКода.Все);
Иначе
Сообщить("Не поддерживается сканирование штрихкодов!");
КонецЕсли;

Основная функция – это показ результат сканирования, в котором есть четыре параметра:
заголовок, подписка на событие сканирования, подписка на событие закрытия окна сканирования,
последний параметр отвечает за то, какие штрихкоды вы хотите сканировать (одномерные,
двумерные или и те, и другие).

Рассмотрим, как выглядят подписки, начнем с подписки на событие сканирования, которая


вызывается каждый раз при сканировании:

Процедура ОбработкаОтсканированногоШтрихкода(Штрихкод,Результат,Сообщение, ДопПараметр)


Сообщение = ?(Результат, "Добавлен штрихкод" + Штрихкод, "Штрихкод " + Штрихкод +
" не смог быть обработан!" )
КонецПроцедуры

Как видите, тут есть четыре параметра. В первом – само значение штрих-кода, второй и третий
параметр связаны: третий параметр позволяет вывести некое сообщение на окно сканирования, а
Результат позволяет определить, каким цветом это сообщение будет выдано – красным (Ложь) или
зеленым (Истина), т.е. эти параметры мы сами задаем. Ну а последний параметр – это обычный
параметр для подписок.

Ну и вторая подписка, которая вызывается только один раз, при отмене сканирования, выглядит вот
так:

Процедура ОбработкаОтказаСканирования(Сообщение)
Сообщить(Сообщение)
КонецПроцедуры

Страница 4 из 46

Бесплатные материалы проекта: Электронная почта: support@Kursy-po-1C.ru


http://курсы-по-1с.рф/free/ Телефоны: 8-800 1000-613, +7(495) 7777-096

Copyright © 2012-2015, Насипов Фарит и Евгений Гилев, ООО «ОдинКурс»


Курсы-по-1С.рф Профессиональные курсы по 1С
по всей России, в любое время

Тут, в параметр функции мы получаем то сообщение, которое мы указали третьим параметром при
определении подписки ОпОтказСканирования, т.е. в нашем случае – это будет просто строка "Отказ
сканирования".

Вот и все, что мы можем сделать с функциями, которые нам предоставляет 1С.

Сканирование штрихкодов. Android


Однако, что, если нам этого мало? Ну к примеру, я хочу указать конкретно, что меня интересует
только тип EAN13, и чтобы камера не хватала code39. Такое случается даже с лазерными
сканерами, которые ошибочно могут считать штрих-код, неправильно определив его тип, а уж с
камерой телефона это может происходить достаточно часто (при плохих условиях, таких как грязный
штрихкод, плохое освещение, мятая этикетка и т.д.).

Или нужно четко понимать, какой тип был просканирован, вдруг используется УТ10, и есть такие
штрих-коды, которые по значению идентичны, но у них разные типы?

Итак, вы уже наверняка догадались, что нам на помощь придут намерения.

Для полноценной работы нам нужно мобильное приложение Zxing. Кстати говоря, именно эту
библиотеку использует и 1С для обработки штрих-кодов, однако 1С сканирует в среднем хуже, чем
это приложение отдельно.

Если мы пытаемся сделать то, что нам позволяет сделать 1С, но средствами Android, то мы почти
всегда получаем немного больше, так и в этом случае.

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

Подробнее – в видеоуроке Штрих-коды.

Страница 5 из 46

Бесплатные материалы проекта: Электронная почта: support@Kursy-po-1C.ru


http://курсы-по-1с.рф/free/ Телефоны: 8-800 1000-613, +7(495) 7777-096

Copyright © 2012-2015, Насипов Фарит и Евгений Гилев, ООО «ОдинКурс»


Курсы-по-1С.рф Профессиональные курсы по 1С
по всей России, в любое время

Менеджер контактов
Менеджер контактов – это новый объект в 1С, который отвечает за работу с контактами. Т.е.
создание, поиск, редактирование, удаление и т.д. Вначале давайте попробуем ответить на вопрос:
для чего может пригодиться этот объект?

Создать этот объект просто:


МК = Новый МенеджерКонтактов;

Рассмотрим по пунктам, что можно с его помощью сделать:

1. Получить учетные записи телефона. Что это такое и где их найти? Все просто: если зайдем в
настройки телефона (в Android до 5 версии) или в настройки телефона Аккаунты, то увидим вот
такой список:

Это и есть учетные записи устройства. Именно к ним и прикрепляются контакты. Ну и есть еще одна
– Локальная Учетная Запись. Так как чаще всего именно она и используется, то 1С, вероятнее всего,
вывели специальную функцию для её получения – ПолучитьЛокальнуюУчетнуюЗаписьКонтактов(). Это
запись, которая есть по умолчанию везде, и именно ей присваиваются все созданные контакты, если
вы не создали аккаунты или не указали их.

За это отвечает функция:


Учетки = МК.ПолучитьУчетныеЗаписиКонтактов();

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

2. Можно найти некий контакт, однако тут надо понимать, что в случае с поиском контактов, мы в
ответ получаем не сам контакт, а его ЛокальныйКлюч. Что такое ЛокальныйКлюч? Обратимся к
справке 1С:

Страница 6 из 46

Бесплатные материалы проекта: Электронная почта: support@Kursy-po-1C.ru


http://курсы-по-1с.рф/free/ Телефоны: 8-800 1000-613, +7(495) 7777-096

Copyright © 2012-2015, Насипов Фарит и Евгений Гилев, ООО «ОдинКурс»


Курсы-по-1С.рф Профессиональные курсы по 1С
по всей России, в любое время

ЛокальныйКлючКонтакта (LocalContactKey)

Описание:
Ключ, используемый для получения или изменения данных контакта в мобильном устройстве.

Доступность:
Мобильное приложение(клиент).

Поиск контакта выглядит вот так:

МК = Новый МенеджерКонтактов;
Сообщить("Всего найдено: " + МК.ПолучитьКоличествоКонтактов() + " контактов");
НайденыеКонтакты = МК.НайтиКонтакты();
Для Индекс = 0 По НайденыеКонтакты.Количество() – 1 Цикл
ЛокальныйКлюч = НайденыеКонтакты[Индекс] ;
Контакт = МК.ПолучитьКонтакт(ЛокальныйКлюч);
Если ЗначениеЗаполнено(Контакт.ДанныеКонтакта.Имя) Тогда
Сообщить("Имя : " + Контакт.ДанныеКонтакта.Имя);
КонецЕсли;
КонецЦикла;

На что здесь следует обратить внимание? Во-первых, мы должны определить менеджер контактов,
далее – найти контакты при помощи метода:
НайденыеКонтакты = МК.НайтиКонтакты();

В ответ получаем массив локальных ключей контактов, и только потом при помощи этого ключа мы
можем получить сами контакты:
Контакт = МК.ПолучитьКонтакт(ЛокальныйКлюч);

Самое печальное тут то, что мы не можем понять и как-то идентифицировать, сохранить и т.д. этот
самый локальный ключ. Т.е. если мы посмотрим на переменную ЛокальныйКлюч в момент её
определения, то увидим только тип данных, который нельзя ни поместить в хранилище, ни
сериализовать.
Теперь сделаем один важный промежуточный вывод – с контактами надо работать только в текущей
сессии, их не надо хранить в базе, делать соответствия между контрагентом и ключом его данных.
Почему? Существуют некоторые подозрения, которые связаны с тем, как в Android получают
контакт. В прошлом модуле мы рассматривали контент-провайдеры: как выглядит ссылка на
контактные данные, а именно – что в ней есть только номер контакта, который в разные моменты
времени может принадлежать теоретически разным контактам. Вероятно, поэтому в 1С так и
сделали, чтобы у программистов не было соблазна хранить столь непостоянную информацию в
базе.
3. Получив контакт, можем его изменить или даже удалить. Тут говорить особо не о чем.
4. А вот создание контакта стоит немного прояснить. Так как именно тут мы и применяем метод
получения учетной записи устройства, и именно к нему мы и привязываем этот контакт.
Создание контакта выглядит следующим образом. Вначале необходимо создать новый объект:

Страница 7 из 46

Бесплатные материалы проекта: Электронная почта: support@Kursy-po-1C.ru


http://курсы-по-1с.рф/free/ Телефоны: 8-800 1000-613, +7(495) 7777-096

Copyright © 2012-2015, Насипов Фарит и Евгений Гилев, ООО «ОдинКурс»


Курсы-по-1С.рф Профессиональные курсы по 1С
по всей России, в любое время

ДанныеКонтакта = Новый ДанныеКонтакта;

Этот объект описывает всю информацию о контакте, например, имя, номер телефона, почту и т.д.
Следует обратить внимание на то, что номера телефонов (и не только) – это массивы, и массивы не
просто самих номеров (значений номеров), но и вида номера (мобильный, домашний и т.д.).
Поэтому если мы хотим добавить номер телефона, то делать это нужно так:

Массив = Новый Массив;


НомерТелефона1 = Новый ЭлементДанныхКонтакта(ТипНомераТелефонаДанныхКонтакта.Мобильный,
"0123456789");
Массив.Добавить(НомерТелефона1);
НомерТелефона2 = Новый ЭлементДанныхКонтакта(ТипНомераТелефонаДанныхКонтакта.Домашний,
"987654321");
Массив.Добавить(НомерТелефона2);
ДанныеКонтакта.НомераТелефонов = Массив;

То же самое касается и других массивов, таких как почта, адрес и т.д.

После того, как мы заполнили все данные, нужно опять определить менеджер контактов, так как
через него мы должны получить запись устройства, в нашем случае – это локальная запись, но
можно использовать и запись Google аккаунта устройства, так как иначе вы ее можете и не увидеть
(зависит от настроек телефона).

МК = Новый МенеджерКонтактов;
НовыйКонтакт = Новый ДанныеКонтактаУчетнойЗаписи(ДанныеКонтакта,
МК.ПолучитьЛокальнуюУчетнуюЗаписьКонтактов());
МК.ДобавитьКонтакт(НовыйКонтакт);

И после того, как создан новый контакт учетной записи, добавляем его в менеджер контактов.

Идеальным был бы вариант, если бы была возможность создавать учетную запись от приложения
1С. Тогда мы могли бы привязывать к ней все контакты, и в случае удаления 1С удалялись бы все
контакты, кроме этого, тогда видно было бы, откуда взялся этот контакт и т.д. Вот, например, как это
делает Viber или Skype: установили, подключили – контакты есть, удалили – контактов нет. Но,
может, такой функционал появится в будущем, поэтому – будем ждать.

СредстваТелефонии
СредстваТелефонии – еще один новый объект в 1С, который отвечает уже именно за операции
телефонии, т.е. звонки, SMS и т.д.

Начнем со звонков.

Если СредстваТелефонии.ПоддерживаетсяНаборНомера() Тогда


СредстваТелефонии.НабратьНомер(НомерТелефонаДляНабора, РежимНабораНомера);
КонецЕсли;

Страница 8 из 46

Бесплатные материалы проекта: Электронная почта: support@Kursy-po-1C.ru


http://курсы-по-1с.рф/free/ Телефоны: 8-800 1000-613, +7(495) 7777-096

Copyright © 2012-2015, Насипов Фарит и Евгений Гилев, ООО «ОдинКурс»


Курсы-по-1С.рф Профессиональные курсы по 1С
по всей России, в любое время

Тут все очень просто: проверяем, есть ли вообще смысл набирать номер (может, мы с планшета
работаем, где модуля связи вообще нет), а после этого набираем нужный номер, причем в двух
режимах:
1. Выводим окно с набором номера (мы уже такое с вами делали средствами Android, но не
одним же Android’ом пользуются, поэтому лучше все-таки использовать данную функцию)
2. Непосредственный набор. А вот эту функцию советуем вообще никогда не использовать!
Почему? Все очень просто: может случиться такая ситуация, что вы набрали номер случайно,
причем номер может быть коротким, а может, вы просто случайно нажали кнопку вызова в 1С,
в этом случае произойдет следующее: Android начнет делать вызов, в фоне будет уничтожать
1С, так как она на слабых устройствах отъедает много памяти, а в этот момент идет еще
работа с модулем телефонии, в общем, пока телефон будет «тормозить» уже может пройти
секунд 10, прежде чем удастся сбросить вызов. А в случае открытия окна набора – Android
сможет спокойно убить приложение 1С, отобразить окно с номером, и пользователь без
проблем может или отменить вызов, или набрать клиент.
Кроме того, что 1С умеет звонить, 1С умеет еще и отправлять SMS, и даже их получать. Вот таким
простым кодом можно отправить SMS с телефона пользователя, причем опять-таки в двух режимах,
как с уведомлением пользователя, так и без его уведомления:
СМС = Новый SMSСообщение();
СМС.Текст = ТекстСМСДляОтправки;
СМС.Получатели.Добавить(НомерПолучателя);
СредстваТелефонии.ПослатьSMS(СМС, ВидОтправкиСМС);

А чтобы получить SMS, нужно подключить обработчик:


&НаКлиенте
Процедура ПодключитьПолучениеСМС(Команда)
#Если МобильноеПриложениеКлиент Тогда
ПолучательСообщений = Новый ОписаниеОповещения("ПолучениеСообщения", ЭтаФорма);
СредстваТелефонии.ПодключитьОбработчикSMSСообщений(ПолучательСообщений);
#КонецЕсли
КонецПроцедуры

&НаКлиенте
Процедура ПолучениеСообщения(Сообщение, ДополнительныеПараметры) Экспорт
ОтправительСМС = Сообщение.Отправитель;
КоличествоВложенийСМС = Сообщение.Вложения.Количество();
ДатаПринятогоСМС = Сообщение.ДатаПолучения;
ТекстПринятогоСМС = Сообщение.Текст;
КонецПроцедуры

Необходимо обратить внимание на то, что мы можем получать даже вложения MMS, и
обрабатывать их. Кстати, вложения состоят из самих данных, и отдельно можно получить тип
данных – MIME тип. Тут же можно добавить, что 1С не умеет читать SMS, которые пришли вне
включенной подписки. Т.е. прочитать все ваши SMS 1С не сможет – только те, которые будут
приходить в тот момент, когда 1С включит режим подписки на прием SMS.

Страница 9 из 46

Бесплатные материалы проекта: Электронная почта: support@Kursy-po-1C.ru


http://курсы-по-1с.рф/free/ Телефоны: 8-800 1000-613, +7(495) 7777-096

Copyright © 2012-2015, Насипов Фарит и Евгений Гилев, ООО «ОдинКурс»


Курсы-по-1С.рф Профессиональные курсы по 1С
по всей России, в любое время

Электронная почта
Работа с электронной почтой, в данном случае подразумевает работу с объектом
ИнтернетПочтовоеСообщение. По большому счету этот объект является универсальным как для
стационарной 1С, так и для мобильной. Разница лишь в том, что в мобильной появился еще один
новый объект:

СредстваПочты (MailTools)
Методы:
ПоддерживаетсяОтправка (SendingSupported)
Послать (Send)
Описание:
Менеджер средств встроенной почты мобильной платформы.
Доступность:
Мобильное приложение(клиент).

В чем же принципиальное отличие от привычного нам объекта – ИнтернетПочта? Все очень просто:
чтобы отправить письмо старым способом, нам необходимо указать авторизационные данные, что
делать в случае с мобильной платформой иногда не имеет смысла. Почему? Потому что у вас с
вероятностью 99% уже установлена некая почта, она просто обязана быть, чтобы вы могли
пользоваться Google Play, но вот на WinPhone ее нужно подключать. Поэтому возникает резонный
вопрос: если у меня уже есть подключенная почта и я хочу через нее отправлять данные, то почему
бы ее не использовать?

Очевидно в 1С подумали так же и реализовали отдельный объект. Выглядит это вот так:

Если СредстваПочты.ПоддерживаетсяОтправка() Тогда


Письмо = Новый ИнтернетПочтовоеСообщение;
Письмо.Получатели.Добавить(СтрокаПолучатели);
Письмо.Тексты.Добавить(ТекстСообщения);
Письмо.Тема = ТемаСообщения;
Письмо.Вложения.Добавить(ПутьКФайлу);
СредстваПочты.Послать(Письмо);
КонецЕсли;

Т.е. вначале мы спрашиваем систему, поддерживает ли она отправку почты таким образом. Если да,
то формируем сообщение и отправляем. В момент отправки нужно будет определиться, при помощи
чего отправить письмо, после этого откроется программа с письмом, и мы должны будем сами
отправить его.

Существуют альтернативные варианты отправки. Например, есть такой вариант:

ЗапуститьПриложение("mailto:" + Получатели + "?subject=" + ТемаСообщения + "&body=" +


ТекстСообщения);

Страница 10 из 46

Бесплатные материалы проекта: Электронная почта: support@Kursy-po-1C.ru


http://курсы-по-1с.рф/free/ Телефоны: 8-800 1000-613, +7(495) 7777-096

Copyright © 2012-2015, Насипов Фарит и Евгений Гилев, ООО «ОдинКурс»


Курсы-по-1С.рф Профессиональные курсы по 1С
по всей России, в любое время

А в случае Android можно и вот так:


НовВз = Новый ЗапускПриложенияМобильногоУстройства();
НовВз.Действие = "android.intent.action.SENDTO";
НовВз.Данные = "mailto:test@test.ru";
НовВз.ДополнительныеДанные.Добавить("android.intent.extra.STREAM","file:///storage/emul
ated/0/Send.txt","Uri");
НовВз.ДополнительныеДанные.Добавить("android.intent.extra.SUBJECT","Тема");
НовВз.ДополнительныеДанные.Добавить("android.intent.extra.TEXT","Текст письма");
НовВз.Запустить(Ложь);

В этом случае будет предложено любое приложение, которое подписано на действие


android.intent.action.SENDTO. Т.е. не только почта, а если нам нужно конкретное приложение,
например, Gmail, то мы должны добавить вот такие строки:

НовВз.Тип = "text/plain";
НовВз.Приложение = "com.google.android.gm";
НовВз.ИмяКласса = "com.google.android.gm.ComposeActivityGmail";

На этом работу с почтой мы заканчиваем.

Подробнее – в видеоуроке Работа с почтой.

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

1. Они им просто не нужны


2. Им не хватает возможностей календарей
3. Самая распространённая причина – пользователи просто не знают, что это такое, для чего и
что с этим всем можно сделать.

Для начала определимся – что такое календарь? Календарь – это некий аналог записной книжки, в
которую можно вносить разные события, как повторяющиеся, например, проверку релизов 1С, так и
однократные, например, встречу с клиентом или просто созвон с ним.

Но календари – это не просто записная книжка, так как, во-первых, они могут синхронизироваться
между разными устройствами, что логично и понятно, во-вторых, вы можете создавать как личные
календари, так и общие.

Страница 11 из 46

Бесплатные материалы проекта: Электронная почта: support@Kursy-po-1C.ru


http://курсы-по-1с.рф/free/ Телефоны: 8-800 1000-613, +7(495) 7777-096

Copyright © 2012-2015, Насипов Фарит и Евгений Гилев, ООО «ОдинКурс»


Курсы-по-1С.рф Профессиональные курсы по 1С
по всей России, в любое время

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

Данные в календарь могут вноситься и считываться как из мобильной 1С, так и со стационарной, и
даже обычными календарями на телефоне или через браузер.

Теперь разберемся, как же 1С умеет работать с календарем.

Вначале мы можем с вами получить список календарей:

МК = Новый МенеджерКалендарей;
МассивУчеток = МК.ПолучитьУчетныеЗаписиКалендарей();

В моем случае список календарей выглядит так:

Страница 12 из 46

Бесплатные материалы проекта: Электронная почта: support@Kursy-po-1C.ru


http://курсы-по-1с.рф/free/ Телефоны: 8-800 1000-613, +7(495) 7777-096

Copyright © 2012-2015, Насипов Фарит и Евгений Гилев, ООО «ОдинКурс»


Курсы-по-1С.рф Профессиональные курсы по 1С
по всей России, в любое время

Как видите, тут не только календари, это все те же аккаунты на вашем устройстве, просто
потенциально каждый из них может быть календарем. Но в 1С есть отдельная команда, которая
позволит нам получить именно календари:

МК = Новый МенеджерКалендарей;
СписокКалендарей = МК.НайтиКалендари();

И выполнив эту команду, мы получим примерно такой список календарей:

Каждый из этих календарей имеет набор свойств, они представлены на этом скриншоте:

Страница 13 из 46

Бесплатные материалы проекта: Электронная почта: support@Kursy-po-1C.ru


http://курсы-по-1с.рф/free/ Телефоны: 8-800 1000-613, +7(495) 7777-096

Copyright © 2012-2015, Насипов Фарит и Евгений Гилев, ООО «ОдинКурс»


Курсы-по-1С.рф Профессиональные курсы по 1С
по всей России, в любое время

Итак, из чего принципиально важного состоит календарь:

1. Локальный ключ календаря – по нему мы можем внутри системы определить, что это за
календарь, это, по сути, UID календаря
2. Данные календаря – тут описывается информация о том, кому принадлежит календарь, и его
цвет. Эта же информация дублируется и в графе ИсходныеДанные. Разница в том, что в этой
графе находятся исходные данные в том виде, в каком их дает сама система, а вот уровень
выше – это уже конвертированные данные в виде 1С.
3. Ну и учетные записи – в них находится информация о том, к какой именно учетной записи
привязан данный календарь.

В случае iOS данные календаря выглядят вот так:

Страница 14 из 46

Бесплатные материалы проекта: Электронная почта: support@Kursy-po-1C.ru


http://курсы-по-1с.рф/free/ Телефоны: 8-800 1000-613, +7(495) 7777-096

Copyright © 2012-2015, Насипов Фарит и Евгений Гилев, ООО «ОдинКурс»


Курсы-по-1С.рф Профессиональные курсы по 1С
по всей России, в любое время

Как видите, в случае iOS реквизиты Цвет и Имя остались, а вот в исходных данных система нам
дает намного больше информации. Поэтому если вы планируете использовать данные из этой
области, то тогда учитывайте, что на разных ОС они разные. А вот те, что дает 1С – одинаковые.

Календари без возможности работать с событиями не имеют смысла. Разве что кроме ситуаций,
когда нам нужно только получать данные. И вот тут возникает вопрос: как узнать, можно
редактировать календарь или нельзя?

Страница 15 из 46

Бесплатные материалы проекта: Электронная почта: support@Kursy-po-1C.ru


http://курсы-по-1с.рф/free/ Телефоны: 8-800 1000-613, +7(495) 7777-096

Copyright © 2012-2015, Насипов Фарит и Евгений Гилев, ООО «ОдинКурс»


Курсы-по-1С.рф Профессиональные курсы по 1С
по всей России, в любое время

За это отвечает следующая команда:

МК = Новый МенеджерКалендарей;
Локаль = ПолучитьЛокальныйКлючПоИмени(ИмяКалендаря);
ПроверкаДоступаКИзменению = МК.ПоддерживаетсяИзменениеСобытий(Локаль);

В результате данных действий мы получим ответ Да или Нет, т.е. поддерживается изменение
календаря, или же нам доступен только режим чтения.

И вот тут мы наблюдаем первое неудобство, которое заключается в том, что мы не можем просто
так взять и проверить календарь, так как все операции делаются с локальным ключом, который
невозможно нигде толком сохранить или получить. Поэтому требуется каждый раз по имени
календаря получать его локальный ключ и только после этого – проверять доступность работы с
календарем:

&НаКлиенте
Функция ПолучитьЛокальныйКлючПоИмени(Имя)
МК = Новый МенеджерКалендарей;
НайденныеКалендари = МК.НайтиКалендари(Имя);
Если НЕ НайденныеКалендари.Количество() Тогда
Возврат Неопределено;
Иначе
Возврат НайденныеКалендари[0]
КонецЕсли;
КонецФункции

И последний этап – работа с событиями. Как выглядят события в ОС Android:

Страница 16 из 46

Бесплатные материалы проекта: Электронная почта: support@Kursy-po-1C.ru


http://курсы-по-1с.рф/free/ Телефоны: 8-800 1000-613, +7(495) 7777-096

Copyright © 2012-2015, Насипов Фарит и Евгений Гилев, ООО «ОдинКурс»


Курсы-по-1С.рф Профессиональные курсы по 1С
по всей России, в любое время

Страница 17 из 46

Бесплатные материалы проекта: Электронная почта: support@Kursy-po-1C.ru


http://курсы-по-1с.рф/free/ Телефоны: 8-800 1000-613, +7(495) 7777-096

Copyright © 2012-2015, Насипов Фарит и Евгений Гилев, ООО «ОдинКурс»


Курсы-по-1С.рф Профессиональные курсы по 1С
по всей России, в любое время

А вот так они выглядят на iOS:

А вот исходные данные:

Страница 18 из 46

Бесплатные материалы проекта: Электронная почта: support@Kursy-po-1C.ru


http://курсы-по-1с.рф/free/ Телефоны: 8-800 1000-613, +7(495) 7777-096

Copyright © 2012-2015, Насипов Фарит и Евгений Гилев, ООО «ОдинКурс»


Курсы-по-1С.рф Профессиональные курсы по 1С
по всей России, в любое время

Как видите, ИсходныеДанные отличаются между системами, а вот общие данные, которые
конвертирует 1С, идентичны.

Тогда возникает следующий вопрос: как их создавать? Посмотрим на пример простейшего варианта
создания события:

Страница 19 из 46

Бесплатные материалы проекта: Электронная почта: support@Kursy-po-1C.ru


http://курсы-по-1с.рф/free/ Телефоны: 8-800 1000-613, +7(495) 7777-096

Copyright © 2012-2015, Насипов Фарит и Евгений Гилев, ООО «ОдинКурс»


Курсы-по-1С.рф Профессиональные курсы по 1С
по всей России, в любое время

Событие = Новый ДанныеСобытияКалендаря(НачалоСобытия,КонецСобытия);


Событие.Описание = СбОписание;
Событие.Тема = СбТема;
МК = Новый МенеджерКалендарей;
ЛокальСобытия = МК.ДобавитьСобытие(
ПолучитьЛокальныйКлючПоИмени(ВыбранныйКалендарь),Событие);

Итого требуется создать новый объект – данные события календаря, обязательно указать период,
указать тему и описание, и добавить событие в менеджер календарей.

После создания можно получить это событие таким образом:

МК = Новый МенеджерКалендарей;
ВсеСобытия = МК.НайтиСобытия(,ПолучитьЛокальныйКлючПоИмени(ВыбранныйКалендарь));
КоличествоСобытийКалендаря = ВсеСобытия.Количество();

Т.е. вызывая метод НайтиСобытия, мы получаем все события, а если нам нужно, то можем сделать
и отборы, они передаются первым параметром:

Отбор может быть установлен по следующим полям:

 Тема(Subject)
 Начало(Start)
 Конец(End)
 Место(Location)
 Описание(Description)
 ВесьДень(AllDay)
 Организатор(Organizer)
 ЧасовойПояс(TimeZone).

Подробнее – в видеоуроке Календари.

Геопозиционирование
Что такое геопозиционирование? Это всего лишь определение ваших координат, и ничего более.
Т.е. обычно, когда кто-то, кто ранее с геопозиционированием не работал «изнутри», слышит это
слово, то сразу представляет себе карту с данными, с которыми можно производить действия.

Страница 20 из 46

Бесплатные материалы проекта: Электронная почта: support@Kursy-po-1C.ru


http://курсы-по-1с.рф/free/ Телефоны: 8-800 1000-613, +7(495) 7777-096

Copyright © 2012-2015, Насипов Фарит и Евгений Гилев, ООО «ОдинКурс»


Курсы-по-1С.рф Профессиональные курсы по 1С
по всей России, в любое время

Однако, в реальности геопозиционирование – это всего лишь получение координат, и ничего более.
А вот как и где их отобразить – это уже отдельная тема.

Получить координаты можно из разных источников, таких как GPS, сетевые вышки и т.д. И источник,
даже правильнее будет сказать – определитель, координат называется провайдером.

Т.е. у нас есть несколько провайдеров, по которым мы можем определить наши координаты. Раз их
несколько, то значит, между ними есть какая-то разница, это логично, иначе достаточно было бы
одного. Основная разница между ними – это сотношение точности определения координат к
потребляемой мощности.

Чудес не бывает, поэтому самый точный провайдер потребляет больше энергии батареи, причем
зависимость нелинейная, т.е. при увеличении потребляемой энергии в несколько раз, точность
может увеличиться незначительно.

Итак, определим, какие существуют провайдеры, и рассмотрим их свойства.

ОС Android iOS WinPhone


Имя провайдера passive gps network GPS Cell GPS Cell
ИспользуетСетьПередачиДанных - + - - + - +
ИспользуетСотовуюСеть - - - - + - +
ИспользуетСпутники - + - + - + -
Платный - - - - - - -
ПоддерживаетВысоту - + + + - + -
ПоддерживаетНаправление - + + + - + -
ПоддерживаетСкорость - + + + - + -
Точность 2 1 2 8 3 8 3
Энергопотребление 1 3 1 8 3 8 3

Получить список доступных провайдеров (обратите внимание: именно доступных, а не всех, которые
есть на устройстве) можно при помощи следующего кода:

Провайдеры = СредстваГеопозиционирования.ПолучитьПровайдеров();
Для Каждого Провайдер Из Провайдеры Цикл
Сообщить(Провайдер.Имя);
КонецЦикла;

Этот код выведет имена доступных провайдеров. Что значит доступных – рассмотрим в видеоуроке.
А пока идем дальше – получили провайдеров, но что это за провайдеры? Из названия ясно, что GPS
– это навигация по спутникам, а вот Cell/network – по сети.

Страница 21 из 46

Бесплатные материалы проекта: Электронная почта: support@Kursy-po-1C.ru


http://курсы-по-1с.рф/free/ Телефоны: 8-800 1000-613, +7(495) 7777-096

Copyright © 2012-2015, Насипов Фарит и Евгений Гилев, ООО «ОдинКурс»


Курсы-по-1С.рф Профессиональные курсы по 1С
по всей России, в любое время

Рассмотрим их более детально:

GPS – работа ведется с GPS, со спутниками. Плюсы – не нужен интернет (но может использоваться
если есть), высокая точность (до единиц метров на открытой местности и несколько хуже в
застройке); минусы – большое энергопотребление и низкая скорость получения координат, старт
может быть очень долгим.

Network/Cell – получаем координаты через интернет. Причем неважно, будет это мобильный
интернет или Wi-Fi. Плюсы – быстро определяет координаты, не нужен включенный GPS. Если
интернет все равно нужен, например, для синхронизации, то можно считать, что минусов нет, хотя
точность будет хуже, чем у gps.

passive – это служебный провайдер, который используется в Android. В программировании Android


он играет роль некоего кэша, т.е. если любое другое приложение получает координаты, то Android
дублирует их сюда. Таким образом, если, например, у нас параллельно стоит программа, которая
собирает координаты, то нет необходимости и 1С использовать повторный вызов gps или network.
Т.е. цель достаточно благородная – быстрое получение данных и меньший расход батареи.

Но когда, что и как выбирать? Т.е. есть же телефоны и без GPS, или GPS может быть выключен –
как выбрать самый точный провайдер? Или наоборот, самый экономный, ведь в случае, если речь
идет о маршруте на машине, то +\- 50 метров значения не имеют . И тут мы можем использовать
специальные методы в 1С:

СамыйТочный = СредстваГеопозиционирования.ПолучитьСамогоТочногоПровайдера();
Если ЗначениеЗаполнено(СамыйТочный) Тогда
Сообщить("Самый точный:" + СамыйТочный.Имя);
Иначе
Сообщить("Не найден точный провайдер!");
КонецЕсли;

СамыйЭкономный =
СредстваГеопозиционирования.ПолучитьСамогоЭнергоЭкономичногоПровайдера();
Если ЗначениеЗаполнено(СамыйЭкономный) Тогда
Сообщить("Самый экономичный:" + СамыйЭкономный.Имя);
Иначе
Сообщить("Не найден экономный провайдер!");
КонецЕсли;

На WinPhone картина будет выглядеть вот так:

Страница 22 из 46

Бесплатные материалы проекта: Электронная почта: support@Kursy-po-1C.ru


http://курсы-по-1с.рф/free/ Телефоны: 8-800 1000-613, +7(495) 7777-096

Copyright © 2012-2015, Насипов Фарит и Евгений Гилев, ООО «ОдинКурс»


Курсы-по-1С.рф Профессиональные курсы по 1С
по всей России, в любое время

Впрочем, ничего неожиданного, однако если бы GPS был выключен, то самым точным провайдером
был бы Cell. А вот если бы навигация была выключена на устройстве, то на всех ОС вернулось бы
Неопределено. И даже на Android. В случае Android нам был бы доступен провайдер passive, но он
буферный, поэтому по нему мы не можем обновить координаты.
Перейдем к теме получения координат. Координаты можно получить двумя путями:
1. Получить текущее местоположение
2. Получить последнее местоположение.
В чем разница: получая текущее местоположение, мы обновляем координаты, т.е. опрашиваем
спутники или сеть, а это требует дополнительного времени и энергии от батареи. Однако каждый
провайдер хранит в себе последние полученные координаты и дату их обновления. Таким образом,
если не нужно получать координаты с интервалом 5 секунд, то можно просто получить последние
координаты из провайдера, посмотреть время, и если нас устроит интервал, то применить их. А
откуда они там берутся? Ну все просто, есть множество программ, которые постоянно опрашивают
ваше местоположение, например, навигаторы. Поэтому нет смысла постоянно дополнительно
опрашивать местоположение, если это уже делает другая программа.
Обратимся к коду:
Провайдеры = СредстваГеопозиционирования.ПолучитьПровайдеров();
Для каждого Провайдер Из Провайдеры Цикл
Данные =
СредстваГеопозиционирования.ПолучитьПоследнееМестоположение(Провайдер.Имя);
Если НЕ ЗначениеЗаполнено(Данные) Тогда
Сообщить("Не удалось получить координаты!");
Возврат;
КонецЕсли;
КонецЦикла;

Страница 23 из 46

Бесплатные материалы проекта: Электронная почта: support@Kursy-po-1C.ru


http://курсы-по-1с.рф/free/ Телефоны: 8-800 1000-613, +7(495) 7777-096

Copyright © 2012-2015, Насипов Фарит и Евгений Гилев, ООО «ОдинКурс»


Курсы-по-1С.рф Профессиональные курсы по 1С
по всей России, в любое время

Или, если мы хотим получить последние координаты, нужно выполнить такой код:

Провайдер = СредстваГеопозиционирования.ПолучитьСамогоТочногоПровайдера();
Если СредстваГеопозиционирования.ОбновитьМестоположение(Провайдер.Имя,"10") Тогда
Сообщить("Данные получены!");
иначе
Сообщить("Ошибка обновления данных!");
КонецЕсли;

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

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

Для этого в 1С есть встроенная функция:

&НаКлиенте
Процедура СформироватьСписокКоординат(Команда)
ПоказатьНаКарте(СформироватьСписокКоординатНаСервере());
КонецПроцедуры

&НаСервере
Функция СформироватьСписокКоординатНаСервере()

Список = Новый СписокЗначений;


ВыборкаРегистра = РегистрыСведений.Координаты.Выбрать();
Пока ВыборкаРегистра.Следующий() Цикл
Список.Добавить(Новый ГеографическиеКоординаты(ВыборкаРегистра.Широта,
ВыборкаРегистра.Долгота),ВыборкаРегистра.Период);
КонецЦикла;
Возврат Список;
КонецФункции

Показать на карте можно список значений, выглядеть это будет на Android вот так (учтите, в
скомпилированной версии приложения, если вы не указали ключ API функций работы с Google
картами, это работать не будет):

Страница 24 из 46

Бесплатные материалы проекта: Электронная почта: support@Kursy-po-1C.ru


http://курсы-по-1с.рф/free/ Телефоны: 8-800 1000-613, +7(495) 7777-096

Copyright © 2012-2015, Насипов Фарит и Евгений Гилев, ООО «ОдинКурс»


Курсы-по-1С.рф Профессиональные курсы по 1С
по всей России, в любое время

В случае iOS будет вот такая картинка:

А вот на WinPhone проверить не удается.

Но получать координаты по одной – затея не очень удобная, именно поэтому, если необходимо
собрать трек, лучше всего использовать специальную функцию, которая для этого и предназначена:

Страница 25 из 46

Бесплатные материалы проекта: Электронная почта: support@Kursy-po-1C.ru


http://курсы-по-1с.рф/free/ Телефоны: 8-800 1000-613, +7(495) 7777-096

Copyright © 2012-2015, Насипов Фарит и Евгений Гилев, ООО «ОдинКурс»


Курсы-по-1С.рф Профессиональные курсы по 1С
по всей России, в любое время

&НаКлиенте
Процедура ВключитьАвтоЗаписьКоординат(Команда)
Провайдер = СредстваГеопозиционирования.ПолучитьСамогоТочногоПровайдера();
Оп = Новый ОписаниеОповещения("ОбработкаОповещенияПровайдера",ЭтаФорма, "Некая
строка");
СредстваГеопозиционирования.ПодключитьОбработчикИзмененияМестоположения(Оп,
Провайдер.Имя, 100,10);
КонецПроцедуры

&НаКлиенте
Процедура ОбработкаОповещенияПровайдера(ИмяПровайдера,ДанныеМестоположения,
ДопПараметр) Экспорт
ЗаписатьПуть(ДанныеМестоположения);
КонецПроцедуры

&НаКлиенте
Процедура ОтключитьАвтоЗаписьКоординат(Команда)
СредстваГеопозиционирования.ОтключитьОбработчикИзмененияМестоположения();
КонецПроцедуры

Итак, что мы делаем в этом коде? Во-первых, создаем оповещение, в котором указываем, какая
процедура будет слушать изменение координат. А далее уже – подключаем обработчик изменения
местоположения. И тут обратите внимание на последние два параметра. Эти параметры ставят
ограничение на обновление координат, а именно:

1. Ограничение по местоположению (предпоследний параметр) – тут указываем точность в


метрах
2. Ограничение по частоте вызова.

Это все значит, что если мы поставим ограничение в 1 км, то функция отработает событие, только
если преодолеть расстояние более 1 км от последней полученной точки. А таймаут – это частота, с
которой будет обновляться провайдер. Причем провайдер могут обновлять и другие приложения, не
забывайте об этом.

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

&НаКлиенте
Процедура ПоискАдресаПоКоординате()
Адрес = ПолучитьАдресПоМестоположению(Новый ГеографическиеКоординаты(Широта,
Долгота));
Сообщить(?(Адрес = Неопределено, "Не удалось получить адрес",
Адрес.Представление));
КонецПроцедуры

Страница 26 из 46

Бесплатные материалы проекта: Электронная почта: support@Kursy-po-1C.ru


http://курсы-по-1с.рф/free/ Телефоны: 8-800 1000-613, +7(495) 7777-096

Copyright © 2012-2015, Насипов Фарит и Евгений Гилев, ООО «ОдинКурс»


Курсы-по-1С.рф Профессиональные курсы по 1С
по всей России, в любое время

&НаКлиенте
Процедура ПолучитьКоординатыПоАдресу()
Структура = Новый
Структура("Страна,Регион,Город,Улица,Дом,Индекс,Представление","Россия","","Санкт-
Петербург г","Добровольцев ул","1","190000","190000, Санкт-Петербург г, Москва, Добровольцев ул,
дом № 1");
Адрес = Новый ДанныеАдреса(Структура);
Координаты = ПолучитьМестоположениеПоАдресу(Адрес);
Если Координаты = Неопределено Тогда
Сообщить("Не удалось получить координаты");
Иначе
ПоказатьНаКарте(Координаты);
КонецЕсли;
КонецПроцедуры

Ничего сложного, однако есть неудобства, такие как доступ к интернету и доступность только на
мобильном устройстве. Хотя, если бы адреса или координаты можно было получать на
стационарной 1С, это было бы не плохим дополнением.

Подробнее – в видеоуроке Геопозиционирование.

Уведомления
С недавних пор в 1С появился новый механизм – это механизм уведомлений. Проще всего его
представить в виде будильника с напоминанием для себя – это локальные уведомления, либо SMS
от друга – это глобальное уведомление.

Зачем нужны локальные уведомления? Специфика мобильных ОС такова, что как только вы из
приложения выходите, это приложение как бы «замораживается», в случае iOS – так вообще
помещается в «криогенную камеру», так как оно не работает, пока находится в неактивном
состоянии. Однако 1С – это такое приложение, которое требует работы с периодическими задачами,
например, синхронизацией, но если приложение находится в стазисе, то оно не может просто само
себя вызвать, поэтому устанавливается специальная служба, которая может периодически «будить»
1С.

Выглядит это так: устанавливается несколько разных уведомлений с разными задачами и по


разному расписанию, потом, когда приходит время, указанное в уведомлениях, идет оповещение 1С,
и 1С может его обработать.

Страница 27 из 46

Бесплатные материалы проекта: Электронная почта: support@Kursy-po-1C.ru


http://курсы-по-1с.рф/free/ Телефоны: 8-800 1000-613, +7(495) 7777-096

Copyright © 2012-2015, Насипов Фарит и Евгений Гилев, ООО «ОдинКурс»


Курсы-по-1С.рф Профессиональные курсы по 1С
по всей России, в любое время

Но есть еще и глобальные уведомления. Отличие их от локальных в том, что они отправляются
извне, например, со стационарной 1С. Когда это нужно? Представим себе, что у нас 500 торговых
агентов, и нам нужно настроить с ними синхронизацию документов и остатков.

Если использовать только локальные уведомления, то мы вынуждены будем выполнять обмен,


допустим, каждые 5 минут, нагрузка по 500 соединений каждых 5 минут, причем это значит, что к
базе может одновременно подключаться для обмена сразу 500 человек. По факту – в этом нет
никакого смысла, так как для большей части из них – может не быть никаких изменений, поэтому
вызов будет сделан «в холостую».

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

Как выглядит работа с локальными уведомлениями? Все очень просто: нужно создать вначале
уведомление, а потом добавить его к локальным.

Выглядит это так:

&НаКлиенте
Процедура ЛокальноеУведомление(Команда)
Уведомление = СоздатьУведомление();
ДоставляемыеУведомления.ДобавитьЛокальноеУведомление(Уведомление);
КонецПроцедуры

&НаКлиенте
Функция СоздатьУведомление()
Уведомление = Новый ДоставляемоеУведомление;
Уведомление.Заголовок = ЗаголовокСообщения;
Уведомление.Текст = Текст;
Уведомление.Данные = Данные;
Уведомление.ДатаПоявленияУниверсальноеВремя = ?(ДатаПоявления = Дата(1,1,1),
УниверсальноеВремя(ТекущаяДата()) + 10, ДатаПоявления);;
Уведомление.ИнтервалПовтора = ИнтервалПовтора;
Уведомление.ЗвуковоеОповещение = ЗвуковоеОповещение.ПоУмолчанию;
Уведомление.Наклейка = 1;
Возврат Уведомление;
КонецФункции

Т.е. мы изначально создаем уведомление, а потом добавляем его к локальным уведомлениям.

Но так как это уведомления, то они отображаются только в том случае, если вы сейчас не
работаете с 1С, т.е. или приложение свернуто, или же экран заблокирован.

На экране блокировки это выглядит вот так:

Страница 28 из 46

Бесплатные материалы проекта: Электронная почта: support@Kursy-po-1C.ru


http://курсы-по-1с.рф/free/ Телефоны: 8-800 1000-613, +7(495) 7777-096

Copyright © 2012-2015, Насипов Фарит и Евгений Гилев, ООО «ОдинКурс»


Курсы-по-1С.рф Профессиональные курсы по 1С
по всей России, в любое время

А в строке событий – вот так:

Страница 29 из 46

Бесплатные материалы проекта: Электронная почта: support@Kursy-po-1C.ru


http://курсы-по-1с.рф/free/ Телефоны: 8-800 1000-613, +7(495) 7777-096

Copyright © 2012-2015, Насипов Фарит и Евгений Гилев, ООО «ОдинКурс»


Курсы-по-1С.рф Профессиональные курсы по 1С
по всей России, в любое время

На iOS устройствах, это выглядит приблизительно так же. Экран блокировки:

Страница 30 из 46

Бесплатные материалы проекта: Электронная почта: support@Kursy-po-1C.ru


http://курсы-по-1с.рф/free/ Телефоны: 8-800 1000-613, +7(495) 7777-096

Copyright © 2012-2015, Насипов Фарит и Евгений Гилев, ООО «ОдинКурс»


Курсы-по-1С.рф Профессиональные курсы по 1С
по всей России, в любое время

На экране уведомлений:

Но, если вы обратили внимание, есть еще и такой параметр, как наклейка. Наклейка – это число, и
проявляется оно вот в таком виде на Android:

И вот в таком виде на iOS:

Кроме этого, мы можем задавать периодичность уведомлений, но не чаще, чем раз в минуту.
Подробнее про интервал можно почитать в справке 1С, на удивление, там написано все достаточно
четко и понятно.

Страница 31 из 46

Бесплатные материалы проекта: Электронная почта: support@Kursy-po-1C.ru


http://курсы-по-1с.рф/free/ Телефоны: 8-800 1000-613, +7(495) 7777-096

Copyright © 2012-2015, Насипов Фарит и Евгений Гилев, ООО «ОдинКурс»


Курсы-по-1С.рф Профессиональные курсы по 1С
по всей России, в любое время

Кроме этого, мы можем и просто так устанавливать наклейки, без уведомлений. И даже получать их
значение:

&НаКлиенте
Процедура УстановитьНаклейку(Команда)
ДоставляемыеУведомления.УстановитьНаклейку(Наклейка);
КонецПроцедуры

&НаКлиенте
Процедура ПолучитьТекущуюНаклейку(Команда)
ТекНаклейка = ДоставляемыеУведомления.ПолучитьНаклейку();
КонецПроцедуры

Допустим, в наклейке можно указывать количество задач, которые надо закрыть агенту, или
документов сбора, которые надо собрать кладовщику, ну и т.д.

Но раз мы можем ставить периодичность уведомления, как, в принципе, и с любой другой


периодичной функцией, мы должны уметь их отключать. И это можно сделать вот такой командой:

ДоставляемыеУведомления.ОтменитьЛокальныеУведомления();

В результате будут отменены все уведомления, которые еще не наступили.

Однако стоит еще раз отметить, что уведомления – это не push сообщения!

Потому что они отображаются только тогда, когда 1С свернута.

А раз это не push сообщения, то, значит, у них другой функционал. И самый приближенный объект
из уже знакомых нам, это:

ПодключитьОбработчикОжидания(<ИмяПроцедуры>, <Интервал>, <Однократно>)

Т.е. у нас есть некая процедура, которую мы запускаем с неким интервалом или же однократно, и за
счет того, что у нас есть дата, с какого момента начать оповещение, оповещения взяли еще немного
от регламентных заданий. Ну и плюс они выполняются в фоне.

Таким образом, основная задача локальных уведомлений – это не только оповещения


пользователя, а еще и запуск неких заданий с некими параметрами.

А значит, нужно уметь обрабатывать вызовы. Выполняется это при помощи следующего кода:

&НаКлиенте
Процедура ПодключитьОбработчикУведомлений(Команда)
Оп = Новый ОписаниеОповещения("ОбработчикЛокальныхУведомлений", ОбщиеФункции,
"Этот обработчик вызван из формы");
ДоставляемыеУведомления.ПодключитьОбработчикУведомлений(Оп);
КонецПроцедуры

Страница 32 из 46

Бесплатные материалы проекта: Электронная почта: support@Kursy-po-1C.ru


http://курсы-по-1с.рф/free/ Телефоны: 8-800 1000-613, +7(495) 7777-096

Copyright © 2012-2015, Насипов Фарит и Евгений Гилев, ООО «ОдинКурс»


Курсы-по-1С.рф Профессиональные курсы по 1С
по всей России, в любое время

&НаКлиенте
Процедура ОтключитьОбработчикУведомлений(Команда)
Оп = Новый ОписаниеОповещения("ОбработчикЛокальныхУведомлений", ОбщиеФункции);
ДоставляемыеУведомления.ОтключитьОбработчикУведомлений(Оп);
КонецПроцедуры

В общем модуле ОбщиеФункции, клиентском и неглобальном, вот такая функция, но она может быть
и в форме:

&НаКлиенте
Процедура ОбработчикЛокальныхУведомлений(Уведомление,Локальное,Показано, ДопПараметр)
Экспорт
ТекстСообщения = "";
ТекстСообщения = ТекстСообщения + "Дата: " + ТекущаяДата() + Символы.ПС;
ТекстСообщения = ТекстСообщения + "Вызов из: " + ДопПараметр + Символы.ПС;
ТекстСообщения = ТекстСообщения + "Текст: " + Уведомление.Текст + Символы.ПС;

ТекстСообщения = ТекстСообщения + "Данные: " + Уведомление.Данные + Символы.ПС;

ТекстСообщения = ТекстСообщения + "Локальное: "+ Локальное + Символы.ПС;


ТекстСообщения = ТекстСообщения + "Показано: " + Показано + Символы.ПС;
Сообщить(ТекстСообщения);
КонецПроцедуры

Следует обратить внимание на то, что если подключено несколько обработчиков, то доходить
оповещение будет только в первый подключенный – это первое, и второе – все пропущенные
оповещения придут сразу, как только вы объявите функцию их обработки.

Отдельно стоит поговорить про звуковое оповещение, как вы заметили – у оповещений есть такой
параметр как ЗвуковоеОповещение, и он может иметь два значения, которые соответствуют
стандартному сигналу на устройстве, или же без звукового оповещения. Однако этот параметр
может быть и строкой, в этом случае нужно прикрепить звуковые файлы к компилированному
приложению и указать строкой их полное имя. Этот подход не работает в мобильной платформе для
разработчика, это ограничение ОС, которое заключается в том, что иконку оповещения и звук можно
брать только из самого приложения. Звук в 1С реализовали, осталось дело за иконкой.

Подробнее – в видеоуроке Уведомления.

Страница 33 из 46

Бесплатные материалы проекта: Электронная почта: support@Kursy-po-1C.ru


http://курсы-по-1с.рф/free/ Телефоны: 8-800 1000-613, +7(495) 7777-096

Copyright © 2012-2015, Насипов Фарит и Евгений Гилев, ООО «ОдинКурс»


Курсы-по-1С.рф Профессиональные курсы по 1С
по всей России, в любое время

Глобальные уведомления
К глобальным уведомлениям относятся уведомления, которые были сделаны вне контекста
текущего мобильного устройства, т.е. были вызваны извне.

Выглядит это следующим образом:

1. Мы получаем ID нашего приложения в сервисе отправок (GCM, APN)


2. На основании этого ID на мобильном устройстве получаем его уникальный ключ, который
передаем туда, откуда будет идти отправка, например, в центральную базу
3. Далее, из центральной базы отправляем сообщение уже непосредственно в сервис
оповещений
4. Специальные службы, которые стоят на мобильном устройстве (не 1С), периодически
проверяют эти сервисы на наличие сообщений
5. Как только сообщение зарегистрировано, служба на телефоне получает это сообщение и
оповещает 1С.

Это все очень грубо, но передает основную суть, а именно: сервер должен иметь выход на сервер
этих служб, мобильное устройство должно иметь выход в интернет к этим службам, и последнее, но
самое главное – совсем не важно, какой у вас интернет на мобильном устройстве – wi-fi или
мобильный, динамический у вас IP или статический, белый или нет – все неважно.

Но так как мы используем внешние сервисы, нужно научиться с ними работать.

Сервис GCM
Сервис GCM (Google Cloud Message) используется в устройствах на базе Android.

Теперь поэтапно рассмотрим все пункты, которые необходимо выполнить, чтобы получить
желаемый результат:

1. Переходим в консоль разработчиков Google. Это можно делать под любым аккаунтом. Но в
реальных проектах надо использовать специальный аккаунт той фирмы, для которой вы
разрабатываете решение.
2. Необходимо создать новый проект, в нашем случае – проект можно представить как аналитику
учета, т.е. по проекту мы можем видить статистику отправлений и т.д., поэтому, если вы
планируете разрабатывать несколько решений, то лучше всего будет под каждое решение
создавать свой проект. И так, создаем проект:

Страница 34 из 46

Бесплатные материалы проекта: Электронная почта: support@Kursy-po-1C.ru


http://курсы-по-1с.рф/free/ Телефоны: 8-800 1000-613, +7(495) 7777-096

Copyright © 2012-2015, Насипов Фарит и Евгений Гилев, ООО «ОдинКурс»


Курсы-по-1С.рф Профессиональные курсы по 1С
по всей России, в любое время

3. Должно появиться вот такое окно менеджера создания проектов:

Страница 35 из 46

Бесплатные материалы проекта: Электронная почта: support@Kursy-po-1C.ru


http://курсы-по-1с.рф/free/ Телефоны: 8-800 1000-613, +7(495) 7777-096

Copyright © 2012-2015, Насипов Фарит и Евгений Гилев, ООО «ОдинКурс»


Курсы-по-1С.рф Профессиональные курсы по 1С
по всей России, в любое время

4. Проект создан, теперь можем вернуться на домашний экран:

5. И у нас должен появиться проект на рабочем столе:

Страница 36 из 46

Бесплатные материалы проекта: Электронная почта: support@Kursy-po-1C.ru


http://курсы-по-1с.рф/free/ Телефоны: 8-800 1000-613, +7(495) 7777-096

Copyright © 2012-2015, Насипов Фарит и Евгений Гилев, ООО «ОдинКурс»


Курсы-по-1С.рф Профессиональные курсы по 1С
по всей России, в любое время

6. Нажимаем на проект и ищем номер проекта, в нашем случае это номер 896392358441. Для
каждого проекта генерируется свой номер. Именно этот номер мы и будем указывать в
мобильной 1С, для того чтобы получить идентификатор приложения.

Но это не все, теперь нам необходимо включить возможность отправки сообщений, т.е. работы с API
функциями.

7. Для этого нажимаем на ссылку:

Страница 37 из 46

Бесплатные материалы проекта: Электронная почта: support@Kursy-po-1C.ru


http://курсы-по-1с.рф/free/ Телефоны: 8-800 1000-613, +7(495) 7777-096

Copyright © 2012-2015, Насипов Фарит и Евгений Гилев, ООО «ОдинКурс»


Курсы-по-1С.рф Профессиональные курсы по 1С
по всей России, в любое время

8. В результате должно открыться меню с разными сервисами, ищем среди них такое меню и
нажимаем на нужную нам опцию:

И включаем ее:

Теперь переходим на вкладку создания ключей и создаем нужный нам ключ:

Страница 38 из 46

Бесплатные материалы проекта: Электронная почта: support@Kursy-po-1C.ru


http://курсы-по-1с.рф/free/ Телефоны: 8-800 1000-613, +7(495) 7777-096

Copyright © 2012-2015, Насипов Фарит и Евгений Гилев, ООО «ОдинКурс»


Курсы-по-1С.рф Профессиональные курсы по 1С
по всей России, в любое время

А именно – API key:

После этого нас спросят, для кого мы хотим сгенерировать ключ? В нашем случае отправлять
данные будет именно сервер, поэтому для него и генерируем:

Далее необходимо указать имя ключа и IP сервера, откуда мы можем использовать данный ключ:

Страница 39 из 46

Бесплатные материалы проекта: Электронная почта: support@Kursy-po-1C.ru


http://курсы-по-1с.рф/free/ Телефоны: 8-800 1000-613, +7(495) 7777-096

Copyright © 2012-2015, Насипов Фарит и Евгений Гилев, ООО «ОдинКурс»


Курсы-по-1С.рф Профессиональные курсы по 1С
по всей России, в любое время

Если у нас динамический IP сервера, но мы знаем в каких пределах, то можно указать это тут, если
он статический, то просто указываем IP сервера (не забываем про тестовые сервера и резервные).
Но в нашем случае, так как это тестовый пример, мы просто укажем диапазон 0.0.0.0/0, что
соответствует любому IP адресу.

В итоге мы увидим ключ нашего сервера:

Т.е. при отправке сообщений со стационарной 1С, нам необходимо будет указывать ключ:

AIzaSyCkA5qHGw_TuhsuKvb8UIAVcROYEWoiQQU

А для получения ID устройства, нам надо будет указать в мобильном устройстве ID проекта, т.е.:

896392358441

Запомните это и не путайте их. Кроме этого – данная информация является конфиденциальной.

После того, как мы сделали это – мы можем протестировать все следующим кодом:

//Получаем ID на мобильном клиенте, сериализуем его в строку


&НаКлиенте
Процедура ПолучитьIDУстройства(Команда)
#Если МобильноеПриложениеКлиент Тогда
ID =
ДоставляемыеУведомления.ПолучитьИдентификаторПодписчикаУведомлений(IDПроекта);
IDУстройства = СервисныйМодуль.Сериализовать(ID);
#КонецЕсли
КонецПроцедуры
//На стационарном компьютере – десериализуем, и отправляем сообщение
&НаКлиенте
Процедура ОтправитьГлобальноеУведомление(Команда)
#Если ТонкийКлиент ИЛИ ТолстыйКлиент Тогда
ID = СервисныйМодуль.Десериализовать(IDУстройства);
Уведомление = СоздатьУведомление();
Уведомление.Получатели.Добавить(ID);
ОтправкаДоставляемыхУведомлений.Отправить(Уведомление,КлючСервера);
#КонецЕсли
КонецПроцедуры

Страница 40 из 46

Бесплатные материалы проекта: Электронная почта: support@Kursy-po-1C.ru


http://курсы-по-1с.рф/free/ Телефоны: 8-800 1000-613, +7(495) 7777-096

Copyright © 2012-2015, Насипов Фарит и Евгений Гилев, ООО «ОдинКурс»


Курсы-по-1С.рф Профессиональные курсы по 1С
по всей России, в любое время

После этого должно прийти уведомление на мобильное устройство.

Подробнее – в видеоуроке Глобальные уведомления.

Сервис APN
Этот сервис используется на устройствах под управлением iOS. Однако следует учесть, что для
работы с ним необходимо иметь купленную лицензию для разработчиков, без неё ничего не выйдет.

Сервис уведомлений от 1С
Этот сервис сам по себе не доставляет уведомления, он создаёт прослойку между GCM и APN и
использует их данные. Для того что бы воспользоваться этим сервисом, необходимо выполнить все
действия, которые мы уже рассмотрели ранее.

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

В частности – поговорим про таблицы (обновление, контекстное меню), страницы (слайд),


обработчик поворота экрана и картинки (шаблоны и наборы).

Подробнее – в видеоуроке Прочие изменения в формах.

Страница 41 из 46

Бесплатные материалы проекта: Электронная почта: support@Kursy-po-1C.ru


http://курсы-по-1с.рф/free/ Телефоны: 8-800 1000-613, +7(495) 7777-096

Copyright © 2012-2015, Насипов Фарит и Евгений Гилев, ООО «ОдинКурс»


Курсы-по-1С.рф Профессиональные курсы по 1С
по всей России, в любое время

Приложение 1. Маска ввода


Так как принцип любого мобильного приложения – меньше ввода, больше выбора, то такое понятие
как маска ввода мы не можем обойти.

Что такое маска и для чего она нужна? Давайте представим себе такую задачу: у нас есть некоторое
текстовое поле, например – основание выдачи, куда мы должны внести некие данные. К примеру,
есть сотрудник, который выдает некий товар, но чтобы он его выдал, ему нужно ввести основание
выдачи, которое выглядит таким образом:

«Документ №123334, от 01.04.2015. Склад СТ-05»

В данном примере полужирным выделены те данные, которые могут меняться.

Конечно, можно сделать и отдельные три поля, но смысла в этом нет, так как эти сведения по
отдельности не несут никакой аналитической информации, а создание трех отдельных полей лишь
займет место, которое нам и так нужно.

Что же тут можно сделать? Просто использовать маску ввода. Давайте обратимся к справке:

Расширение поля формы для поля ввода. Маска (Form field extension for a text box.Mask)

Маска (Mask)

Использование:

Чтение и запись.

Описание:

Тип: Строка.

Содержит посимвольную строку маски интерактивного ввода текста в поле.

В строке маски допустимо использование следующих специальных символов:

! – любой введенный символ преобразуется в верхний регистр

9 – допустимо ввести произвольный символ цифры

# – допустимо ввести произвольный символ цифры или – (знак минус) или + (знак плюс) или пробел

N – допустимо ввести любые алфавитно-цифровые символы (буквы или цифры)

U – допустимо ввести любые алфавитно-цифровые символы (буквы или цифры) и любой введенный
символ преобразуется в верхний регистр

X (латинского алфавита) – допустимо ввести произвольный символ

^ – недопустимо вводить этот символ интерактивно пользователем, он может устанавливаться


только из языка

Страница 42 из 46

Бесплатные материалы проекта: Электронная почта: support@Kursy-po-1C.ru


http://курсы-по-1с.рф/free/ Телефоны: 8-800 1000-613, +7(495) 7777-096

Copyright © 2012-2015, Насипов Фарит и Евгений Гилев, ООО «ОдинКурс»


Курсы-по-1С.рф Профессиональные курсы по 1С
по всей России, в любое время

h – допустим ввод символов обозначения шестнадцатеричных цифр

@ – допустимо ввести любые алфавитно-цифровые символы (буквы или цифры) в верхнем регистре
или пробел.

При помещении значения из поля ввода с маской в текстовый реквизит, связанный с этим полем
ввода, происходит следующее преобразование: на тех позициях, где в маске стоит символ @, а в
строке пробел, пробел удаляется. Если в маске из специальных символов используются только
символы @, то все символы текста, соответствующие символам маски, не являющимся
специальными символами, удаляются после последнего непустого блока из символов @. Например,
при маске @@.@@.@@. текст 41. 2. . преобразуется в 41.2.

Для того чтобы использовать в маске один из специальных символов, нужно ставитьь перед ним
символ \.

Допускается указание нескольких масок в одном параметре. Маски разделяются символом ;. В этом
случае использоваться будет та маска, к которой подходит введенный текст.

В описании все достаточно качественно расписано, но все-таки попробуем написать маску на


данный случай, а выглядеть она будет так:

Документ № 999999, от 99.99.9999. Склад XX-99

Тут, опять-таки, полужирным выделены те части, которые могут меняться, и после того, как вы
введете данную маску в поле маски:

Страница 43 из 46

Бесплатные материалы проекта: Электронная почта: support@Kursy-po-1C.ru


http://курсы-по-1с.рф/free/ Телефоны: 8-800 1000-613, +7(495) 7777-096

Copyright © 2012-2015, Насипов Фарит и Евгений Гилев, ООО «ОдинКурс»


Курсы-по-1С.рф Профессиональные курсы по 1С
по всей России, в любое время

В режиме предприятия вы увидите, что все, что не касалось спецсимволов, отобразилось в виде
подсказки:

И удалить эти данные вы уже не сможете, но, как только вы их начнете сюда вводить, курсор сам
выровняется в нужные места. Вот так работает маска. Однако, я думаю, что многие согласятся со
мной, что приведенный выше пример – слишком уже надуманный. А где можно реально применить
это? Особенно в мобильной платформе?

Например, когда вносятся контактные данные, номер телефона – это идеальный кандидат на
использование маски. Возьмем интернациональную компанию, которая работает в Украине и в
России, или мы просто пишем приложение для нескольких стран. И кроме этого – номер телефона
может указываться как некий внутренний, что особенно актуально для IP телефонии. Ну и куда же
без некоего добавочного номера?

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

В России типичный номер мобильного телефона выглядит как:

+7 9хх ххх-хх-хх

Где «+7» – код страны, «9хх» – код мобильного оператора, ну а дальше – номер абонента.

В случае Украины это будет выглядеть вот так:

+380 хх ххх-хх-хх

Где «+380» – код страны, далее две цифры кода оператора или региона, а потом – номер телефона.
Однако принятый формат – (0хх) ххх-хх-хх.

В итоге можно выделить общую маску, которая будет выглядеть как:

(999) 999-99-99, т.е. в таком формате и будут записываться все номера, однако, что делать, если
нужно использовать добавочный номер?

В таком случае мы можем применить несколько масок, судя по данным из справки, по такому типу:

+7(\999)999-99-99;+38(099)999-99-99;+7(999)999-99-99 доб. 999;+38(099)999-99-99 доб. 999;

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

Страница 44 из 46

Бесплатные материалы проекта: Электронная почта: support@Kursy-po-1C.ru


http://курсы-по-1с.рф/free/ Телефоны: 8-800 1000-613, +7(495) 7777-096

Copyright © 2012-2015, Насипов Фарит и Евгений Гилев, ООО «ОдинКурс»


Курсы-по-1С.рф Профессиональные курсы по 1С
по всей России, в любое время

Обратите внимание на два варианта маски:

+7(\999)999-99-99 И +7(999)999-99-99 доб. 999;

А если быть точнее, то первая девятка в скобках, так как «9», в данном случае – это спецсимвол,
который обозначает любое число, в первом случае «\9» означает что «9» будет нередактируемая, а
во втором случае – там будет пусто, и пользователь должен ввести некое число.

Было бы отлично, если бы маску вынесли в оформление, это более логично, тогда мы могли бы
настраивать по правилам, какую маску когда использовать, а так – есть только туманное объяснение
из справки 1С: «В этом случае использоваться будет та маска, к которой подходит введенный
текст».

Относительно мобильной платформы следует отметить, что в каждой минорной версии есть некий
уникальный баг с масками, например, если в 8.3.7.39 указать маску вида: (999) 999-99-99, то вы не
сможете ввести два последних символа, а если указать (999) 999/99/99, то все будет отлично. То же
самое касается разделителя в виде «=», но если поставить пробел, то опять-таки не сможете ввести
два последних символа. Поэтому, если вы все-таки используете маски, с выходом минорных версий
тестируйте этот функционал во избежание проблем.

В заключение: наверное, все выше описанное – и есть та причина, по которой разработчики очень
редко пользуются масками.

Практические задания
Задание 4.1 Маршрут
Соберите координаты за некоторое время и постройте по ним маршрут.

В отчете – приложите скриншот построенного маршрута.

Страница 45 из 46

Бесплатные материалы проекта: Электронная почта: support@Kursy-po-1C.ru


http://курсы-по-1с.рф/free/ Телефоны: 8-800 1000-613, +7(495) 7777-096

Copyright © 2012-2015, Насипов Фарит и Евгений Гилев, ООО «ОдинКурс»


Курсы-по-1С.рф Профессиональные курсы по 1С
по всей России, в любое время

Задание 4.2 Журнал звонков


Напишите приложение, которое будет получать список совершенных звонков за период, и выведите
отчет, в котором будет общее количество минут звонка в разрезе операторов мобильной связи.

Страница 46 из 46

Бесплатные материалы проекта: Электронная почта: support@Kursy-po-1C.ru


http://курсы-по-1с.рф/free/ Телефоны: 8-800 1000-613, +7(495) 7777-096

Copyright © 2012-2015, Насипов Фарит и Евгений Гилев, ООО «ОдинКурс»

Вам также может понравиться