|   |   | 
| 
 | УТ11: HTML to TXT | ☑ | ||
|---|---|---|---|---|
| 0
    
        Mikhail Volkov 01.05.17✎ 15:56 | 
        В справочнике номенклатуры обычно несколько присоединенных файлов, среди них HTML-файлы, в которых есть описание номенклатуры. Клиент высказал пожелание, если реквизит "Текстовое описание" не заполнен, то чтобы оно заполнялось из HTML-файла. 1С преобразовать HTML-файл в текст может?     | |||
| 1
    
        Mikhail Volkov 01.05.17✎ 16:19 | 
        Была тема v8: Конвертация содержимого HTML в текст, сразу скажу: таблицы мне не нужны, только типа:
 Бинокль пластик, ЧИНГИСХАН, 8х21, 101м/1000м, AXT1502 Увеличение: 8х Диаметр линзы: 21мм Длина: 9см В комплекте чехол с салфеткой Желательно пустые строки убрать. | |||
| 2
    
        Неверный Параметр И 01.05.17✎ 16:55 | 
        И? В той теме есть даже пример кода. Тебя научить убирать пустые строки?     | |||
| 3
    
        PiotrLoginov 01.05.17✎ 17:09 | 
        (0) "если реквизит "Текстовое описание" не заполнен, то чтобы оно заполнялось из HTML-файла"
 Заполнялось где? На сайте наверное? В этом случае, зачем что-то преобразовывать? Читаем текст из файла и отправляем его в "Описание" таким, какой он есть. Сайт, по идее, благодаря тегам оформит текст в лучшем виде. Содержимое присоединенных файлов хранится в виде хранилища значения в конкретном реквизите. Значит, можно при выполнении некоторых условий присваивать свойству "Описание" это хранилище значений. А дальше перед выгрузкой: Если ТипЗнч(ТекСтрока.НоменклатураОписание) = Тип("ХранилищеЗначения") Тогда ТекСтрока.НоменклатураОписание = ТекСтрока.НоменклатураОписание.Получить(); КонецЕсли; | |||
| 4
    
        Mikhail Volkov 01.05.17✎ 18:44 | 
        (2) В самом тексте может сам смогу. Нужно получить текст из HTML-файла.
 (3) Нет, в реквизите номенклатуры Описание (Текстовое описание) - тип Строка 1024. | |||
| 5
    
        Остап Сулейманович 01.05.17✎ 18:53 | 
        (4) Так HTML и есть текст. Только с тегами. Найти между них нужный и всего делов.
 Выложи его сюда. | |||
| 6
    
        Mikhail Volkov 01.05.17✎ 19:26 | 
        (5) Пример содержимого в (2). Пытаюсь извлечь текст из файла:
 Функция ОписаниеИзHTMLФайла(Номенклатура) Экспорт Запрос = Новый Запрос(" |ВЫБРАТЬ | НоменклатураПрисоединенныеФайлы.ПутьКФайлу |ИЗ | Справочник.НоменклатураПрисоединенныеФайлы КАК НоменклатураПрисоединенныеФайлы |ГДЕ | НоменклатураПрисоединенныеФайлы.ВладелецФайла = &Номенклатура | И НоменклатураПрисоединенныеФайлы.Расширение = &Расширение"); Запрос.УстановитьПараметр("Номенклатура", Номенклатура); Запрос.УстановитьПараметр("Расширение", Нрег("HTML")); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл ОписаниеИзHTML = Новый ИзвлечениеТекста(Выборка.ПутьКФайлу); Если Не ПустаяСтрока(ОписаниеИзHTML.ПолучитьТекст()) Тогда Возврат ОписаниеИзHTML.ПолучитьТекст(); КонецЕсли; КонецЦикла; Возврат ""; КонецФункции ПутьКФайлу - не полный, не находит ничего!? | |||
| 7
    
        Неверный Параметр И 01.05.17✎ 21:52 | 
        (6) У тебя файлы в томах хранятся?     | |||
| 8
    
        Mikhail Volkov 02.05.17✎ 03:01 | 
        (7) Вроде так.     | |||
