Hare.ru @ Коллективный разум / Hare.ru @ Дикое место |
Архив hare.ru | ||||||||||||||||||||||||||||||||||||||||||
Мысли, конвертированные в текст | |||||||||||||||||||||||||||||||||||||||||||
Собственные руки TMМожно ли сделать справочник резиновым?Никита Зайцев (WildHare) (где-то в 2001) 1Сv7 — предметно-ориентированная среда. Это замечательно, потому что предметная область довольно чётко определена и в процессе автоматизации того или иного бизнес-процесса не нужно изобретать велосипеды (хотя довольно часто приходится натягивать седло на корову, но это уже из другой сказки). Структура данных конфигурации 1Cv7 задаётся на стадии разработки и является статичной, а это уже гораздо менее весело и иногда очень мешает жить.Меня, конечно же, спросят: за каким чёртом может понадобиться изменение структуры данных в процессе работы с базой, да ещё и производимое без участия программиста? На самом деле такие задачи есть, и они не так уж редко встречаются. Например, представьте себе некий мощный классификатор, описывающий предметную область бизнес-процесса — скажем, сборки компьютеров, обработки результатов социологических опросов или страхования финансовых рисков. Что он из себя представляет? Правильно, сложный многоуровневый справочник. Состав классификатора разнороден, элементы разбиты на классы и подклассы, и каждый элемент характеризуется неким набором параметров. Половина проблемы в том, что у разных элементов разные параметры. Параметр “экранное разрешение” имеет смысл для монитора, параметр “рабочая частота” применяется к процессорам и чипсетам, а если речь идет об игровом девайсе, нам небезраличны количество степеней свободы и наличие силовой обратной связи. Если попытаться хранить все значения всех параметров для всех элементов, то к нашему справочнику более всего подойдет определение “монструозный” (к сведению тех, кому это слово ласкает слух — на русский оно переводится как “громоздкий, неудобный и глючный” ;-). И в любом случае, некоторые ключевые параметры мы определить забудем, у других перепутаем типы, а потом с матюгами будем рихтовать конфигурацию на глазах у заказчика. Но это еще полбеды. Вторая и главная половина проблемы заключается в том, что классификатор в процессе работы с ним пользователнй растёт не только вширь, но и вглубь. Предположим, завтра на рынке появится новый тип компьютерной железки, главным параметром которой будет количество ударов об стену, которые она выдержит прежде чем сломаться — и что же, нам нужно будет бросить все дела и в срочном порядке дописывать реквизит в справочник, выводить его в формы (куда он, конечно же, уже не влезет и всю форму придётся перекроить заново) и т.п., а потом обновлять базы данных своих заказчиков (ушлые разработчики на этом, конечно, хоть каких-то денег заработают, а честным и того не достанется). Пример с железкой, конечно, притянут за уши, но вот если страховая фирма впридачу к страхованию автомобиля от угона займется страхованием от разбития машины об фонарный столб (а это между прочим, принципиально разные вещи именно в плане хранимых данных), а у социологической фирмы появится принципиально новый тип опросного листа? К чему я всё это веду. Есть некоторый класс задач, где жизненно необходимо передавать в руки пользователю не набор статичных окон с прописанными в них реквизитами, а гибкий инструмент управления сложным классификатором. Под пользователем здесь понимается пользователь в высшем смысле этого слова, т.е. понимающий разницу между перечислением и справочником и знающий, для чего служит комбинация Shift+Tab. Как показывает практика, среди пользователей серьёзной разработки хотя бы один такой обязательно найдется, а то и целых два. Технически задача выглядит так: нам нужно в произвольный момент времени, не модифицируя md-файл, добавить в справочник один или несколько реквизитов, причём мы не можем заранее знать, какой тип должен быть у этих реквизитов. Поскольку это будет делаться с подачи пользователя, необходимо исключить ситуации нажатия Не Той Кнопки. Ну и вся остальная механика конфигурации должна быть достаточно умной, чтобы не впасть в ступор при виде возникшего на пустом месте нового объекта. Один из путей решения заключается с создании нескольких подчинённых справочников с реквизитами неопределённого типа. Лично мне этот путь не нравится — придётся писать громоздкие управляющие процедуры, да и сам по себе механизм подчинённости не очень удобен (справочник может быть подчинён только справочнику определённого вида, но не “справочнику вообще”) и работает он не всегда надёжно. Так что после некоторых размышлений я произвел на свет довольно-таки дикую концепцию, которая и предлагается Вашему вниманию. В основе лежат два служебных справочника: Структура и Данные. Справочник структуры выглядит так:
Как несложно догадаться, в этом справочнике хранятся сведения об именах и типах реквизитов, принадлежащих тому или иному справочнику конфигурации, а отбор производится по реквизиту “Ключ”, в который записывается строковый идентификатор типа справочника-владельца. Второй служебный справочник Данные, как следует из его названия, предназначен для хранения собственно реквизитов:
Два значения сделаны затем, что в реквизит неопределённого вида можно поместить строку не длинее 22 символов (readme с гордостью повествует об этой фиче, памятнику программерской криворукости и лени). В Ключ записывается ссылка на элемент справочника-владельца данного конкретного реквизита, а в Имя — идентификатор реквизита, взятый из справочника структуры. Таким образом, каждый элемент справочника данных на самом деле играет роль одного реквизита какого-то из справочников конфигурации, а справочник структуры помогает разобраться в этом бардаке и менять структуру прямо по ходу работы с данными. В прилагаемом прототипе не реализованы многие ключевые функции (например, программная работа с квази-реквизитами или система разграничения прав доступа с точностью до отдельно взятого реквизита), но для понимания технологии они не нужны и любой квалифицированный разработчик их реализует без особого труда. В принципе, получилось бледное подобие SQL-таблицы— всё свалено в одну кучу, проиндексировано, и посредством пары простых запросов/отборов можно быстро и просто получить то, что нужно в данный момент. Искомая гибкость достигнута и, прошу заметить, исключительно штатными средствами V7. Если сюда подключить мощное расширение (я имею в виду DMS), то возможно будет задавать для создаваемых в процессе работы квази-реквизитов формулы, условия, сложные процедуры инициализации и т.п. вещи. Но об этом мы поговорим в следующий раз. Разумеется, технология имеет спорные моменты:
|
Партнеры: Также может быть интересно: Канал Россия 1 на http://spbtvonline.ru/ |
||||||||||||||||||||||||||||||||||||||||||
Сайт поддерживается за счет партнеров: | |||||||||||||||||||||||||||||||||||||||||||
:::... Сайт содержит архив двух версий hare.ru | Карта сайта |