Имя: Пароль:
1C
 
Отправка файла из 1с в Telegram
,
0 MAPATNK2
 
naïve
16.08.16
15:17
Всем привет. Сие проблема застала меня: Осуществляю передачу отчета с помощью бота через telegram. отчет формируется, файлик отправляется, а на другом конце принимается, вот только при сохранении файла Excel выдает, что либо кодировка проблемна, либо файл поврежден. И при открытии получаю белеберду с нулями, единицами и непонятными символами))) Погмогите исправить прошу вас.
1 MAPATNK2
 
naïve
16.08.16
15:17
Процедура КнопкаВыполнитьНажатие(Кнопка)
    Токен = "249415403:AAHhyU59bNN2Xq9yjkmiuRWoVVOV9oUI_zQ";
    chat_id = "260329199";
    Таб = Новый ТабличныйДокумент;
    Отчеты.Отчет2.Создать().СкомпоноватьРезультат(Таб);
    
    ИмяФайла = ПолучитьИмяВременногоФайла("xls");
    
    Таб.Записать(ИмяФайла);
    
    СтрокаСоединения = "/bot" + Токен + "/sendDocument";

    Boundary = "----"+Строка(Новый УникальныйИдентификатор());

    //Определяем массив для процедуры ОбъединитьФайлы
    МассивФайловДляОбъединения = Новый Массив;

    //Формируем начальный фрагмент файла POST-запроса
    ИмяФайлаОтправкиНачало = ПолучитьИмяВременногоФайла("txt");
    ФайлОтправкиНачало = Новый ЗаписьТекста(ИмяФайлаОтправкиНачало, КодировкаТекста.UTF8);

    //Формируем конечный фрагмент файла POST-запроса
    ИмяФайлаОтправкиКонец = ПолучитьИмяВременногоФайла("txt");
    ФайлаОтправкиКонец = Новый ЗаписьТекста(ИмяФайлаОтправкиКонец, КодировкаТекста.UTF8);

    ТекстДляОтправки = "";

    ТекстДляОтправки = ТекстДляОтправки + "--"+Boundary + Символы.ПС;    
    ТекстДляОтправки = ТекстДляОтправки + "Content-Disposition: form-data; name=""chat_id""" + Символы.ПС + Символы.ПС;    
    ТекстДляОтправки = ТекстДляОтправки + chat_id + Символы.ПС;
    
    ТекстДляОтправки = ТекстДляОтправки + "--"+Boundary + Символы.ПС;    
    ТекстДляОтправки = ТекстДляОтправки + "Content-Disposition: form-data; name=""document""; filename=""report.xls""" + Символы.ПС;    
    
    ТекстДляОтправки = ПереобразоватьЮникод(ТекстДляОтправки);
    ФайлОтправкиНачало.ЗаписатьСтроку(ТекстДляОтправки);
    ФайлОтправкиНачало.Закрыть();
    МассивФайловДляОбъединения.Добавить(ИмяФайлаОтправкиНачало);

    МассивФайловДляОбъединения.Добавить(СокрЛП(ИмяФайла));

    ТекстДляОтправки = "" + Символы.ПС;
    ТекстДляОтправки = ТекстДляОтправки + "--"+Boundary+"--";
    ФайлаОтправкиКонец.ЗаписатьСтроку(ТекстДляОтправки);
    ФайлаОтправкиКонец.Закрыть();
    МассивФайловДляОбъединения.Добавить(ИмяФайлаОтправкиКонец);
    
    
    ИмяФайлаОтправки = ПолучитьИмяВременногоФайла("txt");
    ОбъединитьФайлы(МассивФайловДляОбъединения, ИмяФайлаОтправки);
    
    HTTPЗапрос = Новый HTTPЗапрос;
    Заголовки = Новый Соответствие;

    HTTPЗапрос.Заголовки.Вставить("Connection", "keep-alive");
    HTTPЗапрос.Заголовки.Вставить("Content-Type", "multipart/form-data; boundary="+Boundary);

    HTTPЗапрос.УстановитьИмяФайлаТела(ИмяФайлаОтправки);    
    HTTPЗапрос.АдресРесурса = СтрокаСоединения;

    ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(Новый СертификатКлиентаWindows, Новый СертификатыУдостоверяющихЦентровWindows);
    HTTPСоединение = Новый HTTPСоединение("api.telegram.org",443,,,,,Новый ЗащищенноеСоединениеOpenSSL());

    Попытка
        ОтветHTTP = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
    Исключение
        Сообщить("Ошибка выполенния запроса!");
    КонецПопытки;
КонецПроцедуры
2 Garykom
 
гуру
16.08.16
15:24
Попробуй отчет в архив засовывать перед отправкой и уже архивом отправлять
3 MAPATNK2
 
naïve
16.08.16
15:25
(2) А как это осуществить?
4 Garykom
 
гуру
16.08.16
15:26
Продам СП, дорого
5 MAPATNK2
 
naïve
16.08.16
15:26
(2) Но все же, мне это мало чем поможет. На большинстве устройств нет архиваторов.
6 Garykom
 
гуру
16.08.16
15:28
(5) Угу а открывалка формата екселя на этих устройствах откуда взялась?
7 Garykom
 
гуру
16.08.16
15:30
Тьфу у тя отправка по http кривая в дупель
8 MAPATNK2
 
naïve
16.08.16
15:41
(7) Все отправляется нормально. Я спросил про шрифт. В чем проблема?
9 Garykom
 
гуру
16.08.16
15:50
Идут стрельбы.
Дали автоматы, патроны, показали куда стрелять.
Админ отстрелялся, подводят итоги. Мишень админа чистая.
Командир:
- ??????!!!!!..
Админ, проверяя автомат:
- С моей стороны пули вылетели. Проблемы у вас...
10 Garykom
 
гуру
16.08.16
15:52
Все люди делятся на 10 категорий: на тех, кто понимает двоичную систему счисления и на тех, кто её не понимает.
11 MAPATNK2
 
naïve
16.08.16
15:57
(10) Молодец, развлекайся тут)
12 MM
 
16.08.16
16:16
В Таб.Записать(ИмяФайла) - сохранение происходит в MXL
13 MAPATNK2
 
naïve
17.08.16
11:40
(12) А как изменить этот формат, чтобы читабильно в EXCEL было?
14 opera199
 
17.08.16
11:50
В эксель через ком-объекты сохраняется.
15 Serginio1
 
17.08.16
11:53
ТабличныйДокумент.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.XLS);                

Да а multipart/form-data проще отправлять

http://catalog.mista.ru/public/466052/
// Вариант отправки двоичных данных из файла но более краткий
                 ПотокФайла2 =Врап.ПолучитьТип("System.IO.File").OpenRead(ИмяФайла);
                 ФайловыйКонтент2 =Врап.СоздатьОбъект("System.Net.Http.StreamContent",ПотокФайла2);
                 Контент.Add(ФайловыйКонтент2,"attachment","TestXml");

                requestUri = "api/values/SendFiles";

                Результат = Клиент.PostAsync(requestUri, Контент).Result;
                стр = Результат.Content.ReadAsStringAsync().Result;
16 MAPATNK2
 
naïve
17.08.16
12:51
(15) Не помогло
17 MAPATNK2
 
naïve
17.08.16
12:56
Сделал так, все работает отлично. Если есть недочеты, скажите пожалуйста.

Процедура КнопкаВыполнитьНажатие(Кнопка)
    Токен = "249415403:AAHhyU59bNN2Xq9yjkmiuRWoVVOV9oUI_zQ";
    chat_id = "260329199";
    Таб = Новый ТабличныйДокумент;
    Отчеты.Отчет2.Создать().СкомпоноватьРезультат(Таб);
    
    ИмяФайла = ПолучитьИмяВременногоФайла("xlsx");
    
    Таб.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.XLSX);
    
    СтрокаСоединения = "/bot" + Токен + "/sendDocument";

    Boundary = "----"+Строка(Новый УникальныйИдентификатор());

    //Определяем массив для процедуры ОбъединитьФайлы
    МассивФайловДляОбъединения = Новый Массив;

    //Формируем начальный фрагмент файла POST-запроса
    ИмяФайлаОтправкиНачало = ПолучитьИмяВременногоФайла("xlsx");
    ФайлОтправкиНачало = Новый ЗаписьТекста(ИмяФайлаОтправкиНачало, КодировкаТекста.UTF8);

    //Формируем конечный фрагмент файла POST-запроса
    ИмяФайлаОтправкиКонец = ПолучитьИмяВременногоФайла("xlsx");
    ФайлаОтправкиКонец = Новый ЗаписьТекста(ИмяФайлаОтправкиКонец, КодировкаТекста.UTF8);

    ТекстДляОтправки = "";

    ТекстДляОтправки = ТекстДляОтправки + "--"+Boundary + Символы.ПС;    
    ТекстДляОтправки = ТекстДляОтправки + "Content-Disposition: form-data; name=""chat_id""" + Символы.ПС + Символы.ПС;    
    ТекстДляОтправки = ТекстДляОтправки + chat_id + Символы.ПС;
    
    ТекстДляОтправки = ТекстДляОтправки + "--"+Boundary + Символы.ПС;    
    ТекстДляОтправки = ТекстДляОтправки + "Content-Disposition: form-data; name=""document""; filename=""report.xlsx""" + Символы.ПС;    
    
    ФайлОтправкиНачало.ЗаписатьСтроку(ТекстДляОтправки);
    ФайлОтправкиНачало.Закрыть();
    МассивФайловДляОбъединения.Добавить(ИмяФайлаОтправкиНачало);

    МассивФайловДляОбъединения.Добавить(СокрЛП(ИмяФайла));

    ТекстДляОтправки = "" + Символы.ПС;
    ТекстДляОтправки = ТекстДляОтправки + "--"+Boundary+"--";
    ФайлаОтправкиКонец.ЗаписатьСтроку(ТекстДляОтправки);
    ФайлаОтправкиКонец.Закрыть();
    МассивФайловДляОбъединения.Добавить(ИмяФайлаОтправкиКонец);
    
    
    ИмяФайлаОтправки = ПолучитьИмяВременногоФайла("xlsx");
    ОбъединитьФайлы(МассивФайловДляОбъединения, ИмяФайлаОтправки);
    
    HTTPЗапрос = Новый HTTPЗапрос;
    Заголовки = Новый Соответствие;

    HTTPЗапрос.Заголовки.Вставить("Connection", "keep-alive");
    HTTPЗапрос.Заголовки.Вставить("Content-Type", "multipart/form-data; boundary="+Boundary);

    HTTPЗапрос.УстановитьИмяФайлаТела(ИмяФайлаОтправки);    
    HTTPЗапрос.АдресРесурса = СтрокаСоединения;

    ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(Новый СертификатКлиентаWindows, Новый СертификатыУдостоверяющихЦентровWindows);
    HTTPСоединение = Новый HTTPСоединение("api.telegram.org",443,,,,,Новый ЗащищенноеСоединениеOpenSSL());

    Попытка
        ОтветHTTP = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
    Исключение
        Сообщить("Ошибка выполенния запроса!");
    КонецПопытки;
КонецПроцедуры
18 MAPATNK2
 
naïve
17.08.16
12:57
(15) Спасибо большое. Может вы знаете есть ли где примеры по работе с Telegram? Нужно чтобы пользователи отправляли боту сообщения, а 1с-ка сохраняла эти сообщения в документ.??