Российский рынок экономических информационных систем. "ХАКЕРС ДИЗАЙН": сетевая система "Финансы без проблем"

Министерство образования РФ

Томский государственный университет

Систем управления и радиоэлектронике

 (ТУСУР)





Центр дистанционного обучения.

Кафедра автоматизированных систем управления (АСУ)









РЕФЕРАТ

по дисциплине: «Предметно-ориентированные экономические информационные системы»

тема: «Российский рынок экономических информационных систем» «ХАКЕРС ДИЗАЙН»: сетевая система «Финансы без проблем».







Автор методического пособия: М.Н.Исаков



Введение  



Как бы ни ругали телевизионную рекламу - она запоминается. Особенно тогда, когда рекламируется продукция, товары или услуги той отрасли, с которой ты профессионально связан. Поэтому, большинству специалистов, так или иначе связанных с рынком программного обеспечения в области экономики и финансов надолго запомнилась реклама тогда еще никому неведомой и невесть откуда взявшейся фирмы из Мариуполя, ежевечернее в 1991-1992 годах в самое ходовое телевизионное время по первой программе ТВ предлагавшей недорогую компьютерную программу для ведения бухгалтерского учета с запоминающимся названием "Финансы без проблем". 

А все было очень просто. То, чего не могли сделать монстры социалистической индустрии производства программ и "вылупившиеся" из них кооперативы сделала маленькая частная фирма из Мариуполя - "Хакерс Дизайн", выпустив на рынок первый на территории бывшего СССР широко тиражируемый программный продукт. 

До момента появления "Финансов без проблем" было написано немало "толстых" исследований о том, как надо автоматизировать учет в промышленности, торговле, в организациях, состоящих на бюджете. Предпринимались попытки создать типовые системы кодирования, типовые технологические системы обработки учетной информации. В основном они ориентировались на использование "больших" ЭВМ и потому предназначались для достаточно крупных организаций. Небольшим предприятиям предлагалось использовать ВЦКП. Каков уровень оперативности такой автоматизации учета можно догадаться. Потому-то такие системы и не получили большого распространения. Часто приходилось видеть бухгалтера, который с карандашом и калькулятором (а то и счетами) "крыжил" полученную из АСУ распечатку. Фактически внедрение АСУ часто приводило к выполнению двойной ненужной работы. И это в то время, когда во всем цивилизованном мире уже пользовались дешевыми персональными ЭВМ. 

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

И такие программы стали создаваться. Автор хорошо помнит как в 89-91 гг. множество временных трудовых коллективов по договорам с самыми разными организациями "лепили" бухгалтерские программы фактически уникальные для каждого предприятия. Многие такие разработки оказались мертворожденными, поскольку сами программисты - технари до мозга костей - ничего не понимая в учете лишь воспроизводили то, что могли понять из объяснений бухгалтеров. Как правило, получалось изделие годное только для данной организации-заказчика, да и то на короткий период действия нормативных актов "намертво" заложенных в алгоритмы расчетов. 

Разработчики "Хакерс Дизайн" реализовали совершенно иной принцип построения бухгалтерской программы. В "Финансы без проблем" были заложены совершенно непохожие на существовавшие до тех пор концепции автоматизации бухгалтерского учета. 

Основная идея состояла в том, что бухгалтерская программа должна быть максимально гибкой и открытой для настройки самим пользователем на специфику учета в своей организации и легко модифицируемой при изменении законодательства. Создав такого рода продукт фирма предприняла мощные усилия по его продвижению на рынке, раньше других производителей программного обеспечения поняв принцип "реклама двигатель прогресса". Мощная рекламная компания 1991-1992 года принесла свои плоды. Тысячи организаций-пользователей теперь могли приобрести недорогой, качественный программный продукт, просто получив его по почте наложенным платежом. 

Конечно, "Финансы без проблем" нельзя считать идеальной программой, которая в состоянии удовлетворить потребности любой, без исключения, бухгалтерии. Однако, опыт автора, знакомого более чем с сотней систем автоматизации бухгалтерского учета, как созданных на территории бывшего СССР, так и западных, позволяет с полной уверенностью констатировать, что на настоящий момент нет и в обозримом будущем не предвидится появления идеальной со всех точек зрения программы для бухгалтера. Слава Богу, забыты пресловутые типовые проектные решения централизованно навязываемые нам при социализме. Каждый пользователь теперь волен выбирать себе то, что более всего соответствует его потребностям, запросам, уровню претензий и желанию работать По-старинке или по-новому. В этом смысле "Финансы без проблем" - это система построенная на новых, прогрессивных принципах, которые рано или поздно станут доминирующими. 

Последнее подтверждается следующим обстоятельством. Автору известно несколько компьютерных фирм в Москве, Петербурге, на Украине и в Беларуси прямо "позаимствовавших" у "Хакерс Дизайн" основные идеи "Финансов без проблем" и достаточно успешно тиражирующих свои разработки. Более того, идеи групповых или типовых операций, порождающих "одним махом" несколько проводок, специализированные генераторы отчетов, а также возможность оперативной "расшифровки" показателей оборотного баланса данными аналитического учета, впервые среди разработок для массового потребителя появившиеся в "Финансах без проблем", стали стандартом "де-факто" для систем автоматизации, поставляемых ведущими разработчиками компьютерных бухгалтерий. Так что, хотим мы того или нет - следует признать: разработчики "Хакерс Дизайн" во многом явились "законодателями мод" на рынке бухгалтерских программ практически на всей территории бывшего СССР. 

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



"Финансы без проблем"  - первое знакомство



Прежде, чем перейти к содержательным вопросам использования "Финансов без проблем" при ведении бухгалтерского учета, рассмотрим основные приемы работы с программой. Зайдем в директорию стандартного демонстрационного примера (в дальнейшем EXAMPLE) и выполним заранее подготовленный файл f.bat. 

На экране дисплея отобразится примерно следующее:





В верхней строке экрана отображено главное меню программы, во "втором" ряду экрана - пиктограммы с изображением меток "вызова" основных режимов работы. Вызов нужной функции можно осуществить одним из трех возможных способов: 

1. посредством выбора нужного пункта меню; 

2. переведя указатель "мыши" на нужную пиктограмму ;

3. нажав нужную клавишу. 



Для начала поработаем мышкой. Поставим курсор мыши на самую левую пиктограмму. Буквально через секунду после остановки курсора в нужном "квадрате" рядом с пиктограммой должно появиться окошко с текстом "Режим ввода и просмотра операций": 







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

 





Сейчас здесь незарегистрировано ни одной операции. Не поленитесь и "поводите" мышью по "непустым" экранным элементам окна операций и "натыкаясь" на то или иное изображение почитайте выводимые программой сообщения. Найдите с

1. закрыть окно, то есть покинуть режим ввода операций; 

2. переместиться в нужное место реестра операций

(реально переместиться пока никуда не получится);  

3. как вводить числа мышью.

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

Таким образом, "мышиный" интерфейс во многом идентичен при работе в разных окнах. 

Закроем окно счетов и начальных условий и опять окажемся в окне реестра операций. Закроем и его. 

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







Меню "Финансов без проблем" двухуровневое. При выборе любого пункта "верхнего" меню "выпадают" зависимые подменю. "Подвигайтесь" по меню влево-вправо. Я думаю, не надо объяснять как выбрать ту или иную функцию. Обратите внимание, что напротив некоторых пунктов указана клавиатурная комбинация быстрого вызова данной функции. Запомним их: 

Alt-F2 - режим ввода/корректировки операций; 

Alt-F3 - режим расчета/просмотра/анализа оборотного 

баланса; 

Alt-F4 - меню выходных форм; 

Alt-F5 - режим редактирования плана счетов программы; 

Alt-F6 - режим редактирования справочника видов операций; 

Alt-X - выход из программы.

Упомянутую в пункте "Ресурсы" комбинацию Alt-F9 запоминать не будем - ни для ума, ни для сердца мы там информации пока не найдем. 

Кроме вышеперечисленных клавиш запомним следующие:

Esc - почти всегда отменяет какое-либо действие; 

F1 - всегда вызывает помощь;

F3 - калькулятор.

Первым делом займемся помощью. Нажмем F1. На экране появится окно помощи. 

