База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как вызвать WhatsApp из 1С и передать документ?
- В этой теме 1 ответ, 2 участника, последнее обновление 2 минуты назад сделано
Odin — Одинэсник.
-
АвторСообщения
-
-
13 августа 2026 в 11:45 #38376
&НаКлиенте
Процедура Открыть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
| КонтактнаяИнформация.Представление КАК Телефон
|ИЗ
| РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
|ГДЕ
| КонтактнаяИнформация.Объект = &Контрагент
| И КонтактнаяИнформация.Тип = &Тип
| И КонтактнаяИнформация.Вид = &Вид»;Запрос.УстановитьПараметр(
«Контрагент»,
Контрагент
);Запрос.УстановитьПараметр(
«Тип»,
Перечисления.ТипыКонтактнойИнформации.Телефон
);Запрос.УстановитьПараметр(
«Вид»,
Справочники.ВидыКонтактнойИнформации.ТелефонКонтрагента
);Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
Возврат «»;
КонецЕсли;Выборка = Результат.Выбрать();
Если Выборка.Следующий() Тогда
Возврат Выборка.Телефон;
КонецЕсли;Возврат «»;
КонецФункции
-
13 августа 2026 в 11:45 #38377
Код в целом правильный, но есть несколько важных моментов и рекомендаций для корректной работы:
1. Вызов
ЗапуститьПриложение
Эта процедура есть только в толстом клиенте и должна вызываться на клиенте. Убедитесь, что процедураОткрытьWhatsAppпомечена директивой&НаКлиенте(у вас так и есть).2. Форматирование команды запуска
В строке команды запуска дляcmd.exeлучше использовать двойные кавычки аккуратно, чтобы не было ошибок. Ваш вариант:1С (Код)1КомандаЗапуска = "cmd.exe /c start "" "" + СсылкаWhatsApp + """;или так:
1С (Код)1КомандаЗапуска = "cmd.exe /c start "" "" + СсылкаWhatsApp + """;3. Проверка наличия
ОбъектыПечатииТекущаяПечатнаяФорма
Убедитесь, что эти объекты доступны в контексте вызова процедуры. Обычно они есть в модуле формы документа.4. Передача параметров между клиентом и сервером
ФункцияПолучитьТелефонПоСчету— серверная, вызывается из клиентской процедуры. В вашем коде вызов отсутствует. Нужно вызвать её черезВызватьНаСервереили сделать экспортируемой и вызвать напрямую.Например:
1С (Код)1Телефон = ПолучитьТелефонПоСчету(Счет);Если
ПолучитьТелефонПоСчетув общем модуле с директивой&НаСервере, то вызов из клиентского модуля:1С (Код)1Телефон = ОбщийМодуль.ИмяМодуля.ПолучитьТелефонПоСчету(Счет);или
1С (Код)1Телефон = ВызватьНаСервере("ПолучитьТелефонПоСчету", Счет);5. Обработка ошибок
Добавьте обработку ошибок при вызове серверной функции и запуске приложения.—
### Пример исправленного варианта процедуры на клиенте:
1С (Код)1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465&НаКлиентеПроцедура ОткрытьWhatsApp(Команда)Если ОбъектыПечати.Количество() = 0 ТогдаСообщить("Печатаемый документ не найден.");Возврат;КонецЕсли;Счет = ОбъектыПечати[0].Значение;Сообщить("Счет: " + Строка(Счет));Если ТекущаяПечатнаяФорма = Неопределено ТогдаСообщить("Текущая печатная форма не найдена.");Возврат;КонецЕсли;Если ТекущаяПечатнаяФорма.ВысотаТаблицы = 0 ТогдаСообщить("Печатная форма пустая.");Возврат;КонецЕсли;ИмяФайла = ПолучитьИмяВременногоФайла("pdf");ПопыткаТекущаяПечатнаяФорма.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.PDF);ИсключениеСообщить("Ошибка создания PDF: " + ОписаниеОшибки());Возврат;КонецПопытки;// Получаем телефон с сервераТелефон = ВызватьНаСервере("ПолучитьТелефонПоСчету", Счет);Если ПустаяСтрока(Телефон) ТогдаСообщить("Телефон контрагента не найден.");Возврат;КонецЕсли;// Очищаем телефонТелефон = СтрЗаменить(Телефон, "+", "");Телефон = СтрЗаменить(Телефон, " ", "");Телефон = СтрЗаменить(Телефон, "(", "");Телефон = СтрЗаменить(Телефон, ")", "");Телефон = СтрЗаменить(Телефон, "-", "");Если СтрНачинаетсяС(Телефон, "8") ТогдаТелефон = "7" + Сред(Телефон, 2);КонецЕсли;СсылкаWhatsApp = "whatsapp://send?phone=" + Телефон;КомандаЗапуска = "cmd.exe /c start "" "" + СсылкаWhatsApp + """;ПопыткаЗапуститьПриложение(КомандаЗапуска);ИсключениеСообщить("Ошибка запуска WhatsApp: " + ОписаниеОшибки());Возврат;КонецПопытки;Сообщить("PDF создан: " + ИмяФайла);Сообщить("Открываем WhatsApp Desktop для: " + Телефон);КонецПроцедуры—
### Серверная функция (без изменений):
1С (Код)123456789101112131415161718192021222324252627282930313233343536373839&НаСервереФункция ПолучитьТелефонПоСчету(Счет)Контрагент = Счет.ПолучитьОбъект().Контрагент;Если Не ЗначениеЗаполнено(Контрагент) ТогдаВозврат "";КонецЕсли;Запрос = Новый Запрос;Запрос.Текст ="ВЫБРАТЬ ПЕРВЫЕ 1| КонтактнаяИнформация.Представление КАК Телефон|ИЗ| РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация|ГДЕ| КонтактнаяИнформация.Объект = &Контрагент| И КонтактнаяИнформация.Тип = &Тип| И КонтактнаяИнформация.Вид = &Вид";Запрос.УстановитьПараметр("Контрагент", Контрагент);Запрос.УстановитьПараметр("Тип", Перечисления.ТипыКонтактнойИнформации.Телефон);Запрос.УстановитьПараметр("Вид", Справочники.ВидыКонтактнойИнформации.ТелефонКонтрагента);Результат = Запрос.Выполнить();Если Результат.Пустой() ТогдаВозврат "";КонецЕсли;Выборка = Результат.Выбрать();Если Выборка.Следующий() ТогдаВозврат Выборка.Телефон;КонецЕсли;Возврат "";КонецФункции—
Если
ВызватьНаСерверене подходит, можно сделать вызов через общий модуль с директивой&НаСервереи экспортом.—
Если нужна помощь с интеграцией — пиши.
-
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.