Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Загрузка вложений с почты

v7: Загрузка вложений с почты
Я
   Ogonechek
 
06.10.16 - 08:59
База 7.7 Торговля и склад, 7.70.938
Есть обработка, которая загружает заявки с почты при помощи компоненты ROM-Mail. Раньше файлы в почте хранились в формате dbf, теперь поставщик присылает данные в xls. Но не просто в xls, а в zip. Если заходить на почту через веб-интерфейс, то при нажатии на файл вложения он скачивается уже в xls. А когда делаешь это через обработку, то файл скачивается в непонятном формате такого вида. QlNGD0YDQvNCw0L3QvtCyX9CS0JNfNjMzMi54bHM=_=.
Если на почте просто лежит файл xls, без архива, обработка скачивает файл правильно, распознает как xls.
Предположила, что проблема в кодировке, но если даже в коде обработке устанавливать кодировку, она вне зависимости от кода ставится "koi8-r". Пробовала через эту ссылку http://www.artlebedev.ru/tools/decoder/advanced/ распознать тип файл - все равно всегда набор символов пишет.
Может быть кто-то знает, как решить такую проблему? Или придется просить поставщиков присылать в xls без архива?
 
 
   Lokli
 
1 - 06.10.16 - 09:23
Так скачать файл в каталог, разархивировать и открыть в Excel'е обработкой?
   Ogonechek
 
2 - 06.10.16 - 09:27
В том-то и дело, что не получается скачать файл как архив.
Кусок процедуры где считывается файлик : 
    Сп = СоздатьОбъект("СписокЗначений");
    
    Для Сч = 1 По ТЗ.КоличествоСтрок() Цикл
                    
        ТЗ.ПолучитьСтрокуПоНомеру(Сч);
        Если ТЗ.Пометка = 2 Тогда

            Если ВК.ПолучитьСообщение(ТЗ.НомерПисьма) = 0 Тогда
                Продолжить;
            КонецЕсли;
            
            Если ВК.КоличествоФайлов() = 0 Тогда
                Сообщить("---------------------------------");
                Сообщить("Обработано: " + Вк.Тема + ". Не обнаружен заказ в письме!!!");
            КонецЕсли;
            
            Для Инд=1 По ВК.КоличествоФайлов() Цикл
                
                ИмяФайла = ВК.ПолучитьФайл(Инд);
                Если Прав(ВРег(СокрЛП(ИмяФайла)),3) = "XLS" Тогда
                    ВК.СохранитьФайл(Инд,"");
                    
                    Конт = СокрЛП(КаталогПользователя() + ИмяФайла);
                    Сп.ДобавитьЗначение(Конт);
                    Сп.ДобавитьЗначение(ВК.АдресОтправителя);
                    Сп.ДобавитьЗначение(ВК.ДатаОтправки);
                    Сп.ДобавитьЗначение(ВК.Тема);
                    ОткрытьФормуМодально("Отчет", Сп, КаталогИБ() + "ExtForms\ЗагрузкаЗаявокГулливераИзПочтыITMaster.ert");
                    
                    Конт = Сп.ПолучитьЗначение(5);
                    
                    Сп.УдалитьВсе();                    
                    Если Конт = 1 Тогда
                        ЗаписатьВСправочник(ВК.АдресОтправителя, ВК.Тема, ВК.ДатаОтправки);
                    КонецЕсли;
                    Сообщить(?(Конт = 1, "Успешно обработан! <<", "Ошибка! Исправьте ошибки! Повторите загрузку. <<")+ Вк.Тема + ">>");
                    
                КонецЕсли;
            КонецЦикла;
            
        КонецЕсли;
    КонецЦикла;
   Ogonechek
 
3 - 06.10.16 - 09:27
И если перед фразой ИмяФайла = ВК.ПолучитьФайл(Инд); посмотреть, как выглядит поле Вложения, то там будет написано именно QlNGD0YDQvNCw0L3QvtCyX9CS0JNfNjMzMi54bHM=_=.
   Lokli
 
