|
v7: Загрузка вложений с почты | ☑ | ||
---|---|---|---|---|
0
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 без архива? |
|||
1
Lokli
06.10.16
✎
09:23
|
Так скачать файл в каталог, разархивировать и открыть в Excel'е обработкой?
|
|||
2
Ogonechek
06.10.16
✎
09:27
|
В том-то и дело, что не получается скачать файл как архив.
Кусок процедуры где считывается файлик : Сп = СоздатьОбъект("СписокЗначений"); Для Сч = 1 По ТЗ.КоличествоСтрок() Цикл ТЗ.ПолучитьСтрокуПоНомеру(Сч); Если ТЗ.Пометка = 2 Тогда Если ВК.ПолучитьСообщение(ТЗ.НомерПисьма) = 0 Тогда Продолжить; КонецЕсли; Если ВК.КоличествоФайлов() = 0 Тогда Сообщить("---------------------------------"); Сообщить("Обработано: " + Вк.Тема + ". Не обнаружен заказ в письме!!!"); КонецЕсли; Для Инд=1 По ВК.КоличествоФайлов() Цикл ИмяФайла = ВК.ПолучитьФайл(Инд); Если Прав(ВРег(СокрЛП(ИмяФайла)),3) = "XLS" Тогда ВК.СохранитьФайл(Инд,""); Конт = СокрЛП(КаталогПользователя() + ИмяФайла); Сп.ДобавитьЗначение(Конт); Сп.ДобавитьЗначение(ВК.АдресОтправителя); Сп.ДобавитьЗначение(ВК.ДатаОтправки); Сп.ДобавитьЗначение(ВК.Тема); ОткрытьФормуМодально("Отчет", Сп, КаталогИБ() + "ExtForms\ЗагрузкаЗаявокГулливераИзПочтыITMaster.ert"); Конт = Сп.ПолучитьЗначение(5); Сп.УдалитьВсе(); Если Конт = 1 Тогда ЗаписатьВСправочник(ВК.АдресОтправителя, ВК.Тема, ВК.ДатаОтправки); КонецЕсли; Сообщить(?(Конт = 1, "Успешно обработан! <<", "Ошибка! Исправьте ошибки! Повторите загрузку. <<")+ Вк.Тема + ">>"); КонецЕсли; КонецЦикла; КонецЕсли; КонецЦикла; |
|||
3
Ogonechek
06.10.16
✎
09:27
|
И если перед фразой ИмяФайла = ВК.ПолучитьФайл(Инд); посмотреть, как выглядит поле Вложения, то там будет написано именно QlNGD0YDQvNCw0L3QvtCyX9CS0JNfNjMzMi54bHM=_=.
|
|||
4
Lokli
06.10.16
✎
10:01
|
Так у тебя там условие стоит:
.... Если Прав(ВРег(СокрЛП(ИмяФайла)),3) = "XLS" Тогда .... т.е. у тебя обработка не качает ни какой файл кроме *.xls |
|||
5
Ogonechek
06.10.16
✎
10:16
|
Это понятно, но если это условие убрать, то он считывает остальные файлы криво, которые на самом деле архивы. Во всяком случае, в веб интерфейсе почты около файла стоит значок ZIP.
|
|||
6
Lokli
06.10.16
✎
10:19
|
Конечно будет криво читать. ZIP - это ведь архив. К существующему условию добавь проверку на расширение zip. Если оно есть, то скачивай файл, разархивируй в файл xls и после этого открывай его в ExtForms\ЗагрузкаЗаявокГулливераИзПочтыITMaster.ert.
|
|||
7
Ogonechek
06.10.16
✎
10:19
|
В любом случае, если бы файл прочитывался нормально, то у него было бы его имя расширением .zip.
Если бы он грузился архивом, дальше я бы просто команду системы с разархивацией запустила и все. А так-то у меня даже архива нет. А вместо него какая-то чушь. |
|||
8
Ogonechek
06.10.16
✎
10:19
|
(6) Как я его проверю на zip?
|
|||
9
Ogonechek
06.10.16
✎
10:20
|
В конце имени файла нет ".zip".
|
|||
10
Ogonechek
06.10.16
✎
10:21
|
Я просто убрала все проверки на имя и грузила только те заявки, в которых точно есть архив и команда системы выдавала, что архив не обнаружен
|
|||
11
Lokli
06.10.16
✎
10:23
|
Ну так анализируй расширение имени файла.
... Если Прав(ВРег(СокрЛП(ИмяФайла)),3) = "XLS" Тогда ... ... ИначеЕсли Прав(ВРег(СокрЛП(ИмяФайла)),3) = "ZIP" Тогда ... ... КонецЕсли; |
|||
12
Lokli
06.10.16
✎
10:25
|
+(11) Распаковать zip можно с помощью ВК, например raruslib. 1С 7.7 это делать не умеет.
|
|||
13
пипец
06.10.16
✎
10:25
|
||||
14
Ogonechek
06.10.16
✎
10:25
|
Файл=ВК.КаталогВложений+ВК.ПолучитьФайл(Инд);
Сообщить("Получен файл: "+Инд); //сохранение ВК.СохранитьФайл(Инд,); Кавычка=""""; КомандаСистемы(Кавычка+"C:\Program Files\WinRAR\WinRar.exe"+Кавычка+" x "+"-o+ "+" -IBCK "+Файл+" *.xls F:\ITMaster"); |
|||
15
Это_mike
06.10.16
✎
10:30
|
(12) это вполне может делать dialmail или 1c++ (BinaryData)
|
|||
16
Ogonechek
06.10.16
✎
10:32
|
Т.е. хотите сказать, что просто файл всегда нормально считывается, а архив нет? Практически аналогичная обработка, которая скачивает архив с почты, работает без проблем. Отличия только в том, что там почты нормальная, mail. А тут это веб-почта или как она там называется. И файл был в архиве rar. И руками тоже скачивался как архив, а тут если вручную скачиваешь, сразу xls.
|
|||
17
Lokli
06.10.16
✎
10:34
|
(16) Хотим сказать что всё нормально считывается. Не смотри поле "Вложения".
В цикле Для Инд=1 По ВК.КоличествоФайлов() Цикл ИмяФайла = ВК.ПолучитьФайл(Инд); ..... КонецЦикла; После получения имени файла сделай Сообщить(ИмяФайла); И посмотри какие файлы тебе покажутся. |
|||
18
Lokli
06.10.16
✎
10:36
|
(15) Согласен, dialmail удобнее. Скачал с почты, тут же распаковал. ))
|
|||
19
Ogonechek
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==_= ===================== Загрузка завершена!!! |
|||
20
Ogonechek
06.10.16
✎
10:44
|
Я просто не уверена, что если я все перепишу под Dialmail, у меня файлы будут правильно считываться...
|
|||
21
Lokli
06.10.16
✎
10:45
|
(19) Кусок кода дай, который эти сообщения пишет.
|
|||
22
Ogonechek
06.10.16
✎
10:46
|
(21) Ну так тот же, что ты сказал
Для Инд=1 По ВК.КоличествоФайлов() Цикл Файл=ВК.ПолучитьФайл(Инд); Сообщить("Получен файл: "+Файл); |
|||
23
Lokli
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"..." |
|||
24
Ogonechek
06.10.16
✎
10:58
|
В том-то и дело, что все остальные файлы с почты читаются правильно... И dbf, и xls.
|
|||
25
Это_mike
06.10.16
✎
10:59
|
(20) попробовать-то? никак?
|
|||
26
Lokli
06.10.16
✎
11:00
|
Такое ощущение, что он тебе список файлов архива подсовывает в BASE64.
|
|||
27
Ogonechek
06.10.16
✎
11:01
|
(25) В процессе)
|
|||
28
Lokli
06.10.16
✎
11:01
|
(24) а можешь это же письмо прочитать с другой почты? (корпоративная, mail.ru...)
|
|||
29
Ogonechek
06.10.16
✎
11:02
|
(26) И как с этим бороться?
Декодер, который я вначале скидывала, тоже ссылался на BASE64. |
|||
30
Ogonechek
06.10.16
✎
11:03
|
(28) Попробую на свою личную переслать и оттуда считать.
|
|||
31
Lokli
06.10.16
✎
11:04
|
(29) возникают у меня смутные подозрения, что это особенность данного почтового сервера...
|
|||
32
varelchik
06.10.16
✎
11:58
|
(0)Параллельное обсуждение в соседней ветке.
У меня оно ужо давно было реализовано с dialmail. Там все и почта и фтп и zip. стучись ченить придумаем. |
|||
33
Ogonechek
06.10.16
✎
13:35
|
Спасибо всем, кто откликнулся)
Переделала обработку под Dialmail и вложения писем, которые в веб почте отображались как zip, сразу стали читаться как xls. |
|||
34
Lokli
06.10.16
✎
13:55
|
А что за веб почта? Какой домен?
|
|||
35
Ogonechek
06.10.16
✎
14:08
|
Ну сама почта вот : http://mail.gulliver-ul.ru/
А вид интерфейса выбран RoundCube WebMail |
|||
36
Ogonechek
21.10.16
✎
13:44
|
И снова проблемы с этой загрузкой. Переписанная обработка загружает письма, которые лежит в архиве, а обычные файлы не грузит. Код загрузки писем :
Для Сч = 1 По ТЗ.КоличествоСтрок() Цикл ТЗ.ПолучитьСтрокуПоНомеру(Сч); Если ТЗ.Пометка = 2 Тогда Если ПолучениеПочты.ПолучитьПисьмо(ТЗ.НомерПисьма,0,0) = 0 Тогда Продолжить; КонецЕсли; ПолучениеПочты.РаспаковатьПисьмо(); Если Число(ПолучениеПочты.КоличествоПрисоединенныхФайлов) = 0 Тогда Сообщить("---------------------------------"); КонецЕсли; Для ф=0 по Число(ПолучениеПочты.КоличествоПрисоединенныхФайлов) цикл Ф2=Ф; ИмяФайла = ПолучениеПочты.ПолучитьИмяПрисоединенногоФайла(ф2); Если Прав(ВРег(СокрЛП(ИмяФайла)),3) = "XLS" Тогда ПолучениеПочты.СохранитьПрисоединенныйФайл(ф2); ПолучениеПочты.УдалитьПисьмоИзРабочегоКаталога(); КонецЕсли; КонецЦикла; КонецЕсли; КонецЦикла; |
|||
37
Ogonechek
21.10.16
✎
13:53
|
При распаковке всегда есть 2 файла : один файл называется main.hdr, второй mail1.txt.
Те письма, где файл лежит в архиве, при распаковке содержат еще файл XLS, а в письмах, где просто присоединен файл XLS, при распаковке только 2 файла, без XLS. Думала, что это из-за того, что я их распаковываю, но без функции распаковки нельзя узнать количество файлов... Не знаю, что и делать...=\ |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |