SMSСообщение.На основании записи в журнале СМС

Конструкторы

Создает SMS-сообщение на основе записи журнала SMS. Свойства объекта заполняются по следующим принципам: Получатели - из поля НомераТелефонов копируются все цифровые номера. Имена сервисов, на которые невозможно отправить сообщения не копируются; Текст - получается из поля Текст; Вложения - вложения копируются из поля Вложения, если параметр <КопироватьВложения> установлен в значение Истина; Поля Отправитель и ДатаПолучения не заполняются.

Синтаксис

Новый SMSСообщение(<ЗаписьЖурналаSMS>, <КопироватьВложения>)
Полное описание, параметры и ограничения

SMSСообщение.На основании записи в журнале СМС

SMSСообщение (SMSMessage)

На основании записи в журнале СМС

Доступен, начиная с версии 8.3.11.

Синтаксис:
Новый SMSСообщение(<ЗаписьЖурналаSMS>, <КопироватьВложения>)
Параметры:

<ЗаписьЖурналаSMS> (обязательный)
Запись в журнале SMS-сообщений.

<КопироватьВложения> (необязательный)
Тип: Булево.
Указывает, будут ли скопированы вложения и поля Вложения.
Истина - вложения будут скопированы.
Значение по умолчанию: Ложь.
Описание:

Создает SMS-сообщение на основе записи журнала SMS. Свойства объекта заполняются по следующим принципам:
Получатели - из поля НомераТелефонов копируются все цифровые номера. Имена сервисов, на которые невозможно отправить сообщения не копируются;

Текст - получается из поля Текст;

Вложения - вложения копируются из поля Вложения, если параметр <КопироватьВложения> установлен в значение Истина;

Поля Отправитель и ДатаПолучения не заполняются.

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

Доступен, начиная с версии 8.3.11.

Методическая информация

Практические примеры

Своё входящее SMS на Android: настоящий журнал, расчёт и локальный черновик

В отдельном своём Android-журнале найти одно подготовленное SMS OWN85-SMS;6;250 по точным трём полям. Проверить все семь настоящих readonly свойств записи, создать SMSСообщение из неё без вложений, вычислить 6 × 250 = 1500 из фактического текста и изменить только локальную копию. Новым поиском проверить сохранение собственного исходного текста; ничего не отправлять.

Где и как запускать

Только мобильный клиент/мобильное приложение(клиент) на собственном Android. Полный &НаКлиенте модуль своей управляемой формы; вся работа с журналом и номером остаётся на клиенте, без серверного вызова.

Подготовка

  1. Будущий ручной опыт, не запуск здесь: отдельный собственный Android-телефон с телефонным модулем и отдельной учебной SIM, без личной переписки, контактов и рабочих данных. Второй собственный учебный телефон нужен только для одного ручного SMS. Не используйте ежедневный телефон и не удаляйте его журнал ради подготовки.

  2. В Конфигураторе создайте новую пустую собственную конфигурацию УчебныйЖурналSMS85, версия OWN85:android:sms-journal. Основной режим запуска=Управляемое приложение, режим совместимости=Не использовать. Вручную подготовьте совместимое с контрактами 8.5.1.1343 мобильное приложение или мобильный клиент на своём Android. Здесь приложения не собираются, не устанавливаются и не запускаются.

  3. Общие → Общие формы → создайте управляемую ПроверкаСвоегоSMS85. Реквизиты: НомерВторогоТелефона85 — Строка длиной 32; СогласенНаЧтение85 и Остановлен85 — Булево; Протокол85 — Строка неограниченной длины. Не передавайте номер или SMS на сервер, не добавляйте серверных обработчиков или синхронизации этих данных.

  4. Выведите поле номера, флажок согласия и многострочное поле протокола ТолькоПросмотр=Да с соответствующими ПутьКДанным. Остановлен85 можно вывести отдельным полем ТолькоПросмотр=Да. На новой форме до опыта реально должно наблюдаться Остановлен85=Ложь; код это проверяет, не присваивает стартовое значение за вас.

  5. Если в редакторе выбранной формы доступны эти настройки, вручную задайте АвтоматическоеСохранениеДанныхВНастройках=АвтоматическоеСохранениеДанныхФормыВНастройках.НеИспользовать и СохранениеДанныхВНастройках=СохранениеДанныхФормыВНастройках.НеИспользовать. Это разные перечисления. Их runtime-свойства не объявлены доступными мобильному клиенту: код их не читает, настройка не доказывает отсутствие внутреннего сохранения ОС/платформой.

  6. В форме создайте команду Разобрать85: Действие=Разобрать85; выведите настоящую кнопку. Основной блок вставьте ЦЕЛИКОМ в пустой модуль формы, не внутрь обработчика. Он уже содержит обработчик и две необходимые функции; КомандаФормы передаётся платформой при нажатии, вручную процедуры не вызывайте.

  7. Общие → Общие команды → создайте ОткрытьСвойSMS85 без параметра, включите в командный интерфейс своей учебной подсистемы. Поддерживающий блок вставьте ЦЕЛИКОМ в её пустой модуль. ОбработкаКоманды получает оба штатных параметра от платформы; &НаКлиенте задаёт исполнение, #Если ограничивает код мобильным клиентом/мобильным приложением.

  8. До чтения человек отдельно соглашается на будущий ручной опыт и ровно один раз отправляет со второго собственного телефона на первый обычное SMS OWN85-SMS;6;250, без MMS и вложений. Это может стоить денег по тарифу. Сам пример не отправляет сообщения и не запускает приложение Телефон; не отправляйте второе такое же сообщение для повторной проверки.

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

  10. Разрешения и поддержку ОС проверьте вручную только для своего приложения/устройства. Согласие на чтение на форме ставится после подготовки; нажмите Разобрать85 ровно один раз. Имя CF, префикс SMS и флажок не доказывают право читать системный журнал: принадлежность обоих телефонов и отсутствие чужих сообщений обеспечиваются вами до опыта.

  11. Метаданные.Имя/Версия на мобильном клиенте не читаются; имя и версия выше — ручная подготовка. ОткрытьФорму может выполнять платформенное обращение к серверу, но оно происходит без передачи номера в параметрах. После ввода номера в примере нет серверных вызовов, отправки SMS, файлов, HTTP или чтения других сообщений.

  12. Запуск и компиляция в 1С не выполнялись. Неподдерживаемый журнал, отказ разрешения, отсутствие/дубли SMS, неподходящие фактические типы или числа означают остановленный опыт. Не очищайте журнал, не сбрасывайте флаг и не повторяйте чтение после ошибки; установите причину вручную без раскрытия переписки.

&НаКлиенте
Процедура Разобрать85(Команда)
    Протокол85 = "";
    Попытка
        #Если МобильныйКлиент Или МобильноеПриложениеКлиент Тогда
            Если ТипЗнч(Команда) <> Тип("КомандаФормы") Или Команда.Имя <> "Разобрать85"
                Или ИмяФормы <> "ОбщаяФорма.ПроверкаСвоегоSMS85" Тогда
                ВызватьИсключение "Нужна настоящая собственная мобильная форма и её команда";
            КонецЕсли;
            Если ТипЗнч(Остановлен85) <> Тип("Булево") Или Остановлен85
                Или ТипЗнч(СогласенНаЧтение85) <> Тип("Булево") Или Не СогласенНаЧтение85
                Или ТипЗнч(НомерВторогоТелефона85) <> Тип("Строка") Или НомерВторогоТелефона85 = "" Тогда
                ВызватьИсключение "Нужны согласие, собственный номер и ещё не начатый опыт";
            КонецЕсли;
            СогласенНаЧтение85 = Ложь;
            Остановлен85 = Истина;
            Если ТипЗнч(СредстваТелефонии) <> Тип("СредстваТелефонии") Тогда
                ВызватьИсключение "Не получен настоящий менеджер телефонии";
            КонецЕсли;
            Поддержка85 = СредстваТелефонии.ПоддерживаетсяЖурналSMS();
            Если ТипЗнч(Поддержка85) <> Тип("Булево") Или Не Поддержка85 Тогда
                ВызватьИсключение "Журнал SMS не поддерживается на этом устройстве";
            КонецЕсли;
            Журнал85 = СредстваТелефонии.ПолучитьЖурналSMS();
            Если ТипЗнч(Журнал85) <> Тип("ЖурналSMS") Тогда
                ВызватьИсключение "Настоящий журнал SMS недоступен";
            КонецЕсли;
            Отбор85 = СоздатьОтбор85(НомерВторогоТелефона85);
            Запись85 = ПолучитьСвоюЗапись85(Журнал85, Отбор85, НомерВторогоТелефона85);
            ИсходныйТекст85 = Запись85.Текст;
            ДатаОтправки85 = Запись85.ДатаОтправки;
            ДатаПолучения85 = Запись85.ДатаПолучения;
            Прочитано85 = Запись85.Прочитано;
            ЧислоНомеров85 = Запись85.НомераТелефонов.Количество();
            ЧислоИсходныхВложений85 = Запись85.Вложения.Количество();
            Копия85 = Новый SMSСообщение(Запись85, Ложь);
            Если ТипЗнч(Копия85) <> Тип("SMSСообщение") Тогда
                ВызватьИсключение "Не создана настоящая локальная копия сообщения";
            КонецЕсли;
            ТекстКопии85 = Копия85.Текст;
            Получатели85 = Копия85.Получатели;
            ВложенияКопии85 = Копия85.Вложения;
            Если ТипЗнч(ТекстКопии85) <> Тип("Строка") Или ТекстКопии85 <> ИсходныйТекст85
                Или ТипЗнч(Получатели85) <> Тип("Массив") Или ТипЗнч(ВложенияКопии85) <> Тип("Массив") Тогда
                ВызватьИсключение "Фактические поля копии не подтверждены";
            КонецЕсли;
            ЧислоПолучателей85 = Получатели85.Количество();
            ЧислоВложенийКопии85 = ВложенияКопии85.Количество();
            Если ТипЗнч(ЧислоПолучателей85) <> Тип("Число") Или ЧислоПолучателей85 <> 1
                Или ТипЗнч(ЧислоВложенийКопии85) <> Тип("Число") Или ЧислоВложенийКопии85 <> 0 Тогда
                ВызватьИсключение "Не получена собственная текстовая копия с одним цифровым номером";
            КонецЕсли;
            Получатель85 = Получатели85[0];
            Если ТипЗнч(Получатель85) <> Тип("Строка") Или Получатель85 <> НомерВторогоТелефона85 Тогда
                ВызватьИсключение "Собственный номер не подтверждён в реальной копии";
            КонецЕсли;
            Части85 = СтрРазделить(ТекстКопии85, ";", Истина);
            Если ТипЗнч(Части85) <> Тип("Массив") Тогда
                ВызватьИсключение "Разбор настоящего текста не вернул массив";
            КонецЕсли;
            ЧислоЧастей85 = Части85.Количество();
            Если ТипЗнч(ЧислоЧастей85) <> Тип("Число") Или ЧислоЧастей85 <> 3 Тогда
                ВызватьИсключение "В собственном SMS нужны ровно три поля";
            КонецЕсли;
            Маркер85 = Части85[0];
            КоличествоСтрокой85 = Части85[1];
            ЦенаСтрокой85 = Части85[2];
            Если ТипЗнч(Маркер85) <> Тип("Строка") Или Маркер85 <> "OWN85-SMS"
                Или ТипЗнч(КоличествоСтрокой85) <> Тип("Строка") Или КоличествоСтрокой85 <> "6"
                Или ТипЗнч(ЦенаСтрокой85) <> Тип("Строка") Или ЦенаСтрокой85 <> "250" Тогда
                ВызватьИсключение "Не подтверждены три собственных учебных поля";
            КонецЕсли;
            Количество85 = Число(КоличествоСтрокой85);
            Цена85 = Число(ЦенаСтрокой85);
            Если ТипЗнч(Количество85) <> Тип("Число") Или Количество85 <> 6
                Или ТипЗнч(Цена85) <> Тип("Число") Или Цена85 <> 250 Тогда
                ВызватьИсключение "Не получены реальные учебные числа";
            КонецЕсли;
            Сумма85 = Количество85 * Цена85;
            Если ТипЗнч(Сумма85) <> Тип("Число") Или Сумма85 <> 1500 Тогда
                ВызватьИсключение "Вычисление по настоящему тексту не подтверждено";
            КонецЕсли;
            Черновик85 = "Учебный черновик: " + Формат(Количество85, "ЧДЦ=0;ЧГ=0")
                + " × " + Формат(Цена85, "ЧДЦ=0;ЧГ=0") + " = " + Формат(Сумма85, "ЧДЦ=0;ЧГ=0");
            Копия85.Текст = Черновик85;
            НовыйТекстКопии85 = Копия85.Текст;
            Если ТипЗнч(НовыйТекстКопии85) <> Тип("Строка") Или НовыйТекстКопии85 <> Черновик85 Тогда
                ВызватьИсключение "Изменение локального черновика не подтверждено";
            КонецЕсли;
            СвежаяЗапись85 = ПолучитьСвоюЗапись85(Журнал85, Отбор85, НомерВторогоТелефона85);
            СвежийИсходныйТекст85 = СвежаяЗапись85.Текст;
            ИсходныйТекстСохранён85 = ТипЗнч(СвежийИсходныйТекст85) = Тип("Строка")
                И СвежийИсходныйТекст85 = ИсходныйТекст85;
            Если ТипЗнч(ИсходныйТекстСохранён85) <> Тип("Булево") Или Не ИсходныйТекстСохранён85 Тогда
                ВызватьИсключение "Повторное чтение собственного исходного текста не подтверждено";
            КонецЕсли;
            Протокол85 = "Собственное входящее SMS проверено. " + НовыйТекстКопии85
                + "; исходный текст сохранился: " + Строка(ИсходныйТекстСохранён85)
                + "; номеров в исходной записи: " + Строка(ЧислоНомеров85)
                + "; цифровых получателей копии: " + Строка(ЧислоПолучателей85)
                + "; вложений исходной записи/копии: " + Строка(ЧислоИсходныхВложений85) + "/" + Строка(ЧислоВложенийКопии85)
                + "; дата отправки (наблюдение): " + Формат(ДатаОтправки85, "ДФ=""дд.ММ.гггг ЧЧ:мм:сс"";ДП=""не заполнена""")
                + "; дата получения (наблюдение): " + Формат(ДатаПолучения85, "ДФ=""дд.ММ.гггг ЧЧ:мм:сс"";ДП=""не заполнена""")
                + "; прочитано (наблюдение): " + Строка(Прочитано85)
                + ". Это локальный черновик; команды отправки не вызывались. Повторное чтение этой формой запрещено.";
        #Иначе
            ВызватьИсключение "Нужен мобильный клиент или мобильное приложение на собственном Android";
        #КонецЕсли
    Исключение
        СогласенНаЧтение85 = Ложь;
        Остановлен85 = Истина;
        Протокол85 = "Собственное учебное SMS НЕ подтверждено. Опыт остановлен; повторять чтение этой формой нельзя.";
        ВызватьИсключение "Опыт со своим учебным SMS остановлен. Результат не подтверждён.";
    КонецПопытки;
КонецПроцедуры

&НаКлиенте
Функция СоздатьОтбор85(Знач СвойНомер85)
    #Если МобильныйКлиент Или МобильноеПриложениеКлиент Тогда
        Если ТипЗнч(СвойНомер85) <> Тип("Строка") Или СвойНомер85 = "" Тогда
            ВызватьИсключение "Нужен собственный учебный номер";
        КонецЕсли;
        Отбор85 = Новый ОтборКомпоновкиДанных();
        Если ТипЗнч(Отбор85) <> Тип("ОтборКомпоновкиДанных")
            Или ТипЗнч(Отбор85.Элементы) <> Тип("КоллекцияЭлементовОтбораКомпоновкиДанных") Тогда
            ВызватьИсключение "Не создан настоящий локальный отбор";
        КонецЕсли;
        ПоТексту85 = Отбор85.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
        ПоНомеру85 = Отбор85.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
        ПоТипу85 = Отбор85.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
        Если ТипЗнч(ПоТексту85) <> Тип("ЭлементОтбораКомпоновкиДанных")
            Или ТипЗнч(ПоНомеру85) <> Тип("ЭлементОтбораКомпоновкиДанных")
            Или ТипЗнч(ПоТипу85) <> Тип("ЭлементОтбораКомпоновкиДанных") Тогда
            ВызватьИсключение "Не получены настоящие элементы отбора";
        КонецЕсли;
        ПоТексту85.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Текст");
        ПоТексту85.ПравоеЗначение = "OWN85-SMS;6;250";
        ПоТексту85.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
        ПоТексту85.Использование = Истина;
        ПоНомеру85.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("НомераТелефонов");
        ПоНомеру85.ПравоеЗначение = СвойНомер85;
        ПоНомеру85.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
        ПоНомеру85.Использование = Истина;
        ПоТипу85.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТипСообщения");
        ПоТипу85.ПравоеЗначение = ТипSMSСредствТелефонии.Входящее;
        ПоТипу85.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
        ПоТипу85.Использование = Истина;
        Возврат Отбор85;
    #Иначе
        ВызватьИсключение "Отбор этого урока применяется только в собственном мобильном опыте";
    #КонецЕсли