4 - 06.10.16 - 10:01
Так у тебя там условие стоит:
....
Если Прав(ВРег(СокрЛП(ИмяФайла)),3) = "XLS" Тогда
....

т.е. у тебя обработка не качает ни какой файл кроме *.xls
   Ogonechek
 
5 - 06.10.16 - 10:16
Это понятно, но если это условие убрать, то он считывает остальные файлы криво, которые на самом деле архивы. Во всяком случае, в веб интерфейсе почты около файла стоит значок ZIP.
   Lokli
 
6 - 06.10.16 - 10:19
Конечно будет криво читать. ZIP - это ведь архив. К существующему условию добавь проверку на расширение zip. Если оно есть, то скачивай файл, разархивируй в файл xls и после этого открывай его в ExtForms\ЗагрузкаЗаявокГулливераИзПочтыITMaster.ert.
   Ogonechek
 
7 - 06.10.16 - 10:19
В любом случае, если бы файл прочитывался нормально, то у него было бы его имя  расширением .zip.
Если бы он грузился архивом, дальше я бы просто команду системы с разархивацией запустила и все. А так-то у меня даже архива нет. А вместо него какая-то чушь.
   Ogonechek
 
8 - 06.10.16 - 10:19
(6) Как я его проверю на zip?
   Ogonechek
 
9 - 06.10.16 - 10:20
В конце имени файла нет ".zip".
   Ogonechek
 
10 - 06.10.16 - 10:21
Я просто убрала все проверки на имя и грузила только те заявки, в которых точно есть архив и команда системы выдавала, что архив не обнаружен
 
 Рекламное место пустует
   Lokli
 
11 - 06.10.16 - 10:23
Ну так анализируй расширение имени файла.
... 
Если Прав(ВРег(СокрЛП(ИмяФайла)),3) = "XLS" Тогда
...
...
ИначеЕсли Прав(ВРег(СокрЛП(ИмяФайла)),3) = "ZIP" Тогда
...
...
КонецЕсли;
   Lokli
 
12 - 06.10.16 - 10:25
+(11) Распаковать zip можно с помощью ВК, например raruslib. 1С 7.7 это делать не умеет.
   пипец
 
13 - 06.10.16 - 10:25
   Ogonechek
 
14 - 06.10.16 - 10:25
Файл=ВК.КаталогВложений+ВК.ПолучитьФайл(Инд);
                Сообщить("Получен файл: "+Инд);
                //сохранение

                ВК.СохранитьФайл(Инд,);   
                Кавычка="""";
                КомандаСистемы(Кавычка+"C:\Program Files\WinRAR\WinRar.exe"+Кавычка+" x "+"-o+ "+" -IBCK "+Файл+" *.xls F:\ITMaster");
   Это_mike
 
15 - 06.10.16 - 10:30
(12) это вполне может делать dialmail или 1c++ (BinaryData)
   Ogonechek
 
16 - 06.10.16 - 10:32
Т.е. хотите сказать, что просто файл всегда нормально считывается, а архив нет? Практически аналогичная обработка, которая скачивает архив с почты, работает без проблем. Отличия только в том, что там почты нормальная, mail. А тут это веб-почта или как она там называется. И файл был в архиве rar. И руками тоже скачивался как архив, а тут если вручную скачиваешь, сразу xls.
   Lokli
 
17 - 06.10.16 - 10:34
(16) Хотим сказать что всё нормально считывается. Не смотри поле "Вложения".
В цикле
Для Инд=1 По ВК.КоличествоФайлов() Цикл
            ИмяФайла = ВК.ПолучитьФайл(Инд);
.....
КонецЦикла;

После получения имени файла сделай Сообщить(ИмяФайла);
И посмотри какие файлы тебе покажутся.
   Lokli
 
18 - 06.10.16 - 10:36
(15) Согласен, dialmail удобнее. Скачал с почты, тут же распаковал. ))
   Ogonechek
 
19 - 06.10.16 - 10:42
Вот такие файлы загружаются с почты:
Получен файл: QlNGD0YDQvNCw0L3QvtCyX9CS0JNfNzk4NS54bHM=_=
Получен файл: QlNGD0YDQvNCw0L3QvtCyX9CS0JNf0KjQvg==_=_=_utf-8_B_0LrQmtC+Xzc5ODYueGxz_=
Получен файл: QlNGD0YDQvNCw0L3QvtCyX9CS0JNf0KjQvg==_=_=_utf-8_B_0LrQmtC+XzYwNjUueGxz_=
Получен файл: QlNGD0YDQvNCw0L3QvtCyX9CS0JNfNzA0NS54bHM=_=
Получен файл: QlNGD0YDQvNCw0L3QvtCyX9CS0JNfNjA2NC54bHM=_=
Получен файл: QlNGD0YDQvNCw0L3QvtCyX9CS0JNf0KjQvg==_=_=_utf-8_B_0LrQmtC+XzcwNDYueGxz_=
Получен файл: QlNGD0YDQvNCw0L3QvtCyX9CS0JNf0KjQvg==_=_=_utf-8_B_0LrQmtC+XzEyNTQ1Lnhscw==_=
Получен файл: QlNGD0YDQvNCw0L3QvtCyX9CS0JNfMTI1NDQueGxz_=
Получен файл: QlNGD0YDQvNCw0L3QvtCyX9CS0JNfNzA1My54bHM=_=
Получен файл: QlNGD0YDQvNCw0L3QvtCyX9CS0JNfNjkyNS54bHM=_=
Получен файл: QlNGD0YDQvNCw0L3QvtCyX9CS0JNfMTQ5MjcueGxz_=
Получен файл: QlNGD0YDQvNCw0L3QvtCyX9CS0JNfNjQ2NS54bHM=_=
Получен файл: QlNGD0YDQvNCw0L3QvtCyX9CS0JNf0KjQvg==_=_=_utf-8_B_0LrQmtC+XzY1NDEueGxz_=
Получен файл: QlNGD0YDQvNCw0L3QvtCyX9CS0JNfNzU3NC54bHM=_=
Получен файл: QlNGD0YDQvNCw0L3QvtCyX9CS0JNf0KjQvg==_=_=_utf-8_B_0LrQmtC+XzE0OTI4Lnhscw==_=
Получен файл: QlNGD0YDQvNCw0L3QvtCyX9CS0JNfMTQ3NDYueGxz_=
Получен файл: QlNGD0YDQvNCw0L3QvtCyX9CS0JNf0KjQvg==_=_=_utf-8_B_0LrQmtC+XzE0NzQ3Lnhscw==_=
Получен файл: QlNGD0YDQvNCw0L3QvtCyX9CS0JNfMTM0NTcueGxz_=
Получен файл: QlNGD0YDQvNCw0L3QvtCyX9CS0JNfMjc2NC54bHM=_=
Получен файл: QlNGD0YDQvNCw0L3QvtCyX9CS0JNf0KjQvg==_=_=_utf-8_B_0LrQmtC+XzEzNDU4Lnhscw==_=
=====================
Загрузка завершена!!!
   Ogonechek
 
20 - 06.10.16 - 10:44
Я просто не уверена, что если я все перепишу под Dialmail, у меня файлы будут правильно считываться...
   Lokli
 
21 - 06.10.16 - 10:45
(19) Кусок кода дай, который эти сообщения пишет.
   Ogonechek
 
22 - 06.10.16 - 10:46
(21) Ну так тот же, что ты сказал
            Для Инд=1 По ВК.КоличествоФайлов() Цикл
                
                Файл=ВК.ПолучитьФайл(Инд);
                
                Сообщить("Получен файл: "+Файл);
   Lokli
 
23 - 06.10.16 - 10:53
Ни разу не сталкивался с таким. У меня таких проблем ни когда не возникало. Список файлов всегда был правильным, вне зависимости от типов файлов (xls, mxl, xml, pdf, zip и пр.).

В СП про кодировку написано следующее:
"...автоматическое кодирование/декодирование средствами внешней компоненты доступно только для следующих кодировок: "windows-1251", "koi8-r", "koi8-u", "ibm866", "x-mac-cyrillic", "iso-8859-1"..."iso-8859-9"..."
   Ogonechek
 
24 - 06.10.16 - 10:58
В том-то и дело, что все остальные файлы с почты читаются правильно... И dbf, и xls.
   Это_mike
 
25 - 06.10.16 - 10:59
(20) попробовать-то? никак?
   Lokli
 
26 - 06.10.16 - 11:00
Такое ощущение, что он тебе список файлов архива подсовывает в BASE64.
   Ogonechek
 
27 - 06.10.16 - 11:01
(25) В процессе)
   Lokli
 
28 - 06.10.16 - 11:01
(24) а можешь это же письмо прочитать с другой почты? (корпоративная, mail.ru...)
   Ogonechek
 
29 - 06.10.16 - 11:02
(26) И как с этим бороться?
Декодер, который я вначале скидывала, тоже ссылался на BASE64.
   Ogonechek
 
30 - 06.10.16 - 11:03
(28) Попробую на свою личную переслать и оттуда считать.
   Lokli
 
31 - 06.10.16 - 11:04
(29) возникают у меня смутные подозрения, что это особенность данного почтового сервера...
   varelchik
 
32 - 06.10.16 - 11:58
(0)Параллельное обсуждение в соседней ветке.
У меня оно ужо давно было реализовано с dialmail.
Там все и почта и фтп и zip.
стучись ченить придумаем.
   Ogonechek
 
33 - 06.10.16 - 13:35
Спасибо всем, кто откликнулся)
Переделала обработку под Dialmail и вложения писем, которые в веб почте отображались как zip, сразу стали читаться как xls.
 
 
   Lokli
 
34 - 06.10.16 - 13:55
А что за веб почта? Какой домен?
   Ogonechek
 
35 - 06.10.16 - 14:08
Ну сама почта вот : http://mail.gulliver-ul.ru/
А вид интерфейса выбран RoundCube WebMail
   Ogonechek
 
36 - 21.10.16 - 13:44
И снова проблемы с этой загрузкой. Переписанная обработка загружает письма, которые лежит в архиве, а обычные файлы не грузит. Код загрузки писем :

    Для Сч = 1 По ТЗ.КоличествоСтрок() Цикл
        
        ТЗ.ПолучитьСтрокуПоНомеру(Сч);
        Если ТЗ.Пометка = 2 Тогда
            
            Если ПолучениеПочты.ПолучитьПисьмо(ТЗ.НомерПисьма,0,0) = 0 Тогда
                Продолжить;
            КонецЕсли;
            
            ПолучениеПочты.РаспаковатьПисьмо();
            Если Число(ПолучениеПочты.КоличествоПрисоединенныхФайлов) = 0 Тогда
                Сообщить("---------------------------------");
            КонецЕсли;
            
            Для ф=0 по Число(ПолучениеПочты.КоличествоПрисоединенныхФайлов) цикл
                Ф2=Ф;
                
                ИмяФайла = ПолучениеПочты.ПолучитьИмяПрисоединенногоФайла(ф2);
                
                Если Прав(ВРег(СокрЛП(ИмяФайла)),3) = "XLS" Тогда
                    
                    ПолучениеПочты.СохранитьПрисоединенныйФайл(ф2);   
                    ПолучениеПочты.УдалитьПисьмоИзРабочегоКаталога();                    
                    
                КонецЕсли;                
            КонецЦикла;                
        КонецЕсли;
    КонецЦикла;
   Ogonechek
 
37 - 21.10.16 - 13:53
При распаковке всегда есть 2 файла : один файл называется main.hdr, второй mail1.txt.
Те письма, где файл лежит в архиве, при распаковке содержат еще файл XLS, а в письмах, где просто присоединен файл XLS, при распаковке только 2 файла, без XLS. Думала, что это из-за того, что я их распаковываю, но без функции распаковки нельзя узнать количество файлов...
Не знаю, что и делать...=\


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует