IZONE- http://www.izcity.com/- бесплатный софт, вэб-сервисы, ресурсы для раскрутки, свежие номера журнала "Internet Zone".

Обзор дополнительных модулей для платформы V7

Расширение возможностей 1С

Никита Зайцев aka WildHare

Одним из неоспоримых достоинств платформы V7 является её расширяемость. Что означает это слово? Это значит, что функциональные возможности платформы могут быть расширены путём подключения дополнительных библиотек (в терминах 1С эти библиотеки называются внешними компонентами). Платформа V7 существует уже более четырёх лет и за это время для неё было создано огромное количество расширений, как самой фирмой 1С и её официальными партнёрами, так и независимыми разработчиками. Вот об этих-то расширениях и пойдёт речь.

Данный обзор не претендует на полноту и объективность оценок — в нём фигурируют те компоненты, которые либо показались мне уникальными в своём роде, либо распространены настолько широко, что стали стандартом де-факто для решения тех или иных задач. Всего в обзоре представлено одиннадцать библиотек.

V7 Plus

Разработчик: фирма «».
Распространяется бесплатно в составе типовых конфигураций. Комплектуется документацией в формате ALS (специфический формат V7, такую документацию можно встроить прямо в справочную систему среды разработки).
Физический файл: V7plus.dll

В состав компоненты входят классы:

  • V7Mail. Предназначен для управления отсылкой и получением электронной почты. Собственных функций для работы с почтой не имеет, а просто позволяет рулить MAPI-клиентом (и не любым, а только зарегистрированным в системе как почтовый клиент по умолчанию) из среды V7. Реализован не без ошибок — например, при работе с Outlook Express метод Послать() инициирует не только отсылку письма, как это написано в документации, но заодно и доставку почты. Впрочем, жить это обычно не мешает.
  • V7HttpRader. Предназначен для скачивания данных из Интернета по протоколу HTTP. Опять-таки, своих собственных функций работы с Сетью не имеет, а использует движок MSIE (со всеми его настройками — дозвон, прокси и т.п.). Умеет не только тупо скачивать указанные страницы, но и работать с «OLE-объектами, имплементирующими интерфейс IStream». Поддерживает авторизованный доступ к ресурсам.
  • V7SysInfo. Чтение системной информации — ничего особенного, версия ОС, процессор-память, номер используемого релиза V7. Также умеет генерировать GUID (Globally Unique Identifier) — весьма полезная функция.
  • Анализатор XML. «Прокладка» между V7 и MS XML Parser, активно используется в типовых конфигурациях (фирма «1С» является одним из активных участников проекта CommerceML). ImHO особого толка в этом классе нет, с тем же успехом можно обращаться к MS XML Parser напрямую.. единственным (довольно, впрочем, сомнительным) плюсом можно считать русскую нотацию методов класса.
  • V7TextFile. Предназначен для работы с большими текстовыми файлами. На самом деле работа с объёмными текстами является одним из слабых мест V7 — стандартный класс Текст при открытии файла на чтение вначале закачивает текст целиком в память, а уже потом начинает что-то с ним делать — в результате операции производятся крайне медленно при колоссальном расходе системных ресурсов. Класс V7TextFile читает/пишет файл построчно, работая с ним напрямую. Это позволяет в разы увеличить производительность операций с файлами, но не задаром, а за счет значительного уменьшения «степеней свободы» — файл можно либо целиком прочитать, либо целиком переписать, прочитать что-то из середины или дописать пару строк в конец уже существующего файла невозможно. Также есть ограничения на длину строки файла (32к) и, что самое неудобное, в один момент времени можно работать только с одним файлом.

Резюме: много полезных функций, но реализованы они несколько кривовато. Будем надеяться, что в следующих версиях основные недостатки будут устранены. Компонента очень широко распространена, в типовых конфигурациях можно найти развесистые примеры работы со всеми классами.

Rarus API Extender

Разработчик: фирма «1С-Рарус».
Распространяется в составе отраслевых и заказных конфигураций фирмы «1С-Рарус». Комплектуется документацией в формате ALS.
Физический файл: raruslib.dll

Эта библиотека является OLE-сервером, а не классической внешней компонентой V7, тем не менее, она создавалась с расчётом на применение исключительно в конфигурациях V7.

Библиотека предоставляет следующие сервисы:

  • Работа с ini-файлами. Создание, удаление, чтение и запись секций и ключей ini-файлов. В принципе, написать аналогичную функцию на языке V7 не представляет никакого труда, но можно и не писать самому, а использовать уже готовое. ;-)
  • Работа с zip-файлами. Намного более полезная функция — V7 не умеет работать с бинарными данными и создать аналог этой функции штатными средствами V7 нереально. Функционал довольно-таки скромный — создать/удалить архив, добавить/удалить/извлечь файл, измерить размер упакованных файлов — но в абсолютном большинстве случаев этого вполне достаточно.
  • Работа с реестром. Поддерживает ряд функций — проверка, чтение, запись и удаление ключей реестра и их значений. Не то, чтобы при работе с V7 часто возникала необходимость курочить реестр, но иногда без этого просто не обойтись.

Резюме: функций немного, но реализованы они превосходно. Простой и надёжный инструмент.

V7 Queue

Разработчик: фирма «Икс-технологии».
Распространяется бесплатно, по запросу. Комплектуется документацией в формате HTML.
Физический файл: v7queue.dll

Компонента реализует шлюз между платформой V7 и службой сообщений MSMQ. Поддерживаются функции записи сообщений в очереди, прослушивания очередей на предмет появления новых сообщений и чтения этих сообщений. При появлении в очереди нового сообщения инициируется системная процедура V7 ОбработкаВнешнегоСобытия() (обработка событий, генерируемых внешними компонентами).

Область применения этой компоненты весьма велика — обмен данными между V7 и другими приложениями (в т.ч. другими копиями V7), работающими на территориально распределённых машинах. V7Queue позволяет воспользоваться готовой транспортной службой — поддерживающей гарантированную доставку, нотификацию и сложную маршрутизацию сообщений, т.е. позволяет решить добрую половину проблем, возникающих при разработке систем обмена и синхронизации данных.

Резюме: очень полезная вещь.

1C:Scan

Разработчик: Алексей Вихорев.
Распространяется как freeware-продукт. Комплектуется документацией в формате ALS.
Физические файлы: scan1c.dll, eztw32.dll

Компонента реализует шлюз между V7 и установленным в системе TWAIN-драйвером. Для чего это нужно? Многие учётные системы (и не только учётные — на V7 построено много разных систем) активно используют в работе электронные образы бумажных документов. 1C:Scan позволяет производить сканирование непосредственно из среды V7, не прибегая к услугам дополнительных программ. Отсканированное изображение может быть помещено в clipboard или сохранено в виде файла формата BMP.

Резюме: вещь специфическая, но в своей области незаменимая.

Wheel.AddIn

Разработчик: EllSoft.
Распространяется как freeware-продукт, скачать можно на zima.nm.ru. Комплектуется кратким описанием методов в формате TXT.
Физические файлы: wheeladdin.dll, mailrel.dll

Компонента предоставляет набор функций, распределённых по пяти классам:

  • Работа с E-mail. Отправка почты либо через MAPI, либо напрямую по протоколу SMTP. Последнее выглядит привлекательнее в случаях, когда, скажем, база данных регулярно отправляет администратору отчёты о своем состоянии, но во всех остальных случаях лучше всё-таки воспользоваться компонентой V7 Plus.
  • Работа с архивами. Возможности, прямо скажем, невелики: умеет либо запаковать один файл в архив, либо извлечь файл из архива (тоже один, а если файлов в архиве несколько, будет извлечён первый).
  • Работа с бинарными файлами. Чтение и запись бинарных файлов — уникальная функция, не имеющая (по моим сведениям) аналогов в других компонентах. Эта функция может потребоваться, например, в том случае, когда электронные образы бумажных документов хранятся не во внешних файлах, а непосредственно в базе данных (MS SQL Server это допускает).
  • Работа со шрифтами. Одна-единственная функция, возвращающая список инсталлированных в системе шрифтов. Функция весьма полезная — список шрифтов бывает нужен практически в любой форме, где производится конструирование печатных форм (а штатного объекта типа «Шрифт» в V7 попросту нет). Конечно, можно извлечь этот список из реестра, но делать это одной командой значительно удобнее.
  • Работа с реестром. Чтение, запись и удаление ключей реестра и их значений (поддерживаются значения типов число и строка). Набор функций значительно беднее, нежели у соответствующего класса компоненты Rarus API Extender.

Резюме: Wheel.Addin просто незаменима в тех случаях, когда нужно прочитать или записать бинарный файл, но в остальном явно проигрывает по функционалу другим компонентам.

OCR Pelican

Автор: Михаил Лезжов.
Распространяется как демо-версия, скачать можно с www.hare.ru/soft/dd. Комплектуется кратким описанием в формате TXT и примерами работы.
Физический файл: pelican.dll

Пожалуй, это наиболее экзотическая компонента для V7 из всех существующих: в ней используются нейросетевые технологии и реализует она систему распознавания рукописного текста.

Автор компоненты профессионально занимается технологиями распознавания, а Pelican был сделан с целью демонстрации возможностей технологии. К сожалению, практического применения для платформы V7 эта технология пока не нашла и дело ограничилось демо-версией. Но даже в демо-версии скорость и качество распознавания более чем приличные. Сам же процесс демонстрации работы компоненты «настоящему программеру», считающему V7 тупым бухгалтерским пакетом, может принести несколько весёлых минут ;-).

Резюме: это нужно видеть.

Compound

Разработчик: Костя Волков aka Reminder.
Распространяется как freeware-продукт, скачать можно с reminder.h1.ru. Комплектуется документацией в формате ALS и примерами.
Физический файл: compound.dll

Компонента предназначена для работы с файлами формата compound (именно в этом формате хранятся файлы структуры метаданных конфигураций V7). Compound-файл является хранилищем, которое содержит внутри себя папки (Storage) и файлы (Stream), именно в этих файлах хранятся экранные и печатные формы, тексты описаний и программных модулей V7 и т.п. вещи, причём часть из них (например, тексты программных модулей, хранится в запакованном виде). Компонента позволяет корректно распаковывать, читать и модифицировать содержимое stream-файлов хранилища, а также записывать их обратно в compound-файл.

Таким образом, при помощи Compound можно просматривать (и в случае необходимости) изменять файл структуры метаданных программными средствами и при некотором напряжении творческой мысли компонента позволяет сделать значительный шаг в сторону автоматизации разработки конфигураций V7 (пакетная обработка однотипных конфигураций, автоматизация тестирования физической целостности, сбор статистической информации и многое другое).

Резюме: инструмент «на любителя», но этому любителю предоставляется широчайшее поле для творчества.

1C+Java

Разработчик: Павел Леонов.
Распространяется как демо-версия, скачать можно с java1c.narod.ru. Комплектуется некоторым количеством java-классов, кратким описанием и примерами работы для V7.
Физический файл: java.dll

Еще одна демонстрация технологии. Компонента предоставляет шлюз между V7 и MSJM и позволяет расширять функциональность V7 путём использования java-классов (можно брать готовые классы, а можно писать свои). Потенциал у этой компоненты весьма значительный (даже не смотря на отказ MS от поддержки Java — ведь уже выпущенные версии MSJM от этого хуже работать не станут), но на практике я что-то не слышал, чтобы кто-то этим реально пользовался. Может быть потому, что компонента является коммерческим продуктом (а рынок внешних компонент V7 весьма специфичен, коммерческие разработки здесь крайне непопулярны).

