В этой статье я постараюсь описать процесс парсинга сайтов средствами 1С с примером.
Это статья не является инструкцией к применению, а лишь демонстрирует возможности 1С.
Что мы имеем? 1. Сайт в интернете, на котором располагается список товаров. В моем случае – это интернет магазин салона «Связной»
2. Понимание основ сайтостроения… хотя бы знание HTML тегов
3. Умение кодить в 1С 8
Для начала парсинга стоит определиться с тем что мы хотим спарсить и какая у нас будет иерархия. В моем случае это категория сотовых телефонов. Верхний уровень иерархии будет производители. Почему именно так? Потомы что я так захотел. Вы же вправе использовать любую иерархию.
Далее нам будут интересны такие поля как: Наименование, Цена, Картинка и Описание... ну и пожалую захватим операционную систему, чтобы пример получился более наглядным.
1. Создаем внешнюю обработку. Те, кто не знают как это сделать - дальше могут не читать
2. Создаем форму обработки с командной панелью снизу и сверху (они могут быть полезными)
3. Размещаем на ней Панель и обзываем первую страницу "СамСайт"
4. Кладем на страницу "СамСайт" ПолеHTMLДокумента и обзываем его к примеру "Сайт"
5. Переименовываем кнопку "Выполнить", которая находится на нижней панели в "Загрузить сайт"
6. Описываем процедуру нажатия на эту кнопку так:
7. Проверяем работу нашей обработки. У меня появился сайт связного. А у Вас?
Дальше сложнее. Все еще хочешь парсить сайты? Тогда читай:
Сам парсинг сайта заключается в обходе всех элементов загруженной страницы, выдергивания необходимой информации и запихивания их в табличную часть. Для этого:
1. Создадим табличную часть "Производители" с реквизитами "Отметка" (Булево), "Наименование" (Строка 100) и "Ссылка" (Строка 300).
2. Добавляем еще одну страницу на панели и обзываем ее "Производители"
3. Размещаем на этой странице одноименную табличную часть
4. Добавляем на нижней панели кнопку "Заполнить производителей" с кодом:
Здесь напрашиваются небольшие пояснения:
tagName - имя HTML тега в HTML документе
nextSubling - следующий элемент HTML документа от текущего
children - список дочерних элементов
firstChild - первый дочерний элемент от текущего
5. Проверям. При проверке важно, находиться на странице "СамСайт", чтобы заполнять производителей
Производители заполнены. Теперь к самим телефонам
1. Создаем табличную часть "Товары" с реквизитами "Производитель" (Строка 100), "Наименование" (Строка 100), "Цена" (Число 10,2), "Картинка" (Строка 300), "Описание" (Строка Неограниченная), "ОС" (строка 100), "Ссылка" (Строка,300)
2. Добавляем еще одну страницу на панели и обзываем ее "Товары"
3. Размещаем на этой странице одноименную табличную часть
4. Добавляем на нижней панели кнопку "Заполнить товары" с кодом:
5. Создаем форму обработки "ФормаТоваров"
6. Кладем на "ФормаТоваров" ПолеHTMLДокумента и называем его "Сайт"
7. На событие ДкументСформирован у ПоляHTMLДокумента пишем код:
8. Создаем переменную в модуле формы
перем ТекущийПроизводитель Экспорт;
9. Создаем процедуру ГрузимТовары():
10. Проверям. Все работает.
Дело осталось за "операционной системой" и еще надо загрузить картинки. Давайте по порядку. Чтобы получить "ОС" нам надо открыть этот товар и считать "ОС" оттуда. Для этого делаем следующее:
1. Добавляем на нижней панели кнопку "Доп Инфо" с кодом:
2. Создаем форму обработки "ФормаДопИнфо"
3. Кладем на "ФормаДопИнфо" ПолеHTMLДокумента и называем его "Сайт"
4. На событие ДкументСформирован у ПоляHTMLДокумента пишем код:
5. Создаем переменную в модуле формы
перем ТекущийТовар Экспорт;
6. Создаем процедуру ГрузимДопИнфо():
7. Проверяем и переходим к последнему пункту
Заметили как похожи две последние инструкции? То-то же. Стремился к универсальности. Ну и наконец последний этап - Сохраним все изображения к примеру на диск "С" в папку "связной". Поехали
1. Добавляем на нижней панели кнопку "Сохранить Картинки" с кодом:
2. Добавляем функцию СохранитьКартинкуСайта:
На этом наша эпопея с парсингом закончена. Это всего лишь пример того, как это можно сделать. Приложив сюда немного своего кода - можно сделать парсер для любого сайта. Скачивать файлы может только зарегистрированный пользователь! Имея парсер 1С - я могу спарсить все, кроме этого парсера. Имя два парсера 1С - я могу спарсить все
Автор: opx
Оповещение пользователей в 1с в управляемом приложении могут быть вызваны как самой платформой, например, при записи документа, так и разработчиком, если он применит метод глобального контекста ПоказатьОповещениеПользователя().
Оповещения появляются в отдельном не модальном окне, по умолчанию привязанному к панели задач операционной системы, и затухают через несколько секунд после появления.
Если вывести несколько оповещений подряд, то пользователь сможет увидеть только последнее.
Последние несколько оповещений можно увидеть на панели истории.
При программном формировании оповещений важно помнить, что метод ПоказатьОповещениеПользователя()доступен только в контексте клиентской части, то есть при работе тонкого, толстого клиента или веб-клиента.
В качестве параметров метода ПоказатьОповещениеПользователя() передается строка с текстом оповещения, навигационная ссылка, текст с пояснением и картинка.
Навигационная ссылка будет представлена в области пояснения как гиперссылка, а в том случае если текст с пояснением не задан, то именно представление навигационной ссылки будет отображено в области пояснения. Получить навигационную ссылку можно для любого объекта базы с помощью глобального метода ПолучитьНавигационнуюСсылку().
Проиллюстрируем вывод оповещения при открытии документа, редактирование которого запрещено.
В приведенном примере производится проверка даты запрета редактирования, установленной в константе, и в том случае если открывается документ, попадающий в период запрета, пользователю выводится оповещение. В оповещении установлена навигационная ссылка на открываемый документ, однако в окне оповещения ссылка будет установлена к тексту «Разрешен только просмотр документа».
еще пример:
Для Толстого клиента kojinandrej предложил следующий механизм:
1. В модуле обычного приложения в процеду ПриНачалеРаботыСистемы добавляем текст
2. Создаем ОбщийМодуль под названием "опМодуль" в модуле вставляем текст
4. Добавляем в конфигурацию необходимые Обработки и формы - пользуемся.
Принцип Работы:
При запуске 1с справой стороны в трее открыто оповещение пользователей. Открываем обработку Оповестить, пишим текст сообщения и отметив получателей отправляем сообщение.
Когда сообщение приходит получателю, то форма оповещени появляется с правой стороны. Что бы сообщение считалось прочитаным, его необходимо открыть двойным щелчком правой клавиши мыши и оно откроется в новом окне как показао на третем изображении. В дальнейшем эти сообщения можно будет просматривать во вкладке "Просмотреные"
Для указания Даты и Времени в запросе предназначена функция ДАТАВРЕМЯ(
ДАТАВРЕМЯ ( <Целое число>, <Целое число>, <Целое число>[, <Целое число>, <Целое число>, <Целое число>] )
Значения типа дата задаются с помощью ключевого слова ДАТАВРЕМЯ, после которого в скобках последовательно указываются год, месяц, день, час, минута, секунда. Последние три указывать необязательно.
Максимальная дата которую возможно задать при помощи литерала ДАТАВРЕМЯ – 31.12.3999 23:59:59.
Проверка контрольного числа Страхового номера проводится только для номеров больше номера 001–001–998
Контрольное число Страхового номера рассчитывается следующим образом:
• каждая цифра Страхового номера умножается на номер своей позиции (позиции отсчитываются с конца)
• полученные произведения суммируются
• сумма делится на 101
• последние две цифры остатка от деления является Контрольным числом.
Например: Указан страховой номер 112–233–445 95
Проверяем правильность контрольного числа:
цифры номера 1 1 2 2 3 3 4 4 5
номер позиции 9 8 7 6 5 4 3 2 1
1х9+1х8+2х7+2х6+3х5+3х4+4х3+4х2+5х1=95
95 / !101! =95
Контрольное число=95 – указано верно
Некоторые частные случаи:
99 / !101! =99
100 / !101! =00
101 / !101! =00
102 / !101! =01
В качестве примера использования можно указать вот такую ситуацию: в зависимости от типа клиента (договора, документа и т.п) формируются разные тексты договоров с разным количеством таблиц. В реальности, конечно должены использоваться и макет и описанные здесь динамические механизмы.
В моем примере я заранее создал новый пустой документ. Тестировалось на Office 2007.
Часто при создании документа из макета используют метод замены кусков текста. В примере представлен другой вариант выполнения того же действия - с использованием закладок. Также представлен пример построения нумерованного списка, вставки картинки, настройки ее параметров.
Пример использования описанных возможностей прост. При формировании коммерческого предложения бывает необходимо описать список условий, добавить изображение образца продукции.
Для отображения закладок включите эту опцию в настройках вашего Word'а.
В моем примере я заранее создал новый пустой документ, путь к документу и картинке прописан в тексте. Не забудте указать свои пути.
Кроме прочего в статье присутствует пример создания таблицы с любым количеством колонок и столбцов. Несколько строк с форматированием текста и таблицы. Создание "объединенных" ячеек.
В качестве примера использования можно указать вот такую ситуацию: в зависимости от типа клиента (договора, документа и т.п) формируются разные тексты договоров с разным количеством таблиц. В реальности, конечно должены использоваться и макет и описанные здесь динамические механизмы.
В моем примере я заранее создал новый пустой документ.
Тестировалось на Office 2007.
Исп. переменные: "ПутьКФайлу" - строка. Полное имя файла в формате MSWord.
"Ссылка" - ДокументСсылка (в моем случае - счет).
Вот текст модуля:
Написал Nikola23 - http://infostart.ru/public/67727/
ОГРН (основной государственный регистрационный номер) — государственный регистрационный номер записи о создании юридического лица либо записи о первом представлении в соответствии с Федеральным законом “О государственной регистрации юридических лиц” сведений о юридическом лице, зарегистрированном до введения в действие указанного Закона (пункт 8 Правил ведения Единого государственного реестра юридических лиц) (см. ОГРН в Википедии).
Структура ОГРН:
* 1 цифра – код, признак ОГРН (всегда равен 1);
* 2 цифры – две последние цифры года внесения записи в государственный реестр;
* 2 цифры – код региона по перечню регионов в 65-й статье Конституции
* 7 цифр – порядковый номер записи от начала года;
* 1 цифра – проверочный код ОГРН;
Что можно узнать зная ОГРН:
1. Год регистрации организации по двум последним цифрам.
2. С некоторой точностью месяц (а может быть и неделю) регистрации организации по порядковому номеру записи.
3. Код региона организации по 65-й статье Конституции.
4. По коду ОГРН может быть получена иная публичная информациия по организации – ИНН, КПП, наименование, адрес из публичного реестра ФНС.
Можно обратить внимание что ИНН и ОГРН отличаются принципами ведения порядковых номеров организаций. Если в ИНН они привязаны к налоговой инспекции, то в ОГРН к году регистрации. Соответственно исходя из возможности по порядковому номеру ИНН определить дату его присвоения, можно говорить что ИНН несёт чуть больше информации (номер инспекции) чем ОГРН.
Буду краток, делаем так:
1. Установить на сервер MSSQL. Краткая инструкция по установке есть в этом FAQ.
2. Установить на рабочую станцию драйвера ODBC из поставки 1C или ODBC-клиента от Microsoft (он зовется MDAC).
3. Установить на рабочую станцию собственно SQL-версию 1С:Предприятия, ее исполняемый файл, в отличие от сетевой версии, назвается 1Cv7s.exe.
4. Открыть SQL Enterprise Manager и создать новую базу данных. Если непонятно, как это делать — почитайте хелп, он там весьма развесистый. Размер БД выбирается из следующих соображений: данные в sql-базе займут места раза в 2-2.5 больше, чем весит dbf-база, и как минимум 20% пространства sql-базы должно остаться свободным. Размер лога также играет роль — если планируется перенос данных из dbf-версии, следует иметь лог ~25% от размера sql-базы. Можно сразу же установить для базы режим T_runcate log on checkpoint, это поможет избежать проблем с переполнением лога и немного повысит производительность, но лишит возможности в случае аварии БД сделать откат на момент “за пять минут до сбоя”.
5. Подготовить данные dbf-версии к переносу — если он планируется. Это делается с помощью операции “Выгрузить данные”, которая не просто запаковывает таблицы, а переводит информацию в хитрый формат и кладет в файл с расширением *.dat.
6. Создать пустую директорию для хранения конфигурации sql-базы. Она не должна совпадать с директорией, где хранятся файлы собственно sql-базы, последние вообще желательно сделать недоступными для пользователей.
7. Открыть Конфигуратор, зарегистрировать новую базу данных (та самая пустая директория) и на вопрос о типе БД ответить “SQL server”.
8. Выставить в конфигураторе “Параметры базы данных sql...” — это сетевое имя сервера, имя базы данных, как оно было задано в Enterprise Manager, имя пользователя и пароль для доступа к данным через ODBC (встроенная в MSSQL учетная записть администратора имеет логин sa и пустой пароль).
9. Загрузить данные в БД. Если Вам нужна пустая конфигурация, это делается с помощью процедуры “Загрузить измененную конфигурацию”, если данные переносятся из dbf-версии — “Загрузить данные”, конфигурация при этом загрузится автоматически.
10. Можно работать с БД. Не забывайте время от времени архивировать и индексировать свою sql-базу — архивация средствами sql, в отличие от файл-серверной версии, не требует монопольного доступа к базе и может осуществлятся прямо во время работы. Индексация и проверка целостности БД производится последовательным запуском двух TSQL-скриптов, очень простых:
Индексация требует монопольного доступа к данным, поэтому не пытайтесь в это время работать. И архивирование, и индексацию можно (и нужно) повесить на автоматическое исполнение.
Значения данного типа содержит дату григорианского календаря (с 01 января 0001 года) и время с точностью до секунды. Литералы:
Строка цифр, заключенная в одинарные кавычки вида: 'ГГГГММДДччммсс', где:
ГГГГ - четыре цифры года (включая тысячелетие и век);
ММ - две цифры месяца:
ДД - две цифры даты;
чч - две цифры часа (в 24-х часовом формате);
мм - две цифры минут;
сс - две цифры секунд;
В литерале типа Дата обязательно должно задаваться значение года, месяца и дня. Для задания даты соответствующей началу отсчета достаточно указать '00010101'.
Допускается при указании литералов типа Дата опускать последние символы (секунды, минуты, часы и т.д.). Это означает, что данные параметры будут равны нулю (для времени) или единице (для даты). В литерале даты допускается использование различных разделителей:
В языке ЗАПРОСов значения типа Дата задаются с помощью ключевого слова ДАТАВРЕМЯ, после которого в скобках последовательно указываются год, месяц, день, час, минута и секунда. Последние три указывать не обязательно: