База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как добавить функции получения прайса, проверки долга, акта сверки и заказа?
- В этой теме 1 ответ, 2 участника, последнее обновление 18 минут назад сделано
Odin — Одинэсник.
-
АвторЗаписи
-
-
6 ноября 2026 в 4:49 #38970
как можно добавить остальные функции, например: получение прайс-листа, проверка задолженности и получение акта сверки, оформление заказа
-
6 ноября 2026 в 4:49 #38971
Это уже не просто отправка документов, а полноценный Telegram-бот, связанный с УНФ 3. Оптимальная схема:
1С (Код)1234567891011Клиент в Telegram↓Telegram Bot API↓Регламентное задание или HTTP-сервис 1С↓Обработка команды↓Данные УНФ 3↓Ответ текстом или PDF-файломДля начала лучше использовать регламентное задание с методом
getUpdates. Такой вариант проще разместить и обслуживать. Webhook быстрее, но потребует публикации HTTP-сервиса 1С через HTTPS.## 1. Какие функции можно реализовать
В боте можно сделать меню:
1С (Код)123456📋 Прайс-лист💳 Моя задолженность📄 Акт сверки🛒 Оформить заказ📦 Мои заказы📞 Связаться с менеджеромПример сценариев:
### Прайс-лист
Клиент нажимает:
1С (Код)1📋 Прайс-листБот:
1. получает клиента по Telegram
chat_id;
2. определяет доступный ему вид цен;
3. формирует список товаров;
4. формирует Excel или PDF;
5. отправляет файл в Telegram.### Задолженность
Клиент нажимает:
1С (Код)1💳 Моя задолженностьБот возвращает:
1С (Код)12345678Партнер: ООО РомашкаОбщая задолженность: 125 400 руб.Просроченная задолженность: 45 000 руб.Аванс: 10 000 руб.К оплате: 115 400 руб.По состоянию на 05.11.2026### Акт сверки
Клиент выбирает период:
1С (Код)1📄 Акт сверкиЗатем бот предлагает:
1С (Код)123За текущий годЗа предыдущий годУказать периодПосле выбора периода:
1. формируется акт сверки;
2. он сохраняется в PDF;
3. PDF отправляется клиенту.### Оформление заказа
Клиент:
1. открывает каталог;
2. выбирает товар;
3. указывает количество;
4. подтверждает заказ;
5. в УНФ создается документЗаказ покупателя;
6. бот возвращает номер заказа.Для первого варианта не нужно сразу делать полноценный каталог с тысячами товаров. Практичнее начать с поиска товара по артикулу или наименованию.
—
# 2. Связка Telegram-пользователя с клиентом УНФ
Это основной элемент безопасности.
Нельзя определять клиента только по имени пользователя Telegram. Имя можно изменить, а иногда оно вообще отсутствует.
Нужно хранить таблицу соответствий:
1С (Код)1TelegramChatId → Партнер УНФ → Контрагент УНФ → Контактное лицоВ расширении создайте регистр сведений, например:
1С (Код)1TelegramПользователиИзмерение:
1С (Код)1ИдентификаторЧатаРеквизиты:
1С (Код)12345678ПартнерКонтрагентКонтактноеЛицоТелефонДатаРегистрацииДатаПоследнегоОбращенияАктивенКодПодтвержденияПример записи:
1С (Код)12345ИдентификаторЧата: 123456789Партнер: ООО РомашкаКонтрагент: ООО РомашкаКонтактное лицо: Иванов ИванАктивен: Истина## Вариант регистрации клиента
Самый простой способ:
1. клиент пишет боту
/start;
2. бот просит указать номер телефона;
3. номер телефона передается Telegram как контакт;
4. 1С ищет клиента по номеру телефона;
5. бот отправляет код подтверждения;
6. после подтверждения создается связь с партнером.Более безопасный способ:
1. менеджер в УНФ открывает карточку клиента;
2. нажимает «Подключить Telegram»;
3. программа создает одноразовый код;
4. клиент отправляет боту этот код;
5. бот связываетchat_idс конкретным партнером.Пример текста:
1С (Код)123Ваш код подключения: 847291Передайте этот код клиенту. Код действует 15 минут.Код нельзя делать постоянным. После успешной регистрации его нужно удалить или пометить использованным.
—
# 3. Получение входящих сообщений от Telegram
Telegram передает сообщения через API
getUpdates:1С (Код)1https://api.telegram.org/botТОКЕН/getUpdatesВ регламентном задании 1С нужно:
1. получить
offset;
2. вызватьgetUpdates;
3. разобрать JSON;
4. обработать каждое сообщение;
5. сохранить новыйoffset.Пример вызова:
1С (Код)12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758&НаСервереФункция ПолучитьОбновленияTelegram() ЭкспортТокенБота = ПолучитьТокенБота();ПоследнийИдентификатор =ПолучитьПоследнийИдентификаторОбновления();Соединение = Новый HTTPСоединение("api.telegram.org",443,,,,,Новый ЗащищенноеСоединениеOpenSSL);Запрос = Новый HTTPЗапрос;Запрос.АдресРесурса ="/bot"+ ТокенБота+ "/getUpdates?timeout=1&offset="+ Строка(ПоследнийИдентификатор + 1);Ответ = Соединение.Получить(Запрос);Если Ответ.КодСостояния <> 200 ТогдаВызватьИсключение"Ошибка получения сообщений Telegram. Код: "+ Строка(Ответ.КодСостояния);КонецЕсли;ТелоОтвета = Ответ.ПолучитьТелоКакСтроку();ЧтениеJSON = Новый ЧтениеJSON;ЧтениеJSON.УстановитьСтроку(ТелоОтвета);Данные = ПрочитатьJSON(ЧтениеJSON);Если ТипЗнч(Данные) <> Тип("Структура") ТогдаВозврат;КонецЕсли;Если Не Данные.Свойство("result") ТогдаВозврат;КонецЕсли;Для Каждого Обновление Из Данные.result ЦиклОбработатьОбновлениеTelegram(Обновление);Если Обновление.Свойство("update_id") ТогдаЗаписатьПоследнийИдентификаторОбновления(Обновление.update_id);КонецЕсли;КонецЦикла;КонецФункцииВ реальном проекте желательно сначала записывать полученные сообщения в регистр сведений
ОчередьTelegram, а уже потом обрабатывать их. Это позволит повторить обработку после ошибки.—
# 4. Меню Telegram
Для меню используются inline-кнопки. Пользователь нажимает кнопку, а бот получает
callback_query.Структура меню:
1С (Код)12345678910111213141516171819202122232425262728&НаСервереПроцедура ОтправитьГлавноеМеню(ИдентификаторЧата) ЭкспортКнопки = Новый Массив;СтрокаКнопок = Новый Массив;СтрокаКнопок.Добавить(НоваяКнопкаTelegram("📋 Прайс-лист", "PRICE"));СтрокаКнопок.Добавить(НоваяКнопкаTelegram("💳 Задолженность", "DEBT"));Кнопки.Добавить(СтрокаКнопок);СтрокаКнопок = Новый Массив;СтрокаКнопок.Добавить(НоваяКнопкаTelegram("📄 Акт сверки", "RECONCILIATION"));СтрокаКнопок.Добавить(НоваяКнопкаTelegram("🛒 Новый заказ", "ORDER"));Кнопки.Добавить(СтрокаКнопок);ПараметрыКлавиатуры = Новый Структура;ПараметрыКлавиатуры.Вставить("inline_keyboard", Кнопки);ОтправитьСообщениеTelegram(ИдентификаторЧата,"Выберите нужную операцию:",ПараметрыКлавиатуры);КонецПроцедурыВспомогательная функция:
1С (Код)12345678910&НаСервереФункция НоваяКнопкаTelegram(Текст, Данные) ЭкспортКнопка = Новый Структура;Кнопка.Вставить("text", Текст);Кнопка.Вставить("callback_data", Данные);Возврат Кнопка;КонецФункцииПри нажатии кнопки Telegram вернет:
1С (Код)1234callback_data = PRICEcallback_data = DEBTcallback_data = RECONCILIATIONcallback_data = ORDERВ обработчике:
1С (Код)123456789101112131415161718192021222324&НаСервереПроцедура ОбработатьКомандуTelegram(ИдентификаторЧата,Команда) ЭкспортЕсли Команда = "PRICE" ТогдаСформироватьИОтправитьПрайсЛист(ИдентификаторЧата);ИначеЕсли Команда = "DEBT" ТогдаОтправитьЗадолженность(ИдентификаторЧата);ИначеЕсли Команда = "RECONCILIATION" ТогдаПоказатьВыборПериодаАктаСверки(ИдентификаторЧата);ИначеЕсли Команда = "ORDER" ТогдаНачатьОформлениеЗаказа(ИдентификаторЧата);КонецЕсли;КонецПроцедуры—
# 5. Получение прайс-листа
Здесь нужно заранее определить бизнес-правила:
— какой вид цен использовать;
— показывать ли только доступные товары;
— показывать ли остатки;
— учитывать ли характеристики;
— учитывать ли индивидуальные цены клиента;
— какой склад использовать;
— какие товары разрешено продавать клиенту.Для клиента лучше использовать именно тот вид цен, который применяется в заказах УНФ.
## Запрос списка товаров и цен
Ниже примерный запрос. Названия регистров цен в конкретной версии УНФ 3 необходимо проверить в конфигураторе. В разных версиях могут отличаться регистр и состав измерений.
1С (Код)1234567891011121314151617181920Запрос = Новый Запрос;Запрос.Текст ="ВЫБРАТЬ| Цены.Номенклатура КАК Номенклатура,| Цены.Цена КАК Цена|ИЗ| РегистрСведений.ЦеныНоменклатуры.СрезПоследних(| &Дата,| ВидЦен = &ВидЦен) КАК Цены|ГДЕ| Цены.Цена > 0| И Цены.Номенклатура.ПометкаУдаления = ЛОЖЬ| И Цены.Номенклатура.ЭтоГруппа = ЛОЖЬ|УПОРЯДОЧИТЬ ПО| Цены.Номенклатура.Наименование";Запрос.УстановитьПараметр("Дата", ТекущаяДата());Запрос.УстановитьПараметр("ВидЦен", ВидЦен);Выборка = Запрос.Выполнить().Выбрать();В рабочей разработке этот запрос нужно адаптировать под фактический регистр цен УНФ 3. Нельзя без проверки использовать условное имя регистра, если его нет в вашей конфигурации.
## Формирование файла
Для большого прайс-листа лучше формировать Excel, а не отправлять тысячи сообщений.
Варианты:
— Excel;
— PDF;
— CSV;
— текстовый файл;
— ссылка на веб-каталог.Пример формирования табличного документа:
1С (Код)12345678910111213141516171819202122232425262728293031323334353637ТабличныйДокумент = Новый ТабличныйДокумент;Область = ТабличныйДокумент.Область("R1C1:R1C3");Область.Текст = "Артикул";Область.Область(1, 2).Текст = "Наименование";Область.Область(1, 3).Текст = "Цена";НомерСтроки = 2;Пока Выборка.Следующий() ЦиклТабличныйДокумент.Область(НомерСтроки,1,НомерСтроки,1).Текст =Выборка.Номенклатура.Код;ТабличныйДокумент.Область(НомерСтроки,2,НомерСтроки,2).Текст =Выборка.Номенклатура.Наименование;ТабличныйДокумент.Область(НомерСтроки,3,НомерСтроки,3).Значение =Выборка.Цена;НомерСтроки = НомерСтроки + 1;КонецЦикла;Сохранение:
1С (Код)12345ИмяФайла = ПолучитьИмяВременногоФайла("xlsx");ТабличныйДокумент.Записать(ИмяФайла,ТипФайлаТабличногоДокумента.XLSX);Затем:
1С (Код)1234ОтправитьДокументВTelegram(ИдентификаторЧата,ИмяФайла,"Прайс-лист");Для индивидуальных цен нельзя просто брать общий вид цен. Нужно определить вид цен по соглашению или настройкам клиента и передать его в запрос.
—
# 6. Проверка задолженности
В УНФ задолженность может быть рассчитана по разным аналитикам:
— по заказам;
— по договорам;
— по накладным;
— по расчетным документам;
— по срокам оплаты.Поэтому сначала нужно определить, какая аналитика фактически используется в базе.
Нельзя автоматически считать задолженность простой суммой всех реализаций минус все оплаты, если в УНФ используется сложная детализация взаиморасчетов.
## Пример запроса задолженности
Ниже пример общего подхода через регистр расчетов. Точное имя регистра нужно проверить в вашей базе:
1С (Код)12345678910111213141516171819202122Запрос = Новый Запрос;Запрос.Текст ="ВЫБРАТЬ| Остатки.Партнер КАК Партнер,| СУММА(Остатки.СуммаОстаток) КАК СуммаЗадолженности|ИЗ| РегистрНакопления.ВзаиморасчетыСКлиентами.Остатки(| &Момент,| Партнер = &Партнер) КАК Остатки|СГРУППИРОВАТЬ ПО| Остатки.Партнер";Запрос.УстановитьПараметр("Момент", ТекущаяДата());Запрос.УстановитьПараметр("Партнер", Партнер);Результат = Запрос.Выполнить().Выбрать();СуммаЗадолженности = 0;Если Результат.Следующий() ТогдаСуммаЗадолженности = Результат.СуммаЗадолженности;КонецЕсли;Это только пример структуры. В УНФ 3 следует использовать тот регистр, на основании которого типовые отчеты программы показывают задолженность. Надежнее всего посмотреть схему компоновки данных типового отчета по задолженности и использовать ее логику.
## Формирование ответа
1С (Код)1234567891011121314151617Текст = "Информация по взаиморасчетам"+ Символы.ПС+ Символы.ПС+ "Клиент: "+ Партнер.Наименование+ Символы.ПС+ "Задолженность: "+ Формат(СуммаЗадолженности, "ЧДЦ=2")+ " руб."+ Символы.ПС+ Символы.ПС+ "Дата формирования: "+ Формат(ТекущаяДата(), "ДЛФ=Д");ОтправитьСообщениеTelegram(ИдентификаторЧата,Текст);Рекомендуется добавить расшифровку:
1С (Код)1Показать документыПосле нажатия бот отправляет список:
1С (Код)123456789Реализация № 45 от 10.10.2026Сумма: 80 000 руб.Оплачено: 50 000 руб.Долг: 30 000 руб.Реализация № 51 от 20.10.2026Сумма: 95 000 руб.Оплачено: 80 000 руб.Долг: 15 000 руб.—
# 7. Получение акта сверки
Есть два варианта реализации.
## Вариант 1. Вызывать типовой механизм акта сверки
Это предпочтительный вариант. Нужно использовать типовую логику УНФ формирования отчета или печатной формы акта сверки.
Порядок:
1. определить партнера;
2. определить организацию;
3. определить договор, если учет ведется по договорам;
4. определить период;
5. сформировать табличный документ;
6. сохранить его в PDF;
7. отправить через Telegram.Для документа акта сверки могут потребоваться:
1С (Код)12345678ОрганизацияПартнерКонтрагентДоговорДата началаДата окончанияВалютаТолько проведенные документы## Вариант 2. Сделать собственную форму
Можно сформировать акт самостоятельно по движениям взаиморасчетов:
1С (Код)12345Сальдо на началоДебетовые оборотыКредитовые оборотыСальдо на конецПеречень документовНо этот вариант опаснее, потому что можно не учесть:
— авансы;
— возвраты;
— корректировки;
— зачеты;
— комиссионные операции;
— разные договоры;
— валютные расчеты;
— курсовые разницы.Поэтому лучше переиспользовать типовой отчет или типовую печатную форму, а не писать расчет с нуля.
Общий код формирования PDF выглядит так:
1С (Код)123456789101112131415161718192021ТабличныйДокумент =СформироватьАктСверки(Партнер,Организация,ДатаНачала,ДатаОкончания,Договор);ИмяФайла = ПолучитьИмяВременногоФайла("pdf");ТабличныйДокумент.Записать(ИмяФайла,ТипФайлаТабличногоДокумента.PDF);ОтправитьДокументВTelegram(ИдентификаторЧата,ИмяФайла,"Акт сверки за период "+ Формат(ДатаНачала, "ДФ=dd.MM.yyyy")+ " - "+ Формат(ДатаОкончания, "ДФ=dd.MM.yyyy"));Процедура
СформироватьАктСверки()в данном примере условная. Ее нужно связать с конкретным типовым отчетом или макетом вашей версии УНФ 3.—
# 8. Оформление заказа через Telegram
Есть два уровня сложности.
## Простой вариант
Клиент вводит:
1С (Код)1/заказ АРТ-001 5Бот:
1. находит товар по артикулу;
2. проверяет цену;
3. проверяет возможность продажи;
4. добавляет товар в корзину;
5. просит подтвердить заказ;
6. создает документЗаказ покупателя.Пример команды:
1С (Код)1/order АРТ-001 5Это проще всего реализовать для первого этапа.
## Полноценная корзина
Бот хранит корзину в регистре сведений:
1С (Код)1КорзиныTelegramИзмерения:
1С (Код)1234ИдентификаторЧатаНомерКорзиныНоменклатураХарактеристикаРеквизиты:
1С (Код)1234КоличествоЦенаСуммаДатаДобавленияСценарий:
1С (Код)1234567891011121314151617Новый заказ↓Поиск товара↓Выбор товара↓Указание количества↓Корзина↓Подтверждение↓Выбор склада↓Выбор доставки↓Создание заказа в УНФ## Поиск товара
Клиент отправляет:
1С (Код)1краска белая1С выполняет поиск:
1С (Код)1234567891011121314151617181920Запрос = Новый Запрос;Запрос.Текст ="ВЫБРАТЬ ПЕРВЫЕ 20| Номенклатура.Ссылка КАК Номенклатура,| Номенклатура.Наименование КАК Наименование,| Номенклатура.Код КАК Код|ИЗ| Справочник.Номенклатура КАК Номенклатура|ГДЕ| Номенклатура.ПометкаУдаления = ЛОЖЬ| И Номенклатура.ЭтоГруппа = ЛОЖЬ| И Номенклатура.Наименование ПОДОБНО &Поиск|УПОРЯДОЧИТЬ ПО| Номенклатура.Наименование";Запрос.УстановитьПараметр("Поиск","%" + ТекстПоиска + "%");Выборка = Запрос.Выполнить().Выбрать();Каждый найденный товар отправляется кнопкой:
1С (Код)1Краска белая 10 л, 2 500 руб.В
callback_dataнужно передавать не само наименование, а ключ:1С (Код)1PRODUCT|УникальныйИдентификаторНельзя без необходимости передавать большие строки в
callback_data.## Добавление в корзину
После выбора товара бот спрашивает:
1С (Код)1Укажите количество:Следующее сообщение сохраняется как количество товара.
Затем в корзину записывается строка. Перед записью нужно проверить:
— товар не помечен на удаление;
— товар разрешен к продаже;
— клиент имеет доступ к этому товару;
— цена заполнена;
— количество больше нуля;
— единица измерения корректна;
— характеристика указана, если она обязательна.## Создание документа заказа
В УНФ документ создается на сервере:
1С (Код)1234567891011121314151617181920212223242526272829303132333435363738&НаСервереФункция СоздатьЗаказПокупателяПоКорзине(Партнер,Контрагент,Организация,Корзина) ЭкспортЗаказ = Документы.ЗаказПокупателя.СоздатьДокумент();Заказ.Дата = ТекущаяДата();Заказ.Партнер = Партнер;Заказ.Контрагент = Контрагент;Заказ.Организация = Организация;Для Каждого СтрокаКорзины Из Корзина ЦиклСтрокаТовара = Заказ.Товары.Добавить();СтрокаТовара.Номенклатура =СтрокаКорзины.Номенклатура;СтрокаТовара.Количество =СтрокаКорзины.Количество;СтрокаТовара.Цена =СтрокаКорзины.Цена;СтрокаТовара.Сумма =СтрокаТовара.Количество* СтрокаТовара.Цена;КонецЦикла;Заказ.Записать();Возврат Заказ.Ссылка;КонецФункцииНо для типовой УНФ этого обычно недостаточно. В заказе могут быть обязательны:
— соглашение;
— склад;
— вид цен;
— организация;
— договор;
— подразделение;
— операция;
— график оплаты;
— способ доставки;
— статус заказа;
— ставки НДС.Поэтому перед записью нужно либо заполнить обязательные реквизиты, либо вызвать типовую процедуру заполнения документа.
В готовом решении обязательно нужно выполнять типовые проверки заполнения перед записью:
1С (Код)1234567ПопыткаЗаказ.Записать();ИсключениеВызватьИсключение"Не удалось создать заказ: "+ ОписаниеОшибки();КонецПопытки;После создания документа бот отправляет:
1С (Код)123456Заказ № 00001234 создан.Сумма: 18 500 руб.Дата: 05.11.2026Менеджер свяжется с вами для подтверждения заказа.—
# 9. Что делать с заказом без непосредственного проведения
Не рекомендуется сразу проводить заказ, сформированный клиентом через Telegram.
Лучше:
1. создать документ;
2. записать его;
3. установить статусНа согласованииили аналогичный;
4. уведомить менеджера;
5. после проверки менеджер проводит или подтверждает заказ.Причины:
— клиент мог указать неверное количество;
— цена могла измениться;
— товара может не быть в наличии;
— необходима проверка задолженности;
— нужно проверить минимальную сумму заказа;
— могут потребоваться условия доставки;
— заказ может быть подозрительным.—
# 10. Уведомления менеджеру
После создания заказа нужно отправить сообщение:
1С (Код)123456Создан новый заказ через Telegram.Заказ: 00001234Клиент: ООО РомашкаСумма: 18 500 руб.Telegram: 123456789Можно сделать два варианта:
— отправлять сообщение в Telegram-группу менеджеров;
— уведомлять конкретного ответственного менеджера;
— использовать внутренние задачи УНФ;
— отправлять уведомление одновременно в Telegram и в 1С.Для группы менеджеров потребуется отдельный
chat_id.—
# 11. Состояния диалога
Бот должен понимать, на каком шаге находится каждый пользователь.
Для этого нужен регистр сведений:
1С (Код)1СостоянияДиалогаTelegramИзмерение:
1С (Код)1ИдентификаторЧатаРеквизиты:
1С (Код)12345СостояниеОжидаемоеЗначениеТекущийДокументТекущаяКорзинаДатаИзмененияПримеры состояний:
1С (Код)123456789ГлавноеМенюОжидаетсяПоискТовараОжидаетсяКоличествоВыбираетсяПериодАктаОжидаетсяДатаНачалаОжидаетсяДатаОкончанияПодтверждениеЗаказаВыборСкладаПодтверждениеРегистрацииБез хранения состояния получится ненадежная система, потому что бот не будет понимать, к какой операции относится очередное сообщение клиента.
—
# 12. Рекомендуемый порядок разработки
Не стоит сразу реализовывать все функции одновременно. Практичный порядок такой:
## Этап 1. Основа
— регистрация клиента;
— хранениеchat_id;
— главное меню;
— отправка обычного сообщения;
— журнал ошибок;
— очередь сообщений.## Этап 2. Простые функции
— просмотр задолженности;
— получение прайс-листа;
— отправка существующих PDF;
— просмотр списка заказов.## Этап 3. Акт сверки
— выбор периода;
— формирование PDF;
— отправка клиенту;
— журнал отправленных актов.## Этап 4. Заказ
— поиск номенклатуры;
— корзина;
— выбор количества;
— подтверждение;
— создание заказа;
— уведомление менеджера.## Этап 5. Контроль
— проверка прав клиента;
— ограничение доступных товаров;
— контроль задолженности;
— повторная отправка при ошибке;
— ограничение частоты запросов;
— журнал действий клиента.Главное архитектурное решение: не размещать всю логику в обработчиках формы и не выполнять длительные операции прямо при нажатии кнопки. Для Telegram нужно разделить систему на обработку входящих сообщений, бизнес-логику УНФ и очередь отправки файлов. Тогда прайс-листы, акты сверки и заказы будут работать устойчиво, а ошибки Telegram не будут блокировать пользователей в базе.
-
-
АвторЗаписи
- Для ответа в этой теме необходимо авторизоваться.