Резюме: вещь интересная, но, похоже, она разделяет судьбу проектов, в названии которых присутствует магическое слово «Java»… ;-)

Rainbow Addon 2000

Разработчик: Валерий Атаманюк.
Распространяется свободно, скачать можно с rainbow.hare.ru. Комплектуется кратким текстовым описанием классов и методов, а также несколькими примерами работы.
Физический файл: rainbow.dll

Мощное многофункциональное расширение платформы V7. Включает в себя шесть классов:

  • RainbowService. Сервисный класс, дополняет математическую библиотеку V7 методами двоичной алгебры (and, or, not, xor), а также позволяет получить некоторые служебные данные V7, необходимые для работы с другими классами.
  • OBDCQuery. Имеет смысл только в случае хранения данных V7 в базе MS SQL Server. Позволяет напрямую обращаться к базе данных напрямую, используя запросы T-SQL (как ни трудно в это поверить, штатной возможности работы с SQL-запросами у V7 нет).
  • MetaDataWork. Позволяет получать внутренние (служебные) идентификаторы объектов базы данных V7. Эта информация нужна для построения корректных запросов методами класса ODBCQuery.
  • ModuleContext. Класс предназначен для «потрошения» загруженных в память программных модулей V7. Может присвоить модулю определённый контекст, сбросить признак компиляции модуля или вернуть исходный текст.
  • ClassContext. Компилирует и выполняет произвольный текст, как если бы он являлся программным модулем. Грубо говоря, используя этот класс, можно манипулировать кодом в процессе работы практически также, как и данными. Такая функциональность не даётся даром — класс использует некоторые недокументированные возможности V7, поэтому он несовместим со штатным отладчиком (лично меня это нисколько не огорчает, потому что отладчик у V7 весьма символический).
  • Math. Класс предоставляет три десятка математических функций (в том числе rand()). При помощи Math на V7 можно производить весьма сложные математические расчёты (в штатном наборе функций V7 кроме четырёх действий арифметики практически ничего нет).

К сожалению, работа на Rainbow была прервана буквально на середине, поэтому дальнейшее развитие библиотеки представляется делом малореальным. Документации также практически нет. Зато это единственная компонента из представленных в обзоре, которая распространяется вместе с исходными текстами (VC++). А поскольку компонента использует скрытые возможности V7, чтение её исходников может помочь понять внутреннюю механику V7 — тем, кому это интересно. Как показывает практика, таких людей немало. ;-)

Резюме: в своё время это был прорыв. На текущий же момент основными пользователями Rainbow являются владельцы больших и сложных баз, работающих под MS SQL. А тот факт, что открытие исходников нисколько не улучшило ситуацию с дальнейшим развитием продукта, наводит на некоторые мысли…

PLBrowseKeyHandler

Разработчик: фирма «Анкей».
Распространяется как freeware-продукт. Комплектуется примером работы (документация почему-то в комплект поставки не входит, но разобраться можно и так).
Физический файл: plbrowsekeyhandler.dll

Тут нужна небольшая предыстория. В экранных формах V7 могут находиться два вида таблиц: системные таблицы (это журналы документов, списки элементов справочников и т.п.), которые обязательно связаны с каким-либо объектом метаданных, и т.н. «таблицы значений», которые можно располагать где угодно и заполнять их какими угодно данными. Так вот, для системных таблиц работают «горячие клавиши» (ins — создать новую строку, del — удалить строку и т.д.), а для таблиц значений — не работают. Это очень неудобно, потому что приходится вынуждать пользователя нажимать мышью на какие-то дополнительные кнопки в диалоговом окне. При этом практически ни один сложный интерфейс объекта V7 не обходится без таблиц значений.

Компонента PLBrowseKeyHandler решает эту проблему — с её помощью можно перехватывать произведённые пользователем нажатие клавиш и производить некие действия с текущей строкой таблицы значений. Действия, которые будут произведены по получению события с клавиатуры, предварительно задаются программистом (т.е. при желании можно повесить на ins удаление, а на del вывод сообщения «вы только что стёрли свою базу данных»). Единственное ограничение компоненты — если в форме расположено несколько таблиц значений, то назначать «горячие клавиши» можно только для одной из них, но для 90% задач и этого вполне хватает.

Резюме: компонента не свободна от ошибок (есть кое-какие проблемы с передачей фокуса при нажатиях «горячих клавиш»), но позволяет здорово упростить жизнь пользователям, предпочитающим работать с клавиатуры.

Dynamic Module Server

Разработчик: Андрей Рачкин.
Текущая версия распространяется как freeware-продукт, в дальнейшем возможно разделение библиотеки на две части — свободную и коммерческую. Скачать можно с dms.hare.ru. Комплектуется документацией в формате ALS и примерами.
Физический файл: dynamicmoduleserver.dll

На сегодняшний день это, пожалуй что, наиболее мощная и перспективная компонента из всех, имеющихся в свободном доступе. Текущая версия DMS включает в себя пять классов:

  • DMS. Сервисный класс. Реализует механизм лицензий компоненты (лицензии могут быть выписаны на отдельные классы и методы, могут ограничиваться по времени и привязываться к MAC-адресам сетевых адаптеров), а также некоторые сервисные функции (работа с файлами, таймер и т.п.).
  • DynaModule. Этот класс чем-то схож с Rainbow::ClassContext (он также предназначен для создания и компиляции динамических программных модулей V7), но его возможности значительно шире. В числе прочего DynaModule может работать с защищёнными модулями, которые хранятся отдельно от файла структуры метаданных V7 в специальном зашифрованном хранилище. Следующей ступенью развития этого класса является реализация объектных возможностей (наследования, полиморфизма) для языка V7 (который при этом перестанет быть русскоязычным аналогом Basic'a и будет больше похож на «взрослые» языки).
  • DynaValue, DynaValueList. Эти классы реализуют поддержку сложных структур данных — вложенных массивов с плавающим набором поименованных измерений, а также продвинутые возможности управления этими структурами (наследование неких предопределённых значений при создании нового элемента массива, встроенное вычисление итогов внутри массива и т.д.).
  • DynaCrypt. Класс предоставляет криптографические функции — шифрование и расшифровку строковых величин. Используется алгоритм RC6, длина ключа — 256 бит.
  • DynaDialog. Этот класс пока что находится в стадии разработки. В нём будут реализованы те функции работы с диалоговыми формами, которых не хватает в платформе — автоматическое масштабирование элементов диалога под размер окна, программное управление составом элементов диалога и их взаимным расположением, динамическая сборка диалоговой формы из отдельных фрагментов непосредственно перед выводом на экран и т.д.

Резюме: потенциал применения DMS на реальных задачах очень высок — начиная от простых функций защиты структуры конфигурации и программного кода от нелегального использования и заканчивая построением сложных модульных конфигураций, подстраиваемых под конкретную специфику прямо в процессе работы.

***

Вот как бы и всё. Все рассмотренные компоненты опробованы в работе (насколько это было возможно) и на самом деле выполняют заявленные их разработчиками функции. За бортом обзора осталось несколько интересных вещей — например, старейшая, но не потерявшая актуальности и по сей день библиотека 1С:Addon или компонента для работы с FTP-серверами AddFTP — на момент написания обзора их сайты не функционировали и получить хоть какую-то информацию о состоянии проектов не представлялось возможным. Также стоит учесть тот факт, что в Сеть попадает информация далеко не обо всех существующих в природе внешних компонентах — а сообщество работающих с V7 программистов столь велико и так распределено в пространстве, что находить информацию в офайне весьма и весьма затруднительно.

Источник - SoftТерра, http://www.softerra.ru

 


Copyright © "Internet Zone", http://www.izcity.com/, info@izcity.com