КонецФункции

&НаКлиенте
Функция ПолучитьСвоюЗапись85(Знач Журнал85, Знач Отбор85, Знач СвойНомер85)
    #Если МобильныйКлиент Или МобильноеПриложениеКлиент Тогда
        Если ТипЗнч(Журнал85) <> Тип("ЖурналSMS") Или ТипЗнч(Отбор85) <> Тип("ОтборКомпоновкиДанных")
            Или ТипЗнч(СвойНомер85) <> Тип("Строка") Или СвойНомер85 = "" Тогда
            ВызватьИсключение "Нужны настоящие журнал, свой отбор и собственный номер";
        КонецЕсли;
        Записи85 = Журнал85.НайтиЗаписи(Отбор85);
        Если ТипЗнч(Записи85) <> Тип("Массив") Тогда
            ВызватьИсключение "Поиск не вернул настоящий массив";
        КонецЕсли;
        ЧислоЗаписей85 = Записи85.Количество();
        Если ТипЗнч(ЧислоЗаписей85) <> Тип("Число") Или ЧислоЗаписей85 <> 1 Тогда
            ВызватьИсключение "Нужно ровно одно собственное подготовленное SMS";
        КонецЕсли;
        Запись85 = Записи85[0];
        Если ТипЗнч(Запись85) <> Тип("ЗаписьЖурналаSMS") Тогда
            ВызватьИсключение "Не получена настоящая запись SMS";
        КонецЕсли;
        Если ТипЗнч(Запись85.Текст) <> Тип("Строка") Или Запись85.Текст <> "OWN85-SMS;6;250"
            Или ТипЗнч(Запись85.ТипСообщения) <> Тип("ТипSMSСредствТелефонии")
            Или Запись85.ТипСообщения <> ТипSMSСредствТелефонии.Входящее
            Или ТипЗнч(Запись85.ДатаОтправки) <> Тип("Дата")
            Или ТипЗнч(Запись85.ДатаПолучения) <> Тип("Дата")
            Или ТипЗнч(Запись85.Прочитано) <> Тип("Булево") Тогда
            ВызватьИсключение "Реальные поля собственного входящего SMS не подтверждены";
        КонецЕсли;
        Номера85 = Запись85.НомераТелефонов;
        Вложения85 = Запись85.Вложения;
        Если ТипЗнч(Номера85) <> Тип("Массив") Или ТипЗнч(Вложения85) <> Тип("Массив") Тогда
            ВызватьИсключение "Не получены настоящие массивы записи";
        КонецЕсли;
        ЧислоНомеров85 = Номера85.Количество();
        ЧислоВложений85 = Вложения85.Количество();
        Если ТипЗнч(ЧислоНомеров85) <> Тип("Число") Или ЧислоНомеров85 <> 1
            Или ТипЗнч(ЧислоВложений85) <> Тип("Число") Или ЧислоВложений85 <> 0 Тогда
            ВызватьИсключение "Нужна своя обычная текстовая запись без списка рассылки и вложений";
        КонецЕсли;
        Номер85 = Номера85[0];
        Если ТипЗнч(Номер85) <> Тип("Строка") Или Номер85 <> СвойНомер85 Тогда
            ВызватьИсключение "Собственный номер записи не подтверждён";
        КонецЕсли;
        Возврат Запись85;
    #Иначе
        ВызватьИсключение "Записи SMS читаются только в собственном мобильном опыте";
    #КонецЕсли
КонецФункции
Полный модуль своей общей команды ОткрытьСвойSMS85

Общие → Общие команды → ОткрытьСвойSMS85 → пустой модуль команды. Вставить ЦЕЛИКОМ; общая команда без параметра включена в свой учебный интерфейс.

&НаКлиенте, только мобильный клиент/мобильное приложение(клиент). Настоящая ОбработкаКоманды с обоими штатными параметрами открывает свою форму без номера/SMS в параметрах.

&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
    #Если МобильныйКлиент Или МобильноеПриложениеКлиент Тогда
        Если ПараметрКоманды <> Неопределено
            Или ТипЗнч(ПараметрыВыполненияКоманды) <> Тип("ПараметрыВыполненияКоманды") Тогда
            ВызватьИсключение "Нужна настоящая собственная общая команда без параметра";
        КонецЕсли;
        ОткрытьФорму("ОбщаяФорма.ПроверкаСвоегоSMS85");
    #Иначе
        ВызватьИсключение "Нужен собственный мобильный Android-стенд";
    #КонецЕсли
КонецПроцедуры

Разбор по шагам

  1. Кнопка сначала убирает прежний протокол. Затем проверяет настоящую команду/имя своей формы, типы флагов и свой номер. Согласие снимается, Остановлен85 устанавливается в Истина ДО обращения к СредстваТелефонии; даже успешный опыт остаётся однократным для этой формы.

  2. Глобальное свойство СредстваТелефонии даёт настоящий менеджер, а не объект, переданный неизвестным вызывающим кодом. ПоддерживаетсяЖурналSMS проверяется как Булево и реально разрешает следующий шаг. Затем ПолучитьЖурналSMS должен вернуть ЖурналSMS; Неопределено — доступного журнала нет.

  3. СоздатьОтбор85 создаёт настоящий ОтборКомпоновкиДанных. В его собственной коллекции Элементы вызов Добавить с настоящим Типом создаёт три проверенных элемента. Поля называются точно Текст, НомераТелефонов и ТипСообщения; сравнение везде Равно, Использование=Истина.

  4. НайтиЗаписи получает именно свой заполненный отбор. Сначала проверяются Массив и Количество=1, и только потом берётся позиция 0. Дубли и отсутствие сообщения не заменяются первой случайной записью. Каждая запись повторно проверяется на свой текст, номер и Входящее.

  5. Все семь свойств записи только читаются: Текст участвует в расчёте; НомераТелефонов и ТипСообщения подтверждают свой маршрут; Вложения должны быть пустыми; ДатаОтправки, ДатаПолучения и Прочитано дают подписанные наблюдения в протоколе. Пустые даты допустимы и отображаются как не заполнена.

  6. Новый SMSСообщение(Запись85, Ложь) создаёт локальную копию именно настоящей записи. Текст должен совпасть с прочитанным исходным текстом; реальные Получатели должны содержать ровно свой цифровой номер, Вложения — быть пустыми. Не предполагаем форматирование или сохранение плюса в номере: несовпадение останавливает опыт.

  7. Разбираем настоящий Текст копии через СтрРазделить с включением пустых частей. Проверяем размер 3 и строковые позиции 0, 1, 2 до преобразования. Реальные поля 6 и 250 превращаются через Число в настоящие числовые значения; их произведение проверяется на 1500, но итоговая константа не подставляется вместо расчёта.

  8. Из фактических чисел строим полезный текст локального черновика и присваиваем только Копия85.Текст. Снова читаем копию, затем снова выполняем тот же точный поиск и все проверки исходной записи. Исходный текст должен остаться своим OWN85-SMS;6;250; это контроль конкретного текста, не доказательство полной независимости всех скрытых данных.

  9. Протокол показывает реальный черновик с вычисленной суммой, числа номеров/вложений, даты и наблюдавшийся признак прочтения. Полных номеров, посторонних сообщений, файлов вложений и текста внутренних ошибок в нём нет. При ошибке остаются только фиксированный отказ и установленный флаг остановки.

Как проверить результат

  1. Будущий положительный опыт выполняйте только на описанном своём Android-стенде: одно входящее SMS, свой номер, флажок согласия и настоящее нажатие. В протоколе должны быть фактически вычисленные 6 × 250 = 1500, исходный текст сохранился, 1 номер/1 получатель и 0/0 вложений. Даты и прочтение — реальные наблюдения, не заранее ожидаемые константы.

  2. В отладчике перед первой строкой СредстваТелефонии проверьте: прежний протокол пуст, согласие уже Ложь, Остановлен85 уже Истина. Не копируйте содержимое журнала или номер в сообщения/логи; не подменяйте возвращённый журнал и запись искусственным объектом.

  3. По шагам проверьте настоящий тип Журнал85, три элемента отбора и точные поля/значения. При НайтиЗаписи размер массива проверяется до позиции 0. Затем посмотрите только свою одну запись и типы её семи полей; не открывайте чужую переписку ради проверки.

  4. После конструктора проверьте именно реальные Текст/Получатели/Вложения копии. После Число проверьте числовые 6 и 250, а после умножения — 1500. После изменения черновика повторное чтение должно вернуть фактический новый текст копии, а новый поиск — прежний собственный исходный текст.

  5. Новое нажатие в той же форме должно остановиться ДО повторного доступа к журналу: Остановлен85 остаётся Истина и после успеха. Повторное выставление флажка согласия не снимает запрет; код не сбрасывает состояние и не удаляет сообщение.

  6. Отдельный отрицательный опыт на своём новом учебном стенде: не ставьте согласие перед первым нажатием. Успешного отчёта не должно быть, чтение журнала не начинается. После отказа эту форму не используйте для нового опыта.

  7. Отсутствующее сообщение, другой собственный номер или реально возникшие дубли приводят к остановке без выбора первой записи и без удаления дублей. Не создавайте специально дополнительные платные SMS ради теста; причины проверяйте только в своём журнале вручную.

  8. Если собственный Android не выдаёт журнал или разрешение, ожидается остановка, а не 1500. Точный отказ не гарантирован на каждом устройстве и здесь не воспроизводился. Не выдавайте неподдерживаемую среду за положительную демонстрацию, не расширяйте поиск и не начинайте автоматические повторы.

Ожидаемый результат

Будущий положительный отчёт получает 1500 из настоящего текста своей записи, показывает реальный локальный черновик, сохранение исходного собственного текста и подписанные наблюдения записи. Номера/чужая переписка не выводятся, отправка не вызывается. Неподдерживаемая или неподготовленная среда означает остановку, не успех; запуск в 1С не проверялся.

На что обратить внимание

  1. Журнал SMS — реальный системный ресурс Android, не таблица в памяти 1С. Читать его допустимо только на заранее подготовленном своём устройстве без чужих сообщений. Проверки номера, текста и имён полезны от ошибок маршрута, но не являются авторизацией или защитой от подделки вызова.

  2. Флаг Остановлен85 запрещает повтор этому экземпляру формы; он не долговечный журнал согласий. Закрытие/новое открытие формы не доказывает безопасность повторения. После неизвестного отказа код не чинит состояние, не очищает журнал и не повторяет операцию автоматически.

  3. ПоддерживаетсяЖурналSMS возвращает Истина для Android с телефонным модулем, но не гарантирует права приложения. ПолучитьЖурналSMS допускает Неопределено; у записи нет доступного выдуманного конструктора. Получатели или счётчик из самодельного массива не заменяют настоящий результат ОС.

  4. Справка НайтиЗаписи задаёт типы полей/допустимые сравнения, но не отдельную таблицу логики плоской коллекции условий. Не обещаем самостоятельно доказанный default AND/OR: фактическое единственное совпадение и все значения проверяются повторно. Поиск без отбора не используется.

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

  6. Ложь во втором параметре конструктора не копирует вложения. Отправитель и ДатаПолучения копии не заполняются по контракту; их не используем и не присваиваем. Сам факт создания SMSСообщение и изменения собственного Текст не является отправкой или квитанцией оператора.

  7. Все семь свойств ЗаписьЖурналаSMS только для чтения. Readonly массивы и их элементы также не меняются этим кодом. Повторно проверяем только наблюдаемую собственную запись; не заявляем байтовую/XML/объектную идентичность или глубокое копирование скрытых полей.

  8. ДатаОтправки/ДатаПолучения могут быть незаполненными. Прочитано может измениться действиями ОС/человека. Это наблюдения, не атомарный снимок, аутентификация отправителя, длительность доставки или доказательство согласованных часов.

  9. Наш простой формат OWN85-SMS;6;250 создан для известного учебного сообщения. Это не универсальный SMS-парсер, не протокол оператора и не обработчик недоверенного ввода. Результаты Число и форматы представления проверяются отдельно; чужие payload сюда не передавайте.

  10. Оба свойства сохранения формы7577/7576 по установленной справке не доступны мобильному клиенту/мобильному приложению(клиент). Ручная настройка NoUse, если редактор её предлагает, не расширяет доступность и не доказывает, что ОС/платформа ничего не сохраняет. В клиентском коде нет этих чтений, Метаданные или передачи номера/SMS серверу.

  11. Фиксированная ошибка скрывает исходный текст внутреннего исключения в нашем отчёте, но не доказывает отсутствие системных журналов/отладочных данных ОС или платформы. Опыт проводится только со своими несекретными данными, не в рабочей базе или на личном телефоне.

  12. В этой установке native-текст типа ЗаписьЖурналаSMS содержит отдельную строку CallLogRecord; это не другой производитель. Имя конструктора ПолеКомпоновкиДанных индексировано По умолчанию, а тело озаглавлено По пути к данным: используем фактический вызов со строкой поля, не новый выдуманный конструктор.

  13. Здесь не вызываются отправка SMS, звонок, обработчики телефонии, сеть, COM, файлы или удаление журнала. Не заявляются поддержка каждого Android, компиляция или успешный запуск в 1С; положительный исход нужно реально проверить вручную на своём стенде.

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

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.