diff --git a/src/content/docs/knowledge-base/Администрирование/Установка и настройка телеграм-бота для отправки HTTP-запросов в 1с.md b/src/content/docs/knowledge-base/Администрирование/Установка и настройка телеграм-бота для отправки HTTP-запросов в 1с.md new file mode 100644 index 0000000..c3d245f --- /dev/null +++ b/src/content/docs/knowledge-base/Администрирование/Установка и настройка телеграм-бота для отправки HTTP-запросов в 1с.md @@ -0,0 +1,192 @@ +# 📘 Инструкция по установке и обслуживанию Telegram JSON File Bot + +## 🧩 Зависимости + +- Python 3.9+ +- `python3-venv`, `pip` +- Рабочий Telegram-бот (токен от @BotFather) +- URL HTTP-сервиса на стороне 1С +- Пользователь `god` на сервере + +--- + +## 📁 1. Установка + +```bash +sudo apt update +sudo apt install python3 python3-pip python3-venv -y +``` + +Создаём директорию для проекта: + +```bash +mkdir -p ~/telegram_bot +cd ~/telegram_bot +``` + +Создаём виртуальное окружение и активируем: + +```bash +python3 -m venv venv +source venv/bin/activate +``` + +Устанавливаем зависимости: + +```bash +pip install python-telegram-bot requests +``` + +--- + +## 🧠 2. Создание `bot.py` + +Создай файл `bot.py`: + +```bash +nano ~/telegram_bot/bot.py +``` + +Вставь код (адаптируй токен и URL): + +```python +import logging +import requests +from io import BytesIO +from telegram import Update +from telegram.ext import ApplicationBuilder, MessageHandler, ContextTypes, filters + +# Настройки +BOT_TOKEN = 'ТВОЙ_ТОКЕН' +TARGET_URL = 'http://IP_ИЛИ_ДОМЕН_1С/endpoint' +ALLOWED_USERS = {123456789} # замени на свой Telegram ID +HTTP_USERNAME = '1c_user' # если требуется Basic Auth +HTTP_PASSWORD = '1c_pass' + +logging.basicConfig(level=logging.INFO) + +def is_authorized(user_id: int) -> bool: + return user_id in ALLOWED_USERS + +async def handle_file(update: Update, context: ContextTypes.DEFAULT_TYPE): + user_id = update.effective_user.id + + if not is_authorized(user_id): + await update.message.reply_text("⛔ Доступ запрещён.") + return + + document = update.message.document + if not document.file_name.endswith('.json') and not document.file_name.endswith('.txt'): + await update.message.reply_text("Отправьте .json или .txt файл.") + return + + file = await document.get_file() + buffer = BytesIO() + await file.download_to_memory(out=buffer) + content_bytes = buffer.getvalue() + content_str = content_bytes.decode('utf-8', errors='replace') + + try: + response = requests.post( + TARGET_URL, + data=content_str.encode('utf-8'), + headers={"Content-Type": "application/json"}, + auth=(HTTP_USERNAME, HTTP_PASSWORD) + ) + await update.message.reply_text( + f"✅ Файл отправлен.\n" + f"Статус: {response.status_code}\n" + f"Ответ:\n{response.text}" + ) + except Exception as e: + await update.message.reply_text(f"❌ Ошибка при отправке: {str(e)}") + +async def start(update: Update, context: ContextTypes.DEFAULT_TYPE): + await update.message.reply_text(f"👋 Привет! Твой Telegram ID: {update.effective_user.id}") + +if __name__ == '__main__': + app = ApplicationBuilder().token(BOT_TOKEN).build() + app.add_handler(MessageHandler(filters.Document.ALL, handle_file)) + app.add_handler(MessageHandler(filters.TEXT & filters.Regex(r'^/start'), start)) + app.run_polling() +``` + +--- + +## 🛠 3. Настройка systemd-сервиса + +Создай файл: + +```bash +sudo nano /etc/systemd/system/telegram-bot.service +``` + +Содержимое: + +```ini +[Unit] +Description=Telegram JSON File Bot +After=network.target + +[Service] +Type=simple +WorkingDirectory=/home/god/telegram_bot +ExecStart=/home/god/telegram_bot/venv/bin/python /home/god/telegram_bot/bot.py +Restart=always +RestartSec=5 +User=god +Environment=PYTHONUNBUFFERED=1 + +[Install] +WantedBy=multi-user.target +``` + +--- + +## 🚀 4. Запуск и автозапуск + +```bash +sudo systemctl daemon-reexec +sudo systemctl daemon-reload +sudo systemctl enable telegram-bot.service +sudo systemctl start telegram-bot.service +``` + +--- + +## 🧩 5. Обслуживание + +### ▶ Запуск / остановка + +```bash +sudo systemctl start telegram-bot.service +sudo systemctl stop telegram-bot.service +sudo systemctl restart telegram-bot.service +``` + +### 📋 Статус + +```bash +sudo systemctl status telegram-bot.service +``` + +### 📜 Просмотр логов + +```bash +journalctl -u telegram-bot.service -f +``` + +(Для выхода из `journalctl` нажми `Ctrl+C`) + +--- + +## 🔐 Telegram ID + +Чтобы узнать свой Telegram ID, отправь боту `/start`. + +Бот ответит: +``` +👋 Привет! Твой Telegram ID: 123456789 +``` + +Добавь этот ID в список `ALLOWED_USERS`. diff --git a/src/content/docs/knowledge-base/Общие/Дополнительные отчеты и обработки/Настройки/Внешняя печатная форма.md b/src/content/docs/knowledge-base/Общие/Дополнительные отчеты и обработки/Настройки/Внешняя печатная форма (С ручным созданием элементов формы).md similarity index 99% rename from src/content/docs/knowledge-base/Общие/Дополнительные отчеты и обработки/Настройки/Внешняя печатная форма.md rename to src/content/docs/knowledge-base/Общие/Дополнительные отчеты и обработки/Настройки/Внешняя печатная форма (С ручным созданием элементов формы).md index 4e6f784..a0d8f08 100644 --- a/src/content/docs/knowledge-base/Общие/Дополнительные отчеты и обработки/Настройки/Внешняя печатная форма.md +++ b/src/content/docs/knowledge-base/Общие/Дополнительные отчеты и обработки/Настройки/Внешняя печатная форма (С ручным созданием элементов формы).md @@ -1,7 +1,4 @@ ---- -title: Внешняя печатная форма -slug: общие-дополнительные-отчеты-и-обработки-настройки/внешняя-печатная-форма ---- + # Настройка обработки Создаем новую **`внешнюю обработку`** @@ -159,5 +156,3 @@ slug: общие-дополнительные-отчеты-и-обработки Теперь можно заниматься отладкой печати БЕЗ добавления нового элемента в справочник `«ДополнительныеОтчетыОбработки»`. Для этого мы рисовали форму в обработке ![image.png](data:image/png;base64,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FruWOZeNZdvozPiJAAIBC1Qvy5Yaf+myrPFElnZUWRbop1Juq6HlF2xioUE1m084y1RWQm2Fz3aOtRX5ExMBBESgalm2GMBrZmam0+kEkMgiZZl8sAbeCOe26kwh2MScPCPfDWaZtrNS2s6xIv98MX0EtlygUll25MiRhYXFxt+3biVlWeNpLCwsHjlyZMtXbNgHCOa26kIHm5ibaNz7gSxT9q+Pu1+zb8nabOdYWzIBgiKAgCFQqSw7dOjQ3Nzt+fmFZt83b97qdDrN5jA/vzA3d/vQoUOGLZuDCARyWy2mHmxixVRjPtL4MqkE0t9IK/5uWM0rs51j1Zw64RBAoESgUln20ksvXbhwYb7p182bN9OyrOE8Lly48NJLL5U4c7hfgcZvq2WJBptYWcJxHm98mbL/MjT9O5e3egm2c6ytngvxEUBACVQqy06dOnXw4MGpqanZ2bnbt+ebet+8eev9999vavTbt+dnZ+empqYOHjx46tQpPlgIIIAAAggggMBgApXKspmZmYmJifHx8eeff/5Xzb2ef/758fHx5sb/lUpgYmJiZmZmsGWgFwIIIIAAAgggUKks63a7MzMz586dO3ny5F+be508efLcuXPNjf9XlQA1GZcTAggggAACCFQRqFqWVRmbvggggAACCCCAAAIiQFkmFGwggAACCCCAAAJNClCWNanP2AgggAACCCCAgAhQlgkFGwgggAACCCCAQJMClGVN6jM2AggggAACCCAgApRlQsEGAggggAACCCDQpABlWZP6jI0AAggggAACCIgAZZlQsIEAAggggAACCDQpQFnWpD5jI4AAAggggAACIkBZJhRsIIAAAggggAACTQpUKsvW1lbOn36iPf6FF3/Z4r3NAu3xL5w//cTa2kqTHx/GRgABBBBAAIH6BCqVZedPP3Hy5XuXLn2r+/F/8N5mgaVL3zr58r3nTz9R34eBSAgggAACCCDQpEClsuzIC59fvPhg9/q3eTcisHjxwSMv/GOTHx/GRgABBBBAAIH6BCqVZS/+stW9/k3eDQokS8ALAQQQQAABBIZCoHJZdu3furybE6AsG4rLkEkggAACCCCQCFQvy77Wvca7MQHKMq5jBBBAAAEEhkageln2r91rvBsToCwbmkuRiSCAAAIIIFC5LJv+ly7v5gQoy7iGEUAAAQQQGBqB6mXZl7vTvBsT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) ![image.png](data:image/png;base64,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) - -А после добавления в справочник у нас автоматом нарисуется нужная **команда печати** для тех элементов, которые мы указали в массиве назначений (Если на форме используются подключаемые команды, конечно. Просто так ничего не нарисуется) \ No newline at end of file diff --git a/src/content/docs/knowledge-base/Общие/Дополнительные отчеты и обработки/Настройки/Внешняя печатная форма (Только программно).md b/src/content/docs/knowledge-base/Общие/Дополнительные отчеты и обработки/Настройки/Внешняя печатная форма (Только программно).md new file mode 100644 index 0000000..80ff80f --- /dev/null +++ b/src/content/docs/knowledge-base/Общие/Дополнительные отчеты и обработки/Настройки/Внешняя печатная форма (Только программно).md @@ -0,0 +1,212 @@ + +# Настройка обработки + +Создаем новую **`внешнюю обработку`** + +Создаем **`макет печатной формы`** и **`форму обработки`** для тестирования. **На форме ничего не делаем** + +# Модуль формы +```bsl +//////////////////////////////////////////////////////////////////////////////// +// Не забудь забиндить событие формы ПриСозданииНаСервере к обработчику +// В обработчике ПриСозданииНаСервере нужно указать описание типов для списка объектов печати +// +//////////////////////////////////////////////////////////////////////////////// + +#Область ОбработчикиСобытийФормы + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + ДополнительнаяОбработка = Неопределено; + ИдентификаторКоманды = ""; + ОбъектыНазначения = Новый Массив; + + Параметры.Свойство("ДополнительнаяОбработкаСсылка", ДополнительнаяОбработка); + Параметры.Свойство("ИдентификаторКоманды", ИдентификаторКоманды); + Параметры.Свойство("ОбъектыНазначения", ОбъектыНазначения); + + Если ТипЗнч(ОбъектыНазначения) <> Тип("Массив") Тогда + ВызватьИсключение "Неверный тип параметра ""Объекты назначения"""; + КонецЕсли; + + ДобавляемыеРеквизиты = Новый Массив; + + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("ДополнительнаяОбработкаСсылка", + Новый ОписаниеТипов("СправочникСсылка.ДополнительныеОтчетыИОбработки"))); + + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("ИдентификаторКоманды", ОбщегоНазначения.ОписаниеТипаСтрока(0))); + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("ОбъектыНазначения", Новый ОписаниеТипов("СписокЗначений"))); + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("СписокОбъектовПечати", Новый ОписаниеТипов("СписокЗначений"))); + + ЭтотОбъект.ИзменитьРеквизиты(ДобавляемыеРеквизиты); + + ЭтотОбъект["ДополнительнаяОбработкаСсылка"] = ДополнительнаяОбработка; + ЭтотОбъект["ИдентификаторКоманды"] = ИдентификаторКоманды; + ЭтотОбъект["ОбъектыНазначения"].ЗагрузитьЗначения(ОбъектыНазначения); + + НовыйЭлемент = Элементы.Добавить("СписокОбъектовПечати", Тип("ПолеФормы"), ЭтотОбъект); + НовыйЭлемент.Заголовок = "Список объектов печати"; + НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода; + НовыйЭлемент.ПутьКДанным = "СписокОбъектовПечати"; + НовыйЭлемент.УстановитьДействие("НачалоВыбора", "СписокОбъектовПечатиНачалоВыбора"); + + НоваяКоманда = ЭтотОбъект.Команды.Добавить("ТестПечати"); + НоваяКоманда.Заголовок = "Тест печати"; + НоваяКоманда.Действие = "ТестПечати"; + + НовыйЭлемент = Элементы.Добавить("КомандаТестПечати", Тип("КнопкаФормы"), КоманднаяПанель); + НовыйЭлемент.Заголовок = "Тест печати"; + НовыйЭлемент.ИмяКоманды = "ТестПечати"; + НовыйЭлемент.КнопкаПоУмолчанию = Истина; + + // ================================================== ВАЖНО ========================================================= + // Тут укажи нужжный тип + СписокДокументов = Новый СписокЗначений; + СписокДокументов.ТипЗначения = Новый ОписаниеТипов("ДокументСсылка.МойДокумент"); + + ЭтотОбъект["СписокОбъектовПечати"] = СписокДокументов; + // ================================================================================================================== + +КонецПроцедуры + +#КонецОбласти + +#Область ОбработчикиКомандФормы + +&НаКлиенте +Процедура ТестПечати(Команда) + + МассивДокументов = ЭтотОбъект["СписокОбъектовПечати"].ВыгрузитьЗначения(); + МассивПечатныхФорм = СписокСформированныхПечатныхФорм(МассивДокументов); + УправлениеПечатьюКлиент.ПечатьДокументов(МассивПечатныхФорм, МассивДокументов ,ЭтотОбъект); + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +&НаКлиенте +Процедура Печать(ИмяКоманды, МассивОбъектов, ПараметрыПечати = Неопределено, + КоллекцияПечатныхФорм = Неопределено, ОбъектыПечати = Неопределено, ПараметрыВывода = Неопределено) Экспорт + + ПараметрыИсточника = Новый Структура; + ПараметрыИсточника.Вставить("ИдентификаторКоманды", ЭтотОбъект["ИдентификаторКоманды"]); + ПараметрыИсточника.Вставить("ОбъектыНазначения", ЭтотОбъект["ОбъектыНазначения"]); + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ИсточникДанных", ЭтотОбъект["ДополнительнаяОбработкаСсылка"]); + ПараметрыФормы.Вставить("ПараметрыИсточника", ПараметрыИсточника); + + ОткрытьФорму("ОбщаяФорма.ПечатьДокументов", ПараметрыФормы); + +КонецПроцедуры + +&НаСервере +Функция СписокСформированныхПечатныхФорм(МассивДокументов) + + ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); + + // ТУТ ТОТ ЖЕ ИДЕНТИФИКАТОР, ЧТО И В МОДУЛЕ ОБЪЕКТА ОБРАБОТКИ + КоллекцияПечатныхФорм = УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм("ПФ_MXL_БиркаНесоответствующейПродукции"); + ПараметрыВывода = УправлениеПечатью.ПодготовитьСтруктуруПараметровВывода(); + + ОбработкаОбъект.Печать(МассивДокументов, КоллекцияПечатныхФорм, МассивДокументов, ПараметрыВывода); + + МассивПечатныхФорм = ОбщегоНазначения.ТаблицаЗначенийВМассив(КоллекцияПечатныхФорм); + + Возврат МассивПечатныхФорм; + +КонецФункции + +#КонецОбласти +``` + +# Модуль объекта обработки +```bsl +#Область СлужебныйПрограммныйИнтерфейс + +Функция СведенияОВнешнейОбработке() Экспорт + + ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке(СтандартныеПодсистемыСервер.ВерсияБиблиотеки()); + Представление = "Моя печатная форма. Это будет видеть пользователь"; + Идентификатор = "УникальноеИмяКомандыКонкретноЭтойПечатнойФормы"; // произвольное имя. используется далее по коду и в модуле формы + + ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма(); + ПараметрыРегистрации.Назначение = МассивНазначений(); + ПараметрыРегистрации.Версия = "1.0"; + ПараметрыРегистрации.БезопасныйРежим = Ложь; + ПараметрыРегистрации.Информация = "Это будет видно в карточке дополнительной обработки. Сюда пишем всякую полезную информацию"; + + Команда = ПараметрыРегистрации.команды.Добавить(); + Команда.Представление = Представление; + Команда.Идентификатор = Идентификатор; + Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовКлиентскогоМетода(); + Команда.ПоказыватьОповещение = Истина; + Команда.Модификатор = "ПечатьMXL"; // ВАЖНО + + Возврат ПараметрыРегистрации; + +КонецФункции + +Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт + + Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "УникальноеИмяКомандыКонкретноЭтойПечатнойФормы") Тогда + УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию( + КоллекцияПечатныхФорм, + "УникальноеИмяКомандыКонкретноЭтойПечатнойФормы", + "Синоним макета", + СформироватьСобственнуюПечатнуюФорму(МассивОбъектов, ОбъектыПечати)); // тут вызов нашей функции, которая будет возвращать заполненный ТабДок + КонецЕсли; + +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция МассивНазначений() + + МассивНазначений = Новый Массив; + // Имя документа, для которого нацелена эта печатка. Пишем как в запросе + // Можно добавлять несколько назначений, но тогда нужно при получении данных для ПФ это учитывать + // Это назначение определяет, для каких документов будет выведена команда в группу "Печать" + МассивНазначений.Добавить("Документ.ПриобретениеТоваровУслуг"); + Возврат МассивНазначений; + +КонецФункции + +Функция СформироватьСобственнуюПечатнуюФорму(МассивОбъектов, ОбъектыПечати) Экспорт + + ТабДок = Новый ТабличныйДокумент; + + ДанныеДляПечати = ДанныеДляПечатиМоихДокументов(МассивОбъектов); // тут получаем данные для вывода + + // Получаем данные, получаем макет, заполняем, возвращаем + + ТабДок.Область("R1C1").Текст = "Пример вывода"; + + Возврат ТабДок; + +КонецФункции + +Функция ДанныеДляПечатиМоихДокументов(МассивОбъектов) + + // Тут получаем данные + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ * Из Документ.ПриобретениеТоваровУслуг КАК Т ГДЕ Т.Ссылка В(&МассивОбъектов)"; + Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов); + + Выборка = Запрос.Выполнить().Выбрать(); + + Возврат Выборка; + +КонецФункции + +#КонецОбласти +``` + +