Мы увидим в нем некоторый текст, отдельные слова которого выделены другим цветом, а одно из слов подсвечено специальным маркером. Маркер можно перемещать "стрелками" или мышью. Им помечаются ключевые слова, которые имеют собственную "расшифровку". Для того, чтобы получить расшифровку нужного понятия надо выбрать его клавишей Enter или фиксацией кнопки мыши. "Зайдем" в понятие "отчетный период". На экране появится следующий параграф помощи также с выделенными ключевыми словами. Можно выбрать новое понятие и прочитать про него. Для возврата в предыдущей параграф нужно нажать клавишу BackSpace. Для выхода из помощи - клавишу Esc. 

Можете "полазить" по текстам помощи и почитать то, что они содержат. Если Вам все ясно - переходите к следующей главе книги. Мы же освоим калькулятор.







 Ну вот еще! - скажет читатель. Я приобретал программу, чтобы она считала за меня, а тут предлагают учить калькулятор. Все так. Программа будет почти все считать за Вас. Однако, для этого надо приложить известные усилия и кое-где при выполнении операций нам что-то придется считать вручную. 

Итак, работаем с калькулятором. В отличие от привычного читателю настольного или карманного, калькулятор встроенный в "Финансы без проблем" основан не на последовательном вводе чисел, операций и промежуточных результатах, а позволяет сразу ввести расчетную формулу, которая может включать числа, знаки арифметических операций (+,-,*,/), скобки, а также весь набор встроенных функций и определенных к моменту вычислений переменных. Пусть Вас не смущают последние два понятия - подробнее мы о них поговорим позже. Для выполнения расчета надо просто набрать с клавиатуры расчетную формулу и нажать Enter. Например: 

23.07+5*(2345.45-567.947)/45.2 

Не забывайте использовать точку вместо запятой в качестве разделителя целых и дробных чисел.







После вычисления курсор опять перешел в начало нашей формулы. Для повторных вычислений можно набирать новую формулу. Старая формула автоматически сотрется. Если Вам важно сохранить какие-либо ее фрагменты можно просто "подвигать" курсор вправо-влево. В этом случае старое содержимое не сотрется и Вы можете исправить его так, как нужно. При редактировании в калькуляторе и везде в программе поддерживается режим вставки. Для удаления ненужных символов в поле ввода можно использовать клавиши BackSpace или Del. 

В дальнейшем Вам иногда придется использовать калькулятор при вводе числовых значений сумм операций. В этом случае, полученный в результате расчетов результат можно "отправить" в поле ввода текущего значения нажав клавишу F10. Клавишами "вверх-вниз" калькулятор можно "передвинуть" в нужное место экрана. Выйдем из калькулятора, нажав Esc. 

Теперь, не очень вдаваясь в бухгалтерскую суть выполняемых действий попробуем ввести какие-нибудь операции и получить отчеты. Войдем в режим ввода/редактирования операций. Мы пока не знаем, что именно программа "понимает" под словом операция. Чтобы понять просто введем какую-нибудь операцию. 

Однако, прежде чем это будет сделано, вызвав помощь познакомьтесь со списком активных клавиш, используемых при работе с реестром операций. Ознакомившись, нажмите F7, Insert или щелкните мышью на пиктограмме "Создание нового объекта". На экране появится поле ввода даты операции в котором отобразится значение 1. Обратите внимание, что в заголовке окна реестра операций написано "Операции в январе 1995" (... 1996, 1997 смотря какой год ныне "на дворе", то есть в системной дате компьютера). В дальнейшем мы научимся устанавливать нужный нам год и месяц выполнения операции, а пока оставим 1-ое число без изменений просто нажав Enter. 

На экране появится меню: 







"Финансы без проблем" должны "знать" в каком порядке рассматривать операцию по отношению к другим. В большинстве случаев, порядок операций в течении дня неважен и здесь достаточно указать - "в общем порядке". Однако, некоторые действия должны быть жестко привязаны либо к началу дня, либо к концу дня. Пример: курс валюты мы узнаем примерно в 12.00. К этому моменту мы могли уже ввести какие-то операции, связанные с валютой. Однако, котировать ее мы должны по новому курсу для всех операций текущего дня. В этом случае при вводе операции надо выбрать "в начале дня" и "Финансы без проблем" при выполнении расчетов будут считать, что новый курс установлен прежде, чем выполнены все операции со статусом "в общем порядке". Другой пример - "закрытие" счетов и определение финансового результата мы должны провести последней операцией текущего квартала. Поэтому ей нужно присвоить статус "в конце дня". Если даже после этого будут вводиться проводки за тот же день, изменяющие значения связанных с указанной процедурой счетов, но со статусом "в общем порядке", то "Финансы без проблем" учтут изменения и все "закроют" правильно. 

Сейчас же мы выберем "в общем порядке". На экране появится меню следующего содержания: 







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





Выберем "от реализации". 







Программа, как явно следует из текста подсказки, просит нас ввести ставку НДС заложенную в сумму реализации. Введем 20 и нажмем Enter. Теперь просит ввести ставку спецналога. Введем 3. Поле ввода переместится в столбец суммы. Ну-что ж, предположим, что мы что-то реализовали на сумму 1230000. Введем это число и нажмем Enter. Курсор остановился в следующей строке и программа явно хочет, чтобы мы что-то сюда набрали. Наберем "оплачены работы, выполненные в декабре" и нажмем Enter. Ввод завершился. Введенная нами операция подсвечена инверсным цветом, а часть построенной фразы выделена красным (конечно, последнее видят только те, у кого цветной монитор). 

Что же означает сконструированная нами и программой фраза. Нажмем F6. 







На экране появилось окно со списком проводок, суммы большинства из которых записаны в виде формул с несколько странными аббревиатурами входящих переменных. Если посмотреть внимательно, то обнаружится, что есть в них какая-то закономерность очень напоминающая формулы "выделения" НДС и спецналога из включающей их суммы. Нажмем Esc, войдем в меню (F10), далее в подменю пункта "Опции", нажмем Enter на пункте "Проводки в динамике" и после возврата в окно реестра операций опять нажмем F6. Формулы исчезли и теперь перед нами проводки с суммами. 







Очень интересно. Откуда ни возьмись, появилось 6 проводок функционально связанных с одной суммой. Первая очевидным образом отражает приход в кассу, вторая и третья начисляют НДС и спецналог, четвертая относит сумму, очищенную от НДС и спецналога на финансовый результат, пятая судя по сумме (1,000,000*0.008) начисляет налог на пользователей автомобильных дорог по ставке принятой в Москве (0.8%), а шестая сразу же списывает эти затраты на убытки. 

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

Все в наших руках. Мы можем заставить программу делать именно такие проводки, какие нам нужно и использовать такие нормативы, которые действуют в КОНКРЕТНОЕ время и в КОНКРЕТНОМ регионе. Собственно говоря, вся эта книга посвящена тому, КАК это сделать. Пока же ограничимся освоением элементарных навыков работы с программой. 

Продолжим ввод операций. На этот раз выполним операцию Зарплата -> начисление -> индивидуальное штатным. Появилось окно: 



 



Судя по всему, программа просит нас выбрать сотрудника, которому начисляется зарплата. Предположим, у нас работает некто Чистомытов Дмитрий Владимирович и зарплату мы начисляем именно ему. Нажмем F4 или Tab. На номере субсчета появился курсор. Значит можно редактировать. Изменим 33 на 001, нажмем Enter и вместо слова "сотрудник" напишем "Чистомытов". Явно, что имя и отчество в одной строке узкого окошка не поместятся. Нажмем стрелку вниз. "Полоска" ввода переместилась в следующую строку. Это то, что нужно. Напишем здесь Дмитрий, а строкой ниже "Владимирович" и, наконец, нажмем Enter. Теперь есть из кого выбирать. Нажмем Enter. Окно списка сотрудников исчезло и курсор перешел в поле ввода суммы. Введем сюда 300000, а в поле комментария - "Начислено Чистомытову за январь". Ввод операции закончился. Нажмем F6. Опять перед нами огромный список проводок. Судя по всему начислена масса налогов по зарплате и сразу зачтены затраты на нее в финансовом результате предприятия. Тут уж совсем непонятно откуда что взялось. 

Однако, продолжим. По той же схеме начислим зарплату Комлеровичу Николаю Васильевичу. Однако, теперь при появлении окна списка сотрудников вместо F4 нажмем F7 и в появившейся пустой строке ввода введем 70-002 и далее фамилию, имя и отчество на разных строках. В качестве суммы введем 200000. 

Как перемещаться по списку операций? "Стрелками" переведите селектор реестра операций (полоску инверсного цвета) на первую операцию. Обратите внимание на то, что пометка (галочка) на правой стороне окна реестра операций также меняет свое положение при смене активной (помеченной селектором) операции. Это так называемый лифт. Он используется для: 

1. указания на относительное местоположение текущей 

операции в списке; 

2. для быстрого перемещения по списку операций. 

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

Home        - в начало списка; 

End           - в конец списка; 

PageUp      - на страницу вверх; 

PageDown  - на страницу вниз. 

Для поиска операции по номеру можно использовать следующий прием. Нажмите клавишу Alt, не отпуская ее введите номер операции, а затем отпустите Alt. Селектор операции переместится на операцию с заданным номером. Если операции с указанным Вами номером в списке нет, то селектор останется на месте. 

Для перемещения к операциям нужной даты надо просто набрать ее на клавиатуре. Если за указанную дату операции вводились - селектор остановится на первой из них. 

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

Для выборочной корректировки отдельных реквизитов можно использовать мышь. Если необходимо откорректировать только дату или только сумму операции щелкните мышью на нужном реквизите - дате или операции. Выборочная корректировка удобна в тех случаях, когда смысл операции остается тем же, но нужно внести исправления в сумму, дату или комментарий. Измените дату первой операции на 4 января, а второй и третьей - на 25. 

Сведения для особо ленивых. Цифры можно вводить не только с клавиатуры, но и мышью, выбирая при активном поле ввода числового параметра нужные значения на "линейке" внизу экрана и вместо клавиши Enter пользуясь пиктограммой с аналогичным названием. 

Теперь попробуем скорректировать сумму. Изменим, например, в зарплате, начисленной Чистомытову, значение суммы операции с 300000 на 400000. Поскольку корректировка содержания операции не нужна щелкнем мышью на сумме. После ввода новой суммы программа предложит откорректировать поле комментария. 

Если сейчас вновь обратиться к построенным проводкам мы увидим, что корреспонденции счетов не изменились, но все суммы стали иными. 

Итак, мы умеем вводить и корректировать операции. Теперь поучимся их удалять. Чтобы не портить то, что уже введено, начнем ввод еще одной операции, но при вводе даты нажмем на Esc. Процесс ввода прекратится, но запись о "пустой" операции останется в реестре. Она нам не нужна. Нажмите F8, Delete или щелкните мышью на пиктограмме "Удаление объекта" и в ответ на запрос программы: 



Выберите "Да". Операция удалена. 

Освоим еще одну типовую процедуру работы с программой - печать информационных объектов. Она вызывается нажатием клавиши F5 или щелчком мыши на пиктограмме с изображением принтера. На экране появится меню: 



Распечатайте реестр введенных операций вместе с проводками, утвердительно ответив на запрос "Печатать с проводками ?". Если принтер не подключен, программа в "красной" строке внизу экрана "скажет": "Принтер не отвечает". В этом случае нажмите Esc, разберитесь с принтером (поставьте бумагу, включите в сеть, установите ONLINE) и повторите процедуру заново. Выбрав нужный пункт меню печати можно вывести реестр в обычный текстовый файл, доступный для редактирования и просмотра любым текстовым редактором, например, встроенным в Нортон Коммандер. 

Итак, мы рассмотрели основные типовые процедуры работы с реестром операций. Не разобранными остались только операции перестановки операций (F9), установки фильтра (F2) и работы с первичным документом. Первую мы оставляем для самостоятельного освоения читателем, к последней вернемся впоследствии, а сейчас рассмотрим способы установки фильтра.

Позиционируйте селектор операции на операцию начисления зарплаты Комлеровичу и нажмите F2. На экране появится окно со следующим содержанием: 



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







Поскольку мы не хотим больше уточнять смысл отбираемых операций нам нужно очистить остальные элементы фильтра. Нажмем Del. Опять появилось меню разделов учета. Опять выберем "Зарплата". При повторном появлении окна меню уточнения типа операции нажмем End. Теперь в окне фильтра отображаются только диапазоны дат и сумм, а также слово "Зарплата". Программа предлагает нам ввести ключевое слово комментария. Не будем этого делать и просто нажмем End. На экране остались только операции начисления зарплаты. Теперь для того, чтобы опять вернуться к просмотру полного списка операций надо повторно нажать F2. Чуть-чуть мудрено. Но ничего, при небольшом навыке Вы будете устанавливать фильтры как Вам вздумается. Попробуйте пофильтровать данные, например, по диапазону сумм и дат. 

Итак, мы научились вводить, редактировать, фильтровать и печатать операции, просматривать списки связанных с ними проводок. Однако все выполняемые до сих пор действия датировались январем. Как перейти в другой месяц? 

"Финансы без проблем" позволяют пользователю работать с данными всего финансового года. В его пределах доступны все месяцы. Никаких специальных действий по переносу сальдо между месяцами выполнять не нужно - будучи установленными на начало года или на начало любого месяца они автоматически пересчитываются программой для всех последующих. 

При работе с реестром операций для перехода из одного месяца в другой используется программный календарь. Он размещен в меню "Документы". 

 





Обратите внимание, что "напротив" января стоит цифра 3. Действительно, мы ввели в январе ровно три операции. Календарь показывает сколько операций в каждом месяце введено. 

Для перехода в другой месяц достаточно просто выбрать его, позиционировав курсор на нужный месяц и нажав Enter. Перейдите в февральский реестр операций. Как видите он пуст. Все правильно - мы пока вводили операции только в январе. Теперь ничто не мешает нам выполнять операции в феврале, а потом вернуться назад в январь. 

Назначение календаря более широко, чем просто возможность перехода из месяца в месяц. С его помощью можно установить границы отчетного периода. Отчетным периодом в "Финансах без проблем" может быть любой интервал времени в пределах календарного года - месяц, квартал, полугодие, год, несколько дней и т.д. 

Обратите внимание на то, что в календаре поставлена "скобка". Верхняя позиция "скобки" указывает на нижнюю границу отчетного периода, а нижняя - на верхнюю границу. Кроме того, напротив нижней границы указано число 1, а на против верхней - 31. Это означает, что в настоящий момент установлен отчетный период с 1 января по 31 декабря - то есть полный календарный год. Как изменить границы отчетного периода, например, сделать отчетным периодом 2-ой квартал? Установите курсор меню на строку "Апрель" и нажмите клавишу F4. На экране появился календарь за Апрель. 







Программа предлагает нам указать дату начала периода. Выберем 1-ое. Верхняя граница "скобки" переместилась на апрель. Переместим курсор на июнь и нажмем F5. Опять появился календарь. Выберем 30-ое. Нижняя граница "скобки" переместилась к июню. 







Теперь отчетным периодом является 2-ой квартал. В отчетных формах входящее сальдо будет указываться на 1 апреля, исходящее - на 30 июня, а обороты будут рассчитываться за указанный период. 

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

Таким образом, использование календаря позволяет гибко управлять границами отчетного периода. Отметим, что при необходимости можно получать отчеты за период от одного дня до целого года и даже часа! 

Установите отчетным периодом целый год. 

Теперь попробуем провести анализ введенной информации. "Финансы без проблем" предоставляют пользователю возможность в любой момент получить сальдо и обороты счетов, задействованных в учете. Основным режимом работы с выходной информацией является работа с оборотным балансом. Для вызова данного режима можно нажать клавиатурную комбинацию Alt-F3 или щелкнуть мышью на второй слева пиктограмме. 

После непродолжительного "раздумья" компьютера на экране появится программное представление оборотного баланса. Полистаем его клавишами PageUp, PageDown. Если Вы вводили операции в соответствии с изложением книги, то откроется следующая картина: 







Не удивляйтесь, что представление оборотного баланса несколько отличается от того, к которому Вы привыкли. Здесь вместо традиционных шести числовых колонок (входящее сальдо: дебет, кредит; обороты: дебет, кредит; исходящее сальдо: дебет, кредит) отображены лишь четыре. Входящее и исходящее сальдо (Н.остаток и К.остаток от слов "Начальный" и "Конечный") представлены в "свернутом" виде, то есть кредитовые сальдо показаны со знаком минус. Это, конечно, не означает, что программа "вуалирует" дебиторскую/кредиторскую задолженность - там где надо (например в балансе) состояние расчетов показывается "развернуто". Здесь же, для экономии места на экране приведен свернутый вариант сальдо. 

Как работать с оборотным балансом. Для перемещения по нему полностью пригодны рекомендации данные при описании работы с реестром операций - здесь "работают" те же клавиши, так же можно использовать Alt-переход к нужному счету, очень удобно взаимодействие с лифтом (кстати, самое время поупражняться в его использовании). 

Оборотный баланс является стартовой позицией анализа данных в "Финансах без проблем". В этом одно из значительных отличий компьютерного учета от ручного, при котором выход на оборотный баланс является результатом, целью выполнения учетных процедур. Отличие объясняется тем, что при компьютерном учете вычисления выполняются быстро - компьютеру все равно когда и сколько проводок "перемалывать". Поэтому пользователю "Финансов без проблем" сразу предлагается "ознакомиться" с конечными хозяйственными результатами, полной картиной финансового состояния на текущий момент. 

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

1. анализ истории счета; 

2. анализ корреспонденций счета; 

3. анализ параметров счета. 

Обсуждение понятия "параметров счета" и соответствующего раздела анализа мы оставим до "лучших времен" и вернемся к нему тогда, когда освоим азы настройки программы на специфику учетных операций предприятия. Сейчас же сосредоточимся на первых двух способах анализа. 

Сначала проведем анализ истории счета. Подведем селектор записи оборотного баланса к счету 46 "Реализация" и нажмем на Enter или щелкнем мышью на кнопке Анализ расположенной в левом нижнем углу экрана. На дисплее отобразится следующая форма: 







В первой колонке формы отображается номер операции по порядку, выбранный из реестра операций. Вторая колонка содержит дату операции. Третья - счет, с которым корреспондировал основной счет (в данном случае - 46-ой). Четвертая показывает наименование корреспондирующего счета (субсчета), указанное в плане счетов. Пятая и шестая колонки показывают величину оборота основного счета, а седьмая - динамику сальдо основного счета. Как мы уже знаем, кредитовое сальдо отображается со знаком минус. 

Вернемся в оборотный баланс, нажав клавишу Esc или щелкнув мышью на "кнопке" закрытия окна, и проанализируем счет 68. Нам откроется следующая картина: 







Если нас заинтересовала конкретная операция поставим на нее селектор списка и нажмем Enter. На экране появится окно, содержащее запись о данной операции. Если еще раз нажать Enter, то мы попадем в реестр операций. Если оказалось, что данная операция ошибочна - можно тут же ее скорректировать. После выхода из реестра операций оборотный баланс будет пересчитан и мы увидим изменившиеся величины сальдо и оборотов счетов. Попробуйте проделать корректировку суммы второй операции (начисление зарплаты Чистомытову) заменив значение 400000 на 500000. Вернувшись в оборотный баланс Вы увидите, что сальдо и обороты 68, 69, 70, 80 счетов изменились. Также изменились обороты 20 счета. 

Таким образом, при анализе истории счета мы можем видеть как "исторически" формировалось сальдо счета при выполнении операций. Здесь полностью видна "динамика" развития событий, однако нет сведений подобных тем, которые мы привыкли видеть в главной книге, а именно данных о суммарном движении средств между разными счетами. Посмотрим как решается эта задача. 

Проведем анализ корреспонденций счета 80. Для этого, спозиционируем на нем селектор списка оборотного баланса и нажмем клавишу F9 или щелкнем мышью на кнопке Корреспонденции. В появившемся на экране окне будет представлена следующая информация: 







Как видно, это некоторым образом трансформированное представление главной книги. Отдельно показано сальдо выбранного счета, а обороты по дебету и кредиту приведены с разбивкой по счетам, корреспондирующим с главным. Для получения более компактного представления можно нажать клавишу F6. В этом случае вся информация по субсчетам будет "свернута" до итоговой корреспонденции с синтетическим счетом. 







Обращаем Ваше внимание на то, что любую из "расшифровок", а также оборотный баланс можно распечатать на принтере или вывести в текстовый файл. Это можно сделать аналогично тому, как мы это делали при распечатке списка операций. 

