Как вызвать WhatsApp из 1С и передать документ?

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Как вызвать WhatsApp из 1С и передать документ?

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #38376
      Фото аватараOdineski
      Участник

        &НаКлиенте
        Процедура ОткрытьWhatsApp(Команда)

        // Проверяем, что есть печатаемый документ
        Если ОбъектыПечати.Количество() = 0 Тогда
        Сообщить(«Печатаемый документ не найден.»);
        Возврат;
        КонецЕсли;

        // Получаем ссылку на текущий документ
        Счет = ОбъектыПечати[0].Значение;

        Сообщить(«Счет: » + Строка(Счет));

        // Создаем PDF текущей печатной формы
        Если ТекущаяПечатнаяФорма = Неопределено Тогда
        Сообщить(«Текущая печатная форма не найдена.»);
        Возврат;
        КонецЕсли;

        Если ТекущаяПечатнаяФорма.ВысотаТаблицы = 0 Тогда
        Сообщить(«Печатная форма пустая.»);
        Возврат;
        КонецЕсли;

        ИмяФайла = ПолучитьИмяВременногоФайла(«pdf»);

        Попытка

        ТекущаяПечатнаяФорма.Записать(
        ИмяФайла,
        ТипФайлаТабличногоДокумента.PDF
        );

        Исключение

        Сообщить(«Ошибка создания PDF:»);
        Сообщить(ОписаниеОшибки());
        Возврат;

        КонецПопытки;

        // Получаем телефон контрагента
        Телефон = ПолучитьТелефонПоСчету(Счет);

        Если ПустаяСтрока(Телефон) Тогда
        Сообщить(«Телефон контрагента не найден.»);
        Возврат;
        КонецЕсли;

        // Очищаем телефон
        Телефон = СтрЗаменить(Телефон, «+», «»);
        Телефон = СтрЗаменить(Телефон, » «, «»);
        Телефон = СтрЗаменить(Телефон, «(«, «»);
        Телефон = СтрЗаменить(Телефон, «)», «»);
        Телефон = СтрЗаменить(Телефон, «-«, «»);

        Если СтрНачинаетсяС(Телефон, «8») Тогда
        Телефон = «7» + Сред(Телефон, 2);
        КонецЕсли;

        // Открываем WhatsApp
        // Открываем WhatsApp Desktop
        СсылкаWhatsApp = «whatsapp://send?phone=» + Телефон;

        КомандаЗапуска = «cmd.exe /c start «»»» «»» + СсылкаWhatsApp + «»»»;

        ЗапуститьПриложение(КомандаЗапуска);

        Сообщить(«PDF создан: » + ИмяФайла);
        Сообщить(«Открываем WhatsApp Desktop для: » + Телефон);
        КонецПроцедуры
        &НаСервере
        Функция ПолучитьТелефонПоСчету(Счет)

        Контрагент = Счет.ПолучитьОбъект().Контрагент;

        Если Не ЗначениеЗаполнено(Контрагент) Тогда
        Возврат «»;
        КонецЕсли;

        Запрос = Новый Запрос;

        Запрос.Текст =
        «ВЫБРАТЬ ПЕРВЫЕ 1
        | КонтактнаяИнформация.Представление КАК Телефон
        |ИЗ
        | РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
        |ГДЕ
        | КонтактнаяИнформация.Объект = &Контрагент
        | И КонтактнаяИнформация.Тип = &Тип
        | И КонтактнаяИнформация.Вид = &Вид»;

        Запрос.УстановитьПараметр(
        «Контрагент»,
        Контрагент
        );

        Запрос.УстановитьПараметр(
        «Тип»,
        Перечисления.ТипыКонтактнойИнформации.Телефон
        );

        Запрос.УстановитьПараметр(
        «Вид»,
        Справочники.ВидыКонтактнойИнформации.ТелефонКонтрагента
        );

        Результат = Запрос.Выполнить();

        Если Результат.Пустой() Тогда
        Возврат «»;
        КонецЕсли;

        Выборка = Результат.Выбрать();

        Если Выборка.Следующий() Тогда
        Возврат Выборка.Телефон;
        КонецЕсли;

        Возврат «»;

        КонецФункции

      • #38377
        bot_avaOdin — Одинэсник
        Участник

          Код в целом правильный, но есть несколько важных моментов и рекомендаций для корректной работы:

          1. Вызов ЗапуститьПриложение
          Эта процедура есть только в толстом клиенте и должна вызываться на клиенте. Убедитесь, что процедура ОткрытьWhatsApp помечена директивой &НаКлиенте (у вас так и есть).

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

          или так:

          3. Проверка наличия ОбъектыПечати и ТекущаяПечатнаяФорма
          Убедитесь, что эти объекты доступны в контексте вызова процедуры. Обычно они есть в модуле формы документа.

          4. Передача параметров между клиентом и сервером
          Функция ПолучитьТелефонПоСчету — серверная, вызывается из клиентской процедуры. В вашем коде вызов отсутствует. Нужно вызвать её через ВызватьНаСервере или сделать экспортируемой и вызвать напрямую.

          Например:

          Если ПолучитьТелефонПоСчету в общем модуле с директивой &НаСервере, то вызов из клиентского модуля:

          или

          5. Обработка ошибок
          Добавьте обработку ошибок при вызове серверной функции и запуске приложения.

          ### Пример исправленного варианта процедуры на клиенте:

          ### Серверная функция (без изменений):

          Если ВызватьНаСервере не подходит, можно сделать вызов через общий модуль с директивой &НаСервере и экспортом.

          Если нужна помощь с интеграцией — пиши.

      Просмотр 1 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С