| 9
    
        Mikhail Volkov 02.05.17✎ 07:24 | 
        (7) Да, именно так, пока не смог найти откуда извлекать полное имя файла. Добавляю путь каталога картинок к ПутьКФайлу.
 Но тут другая проблема, в форматировании текста. Например, содержимое файла: <P>Бинокль Sakura 20х40</P> <P> <TABLE> <TBODY> <TR> <TD colSpan=2> <H4>Технические характеристики</H4></TD></TR> <TR> <TD>Увеличение</TD> <TD>х20</TD></TR> <TR> <TD>Диаметр линзы</TD> <TD>50мм</TD></TR> <TR> <TD>Влагозащитный</TD> <TD>да</TD></TR> <TR> <TD>Обрезиненный корпус</TD> <TD>да</TD></TR> <TR> <TD>В комплекте</TD> <TD>чехол и салфетка</TD></TR></TBODY></TABLE></P> в IE выглядит: Бинокль Sakura 20х40 Технические характеристики Увеличение х20 Диаметр линзы 50мм Влагозащитный да Обрезиненный корпус да В комплекте чехол и салфетка А у меня в УТ11: Бинокль Sakura 20х40 Технические характеристики Увеличение х20 Диаметр линзы 50мм Влагозащитный да Обрезиненный корпус да В комплекте чехол и салфетка Ужас! Мне бы только саму таблицу без заголовков. Есть что-то готовое? Или 1С по другому извлекать имеет? | |||
| 10
    
        Mikhail Volkov 02.05.17✎ 11:49 | 
        Хотя бы подскажите где в УТ11 каталог для "Присоединенные файлы (Номенклатура)" найти, в каких настройках?     | |||
| 11
    
        Вафель 02.05.17✎ 11:54 | 
        есть такой объект ИзвлечениеТекста     | |||
| 12
    
        Fragster гуру 02.05.17✎ 11:57 | 
        в присоединенных файлах есть реквизит ТекстХранилище и СтатусИзвлеченияТекста     | |||
| 13
    
        Fragster гуру 02.05.17✎ 11:59 | 
        (9) все правильно     | |||
| 14
    
        Fragster гуру 02.05.17✎ 11:59 | 
        (10) не надо тебе его искать, в подсистеме присоединенных файлов есть все необходимые функции, чтобы абстрагироваться от настроек (тома, версии и т.п.)     | |||
| 15
    
        Mikhail Volkov 02.05.17✎ 12:50 | 
        (14) Дык, подскажи как называются эти функции?
 Нарыл кое что: Функция ОписаниеИзHTMLФайла(Номенклатура) Экспорт Запрос = Новый Запрос(" |ВЫБРАТЬ | НоменклатураПрисоединенныеФайлы.Ссылка |ИЗ | Справочник.НоменклатураПрисоединенныеФайлы КАК НоменклатураПрисоединенныеФайлы |ГДЕ | НоменклатураПрисоединенныеФайлы.ВладелецФайла = &Номенклатура | И НоменклатураПрисоединенныеФайлы.Расширение = &Расширение"); Запрос.УстановитьПараметр("Номенклатура", Номенклатура); Запрос.УстановитьПараметр("Расширение", Нрег("HTML")); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл ТекстИзHTML = ИзвлечениеТекстаИзHTML(Выборка.Ссылка); Если Не ПустаяСтрока(ТекстИзHTML) Тогда Возврат ТекстИзHTML; КонецЕсли; КонецЦикла; Возврат ""; КонецФункции Функция ИзвлечениеТекстаИзHTML(ПрисоединенныйФайлНоменклатура) Экспорт ИзвлечениеИзHTML = Новый ИзвлечениеТекста(ПолноеИмяФайла(ПрисоединенныйФайлНоменклатура.ПутьКФайлу)); ТекстИзHTML = ИзвлечениеИзHTML.ПолучитьТекст(); Возврат ?(ПустаяСтрока(ТекстИзHTML), "", ПреобразоватьТекстИзHTMLФорматаВПростой(ТекстИзHTML)); КонецФункции Функция ПолноеИмяФайла(ПутьКФайлу) Экспорт КаталогНоменклатураПрисоединенныеФайлы = "C:\DATA\1C\data"; // пока так, надо в настойках его поискать Возврат КаталогНоменклатураПрисоединенныеФайлы + "\" + ПутьКФайлу; КонецФункции Функция ПреобразоватьТекстИзHTMLФорматаВПростой(ТекстИзHTML) Экспорт Попытка НовыйHTMLДокумент = Новый COMОбъект("HtmlFile"); НовыйHTMLДокумент.open("text/html"); НовыйHTMLДокумент.write(ТекстИзHTML); НовыйHTMLДокумент.close(); Возврат СтрЗаменить(НовыйHTMLДокумент.all.item(0).innerText, Символ(13), ""); Исключение Построитель = Новый ПостроительDOM; ЧтениеHTML = Новый ЧтениеHTML; ЧтениеHTML.УстановитьСтроку(ТекстИзHTML); ДокументHTML = Построитель.Прочитать(ЧтениеHTML); Возврат СокрЛП(ДокументHTML.Тело.ТекстовоеСодержимое); КонецПопытки; КонецФункции В одну строчку все выводит (в начале строки какой-то упр. символ): ? Бинокль Sakura 20х40 Технические характеристики Увеличение х20 Диаметр линзы 50мм Влагозащитный да Обрезиненный корпус да В комплекте чехол и салфетка Осталось перевод строк вставить, и желательно табуляции между названиями и значениями параметров. | |||
| 16
    
        Mikhail Volkov 02.05.17✎ 20:41 | 
        + Думал в одну строчку выводится из-за СтрЗаменить(НовыйHTMLДокумент.all.item(0).innerText, Символ(13), ""); Но Возврат НовыйHTMLДокумент.all.item(0).innerText; дает тот же результат!? Значит в тексте нет Символ(13). Как бы оставить переводы строк?
 Еще, в начале строки какой-то упр. символ, в блокноте он отображается как [] (квадратик), здесь отобразился как "?". Думал это Символ(10), но СтрЗаменить(НовыйHTMLДокумент.all.item(0).innerText, Символ(10), ""); - не помогло!? | |||
| 17
    
        Mikhail Volkov 03.05.17✎ 08:39 | 
        Ну, блин, что за "квадратик" в тексте, чем посмотреть?     | |||
| 18
    
        Неверный Параметр И 03.05.17✎ 08:42 | 
        В некоторых версиях платформы была такая ошибка - отладчик не работал и табло не запускалось. Правда ведь, у тебя такая версия?     | |||
| 19
    
        Mikhail Volkov 03.05.17✎ 22:51 | 
        (18) Табло не кажет, только пробел. В "Текстовое описание" так же переносится. Из него в блокнот копирую - "квадратик" вижу.
 Кстати, на счет каталога для "Присоединенные файлы" - целый справочник имеется: Тома хранения файлов (Каталоги на диске для хранения файлов). | |||
| 20
    
        Mikhail Volkov 04.05.17✎ 08:06 | 
        Как раньше хорошо было, когда была только DOS. Столько разных редакторов было (куда делись?), все упр. символы можно было рассмотреть. Из них только 0A и 0D помню (Символ(10) и Символ(13)).     | |||
| 21
    
        Неверный Параметр И 04.05.17✎ 08:10 | 
        Глобальный контекст (Global context)
 КодСимвола (CharCode) Синтаксис: КодСимвола(<Строка>, <НомерСимвола>) Параметры: <Строка> (обязательный) Тип: Строка. Исходная строка. <НомерСимвола> (необязательный) Тип: Число. Номер символа в строке, код которого необходимо получить. Нумерация символов в строке начинается с 1. Значение по умолчанию: 1. Возвращаемое значение: Тип: Число. Код переданного символа. Код возвращается в соответствии с кодировкой Unicode. Описание: Получает код символа, расположенного в переданной строке в позиции с указанным номером. Доступность: Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер). | |||
| 22
    
        Неверный Параметр И 04.05.17✎ 08:14 | 
        Внезапно, да?     | |||
| 23
    
        Mikhail Volkov 04.05.17✎ 08:29 | 
        (22) И что, предлагаешь написать процедуру в 1С, что переводить символы текста в коды? Что вымерли напрочь все редакторы текста, которые это могут показать?     | |||
| 24
    
        Неверный Параметр И 04.05.17✎ 08:36 | 
        Ох, мьсье трындун, простите, не узнал Вас сразу.     | |||
| 25
    
        Mikhail Volkov 04.05.17✎ 08:41 | 
        В NC было: на одной панеле список файлов, на другой - содержимое файла (в любом виде), на котором курсор стоит. В ТС нет такого быстрого просмотра?     | |||
