Работа с карточками объектов аналитического учета в CL-2000.



Posted by Evgen A. Palamarchuck on March 05, 2000 at 01:13:10:

In Reply to: Новая клиентская программа "Клиент-2000" posted by Evgen A. Palamarchuck on February 23, 2000 at 09:00:03:

Общеизвестная особенность клиент-серверной ФБП, заключающаяся в последовательном доступе к параметрам того или иного объекта, вынуждает либо строить системы, где необходимые параметры объектов аналитического учета (ОАУ) представляются либо в табличном варианте либо в виде последовательно возникающих для редактирования отдельных полей.
Первый способ приемлем лишь для просмотра списков, не имеющих большого количества полей. Если поля - широкие или их достаточно много, то списки обрабатывать становится трудно и приходится идти на всевозможные ухищрения.
Второй способ неудобен в первую очередь психологически (не видна целостная картина об объекте), а редактировать параметры ОАУ можно лишь в последовательном режиме. Если полей много, то приходится перебирать все предыдущие, чтобы добраться до требуемого или применять способы ускоренного продвижения к ним. Но и в этом случае работа оператора напоминает движение в узком коридоре.
Пытаясь решить проблему, мы решили использовать общеизвестный экранный объект - карточку с редактируемыми полями. Для этого в Client-2000 были введены некоторые дополнения, что и позволило решить описанные недостатки. Итак :
При «разлистывании» счетов по функции [IA ..], ( имеющих в своем составе субсчета ) ( неважно при введении ли операций или при работе из отчетных форм ) достаточно установить курсор на требуемый субсчет и нажать кнопку F4. При этом клиент определяет, какой счет сейчас развернут (например, пусть это будет счет 41) и ищет в своем каталоге файл с одноименноым названием с раширением *.SC (screen card). В данном случае это будет 41.SC.
Если таковой имеется, то на сервере запускается специальная универсальныя для всех экранных объектов форма с зарезервированным именем EDITCARD.RPT в режиме (GET), задачей которой является извлечь об ОАУ (в нашем случае о субсчете) все необходимые данные и передать их СL-2000. СL-2000 подхватывает ответ и по шаблону файла screen card представляет данные на экране в виде карточки с редактируемыми полями. Типы полей, их ширина, названия, комментарии определяются самим шаблоном screen card.
Если пользователь поля в карточке ОАУ редактировал, то СL-2000 вновь запускает EDITCARD.RPT и результаты редактирования передаются туда в виде параметров. Работающая в этом режиме (SET) часть EDITCARD.RPT осуществляет занесение даных от CL-2000 на параметры, экстрапараметры, факты или во внешюю базу данных EXTR.DAT.
Таким образом мы имеем возможност видеть и редактировать сразу всю информацию об ОАУ, что психологически очень удобно. В архиве с примером есть карточка поставщика, в которой используются 10 полей.
Как устроены шаблоны экранных форм (*.SC) ? Принцип у них весьма напоминает ФБП : что нарисовал, то и получил. Фактически - это текстовый файл с комментариями и переменными, где первая его строка считается заголовком и появляется в названии рамки к карточке. Вот пример карточки для счета 41 :

Карточка товара

Код : ^^^^^^S1 Название : ^S2^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Характеристика : ^S4^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Цена приходн. : ^^^^R1^^ грн. Цена отпускная : ^^^^R2^^ грн.
Остаток : ^^^^^R3^^^ шт.

Поставщик : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^S3

Особенности используемых переменных следующие. Всего в CL-2000 зарезервировано их 20 шт. строкового и 20 действительного типов. Начинающиеся с буквы S (напр. S1, S2 .. S20) являются строковыми, а с буквы R (R1..R20) - действительные. Растекатели работают аналогично ФБП, определяя как местоположение и ширину полей, так и формат для действительных величин. Выше указывалось, что перед заполением и выводом карточки на экран, CL-2000 запускает EDITCARD.RPT и ждет от него файла со значениями этих переменных, например :

= 410078
= Кофемолка
= В ударопрочной пластмассе бежевого цвета
= 67.50
= 89.99
= 3

Порядок чередования переменных и там и там значения не имеют. Важно, чтобы в ответе, выдаваемом EDITCARD.RPT переменные шли в угловых скобках, за которыми следовал бы знак равенства.
После того как карточка будет отредактирована пользователем, CL-2000 отправит форме EDITCARD.RPT ответ, чтобы она разместила данные в нужных местах БД ФБП. В параметрах ответа CL-2000 переменные будут следовать с порядке возрастания номера вначале строковых, а затем и действительных переменнных. Неиспользванные переменные в ответе участия не принимают.
EDITCARD.RPT имеет обязательный интерфейс и интерфейс достраиваемый. Вот обязательный
***************************************************
*
MD=[strip [IS 'режим','',60]]
US=[strip [IS 'пользователь','',60]]
PC=[strip [IS 'родительский счет','',10]]
AC=[strip [IS 'его субсчет ','',10]]
FF=[strip [IS 'имя файла для обмена с сервером','',10]]
WS=[strip [IS 'пожелания клиента','',10]]
*
*
if MD = 'GET' goto GET; endif
if MD = 'SET' goto SET; endif
***************************************************
В переменную MD (mode) от клиента может приходить два слова GET и SET. Они определяют режим извлечения или занесения данных. В переменную US (user) попадает имя пользователя. Оно может использоваться в двух целях : - для формирования командной строки серверу (см. далее) и для администрирования. Каких-либо специальных мер в клиенте с этой целью не предпринималось, но, написав соответствующие ветвления в EDITCARD.RPT, можно в нужные поля карточки положить сообщения о запрете доступа к ним. А в ответе клиента - эти поля просто не обрабатывать.
Следующие две переменных - и так понятно. А вот в переменную FF передается сгенерированное случайное имя файла для обмена через каталог обмена с сервером на случай работы с параметрами, экстрапараметрами или фактами. WS - строка пожелания клиента - также предназначена для этой цели.
В архиве editcard.zip содержится пример для ведения карточек поставщиков и карточек товаров. Данные первых находятся в EXTR.DAT, а вторых - на экстрапараметрах.
Для занесения данных на парамеры, экстрапараметры и факты приходится делать записи в ЖО. Способ тяжелый, но других инструментов для доступа к этим объектам нет. Интересно, что при вводе новых операций этот режим на полпути до завершения операции записывает в ЖО дополнительную (или дополнительные, если сделать изменения параметров ОАУ несколько раз) операции. Попробуйте в примере в ветке приходования товара поменять несколько раз данные в товарной карточке, завершите операцию и взгляните в журнал! Вы увидите, что появились так сказать «предоперации».
Реализуя этот способ, форма EDITCARD.RPT формирует командную строку серверу и выталкивает ее в файл FF с раширением *.IN. Получается что-то типа самовозбуждения... Вот пример командной строки для экстрапараметров товаров (из архива EDITCARD.ZIP):
st = US+'··'+WS+'·O PD=0 DC='+X1+' MC='+X0+' 0 ·Товары·измен.характ.··Ц1·'+R1+'··Ц2·'+R2+'··КОЛ.·'+R3+'·¦'+AC+'···коррекция цен·'
Конечно, по правилам в каталоге обмена вначале надо было бы создать такой файл, но с другим раширением, потом его заполнить, закрыть и лишь затем переименовать раширение на *.IN. Однако здесь сделано допущение, что сервер, исполняя, отчетную форму, каталог обмена в этот момент не читает. Да и возможности переименовывать файлы из форм насколько изветно нет. Ежели сервер все-таки работает в многозадачном режиме, тогда такой способ самопрограммирования будет неустойчивым. А.Г.?
Желающие поэкспериментировать могут переписать себе архив с www.pallar.vinnitsa.com с новой версией Client-2000 и примерами. Напоминаю, что архивы надо разворачивать надо с ключом -d. Примеры взяты из конкретного проекта, поэтому часть комментариев - на украинском языке, хотя клиент «балакає i росiйскою мовою».
С ув. Е.А.Паламарчук



Пpишедшие ответы: