Ответы на вопросы в ветвях операций и контексты в формах



Posted by Анатолий Анимица (195.91.169.63) on September 16, 2001 at 14:04:30:

In Reply to: Моделирование поведения ветвей-вопросов posted by Всеволод Каскевич on September 16, 2001 at 06:57:55:

Использование данных ответов на вопросы, формируемые в ветвях дерева cfs.rul, позволяет существенно уменьшить неопределенность при выборе ответа на последующий вопрос в длинной операции. Действительно, пусть i-й вопрос операции '?PO кому (R 60 в баллоне)' спрашивает субсчет контрагента, а в i+1 вопросе '?NO на N.докум (R IN60 в баллоне) мы хотим узнать номера документов этого контрагента (например, накладные или счет-фактуры), которые мы хотим оплатить, и данной операцией регистрируем платеж.
И выбрать нужный нам номер для сопоставления прихода товара и платежа. Для этого достаточно в форме IN60 узнать контекст ct=[ct 'кому'] - это будет обозначение субсчета поставщика, и с его знанием поступить как должно - отобрать для списка подходящие факты, которые легко представить в виде короткого листинга (таблицы) входящих номеров. В 2001R такой прием используется повсеместно - читайте исходники, открыто и бесплатно!

Надо иметь в виду, что длина контекста не бесконечна, [ct ..] отрезает первых, по моему, 9 или 10 символов вопроса (не ответа на вопрос, а именно вопроса, поэтому не промахнитесь с аргументом [ct ..]. Чтобы выяснить это наверняка, включите logmode и понаблюдайте за процессом формирования данной операции в log файле. Там все и увидите, сколько байт вопроса надо куснуть для подстановки в аргумент контекста. Похоже, у Всеволода именно здесь проблема с возвращаемым значением.

Не забывайте про вторую строку баллона. Если субсчет имеет обозначение 60001, а в баллоне после R 60 нет уточняющей строки '.S', вы получите число 60001 вместо строки '60001'. Для выбора субсчета это все равно, но соответствующее поле факта будет иметь числовой тип.

Вот вкратце и все.

Кстати, сугубо экранный ввод на "не clw" клиентах (Access, например), практически отсекает такую возможность или требует жуткой интерактивности - такой же, как у старого доброго clw32. Представьте, у вас все окошки операции открыты, вы вносите субсчет поставщика, окно с номером документа тоже открыто и пусто, а чтобы получить там такой симпатичный списочек из трех накладных, надо спрашивать сервер - получается, сразу же после схода курсора с окна ввода поставщика, т.е. будет то же самое. Только хуже за счет несравнимо более медленного взаимодействия написанного на VBA скрипта по сравнению с реактивностью привычного клиента.

Это требует смены стиля программирования операций на спецклиентах - поменьше контекстов, предзагрузка всех возможных контекстных таблиц и т.п. Такова цена настоящей интерактивности взаимодействия оператор - база данных на сервере.

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

ААА


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