Российский рынок экономических информационных систем. "ХАКЕРС ДИЗАЙН": сетевая система "Финансы без проблем"
p align="left">Итак, мы, в целом, освоили "операторскую" работу с программой. Однако, прежде чем переходить к более серьезным вещам поподробнее самостоятельно разберитесь с разделом меню "Опции". Для этого просто вызовите список опций, нажмите F1 и почитайте соответствующие тексты помощи. Вы можете установить опции как угодно, однако пока я рекомендую оставить цветовую палитру неизменной - в данной книге комментарии будут относиться именно к этому цветовому оформлению. Кроме того, везде далее предполагается, что включены опции "Проводки в динамике", "Синтаксис подсвечен", "Числа с запятыми", а "Пpавила защищены", "Баланс до текущей", "Пpовеpка на каждой" и "Числа с копейками" отключены. Кроме того, если Вам уже надоели постоянно выскакивающие "баллоны" с помощью можете включить опцию "Баллоны: нет" или "Баллоны: в правилах". Если Вам, как и автору, больше нравится текстовый экран включите опцию "Как в Windows: нет, просто текст" - пиктограммы пропадут, однако в нижней строке экрана всегда будет отображаться список "горячих" клавиш. Фанатикам Windows, наоборот, рекомендуем включить опцию "Как в Windows: графика, кроме мыши" - в этом случае частое мерцание экрана, возможное при использовании программы в среде Windows при перетаскивании мыши, исчезнет. В остальном же рекомендаций нет - экспериментируйте на здоровье. Как работают "Финансы без проблем" Итак, мы получили первые навыки использования программы. Однако, пока мы не можем использовать ее осмысленно, поскольку не умеем выполнить привязку к специфике учетных процедур, используемых на конкретном предприятии. Маловероятно, что те настройки, которые входят в стандартную поставку удовлетворят всех без исключения пользователей. Даже если кого-то они вполне устраивают, мы все же рекомендуем освоиться с основными возможностями настройки, поскольку только при этом условии можно обеспечить должный уровень автоматизации учета. Сейчас мы сформулируем основные принципы, на которых строится работа "Финансов без проблем", а также связанные с ними понятия и термины. "Финансы без проблем" относятся к разряду инструментальных бухгалтерских систем. Что это значит? Если Вы когда-либо работали с электронными таблицами, то знаете, что сами по себе эти программы не могут решать задач конкретной предметной области. Однако, если в клетки электронной таблицы ввести нужные значения и расчетные формулы, то можно настроить их на решение достаточно широкого перечня задач в разных сферах деятельности. Назначение "Финансов без проблем" уже, чем электронных таблиц - это программа ориентирована на специфику конкретной предметной области - бухгалтерского учета. Однако, также как и в электронных таблицах в этой программе есть специальные средства, которые бухгалтер может использовать для решения своих задач, выполнения своих расчетов. За счет этого достигается гибкость настройки на конкретную специфику учетных операций и высокий уровень адаптируемости к бесконечным изменениям в законодательстве, к которым мы привыкли за последние годы. Это означает, что при всех изменениях плана счетов, налоговых ставок, правил расчета тех или иных показателей, форм отчетности и т.д. не нужно ждать, пока в "Хакерс Дизайн" изготовят новую версию программы, учитывающую эти изменения, а можно самостоятельно, изменив те или иные нормативные данные или расчетные формулы "заставить" программу считать как положено. Конечно, за такую гибкость надо платить. Платить, прежде всего, временем, которое нужно потратить на освоение средств настройки программы и на саму настройку. Сразу предупреждаем - освоение всех "премудростей" "Финансов без проблем" - непростая задача. Однако, потраченное время окупится сторицей - те расчеты, на которые раньше у Вас уходили дни и недели "Финансы без проблем" будут делать за секунды и минуты. За счет чего же достигается гибкость? Прежде всего, за счет того, что сама по себе программа "не знает" огромного множества тех премудростей бухгалтерии, которые связаны с большинством специфических расчетов, будь то расчет зарплаты, износ основных средств, калькуляция себестоимости, расчет налоговых платежей, формирование отчетности и т.д. Фактически, "Финансы без проблем" "знают" только базисные понятия бухгалтерии существующие без изменений 500 лет - принцип двойной записи и понятие счета. Единственный расчет, которому программу не надо специально "обучать" - это расчет сальдо и оборотов счетов. Все остальные бухгалтерские понятия и расчеты должны быть "растолкованы" программе и описаны на специальном, понятном ей языке. Только после этого программа сможет их выполнить. Суть настройки программы сводится к следующим основным действиям. Во-первых, следует настроить план счетов: открыть нужные счета и субсчета, определить структуру размещения параметров счетов, в которых будет храниться нормативная информация, связанная с конкретными субсчетами, например, ставки налогов, данные натурального учета, вспомогательные значения, накапливающие ту или иную информацию, необходимую для последующих расчетов. Во-вторых, необходимо определить правила, по которым программа будет выполнять разноску сумм по счетам при выполнении тех или иных учетных действий. Иными словами, определить состав проводок, выполняемых Вами при отражении хозяйственных операций. В-третьих, требуется задать правила вычисления сумм, каждой из проводок, входящих в составленные операции, будь то выделение НДС и спецналога из общей суммы операции, проценты начисления налогов на заработную плату, формулы закрытия операционных счетов, калькуляции себестоимости, расчета прибыли и т.д. В-четвертых, необходимо определить состав, реквизитную структуру и правила расчета показателей форм отчетности и других необходимых Вам выходных форм. После того, как "правила игры" заданы останется только регистрировать операции по тем принципам, которые мы уже разбирали. "Финансы без проблем", руководствуясь этими правилами и данными зарегистрированных операций, будут автоматически составлять проводки, там где надо вычислять их суммы и сводить результаты в оборотный баланс и отчетные формы. От того, насколько качественно составлены правила зависит степень автоматизации решения Ваших повседневных учетных задач и степень облегчения Вашего каждодневного труда. Иными словами, чем больше усилий Вы приложите в момент начала использования программы, чем больше своих знаний сможете переложить на язык, понятный программе, тем больше будет отдача и тем проще станет Ваша жизнь в дальнейшем. Конечно, это не следует понимать в том смысле, что после первоначальной настройки ничего нельзя будет поправить. Со временем Вы сможете осваивать все новые и новые возможности программы. На первом этапе - самые простые, дальше все более и более сложные. Итак, как же работают "Финансы без проблем"? До сих пор мы говорили о том, что на основе составленных пользователем правил программа автоматически строит проводки. На самом же деле, она их не строит, не заносит в базу данных, а только "подразумевает" при вычислении сальдо и оборотов счетов и формировании отчетов. Таким образом, реально хранятся только данные о введенных операциях и их определения. Это является главным, принципиальным отличием программы от конкурирующих разработок. Таким образом, "Финансы без проблем" ориентируются не на отдельно взятую проводку, а на бухгалтерскую операцию. Всем, кто когда-либо вел бухгалтерский учет является очевидным, что практически любой хозяйственный акт вызывает изменения не на паре, а сразу на нескольких счетах. Когда учат бухгалтерскому учету рисуют схемы различных операций, а потом показывают как их описать на универсальном бухгалтерском языке проводок. Программа построена на том же принципе. Здесь базисным понятием является не проводка, а бухгалтерская операция, включающая в общем случае несколько проводок. Так, например, приход от реализации состоит не только в поступлении денег в кассу (на расчетный счет), но и связан с начислением налогов на добавленную стоимость, спецналога, налога на пользователей автодорог. Начисление зарплаты вызывает еще большее число проводок из-за начисления подоходного налога, взносов в пенсионный фонд, фонд занятости, на социальное и медицинское страхование и т.д. Также из нескольких проводок состоят и специфические операции конца отчетного периода, связанные с калькуляцией себестоимости, оценкой запасов, "закрытием" операционных счетов, распределением прибыли, реформацией баланса. При этом известны как схемы отражения движения денег по счетам, так и правила формирования сумм проводок операций. Решение этих проблем при традиционных подходах к автоматизации бухгалтерского учета практически невозможно, поскольку такого рода системы строятся на принципе строгого разделения процедур ввода и формирования выходных форм итоговой информации. Здесь вводим проводки, а здесь печатаем главную книгу, оборотный баланс и т.д. Масса работ связанных со вспомогательными вычислениями остается заботой бухгалтера. Исходя из этого появляется желание каким-то образом автоматизировать работы по контировке первичных документов и формированию проводок. Понятно, что нельзя "намертво" "зашить" в программу такие алгоритмы, поскольку постоянно меняются и нормативы и правила расчета. Кроме того, при едином плане счетов каждое предприятие может вести свою уникальную систему субсчетов. Таким образом, необходимо отделить правила построения операций от программы таким образом, чтобы пользователь мог самостоятельно настроить эти правила, а программа их правильно проинтерпретировать. Реализуя идею построения системы, основанной на понятии "хозяйственная операция" разработчики "Хакерс Дизайн" нашли чрезвычайно привлекательное интерфейсное решение. После записи определения операций в специальной базе знаний, называемой "деревом операций", их ввод в базу данных минимизирует общение пользователя с клавиатурой. Как мы уже видели ранее, ввод операции осуществляется выбором нужных пунктов из последовательно предлагаемых меню. Единственное что нужно ввести - это число текущего месяца и сумму операции, а дальше автоматическую генерацию необходимых проводок и расчет их сумм сделает программа. При этом из выбираемых пунктов меню как бы конструируется фраза, отражающая суть выполняемых действий. После ввода сведений о совершенной операции всегда можно просмотреть проводки, которые построила программа. К достоинствам внутримашинного хранения бухгалтерских записей в виде операций, подразумевающих проводки, а не самих проводок, следует отнести тот факт, что в этом случае в значительной степени снижается трудоемкость исправления ошибок. Например, какая-то сумма вместо того, чтобы быть отраженной как использование прибыли, была отнесена на общехозяйственные расходы, а потом включена в себестоимость. В этом случае скалькулированная себестоимость оказывается неверной, а вслед за ней неверным окажется расчет прибыли и налоговых платежей. При использовании традиционного для систем автоматизации представления информации в базе данных в виде проводок, многие из них придется удалить, для того чтобы, исправив допущенную ошибку, полностью повторить расчет и выполнить повторный ввод пересчитанных данных. В случае же использования операций, только подразумевающих проводки последние будут автоматически переформированы при изменении лишь одной ошибочной операции. Другим примером автоматических пересчетов является оценка себестоимости продукции при учете материалов по средним ценам. Предположим, мы провели оприходование нескольких партий материала, скалькулировали среднюю цену единицы и на ее основе оформили бухгалтерские записи по списанию в производство. Потом выяснилось, что при вводе данных о приходе была допущена ошибка и, тем самым, средняя цена была определена неверно, что повлекло за собой неверное определение включенных в себестоимость сумм. При ручном счете или использовании бухгалтерских программ, основанных на традиционном подходе, придется исправлять ошибки по всей цепочке или формировать сторнирующие записи и "проводить" все заново. В случае же использования "Финансов без проблем" ошибку надо будет исправить только в одном месте, а все зависимые вычисления будут проделаны автоматически. Неспроста уже несколько раз в этой книге проводилась аналогия с электронными таблицами. Бухгалтерские расчеты выполняемые "Финансами без проблем" на основе записи операций также отличаются от расчетов программами, построенными "от проводки", как расчеты с помощью электронных таблиц от расчетов с использованием карандаша и калькулятора. В последнем случае достаточно допустить одну ошибку в исходных данных, чтобы последующие результаты и все выписанные на бумагу цифры были неверными. Совсем другое дело, когда мы ввели в клетки электронной таблицы формулы, определяющие порядок наших расчетов. В этом случае достаточно исправить неверные исходные данные, а всю остальную работу программа выполнит автоматически. Такое свойство "виртуальности", "перевычисляемости" проводок, положенное в основу "Финансов без проблем" как нельзя кстати может пригодиться именно в нынешних условиях, когда из-за ввода нормативных актов в действие задним числом бухгалтерам приходится выполнять двойную работу по выполнению самых разнообразных перерасчетов. Счастливым пользователям "Финансов без проблем" часто просто не надо их делать! Достаточно внести изменения в определение операций, затрагиваемых такого рода законодательными актами, а все остальное сделает программа. Еще одно "за" концепцию оформления бухгалтерских записей в виде операций состоит в том, что правила контировки могут быть описаны опытным бухгалтером один раз, а потом ввод может осуществляться простым оператором, поскольку процесс "машинного" оформления операций состоит в ответе на простые вопросы программы, "конструирующие" фразы, отражающие содержательный смысл операции и уже заложенные в базу знаний. Таким образом, вероятность ошибиться становится меньше и главбух может использовать свое время более рационально, чем тогда, когда ему приходилось контролировать правильность контировки документов за малоопытными подчиненными. Однако, такое построение программы, при всех его достоинствах, таит в себе немало подводных камней. Неумелое переопределение некоторых операций может автоматически вызвать процесс полного пересчета результатов по всем действиям, совершенным до этого момента. Поэтому к построенным определениям правил надо относиться чрезвычайно "бережно" и осторожно, особенно если по этим правилам зарегистрировано много операций. Вот почему так важна продуманность решений на начальном этапе освоения программы, особенно если Вы собираетесь автоматизировать как можно больше сложных в алгоритмическом отношении расчетов. "Финансы без проблем" и внешние программы Настройка программы на выполнение разнообразных расчетов возможна не только на основе использования встроенных средств программирования. Программа имеет достаточно развитые возможности "общения" с внешними приложениями оформленными в виде *.exe и *.com файлов, а также с DLL-библиотеками. Таким образом, программистам предоставляется возможность самостоятельно "усовершенстовать" "Финансы без проблем", адаптируя программу к особенностям использования на конкретном предприятии или в конкретном регионе. Рассмотрение этих возможностей начнем с описания взаимодействия программы с приложениями, оформленными в виде *.exe или *.com файлов. Для вызова внешних программ в языке файлов-форм используется встроенная функция [ru ]. Ее общий формат: [ru s1,s2,n], где s1 - строка, содержащая имя вызываемой программы; s2 - строка с передаваемыми аргументами ; n - режим восстановления экрана: 0 - очистить, а затем восстановить, 1 - оставить как есть (для тех случаев, когда вызываемая программа ничего на экран не выводит). Внешняя программа, вызванная функцией [ru ], результаты своей работы должна поместить в первую строку файла RU.TXT. Рассмотрим следующий пример. В вариант стандартной поставки "Финансов без проблем" входит файл-формы PLATEZKA.RPT, обеспечивающий формирование первичного документа "Платежное поручение". С помощью псевдопроводки "создать документ" он может быть "пристыкован" к операциям. Однако, каждый раз при формировании документа он заставляет нас вводить банковские реквизиты контрагента. Кроме того, организованный в нем последовательный ввод значений не очень-то удобен. Было бы намного приятнее выбирать необходимые значения из справочника, устанавливающего соответствие кода субсчета, передаваемого в форму, банковским реквизитам контрагента - расчетному счету, МФО и названию банка. Для решения этой задачи можно использовать следующую простую программу BANK.EXE, написанную на языке СУБД Clipper Summer'87. При ее "сборке" должны использоваться библиотеки clipper.lib, extend.lib и ct1.lib: parameters FBP_par * если нет параметров - не работаем * список параметров должен быть заключен в двойные кавычки if pcount() = 0 clear ? 'Программа может работать только вместе с "Финансами без проблем"' ? 'Параметры не указаны. Нажмите любую клавишу' inkey(0) quit endif set scoreboard off * файл BANK.DBF должен иметь следующие поля * SUB_SCET - символьного типа, длина 9 * KONTRAG - символьного типа, длина 100 * RS - символьного типа, длина 11 * MFO - символьного типа, длина 10 * BANK1 - символьного типа, длина 50 * BANK2 - символьного типа, длина 50 * длина полей может быть и иной, но тогда надо изменить настройки * вызова программы функцией [ru ] * для приведенного в книге примера критична длина полей RS и MFO * при изменении их в файле BANK.DBF должны быть изменены параметры * функции [cp ] * BANK.DBF должен быть предварительно проиндексирован по полю SUB_SCET use bank index bank * функция [ru ] должна должна передать программе * код субсчета, выбранный при регистрации операции и * название субсчета, разделенные точкой с запятой subscet = token( FBP_par, ';', 1 ) kontrag = token( FBP_par, ';', 2 ) * ищем запись, относящуюся к данному контрагенту seek rtrim(subscet) * если такой записи нет, то добавляем запись с данным кодом и * наименованием субсчета if .not. found() append blank replace sub_scet with subscet, kontragent with kontrag do EditRecord endif * оформляем экран - функция [ru ] должна использоваться * с параметром восстановления экрана set color to n/bg @ 0,0 say center('Банковские реквизиты контрагентов',80,.T.) @ 24,0 say ' Enter-выбрать F5-добавить F4-изменить F8-пометить к удалению F2-сортировать ' set color to w/b,n/w @ 1,0 clear to 23,79 @ 1,0 to 1,79 double set cursor off * выводим на просмотр записи о контрагентах для возможности модификации declare f_list[3], h_list[3] f_list[1] = 'if(deleted(),"*"," ")' f_list[2] = 'sub_scet' f_list[3] = 'left(kontragent,61)' h_list[1] = '' h_list[2] = 'Субсчет' h_list[3] = 'Контрагент' dbedit( 2, 0, 23, 79, f_list, 'KeyProc', '', h_list ) * записываем в файл RU.TXT строку, * содержащую расчетный счет, МФО и название банка memowrit( 'RU.TXT', RS+MFO+alltrim(Bank1)+' '+alltrim(Bank2) ) pack && удаляем помеченные к удалению записи * функция обработки нажатий клавиш в dbedit() function KeyProc parameters mode, field_ptr if mode < 4 return 1 endif do case case lastkey() = 13 && выбрать запись return 0 case lastkey() = -4 && добавить запись subscet = sub_scet && копируются код субсчета и kontrag = kontragent && название субсчета текущей записи append blank replace sub_scet with subscet, kontragent with kontrag do EditRecord && редактирование банковских реквизитов return 2 case lastkey() = -1 && восстановление индексов reindex && ох, капризные они у Clipper'а return 2 case lastkey() = -3 && редактирование банковских реквизитов do EditRecord case lastkey() = -7 && пометить/снять пометку if deleted() && к удалению записи recall else delete endif endcase return 1 * редактирование полей "Расчетный счет", "МФО" и "Название банка" procedure EditRecord save screen set color to n/bg @ 24,0 say center('Insert-вставка/замена Удаление: Del,Bs,Ctrl/T,Ctrl/Y',80,.T.) set color to w/b,n/w @ 1,0 clear to 23,79 @ 2,2 say 'Субсчет: ..... '+sub_scet @ 4,2 say 'Контрагент ... '+left (kontragent,50) @ 5,17 say right(kontragent,50) @ 7,0 to 7,79 @ 9,2 say 'Расчетный счет ....' get RS @ 11,2 say 'МФО ...............' get MFO @ 13,2 say 'Банк получателя ...' get Bank1 @ 14,2 say ' ' get Bank2 set cursor on read set cursor off restore screen Для использования программы необходимо штатными средствами обработки dbf-файлов создать файл BANK.DBF, включающий поля: SUB_SCET - символьного типа, длина 9, KONTRAG - символьного типа, длина 100, RS - символьного типа, длина 11, MFO - символьного типа, длина 10, BANK1 - символьного типа, длина 50, BANK2 - символьного типа, длина 50. BANK.DBF должен быть проиндексирован по полю SUB_SCET. Имя индексного файла - BANK.NTX. Программа получает от функции [ru ] в качестве параметра строку, заключенную в двойные кавычки (таковы правила СУБД Clipper), которая содержит код субсчета и его наименование, разделенные точкой с запятой. Суть работы программы состоит в том, что она ищет в списке записей файла BANK.DBF запись, соответствующую субсчету, выбранному при регистрации операции в "Финансах без проблем". Если такой записи нет, то программа предлагает ввести банковские реквизиты контрагента. Далее, в любом случае пользователю предлагается на выбор список сведений о контрагентах. Он может откорректировать любую запись, пометить запись к удалению или добавить новую. После нажатия на Enter, реквизиты выбранной записи объединяются в одну строку без всяких разделителей и записываются в файл RU.TXT, откуда их и "подбирает" функция [ru ]. Приведенная программа может использоваться во многих формах, требующих отражения банковских реквизитов. Мы приведем пример ее использования в форме печати платежного поручения. Скопируйте файл PLATEZKA.RPT из директории варианта стандартной поставки в директорию PROBA, переименуйте этот файл в PLAT_POR.RPT и внесите следующие изменения: Теперь, измените листья ветви "Расчетный счет расход" дерева операций следующим образом: Зарегистрируем операцию: Выберите "Создать документ". В ответ на запрос файла-формы введите номер документа, например, 145. Стартовал BANK.EXE и не найдя записи, соответствующей субсчету 60-001 "ТОО Вега" предлагает нам ввести банковские реквизиты поставщика: После ввода недостающей записи переходим к выбору. Здесь можно завести несколько записей, соответствующих одному контрагенту, изменить реквизиты того или иного контрагента, пометить ненужные записи к удалению: После нажатия на Enter происходит возврат в "Финансы без проблем" и завершение формирования документа: Использование функции [ru ] может оказаться достаточно полезным. "Финансы без проблем" написать тяжело, а небольшой "прибамбас" к ним на Клиппере или Бэйсике - не составляет особого труда. Однако, не всегда функция [ru ] дает эффективное решение из-за потери времени на загрузку внешней программы и считывание файла RU.TXT. Особенно это касается случаев ее вызова из файлов-коэффициентов. Для преодоления этого затруднения в языке форм "Финансов без проблем" имеется функция [DLLcall ], позволяющая вызывать программы из DLL-библиотеки. Она имеет следующий формат: [DLLcall library, index, data] library - наименование библиотеки DLL, index - номеp вызываемой пpоцедуpы в библиотеке, data - стpока данных, пеpедаваемая в пpоцедуpу. Вызываемая процедура должна поместить результат своей работы в передаваемую строку и DLLcall вернет ее в качестве своего значения. С точки зрения вызываемой процедуры передаваемый параметр data является указателем на строку, завершающуюся нулевым байтом. Процедура должна вернуть результат в ту же строку, рассматривая ее как буфер из 128 байт. Возвращаемый результат также должен завершаться нулевым байтом. При этом значение строки data не изменяется, поскольку вызываемой процедуре передается адрес промежуточного буфера с копией значения строки data. Рассмотрим пример, демонстрирующий возможности использования функции DLLcall для адаптации "Финансов без проблем" к национальным языкам. Ниже приводятся исходные тексты PASCAL-программ библиотеки MOLDOVA, содержащей две экспортируемые процедуры. Первая осуществляет перевод числа в словесное представление, а вторая выдает название месяца по его номеру на молдавском языке: {$A+,B-,D+,E+,F-,G-,I-,L+,N-,O-,P-,Q-,R-,S+,T-,V+,X+} {$M 16384,0,0} library MOLDOVA; uses strings; type Sex = (male,female); Var Number : longint; ER : integer; Frase : string; F : text; Level : integer; function StrNumS(R :longint; f :Sex) :string; var N,L :longint; s :string; const D0 :array [0..19] of string[20] = ('','unu','doi','trei','patru','cinci','sase','sapte','opt', 'noua','zece','unsprezece','doisprezece','treisprezece', 'paisprezece','cincisprezece','sasesprezece','saptesprezece', 'optsprezece','nouasprezece'); D1 :array [1..9] of string[20] = ('zece','douazeci','treizeci','patruzeci','cincizeci','saizeci', 'saptezeci','optzeci','nouazeci'); D2 :array [1..9] of string[20] = ('o suta','doua sute','trei sute','patru sute','cinci sute', 'sase sute','sapte sute','opt sute','noua sute'); begin inc(Level,1); if R < 0 then StrNumS:='Minus '+ StrNumS(-R,f) else if R = 0 then StrNumS:='' else if R = 1 then if Level=1 then StrNumS:='un ' else StrNumS:='unu ' else if R <= 19 then begin StrNumS:=D0[R]+' '; if f=female then if R = 1 then StrNumS:='о' else if R = 2 then StrNumS:='doua '; end else if R <= 99 then begin if (R mod 10)<>0 then StrNumS:=D1[R div 10] + ' si ' + StrNumS(R mod 10,f) else StrNumS:=D1[R div 10] + ' ' + StrNumS(R mod 10,f) end else if R <= 999 then StrNumS:=D2[R div 100] + ' ' + StrNumS(R mod 100,f) else if R <= 1999 then begin StrNumS:='o mie ' + StrNumS(R mod 1000,f); end else if R <= 2999 then begin StrNumS:='doua mii ' + StrNumS(R mod 1000,f); end else if R <= 99999 then begin L:=R div 1000; N:=L mod 10; s:='mii '; if N = 1 then s:='mie '; StrNumS:=StrNumS(L,female) + s + StrNumS(R mod 1000,f); end else if R <= 999999 then begin L:=R div 1000; N:=L mod 10; s:='de mii '; StrNumS:=StrNumS(L,female) + s + StrNumS(R mod 1000,f); end else if R <= 1999999 then begin StrNumS:= 'un milion ' + StrNumS(R mod 1000000,f); end else if R <= 2999999 then begin StrNumS:= 'doua milioane ' + StrNumS(R mod 1000000,f); end else if R <= 999999999 then begin L:=R div 1000000; N:=L mod 10; s:='milioane '; StrNumS:=StrNumS(L,male) + s + StrNumS(R mod 1000000,f); end else if R <= 1999999999 then StrNumS:='un miliard ' + StrNumS(R mod 1000000000,f) else StrNumS:='****** N > 1,999,999,999 ******'; end; procedure P(s :pChar); export; var i,n :longint; c :integer; q,t :string; begin q:=StrPas(s); t:=''; for i:=1 to length(q) do if q[i] <> ',' then t:=t+q[i]; Val(t,n,c); if c <> 0 then q:='ERROR' else q:=StrNumS(n, male); q[1]:=upcase(q[1]); StrPcopy(s, q); end; const M :array [1..12] of string[20] = ('ianuarie ','februarie ','martie ','aprelie ','mai ','iunie ','iulie ', 'august ','septembrie ','oktombrie ','noembrie ','decembrie '); procedure Q(s :pChar); export; var q :string; n,c :integer; begin q:=StrPas(s); Val(q,n,c); if c <> 0 then q:='ERROR 1' else if (n < 0) or (n > 12) then q:='ERROR 2' else q:=M[n]; StrPcopy(s,q); end; exports P index 1; exports Q index 2; begin end. После компоновки библиотеки moldova.dll и размещения его в директории файлов данных бухгалтерии, можно вызывать содержащиеся в нем процедуры из файлов-форм. Приводимые процедуры можно использовать при подготовке первичных документов на молдавском языке вместо встроенных в "Финансы без проблем" "русскоязычных" функций [wn ] и [dt ]. Мы, однако, делать этого не будем и проверим работоспособность функции [DLLcall ], вызвав ее прямо из калькулятора: Так по молдавски пишется 2458051. А вот так пишется слово 'сентябрь': "Финансы без проблем" для Windows Начиная с февраля 1995 года пользователям поставляется версия программы "Финансы без проблем" для Windows. Она полностью совместима с версией 4000 для DOS. Здесь нет никаких отличий ни в концепции, ни в структуре файлов, ни в базовом наборе функций языка форм. Все рассмотренные до сих пор в книге примеры одинаково пригодны как для DOS, так и для Windows версий. Именно поэтому акцент делался на использовании DOS версии программы, как существенно более распространенной. В то же время, в версии для Windows поддерживаются основные дополнительные возможности, предоставляемые этой операционной системой. Основные отличия состоят в наличии многооконного интерфейса, а также возможности организовать фоновые вычисления и взаимодействие с другими Windows-приложениями на основе динамического обмена данными (DDE). Прежде, чем перейти к рассмотрению этих новых возможностей, разберем процесс инсталляции Windows-версии программы. Windows-версия "Финансов без проблем" предъявляет более жесткие требования к аппаратному обеспечению, чем версия 4000 для DOS. В качестве минимальных требований к аппаратуре разработчиками указывается наличие процессора 286 с обязательным сопроцессором 287, 2Мб памяти и видеоадаптера VGA. При написании книги использовался компьютер 386DX без сопроцессора с 4Мб памяти и монитором 14". В данной конфигурации DOS версия работает превосходно, а версия для Windows приемлемо. И если расчеты производятся достаточно быстро, то про скорость обновления экрана этого сказать нельзя. Впрочем, любые Windows-приложения при такой конфигурации работают неторопливо. Существенно приятнее работать с программой при наличии процессора 486DX. При использовании программы в многооконном режиме особенно важно наличие "большого" монитора. Здесь хорошим вариантом является монитор 17" при разрешении 1024х768. В этом случае окна действительно являются окнами с хорошей обозреваемостью и возможности программы можно ощутить в полной мере. Установка программы очень проста. После запуска Windows необходимо стартовать с дискеты файл FINSETUP.EXE. На экране появляется "полосатый" фон и окно "Тест системного шрифта" установщика программы. Для работы необходимо иметь, как минимум, два кириллических шрифта: системный шрифт (System font) и системный шрифт с одинаковой шириной всех букв (System fixed font). Для проверки наличия этих шрифтов в окне выводится тест по которому можно визуально определить их подключение к Windows. Если какой-либо шрифт отсутствует, то необходимо нажать кнопку "Нет, нужна кириллица". В результате этого в каталог Windows будут добавлены шрифты FINWSYS.FON и FINWFIX.FON, а в файл SYSTEM.INI внесены необходимые изменения. При этом, предыдущая копия SYSTEM.INI будет сохранена в файле SYSTEM.OLD. После этого будет произведен рестарт Windows и повторная загрузка теста. После подключения шрифтов с кириллицей для продолжения процесса инсталляции нажмите клавишу "Да, строки в рамках видны нормально". На экране появится основное окно установщика программы. Проведя мышью по пунктам диалога этого окна, ознакомьтесь с соответствующими им "баллонами" помощи и установите нужные значения. Далее, следуя указаниям установщика введите полученный от "Хакерс Дизайн" ключ привязки программы, аналогично установке DOS-версии. При установке программы можно подключить к ней свою базу данных. Для этого надо поставить "крест" около фразы "Подключить свою базу данных", указать путь к директории ее размещения и наименование. В процессе установки на жесткий диск будут переписаны файлы оболочки программы (FINW.EXE, FINW.HLP), файл ключа привязки (FINW.COD), а также файлы установщика (FINWDDE.EXE), DDE-сервера (FINWDDE.EXE) и файл с информацией о программе (FINW.TXT). При установке будут созданы (если отсутствовали) каталоги C:\FINW\EXAMPLE, C:\FINW\EXCHANGE, C:\FINW\FILM, C:\FINW\UTILS. В каталог C:\FINW\EXAMPLE будут скопированы файлы, состав которых полностью аналогичен тому, что применительно к DOS-версии мы называли комплектом (вариантом) стандартной поставки. Единственным исключением здесь являются файлы в формате Excel (DIRECTOR.XLS) и Lotus-123 (YEAR.WK4), содержащие примеры организации динамического обмена данными "Финансов без проблем" с другими Windows-приложениями. Содержимое каталогов C:\FINW\EXCHANGE и C:\FINW\FILM полностью идентично тому, что при установке DOS-версии мы скопировали в директории \FBP\STANDART\EXCHANGE и \FBP\STANDART\ROLIK. Здесь находятся примеры правил использования программы в обменном пункте валюты и демонстрационные ролики, посвященные некоторым вопросам использования программы, соответственно. В директорию C:\FINW\UTILS при инсталляции копируются утилита SUF.EXE, предназначенная для слияния информации нескольких рабочих мест и консолидации балансов нескольких предприятий, а также файлы преобразователей формата данных первой, второй и третьей версий в четвертую. Помимо этого, сюда будут переписаны программные файлы RTM.EXE, DPMI16BI.OVL, DPMINST.EXE, обеспечивающие работу утилиты SUF в защищенном режиме процессора. В ходе инсталляции создается группа "Финансы без проблем". В ней будут присутствовать иконки "Help", "ReadMe", "Fin Setup", "DDE-server", "Example", "Exchange", "Film", назначение которых соответствует информации, размещенной в указанных директориях. Помимо этого, если в основном окне установщика Вы потребовали подключения своей базы данных, то в группе "Финансы без проблем" будет присутствовать пиктограмма с ее названием. Также, как и при использовании DOS-версии имеется возможность обслуживания с помощью одной копии программы нескольких бухгалтерий. Если соответствующие им директории с файлами данных и форм уже существуют, достаточно повторно вызвать установщик уже не с дискеты, а из окна группы "Финансы без проблем". Теперь в его главном окне будет доступна только возможность подключения новой базы данных. Действуя аналогично основному процессу инсталляции, укажите путь и название базы данных и установщик разместит ее пиктограмму в окне группы. Количество подключаемых таким образом баз данных ничем не ограничено. Рассмотрим теперь основные отличия использования Windows-версии программы. Как уже говорилось, основным отличием является возможность размещения на экране нескольких окон программы одновременно и организации фоновых вычислений. Так, например, можно одновременно открыть на экране окна операций и оборотного баланса. Запустите "Финансы без проблем" и максимизируйте окно программы. Откройте окно реестра операций, а потом окно оборотного баланса. Обратите внимание, что в меню появились новые пункты Window и Edit. В меню Window выберите пункт "Tile по вертикали". Теперь видны одновременно оба окна. Теперь попробуйте вводить операции. После завершения ввода операции окно "Обороты счетов" на какое-то мгновение окажется перечеркнутым. А потом в нем изменятся строки, соответствующие счетам, сальдо и обороты которых изменились. Таким образом, если окно "Обороты счетов" открыто, то при вводе новых операций или редактировании существующих, осуществляются фоновые вычисления, обновляющие сальдо и обороты счетов. При этом можно спокойно продолжать работу - вычисления каждый раз будут "отбрасываться" назад, но процессорное время будет использоваться эффективно: в тот момент, пока Вы ищете на клавиатуре нужную клавишу, программа трудится на Ваше благо. Когда в ее распоряжении окажется достаточно времени, чтобы завершить вычисления, перечеркивания с окна "Обороты" счетов изчезнут и его содержимое будет обновлено. В Windows-версии несколько иначе реализованы функции синтаксического контроля правил. Так, при удалении или изменении ветви дерева, зарегистрированные на ее основе операции уже не "мигают", но в них зачеркнутыми оказываются фразы, соответствующие отсутствующим ветвям: Коды счетов и субсчетов, отсутствующих в плане счетов, в дереве операций также оказываются зачеркнутыми: Также, как и при выполнении фоновых вычислений, при наличии неверных данных окно оборотного баланса перечеркивается. По сравнению с DOS-версией упростился процесс поиска ошибок. При их наличии в нижней строке окна программы всегда присутствует кнопка с надписью "Где ошибка?" и рядом с ней пояснение о типе ошибки. Достаточно щелкнуть мышью по этой кнопке или нажать Alt/E и "Финансы без проблем" прямиком отправят Вас к месту ее возникновения. Иногда, повторные нажатия клавиши "Где ошибка ?" активируют еще одно окно, чтобы дать дополнительную информацию. Например, в какой-либо операции возникло деление на ноль. Тогда первое нажатие на кнопку выведет Вас на соответствующий лист дерева операций, а повторное укажет на операцию, в которой эта ситуация возникла. После исправления всех ошибок кнопка исчезает. Теперь оборотный баланс может быть построен и перечеркивание с окна "Обороты счетов" снимается. Программа имеет особенности при работе с принтерами. Считается, что Windows сама должна выполнять всю работу по печати. Однако, часто оказывается, что из-за беспорядка с наборами шрифтов и опциями драйверов возникают серьезные проблемы. "Финансы без проблем" решают эту проблему радикально. Здесь, детали изображения предназначенного для вывода на принтер подготавливаются в памяти компьютера в виде графического образа и, далее, преобразуются для конкретного принтера с подходящим для него коэфициентом поточечного расширения. Такой метод позволяет печатать русский текст на любых принтерах, способных выводить графику, имея только системные шрифты экрана с кириллицей. При этом получается удовлетворительное качество печати, в том числе на цветных принтерах. Имеются отличия и при выполнении форм. В DOS-версии файлы-форм, "вступающие" в диалог с пользователем при каждом "вопросе" останавливаются, ожидая ответа. В Windows-версии, когда одновременно может быть открыто несколько окон, такой подход неприемлем, поскольку окно формы должно динамически обновляться при внесении изменений в данные. В этом случае, при каждом обновлении исходных данных окно формы было бы вынуждено для рестарта расчетов предлагать ответить на "интересующие" форму вопросы. Это было бы слишком назойливо. Поэтому, разработчики предусмотрели следующий порядок работы. При первом запуске формы в ее верхней части создается раздел вопросов: После ответа пользователя на все вопросы и нажатия клавиши Все выполняется расчет показателей формы и нижняя часть окна заполняется результатом ее выполнения. При изменении первичных данных форма больше не будет ожидать новых ответов на "интересующие" ее вопросы, а будет выполнять пересчет на основе установленных ранее значений. Ввиду этого, внесены небольшие ограничения в язык форм. Теперь тексты вопросов и значения ответов по умолчанию функций IR, IS, IA, IY должны быть константами, поскольку информация о них должна быть известна программе для возможности спланировать размещение элементов экранной формы. Другим изменением, касающемся функций, является то, что игнорируется третий аргумент функции [ru]. В качестве запускаемой программы может фигурировать PIF-файл, в котором и указываются все необходимые параметры. Некоторые изменения коснулись и состава опций программы. В Windows-версии отсутствуют (навсегда включены) опции "Экономить память", "Быстрые формы", "Синтаксис подсвечен", "Сначала все ошибки". Появилась опция "Шрифт". По умолчанию используется шрифт System. В то же время, при работе с "маленьким" монитором иногда бывает удобно выбрать другой шрифт для более компактного представления данных на экране. Для независимости от русификаторов Windows введена опция "Русский внешний/свой ЙЦУКЕНГ/свой ЯВЕРТЫУ". Включив "Русский свой" даже при отсутствии русификаторов имеется возможность вводить с клавиатуры символы кириллицы, переключаясь с русского на латинский клавишей Alt-R. Для управления печатью используются опции "Принтер: черно-белый/цветной" и "Левое поле бумаги". Включение первой опции в положение "Цветной" позволяет печатать в цвете или с использованием градаций серого цвета. Однако, в этом случае, вывод на печать требует больше времени и места на диске. Опция "Левое поле печати" не зависит от типа принтера и позволяет установить отступ в 0,1 или 2 см. "Финансы без проблем" для Windows полностью поддерживают механизм динамического обмена данными (DDE) между приложениями Windows. При этом, программа и сама может быть инициатором DDE-"общения", так и выступать DDE-сервером для других приложений. Рассмотрим использование "Финансов без проблем" как DDE-сервера. Для этого используется специальная утилита FINWDDE.EXE, входящая в комплект поставки программы. Ей соответствует своя пиктограмма "DDE-сервер". Использование DDE-сервера разберем на примере вычисления "удаленной" формулы в Microsoft Excel. Запустите "Финансы без проблем". Далее, переключитесь на диспетчер программ загрузите Excel. В состав комплекта поставки "Финансов без проблем" входит файл DIRECTOR.XLS. Он размещается в директории \FINW\EXAMPLE. Откройте его. При загрузке данной таблицы Excel задаст вопрос: "Данный документ содержит связи. Переустановить связи ?". Ответьте "Да". Далее, последует вопрос "Нет доступа к удаленным данным. Запустить приложение 'FINWDDE.EXE'?" Также ответьте "Да". Excel запустит FINWDDE.EXE, которая установит связь между Excel и "Финансами без проблем". Взору откроется следующая картина: Поставьте курсор в клетку D1. Там содержится формула: =FINWDDE|'C:\FINW\EXAMPLE'!'[ea 50]+[ea 51]+[ea 52]' Вычисляя эту формулу Excel обращается к FINWDDE, а та, в свою очередь, к "Финансам без проблем" с "просьбой" вычислить формулу [ea 50]+[ea 51]+[ea 52]. Если "Финансы без проблем" могут вычислить переданную формулу, результат расчета отобразится в соответствующей клетке. Если в формуле будет обнаружена ошибка, то в клетке таблицы отобразится сообщение о содержании ошибки. Попробуем, например, изменить формулу следующим образом: =FINWDDE|'C:\FINW\EXAMPLE'!'[ea 50]+[ea 51+[ea 52]' После завершения редактирования в клетке D1 появится сообщение : "#ERR: Счет 51+[ea отсутствует" Соответственно этому изменится и диаграмма. Измените неверную запись. После завершения редактирования все вернулось на свои места. Теперь, поскольку связь установлена, выполнение новых операций в "Финансах без проблем", затрагивающих счета, сальдо которых используется для расчета показателей таблицы, будет вызывать автоматическое обновление данных в клетках и на диаграмме. Зарегистрируйте, например, операции уменьшающие сальдо денежных счетов и запасы товара. Можно видеть, как "прыгают" столбики диаграммы и изменяются значения в клетках таблицы. При этом, если еще идут фоновые вычисления, то в клетках отображаются значения "#BUSY". "Финансы без проблем" и технология "клиент-сервер" В последнее время стало чрезвычайно популярным использование локальных вычислительных сетей. Многие поставщики "железа" и программного обеспечения предлагают на рынке соответствующую продукцию. В развитии компьютерных технологий происходит, как бы виток спирали: переход к сетевым технологиям в середине 90х годов происходит так же бурно, как отказ от централизованной обработки данных в пользу персональных ЭВМ в начале 80х. Создается впечатление, что использование технологии "клиент-сервер" становится чуть ли не одним из критериев респектабельности фирмы. Лозунг "А ты записался добровольцем?" сменился лозунгом "А в твоем офисе используется технология клиент-сервер?". Не отстают от всеобщего увлечения и разработчики систем автоматизации бухгалтерского учета. И если до середины 1993 года гонка шла в направлении автоматизации все большего и большего числа учетных процедур, то теперь основными критериями стали "SQL-ность" и "клиент-серверность". А что же "Хакерс Дизайн"? Собирается ли фирма предложить своим пользователям сетевую версию? Да, собирается. К моменту окончания книги бета-тестирование проходила сетевая версия программы "Финансы без проблем", предназначенная для использования в локальной вычислительной сети на основе использования технологии "клиент-сервер". При этом "Хакерс Дизайн" предлагает такую реализацию технологии сетевой обработки данных, которая в максимальной степени ориентирована на специфику решения именно бухгалтерских задач. Практически, это означает, что реализован специализированный сервер "Финансов без проблем", способный работать в любых сетевых средах. На сервере размещаются план счетов, дерево видов операций и их реестры. Практически вся обработка данных выполняется сервером. Это, по мнению разработчиков, позволяет использовать в сети слабые рабочие станции, которые, фактически, являются просто терминалами. При этом декларируется возможность использования в качестве станций любых типов ЭВМ. Как бы то ни было, но использование языка SQL в "общем" виде оставляет систему обработки данных на уровне низкоуровневых транзакций. Применительно к системе автоматизации бухгалтерского учета это означает, что отработка обращений к массиву проводок на сервере так или иначе связана с целым числом транзакций по отношению к одной проводке. Таким образом, контировка одного документа так или иначе требует более одной транзакции. Чем больше проводок, тем более замедленной оказывается реакция системы. Учитывая то, что в "Финансах без проблем" минимальной единицей информации и, следовательно, единицей обмена с сервером, является операция, в общем случае определяющая не одну, а множество проводок, то здесь на одну транзакцию приходится больший объем данных, а сама база данных при разумном построении дерева операций оказывается более компактной, чем в системах построенных "от проводки". Следовательно, чисто теоретически (поскольку подобного рода тестирования автор не проводил) от такого построения системы обработки информации можно ожидать большей производительности. В сетевой версии программы реализована многоступенчатая система защиты данных от несанкционированного вмешательства. Так, в частности, рядовым пользователям запрещено редактировать дерево видов операций, удалять счета и субсчета, имеется возможность ограничения доступа к ветвям дерева и редактирования данных прошлых периодов, вплоть до ограничения доступа текущим днем. ШФинансы без проблем версия 2.04Ш. Отличия от версии 1.0 1. Новый механизм пеpеключения контекстов Новый механизм пеpеключения контекстов для вмешательства в пpошлое без затpуднения pаботы в pеальном вpемени. Для объяснения сути механизма пpиведем упpощенный алгоpитм pаботы сеpвеpа: Шаг 1. Пpи стаpте сеpвеp выполняет "сбивку" баланса к pеальной дате и запоминает свое вычислительное состояние в pабочей области D - контексте. Шаг 2. Сеpвеp копиpует контекст D в контекст D' и считает контекст D' активным. Шаг 3. Сеpвеp ожидает запpос. Допустим, запpос поступил. Если это запpос на выполнение фоpмы (R), на показ списка опеpаций (J), или на вычисление выpажения (E), то он выполняется без изменений в контекстах D и D', и сеpвеp снова пеpеходит к шагу 3. Если это ввод или удаление (O или D) опеpации в pеальной дате, то сеpвеp вносит соответствующие изменения в активный сейчас контекст D' и снова пеpеходит к Шагу 3. Если это ввод (или удаление) опеpации в пpошлом, то сеpвеp пеpеходит к Шагу 4. Шаг 4. Сеpвеp считает тепеpь активным контекст D, а не D' (пеpеключает контексты) Шаг 5. После вмешательства в пpошлое сеpвеp "навеpстывает" свое вычислительное состояние в контексте D, пpодолжая в это же вpемя ожидать запpосы. Если запpос поступит, то сеpвеp "отвлечется" для его выполнения к Шагу 6, а затем снова пpодолжит выполнение Шага 5. Когда все необходимые изменения в контексте D будут сделаны, сеpвеp пеpейдет к Шагу 2. Шаг 6. Сеpвеp переключает контекст с D на D' и выполняет запpос. Если это ввод или удаление (O или D) операции в реальной дате, то сеpвеp вносит соответствующие изменения в активный сейчас контекст D'. Если это ввод или удаление опеpации в пpошлом, то сеpвеp соответствующим обpазом уменьшит степень готовности контекста D так что "навеpстывание" в Шаге 5 возобновится, возможно, с более pанней стадии. Запpосы на выполнение фоpм выполняются здесь "условно веpно" - в пpедположении, что вмешательства в пpошлое не было. В конец фоpмы помещается пpедупpеждающий штамп. Сеpвеp пеpеключает контекст с D' на D и пpодолжает выполнение Шага 5. Сеpвеp может pаботать как с пеpеключением контекстов, так и без него. Подходящий pежим можно выбpать указав ключевые слова DUAL или OLD в запускающей командной стpоке. Следует учитывать, что в pежиме с пеpеключением контекстов потpебность в опеpативной памяти пpимеpно удваиваются. Для того, чтобы пеpеключение контекстов выполнялось быстpо, следует так оpганизовать pазмещение сеpвеpа в памяти, чтобы избежать "подкачки" стpаниц с диска (относится к Windows, OS/2 и т.д.). 3. Запоминание детальной инфоpмации о выполненных пpоводкахВведен новый pежим pаботы сеpвеpа - с запоминанием детальной инфоpмации о выполненных пpоводках. Это позволяет видеть пpоводки опеpации, анализиpовать счета, получать обоpотные ведомости за любой пеpиод. Для запоминания используется механизм фактов. Пpимеp. Пусть пpи обpаботке опеpации с ключем CAAA-170 сеpвеp выполняет пpоводку: дебет X кpедит Y сумма 100, и после этой пpоводки остаток счета X составляет 1100, а остаток счета Y составляет 900. После выполнения этой пpоводки, к списку фактов сеpвеp добавит два новых факта: fact ta 'X', 100, 0, 'Y', 1100, 'CAAA-170' fact ta 'Y', 0, 100, 'X', 900, 'CAAA-170' Такие факты о пpоводках будем называть ta-фактами. Ta-факты использутся новыми встpоенными в сеpвеp фоpмами: __SYS000 * Список пpоводок по опеpации __SYS001 * Обоpоты счетов __SYS002 * Обоpоты субсчетов __SYS003 * Анализ счета __SYS004 * Анализ коppеспонденции __SYS005 * Коppеспонденции счета синтетически __SYS006 * Коppеспонденции счета детально Сеpвеp может pаботать как с запоминанием ta-фактов, так и без него. Можно запоминать ta-факты не во всех месяцах. Подходящий pежим можно выбpать указав, диапазон месяцев для запоминания ta-фактов в запускающей командной стpоке. Следует учитывать, что в pежиме с запоминанием ta-фактов потpебность сеpвеpа в опеpативной памяти существенно увеличивается. 4. Новые функции языка фоpм В фоpмах, отвечающих за @-обpащения можно использовать новую функцию [CT]. Функция вызывается так: [CT s] где s - стpока. Эта функция выдает пеpвое слово стpоки, выбpанной в пpедыдущем @-обpащении к счету s в текущем листе деpева. Если пpедыдущих @-обpащений не было, то функция выдает пустую стpоку. Назначение: облегчить выбоp в @-обpащении, используя pезультаты пpедыдущих @-обpащений. Так, выбpав фиpму, можно увидеть выписанные счета только для этой фиpмы; затем выбpав счет, можно увидеть список товаpов пpедназначенных к отгpузке только по этому счету, и т.д. Новая функция [USER] выдает имя пользователя, для котоpого сеpвеp выполняет фоpму. Новая функция [TA] сообщает, запоминает ли сеpвеp TA-факты в указанном диапазоне месяцев. Функция вызывается так: [TA m1,m2] где m1 и m2 - номеpа пеpвого и последнего месяцев диапазона. Функция возвpащает 1 если ta-факты запоминаются для всех месяцев диапазона, и 0, если хотя бы для одного месяца из диапазона ta-факты не запоминаются. Новая функция [INTSN] пpеобpазует число в стpоку несколько дpугим способом чем функция [SN]: в вычисляемом функцией pезультате никогда не пpисутствуют запятые и нет дополнительных пpобелов слева. Так, [INTSN 12345678] - это всегда '12345678'. Новая функция [LENGTH] заполняет давно имевшийся пpобел в языке фоpм - она вычисляет длину стpоки. Функция вызывается так: [LENGTH s] где s - стpока. Пpимеpы: [LENGTH 'qwerty'] pавно 6, но есть особенность: [LENGTH ''] это 1, а не 0! Новая функция [ANTIDA] обpатна функции [DA] и возвpащает в упакованном виде дату, соответствующую номеpу дня от основания Хакеpс Дизайн. Так, [DA 3,28,1996] это 1975, а [ANTIDA 1975] - это 199603.28 НОВЫЕ ВИДЫ ЗАПРОСОВ К СЕРВЕРУ Введены новые виды запpосов к сеpвеpу. Чтобы использовать эти запpосы тpебуется пpаво U. M ON - монополизиpовать доступ к сеpвеpу; M OFF - отказаться от монополии доступа; W ON - "отключить" сеpвеp от данных и пpавил; пpи этом сеpвеp пpекpащает обслуживание, можно безопасно вносить изменения в пpавила и данные с помощью однопользовательской веpсии; W OFF - снова "подключить" сеpвеp к пpавилам и данным; пpи этом сеpвеp пеpезагpужается; W FORM - пеpекомпилиpовать фоpмы ( см п.17 ) W DOWN - завеpшить pаботу сеpвеpа. 5. Новый синтаксис командной стpоки сеpвеpа: server data [box [color [mode [m1 [m2]]]]] где server - имя исполняемого модуля сеpвеpа data - каталог данных и пpавил box - каталог для обмена сообщениями, умолчание - \_BOX_; последним знаком в имени каталога должно быть "_" color - пpизнак того, будет ли мнемосхема сеpвеpа цветной: COLOR или MONO; умолчание - MONO: mode - указание, в каком pежиме будет pаботать сеpвеp: OLD - без пеpеключения контекстов, т.е как в веpсиях 1.x; DUAL - с пеpеключением контекстов; умолчание - DUAL; m1, m2 - диапазон месяцев, для котоpых будут запоминаться ta-факты; по умолчанию ta-факты не запоминаются Пpимеpы для DOS, Windows, и т.п.: FN C:\DEMODATA C:\_BOX_ COLOR DUAL 1 12 FN C:\DEMODATA C:\_BOX_ MONO OLD 3 5 Пpимеpы для Novell NetWare: LOAD FL DEMODATA _BOX_ COLOR DUAL 1 12 LOAD FL DEMODATA _BOX_ MONO DUAL 6. НОВОЕ В КЛИЕНТЕ ДЛЯ DOS В клиенте для DOS введена опция "Состояние сна". Когда эта опция включена, то клиент пpактически не отнимает квантов вpемени у дpугих пpоцессов, pаботающих в Windows. Это особенно полезно в том случае, когда на этом же компьютеpе pаботает и сеpвеp - его пpоизводительность будет выше. В клиенте для DOS введена возможность pедактиpования опеpации "на месте". Когда клиент показывает список опеpаций (после диpективы J) можно использовать клавишу Enter для входа в pежим pедактиpования. Испpавленная опеpация будет отпpавлена на сеpвеp с тем же уникальным кодом. Для этого будет использовано слово KEY в диpективе O. Пpимеp: Пусть опеpация с уникальным кодом CAAA-170 заменяется на дpугую; пpи этом клиент автоматически отпpавит сеpвеpу диpективу (содеpжание опеpации взято для пpимеpа): O KEY=CAAA-170 1000 ·Касса·пpиход·ниоткуда· В диpективе J можно заказать показ опеpации с указанным уникальным кодом. Для этого используется слово KEY. Пpимеp: J KEY=CAAA-170 Если опеpация не имеет штампа в комментаpии (напpимеp, она была введена в однопользовательской веpсии), то вместо уникального кода можно использовать абсолютный номеp опеpации с буквенным пpефиксом - месяцем, к котоpому относится опеpация; так пpефикс A - это янваpь, C - маpт и т.д. Пpимеp: J KEY=B900 Это означает: февpаль, 900-я опеpация в месяце. Следует иметь ввиду, что абсолютный номеp опеpации может измениться из-за добавления опеpации-пpедшественницы уже после того, как на сеpвеp была отпpавлена диpектива J и пеpед тем, как будет дан ответ на эту диpективу. Разумеется, сеpвеp сначала пpовеpит пpаво на пpосмотp опеpаций (пpаво J). Для того, чтобы видеть непpоштампо- ванные опеpации, тpебуется пpаво J ALL. 7.КОМПИЛЯЦИЯ ФОРМ СЕРВЕРОМ Пpи загpузке сеpвеp компилиpует фоpмы и удеpживает их в памяти. Это уменьшает вpемя pеакции сеpвеpа на запpосы, но несколько усложняет отладку новых фоpм. Когда новая фоpма помещается в каталог, с данными котоpого pаботает сеpвеp (или вносятся изменения в существующую фоpму), то сеpвеp "узнает" об этом только после получения диpективы W FORM; фоpмы будут пеpекомпилиpованы; отчет о возможных ошибках появится в файле FORMS.ERR, его можно видеть также в ответе на диpективу S (статистика сеpвеpа). 8. Выполнение @-обpащений Фоpмы, отвечающей за @-обpащение, может и не быть. В этом случае сеpвеp показывает список субсчетов встpоенными сpедствами. 9. Аваpийное завеpшение pаботы сеpвеpа Если сеpвеp завеpшил pаботу аваpийно, то отчет о случившемся можно найти в файле FATAL.ERR. Здесь будет указано также дата и вpемя в таком же фоpмате, как и в штампах опеpаций. 10. Отличия веpсии 2.04 от 2.02 Пеpечисленные до этого места особенности были свойственны и веpсии 2.02 (апpель 1996). Отличия веpсии 2.04 от 2.02: - Допустимое количество полей факта увеличено от 10 до 16. Ранее этот пpедел не пpовеpялся и его пpевышение могло быть пpичиной аваpийного завеpшения pаботы сеpвеpа или однопользовательской веpсии 4000/ultraF. - Функции [set] и [plus] можно тепеpь использовать не только в файлах-коэффициентах и листьях деpева, но и в отчетных фоpмах. Пpи этом они должны ссылаться на фиктивный счет %. Счет % следует опpеделить в списке счетов. В свою очеpедь, функции [set] и [plus] не должны ссылаться на счет % в файлах-коэффициентах и листьях деpева. Это новшество можно использовать для пpомежуточного накопления стpуктуpиpованной инфоpмации в отчетных фоpмах. - Функцию [co] можно использовать не только в пеpвичных документах, но и в файлах-коэффициентах и листьях деpева. Пpи этом ее смысл такой же. Следует учитывать, что в возвpащаемом функцией pезультате не пpисутствует штамп опеpации.
Страницы: 1, 2
|