При проведении анализа часто требуется информация только о конкретном наборе счетов. Так например, множество счетов из стандартной поставки никак не были задействованы в проведенных нами операциях и их отображение на экране нам не нужно. "Финансы без проблем" предоставляют пользователю удобную возможность "фильтрации" отображаемой итоговой информации. Для того, чтобы оставить на экране только интересующие Вас счета оборотного баланса необходимо пометить их клавишей "пробел", а потом нажать клавишу F6. На экране останутся только помеченные счета. Повторное нажатие F6 "снимет" фильтр. Снятие пометки счета вызывается повторным нажатием пробела. Отфильтруйте счета 20, 46, 50, 68, 69, 70, 80. Очень удобно - вся нужная информация оказалась на одном экране. 







Продолжим знакомство с разделами программы. В меню "Документы" выберем пункт "Баланс". После непродолжительного "раздумья" программа отобразит на экране информацию о сальдо счетов с учетом их статуса. Обратите внимание - это не форма N 1. Здесь представлено то, что является балансом на самом деле - сальдо счетов на начало и конец периода, разнесенные в актив или пассив в соответствии со своим статусом. 

Не расстраивайтесь, если Вам что-то не нравится в этой форме. В дальнейшем мы увидим как настроить ее таким образом, чтобы она соответствовала Вашим требованиям. В особенности это касается тех, у кого числа в пассиве отображены со знаком минус - в одном из вариантов поставки программы есть легко устранимая ошибка в настройке формы. "Встроенный" баланс на самом деле не является встроенным - это обычная выходная форма, правила построения которой описаны на специальном языке генератора отчетов "Финансов без проблем" который мы освоим в последующих главах. То, что "Баланс" занимает место в главном меню, а не в составе файлов форм - исторический анахронизм унаследованный от прошлых версий программы. 

Перейдем теперь к рассмотрению файлов форм. Файлы форм - это перечень отчетов, определений первичных документов и так называемых файлов-коэффициентов описанных на языке "Финансов без проблем". В дальнейшем изложении мы подробно рассмотрим как пользоваться этим языком для описания правил построения первичных документов, отчетов и расчетных алгоритмов отражающих различные учетные схемы. Сейчас же наше рассмотрение будет строго утилитарным. Мы попробуем построить какие-либо отчеты. 

Если "полистать" перечень файлов форм, то можно увидеть, что они разбиты на несколько групп: 

1. Отчетные формы; 

2. Файлы-коэффициенты; 

3. Формы первичных документов; 

4. Истории; 

5. Общие определения. 

Сейчас нас интересуют только отчетные формы и истории. Список файлов форм представлен в виде меню. Найдем в нем строку "FORM1 * Баланс пpедпpиятия (фоpма 1)" спозиционируем на нее курсор и нажмем Enter. Очень скоро мы увидим перед собой знакомую форму N 1. Полистаем ее. Как ни странно баланс сходится. Ничего удивительного - во введенных нами операциях не было таких, которые оставили бы сальдо на счетах не входящих в те или иные строки баланса. Вспомните, что проводки введенных нами операций программа составила таким образом, чтобы счет 46 был закрыт. 

Все бы хорошо, но пока непонятно: 

1. откуда программа знает КАК свести баланс; 

2. как сделать так, чтобы на титульном листе отображались сведения не о "Хакерс Дизайн", а о Вашем предприятии.

 Все это мы узнаем в дальнейшем. А пока обратите внимание, что построенная форма для просмотра загружена в текстовый редактор. Это текстовый редактор "Финансов без проблем". Он очень прост. Мы предполагаем, что Вы когда-либо работали с программами редактирования текстов и Вам не надо объяснять основных связанных с ними понятий. Просто почитайте соответствующий текст помощи. Единственное чего там нет, но о чем Вы, наверное, уже догадались так это о том, что для быстрого перемещения по тексту можно использовать управляемый мышью лифт. 

Можете выполнить другие отчетные формы или формы-истории. Мы не рекомендуем Вам пытаться выполнять файлы-коэффициенты или формы первичных документов - ничего не выйдет - здесь они правильно не отработают. Как, откуда и когда они вызываются мы рассмотрим позже. 

Итак, мы, в целом, освоили "операторскую" работу с программой. Однако, прежде чем переходить к более серьезным вещам поподробнее самостоятельно разберитесь с разделом меню "Опции". Для этого просто вызовите список опций, нажмите 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ации.