| 26
    
        Mikhail Volkov 05.05.17✎ 08:34 | 
        Смотрю текст сохраненный в блокноте WinHex, этот символ 3F. Вписал в (15):
 СтрЗаменить(НовыйHTMLДокумент.all.item(0).innerText, Символ(63), ""); // 3F Но, не помогло, все равно этот "квадратик" перед текстом остался!? Кстати, когда сохраняю текст в блокноте, предупреждает, что в формате ANSI часть кода будет потеряна, предлагает в Юникоде сохранить. Сохранял, вообще хрень какая-то получилась!? Что за "квадратик", как его вычислить? | |||
| 27
    
        Mikhail Volkov 05.05.17✎ 09:44 | 
        И что я на этой хрени зациклился, вырезать ее, если есть:
 Текст = НовыйHTMLДокумент.all.item(0).innerText; ЕстьХрень = Найти("0123456789" + ВсеБуквы(), Лев(Текст, 1)) = 0; Если ЕстьХрень Тогда Текст = Прав(Текст, СтрДлина(Текст) - 1); КонецЕсли; Мне другое надо, как оставить переносы строк, если HTML-файле есть таблица типа (9)? | |||
| 28
    
        Mikhail Volkov 12.05.17✎ 20:10 | 
        ИзвлечениеИзHTML = Новый ИзвлечениеТекста(ПолноеИмяФайла(ПрисоединенныйФайлНоменклатура.ПутьКФайлу));
 ТекстИзHTML = ИзвлечениеИзHTML.ПолучитьТекст(); использую как критерий - можно ли из файла текст или нет. А извлекаю методами: НовыйHTMLДокумент = Новый COMОбъект("HtmlFile"); либо Построитель = Новый ПостроительDOM; Вот клиент говорит, что часто выскакивает ошибка "Ошибка извлечения текста из файла", хотя HTML-файлы вроде нормальные, с текстом. Что можно взять в качестве критерия на наличие текста в HTML-файле? | |||
| 29
    
        Mikhail Volkov 12.05.17✎ 20:12 | 
        * можно ли из файла текст извлечь, или нет     | |||
| 30
    
        Mikhail Volkov 13.05.17✎ 03:59 | 
        Как альтернативный вариант хорошо бы: ЗапуститьПриложение(ПутьФайл); и скопировать содержимое файла в буфер обмена. Возможно? Вроде нашел тему v8: Как скопировать файл в буфер обмена но не понял, возможно ли это реализовать в 1С?     | |||
| 31
    
        Mikhail Volkov 16.05.17✎ 05:31 | 
        В теме v8: метод "ИзвлечениеТекста" обнаружил:
 Для извлечения текста из файлов используется интерфейс IFilter. Он является расширяемым. Можно установить дополнительные модули, чтобы появилась возможность извлекать текст из еще одного типа файлов. Следует использовать только в среде Windows NT 4.0, 2000, XP. Чтобы узнать, какие расширения для IFilter уже установлены на вашем компьютере, можно скачать и установить программу IFilter Explorer (http://www.citeknet.com). У клиента 2012 сервер. Может поэтому у него "Ошибка извлечения текста из файла"? | |||
| 32
    
        Mikhail Volkov 17.05.17✎ 10:25 | 
        У клиента без проблем работает:
 ИзвлечениеИзHTML = Новый ТекстовыйДокумент; ИзвлечениеИзHTML.Прочитать(ПолноеИмяФайла(ПрисоединенныйФайлНоменклатура.ПутьКФайлу)); ТекстИзHTML = ИзвлечениеИзHTML.ПолучитьТекст(); ТекстИзHTML открывается в каком-то редакторе, пользователь копирует из него (все или нужную часть), и вставляет в "Текстовое описание". Просит это автоматизировать. Но если сразу ТекстИзHTML вставить в "Текстовое описание" (без буфера обмена, будет такая хрень: <P>Бинокль Sakura 20х40</P> <P> <TABLE> <TBODY> <TR> <TD colSpan=2> <H4>Технические характеристики</H4></TD></TR> <TR> <TD>Увеличение</TD> <TD>х20</TD></TR> <TR> <TD>Диаметр линзы</TD> <TD>50мм</TD></TR> <TR> <TD>Влагозащитный</TD> <TD>да</TD></TR> <TR> <TD>Обрезиненный корпус</TD> <TD>да</TD></TR> <TR> <TD>В комплекте</TD> <TD>чехол и салфетка</TD></TR></TBODY></TABLE></P> В теме v8: Как скопировать файл в буфер обмена есть ссылка на "Работа с буфером обмена Windows из командной строки" http://old.computerra.ru/gid/rtfm/system/301629/ В 1С это можно использовать? Тип вставили ТекстИзHTML в буфер, а извлекли без тегов с переводом строк таблицы... | |||
| 33
    
        Mikhail Volkov 17.05.17✎ 10:28 | 
        Уже в таком виде:
 Бинокль Sakura 20х40 Технические характеристики Увеличение х20 Диаметр линзы 50мм Влагозащитный да Обрезиненный корпус да В комплекте чехол и салфетка | |||
| 34
    
        Mikhail Volkov 17.05.17✎ 17:59 | 
        Как я понял двойной пробел это не два пробела вместе!? Перед тем как записать ТекстИзHTML в строку "Текстовое описание" убираю двойные пробелы и переводы строк. А после сохранения в строку "Текстовое описание" вижу двойные пробелы (по два пробела вместе). Кстати как раз те самые переводы строк таблиц, которые желательно оставить.
 Как в ТекстИзHTML заменить "двойной пробел" на Символы.ПС до записи в строку "Текстовое описание"? Или какой код у "двойной пробел"? | |||
| 35
    
        Mikhail Volkov 18.05.17✎ 05:17 | 
        Вроде "двойной пробел" - это Символ(160), но 1С его не ловит!? Приходится уже после Записать() в строке "Текстовое описание" два пробела менять на Символы.ПС, и снова Записать(), если нашлась такая замена.     | |||
| 36
    
        cathode 19.05.17✎ 10:47 | 
        (0) Можно пойти другим путем: отрендерить хтмл-страницу текстовым браузером и сохранить вывод в файл. Что-то вроде:
 lynx -dump -display_charset=UTF-8 -dont_wrap_pre -nolist -nomargins in.html > out.txt Достоинства: очень быстро, (условно) кросс-платформенно, вывод похож на то, что видно в обычном браузере (можно легко сравнивать веб-страницы по содержимому). Недостатки: много возни с настройкой и вызовом под Windows, корректно выводит только очень простые таблицы. | |||
| 37
    
        Serginio1 19.05.17✎ 11:09 | ||||
| 38
    
        Mikhail Volkov 19.05.17✎ 13:42 | 
        (36) Это как "отрендерить"?
 Таблицы вроде сейчас выглядят нормально: не в одну строку, а с переносом строк таблицы. Еще желательно правый столбец значений выравнять табуляциями, возится не хочется. Было бы что-то готовое, пусть не в 1С... | |||
| 39
    
        Mikhail Volkov 20.05.17✎ 09:51 | 
        Идеально "отрендерить" - это извлеченный ТекстИзHTML взять в буфер обмена, и из него поместит в "Текстовое описание" (30). В общем вроде так предусмотрено разработчиками УТ11.     | |||
| 40
    
        Mikhail Volkov 21.05.17✎ 08:06 | 
        Если ТекстИзHTML извлекать типовым методом ФайловыеФункцииСлужебныйКлиентСервер.ИзвлечьТекст(), то "двойной пробел" в тексте не используется. Переводы строк таблицы заменены 6 пробелами, колонки таблицы разделяются 3 пробелами. Но замена их на Символы.Таб не дает эффекта выравнивания правой колонки, в "Текстовое описание" выглядит как обычный пробел.     | |||
| 41
    
        Мимохожий Однако 21.05.17✎ 09:13 | 
        (38) В браузере Яндекс есть функция "Перейти в режим чтения". Там много чего отсекается. Может оттуда можно подцепить идеи?     | |||
| 42
    
        Mikhail Volkov 27.05.17✎ 07:55 | 
        Еще момент, при копировании номенклатуры мне не надо переносить в новую Описание и Присоединенные файлы (Номенклатура). Вставил в модуль:
 Процедура ПриКопировании(ОбъектКопирования) Если Не ЭтоГруппа Тогда Описание = ""; ФайлОписанияДляСайта = Справочники.НоменклатураПрисоединенныеФайлы.ПустаяСсылка(); ФайлКартинки = Справочники.НоменклатураПрисоединенныеФайлы.ПустаяСсылка(); КонецЕсли; КонецПроцедуры А все равно переносится!? | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |