Account 2000 = Бухгалтерия + Тoрговля+
Кадры +
SQL Server
Account 2000 поддерживает конфигурации 1С:
Бухгалтерии
Стоимость с внедрением около $1000-$2000
Account 2000 это программа бухгалтерского и финансового учета (склад, платежи и т.д.), которая совместима с 1С: Бухгалтерией. Программа выполнена на базе Microsoft SQL, производительная система проводок на 20 уровней аналитики реализована в хранимых процедурах на Transact SQL, так же вы можете использовать прямые SQL-запросы для составления отчетов. Макроязык Account совместим сверху вниз с 1С: Бухгалтерией, программа также позволяет подключать созданные для 1С настройки. Вдобавок Account содержит много новых команд и функций, необходимых для корпоративных пользователей, в частности Account поддерживает возможность организации секретности создания кросс-отчетов, позволяет иметь раздельные планы счетов для разных юрлиц и др. При большом богатстве различных функций, программа использует очень лаконичный макроязык. Обычно, даже довольно сложные скрипты редко содержат больше 100 строк программы. В основном время тратится на разработку учетной политики, а не на программирование.
Account имеет систему интеграции со складскими программами. Account прозрачно для пользователя может использовать документы и аналитические справочники оперативного контура вашей складской программы. Следует отметить, что в Account реализован полнофункциональный склад, чаще всего интеграция полезна при постепенном переходе со старой программы. Account поддерживает механизм секретности и разделения привилегий по ролям пользователей.
Судя по заявлениям клиентов, программа Account 2000 благополучно пережила проблему 2000г.
К концу 2000г программа получила следующие функции:
Как отмечалось, ядро Account 2000 реализовано в хранимых процедурах MS SQL. Это позволяет достигнуть очень высокой скорости проводок. При 50000 аналитических разрезов в сальдовой таблице (каждый разрез на 20 уровней) скорость выполнения всех проводок к документу, требующих изменения 1000 записей в сальдо, составляет 1-2 сек. Эта цифра приведена для накладной в 10-20 позиций, для накладной в 60-100 позиций время выполнения проводок будет около 2-3 сек. Эти цифры соответствуют правильно сконфигурированному серверу MS SQL с P200 и 120M памяти. При увеличении мощности сервера обычно скорость линейно возрастает. Проводки формируются в транзакциях, поэтому в случае сбоя оборудования в момент работы пользователей MS SQL должен автоматически откатить незаконченные операции и восстановить БД.
Интерпретатор скриптов Account 2000 имеет встроенный компилятор П-кода. Скомпилированный код, представляет собой массив указателей на функции-исполнители команд, что позволяет достигнуть высокой скорости интерпретации. Впервые такая технология была применена в FoxPro. Она оказалась настолько эффективной, что FoxPro иногда обгонял по скорости компиляторы в код процессора. Тестовый пример для Account ниже выполняется за 5 сек на Celeron-450. Таким образом, чистая скорость интерпретации Account 2000 достигает 20.000-30.000 строк скрипта в секунду. При этом скорость компиляции среднего скрипта обычно не превышает 0,5-1 сек.
!п1=1
!ЦИКЛ п1<100000
!п1=п1+1
!ВОЗВРАТ
Однако следует учесть, что скорость манипуляций программы с БД ограничена возможностями MS SQL. Тем не менее, и эта скорость очень высока. Тестовый пример ниже демонстрирует алгоритм формирования отчета, выводящего список всех объектов БД (в нашем примере 6000 строк). Пример выполнился за 2 сек на Celeron-450. Таким образом, скорость обращения к БД у Account 2000 достигает 3000 команд в секунду. Примерно такую же скорость выборки данных показывает Microsoft SQL Query Tool прямо на сервере.
!п1="select UDN as КОД, Name as НАЗВАНИЕ, No as НО
from Docs order by UDN"
!выбрать ряд п1
[пКОД] [пНазвание] [пНО]
!следующий ряд
Следует отметить, что пользователь может управлять всеми возможностями MS SQL для повышения скорости и надежности в многопользовательском режиме (создавать новые индексы, управлять блокировками и т.д.). Также Account 2000 позволяет вызывать хранимые процедуры для создания отчетов, а также использовать серию команд на Transact-SQL для этих нужд.
Разработчики продолжают работы по оптимизации программы. Жизнь коротка, не тратьте ее в ожидании ответа программы.
Подневный учет без расчетов и замедления
Помимо 5 уровней аналитики, Account 2000 поддерживает подневный учет в реальном времени. Иными словами вы можете установить рабочий период в виде интервала двух любых дат без расчета итогов. Данные по проводкам и сальдо рассчитываются сразу при проведении документов. Поэтому команда !ВРЕМЕННЫЙ РАССЧЕТ срабатывает мгновенно, т.к. на самом деле ничего не рассчитывает, а только переключает интервал дат для команд СКК, СКД и др.
Макрокоманда формирования проводок (5 уровней аналитики)
Для формирования проводок служит следующая макрокоманда:
!ПРОВОДКА дат, счд, счк, сум, текст, сд1, ск1, кол, вал, сумвал, жур, сд2, ск2, сд3, ск3, сд4, ск4, сд5, ск5
Где дат – дата проводки, счд – счет дебета, счк – счет кредита, сум – сумма проводки, текст – текст проводки, сд1 – субконто дебета 1 уровня, ск1 - субконто кредита 1 уровня, кол – количество, вал – валюта проводки, сумвал – сумма в валюте, жур – журнал операций, сд2 – субконто дебета 2 уровня, ск2 - субконто кредита 2 уровня, сд3 – субконто дебета 3 уровня, ск3 - субконто кредита 3 уровня, сд4 – субконто дебета 4 уровня, ск4 - субконто кредита 4 уровня, сд5 – субконто дебета 5 уровня, ск5 - субконто кредита 5 уровня.
Макрокоманды выборки сальдовой информации (5 уровней аналитики)
Для выборки сальдовой и оборотной информации за установленный период расчетов итогов используются следующие макрокоманды:
СНДсч[:[c1][:[c2][:[c3][:[c4][:[c5]]]]]][~вал[^B]][Н] – сальдо на начало периода дебетовое;
СНКсч[:[c1][:[c2][:[c3][:[c4][:[c5]]]]]][~вал[^B]][Н] – сальдо на начало периода кредитовое;
СКДсч[:[c1][:[c2][:[c3][:[c4][:[c5]]]]]][~вал[^B]][Н] – сальдо на конец периода дебетовое;
СККсч[:[c1][:[c2][:[c3][:[c4][:[c5]]]]]][~вал[^B]][Н] – сальдо на конец периода кредитовое;
ДОсч[:[c1][:[c2][:[c3][:[c4][:[c5]]]]]][~вал[^B]][Н] – дебетовый оборот за период;
КОсч[:[c1][:[c2][:[c3][:[c4][:[c5]]]]]][~вал[^B]][Н] – кредитовый оборот за период;
ОБсч1:сч2 – Обороты за период в дебет счета сч1 с кредита счета сч2.
Где сч – счет или субсчет, для которого будут выдаваться результаты, с1, с2, с3, с4 и с5 – субконто, соответственно, на 1 уровне аналитики, на 2 уровне аналитики, на 3 уровне аналитики, на 4 уровне аналитики и на 5 уровне аналитики для счета сч.
Последняя часть макрокоманд ~вал^B служит для валютного учета. Если Вы хотите получить информацию в рублевом эквиваленте для валюты вал, тогда добавьте конструкцию ~вал к макрокоманде. Если Вы хотите получить данные в валюте вал, добавьте конструкцию ~вал^B.
Если Вы хотите получить результаты по счету в целом, вы можете опустить часть с аналитиками. Если Вы хотите пропустить какую-либо аналитику, нужно пропускать ввод субконто, но оставлять двоеточия. Например, СНД41:&1::&3.
Чтобы получить информацию в натуральном выражении (количество) нужно добавить в конце макрокоманды букву “Н”. Например, СНД41:&1::&3Н.
Для получения развернутого сальдо по субконто по счету нужно ставить только двоеточие из всей конструкции для аналитик после счета. Например, СНД41:.
Для получения развернутого сальдо по всем субсчетам счета нужно счет указывать с точкой на конце. Например, СНД41.:&1::&3Н.
Макрокоманды обработки субконто (5 уровней аналитики)
Для обработки субконто служит следующая конструкция:
!ВЫБРАТЬ СУБКОНТО ВИД {n, сч~m} [;k] ВСЕ
[команды на макроязыке]
[!ВЫБРАТЬ СУБКОНТО ВИД {n1, сч1~m1} ;k1 ВСЕ
команды на макроязыке
!СЛЕДУЮЩИЙ СУБКОНТО]
команды на макроязыке
!СЛЕДУЮЩИЙ СУБКОНТО
n, n1 – номер субконто (он задается в настройках субконто в меню "Администратор"),
сч, сч1 – счет (сч и сч1 могут совпадать), m, m1 – номер аналитики (m и m1 могут совпадать),
k, k1 – псевдоним для цикла.
Эта конструкция может быть вложенной.
В случае конструкции, где указывается только номер субконто, это будет просто цикл по всем субконто вида n. Для каждого субконто вида n по очереди выполняются команды, которые указаны в теле цикла. Если Вы не используете вложенной конструкции, то можно не указывать псевдоним. В таком случае, макрокоманда & возвращает указатель на текущее субконто. Если используете, тогда указание псевдонима обязательно. В этом случае для получения указателя на текущее субконто в цикле, где указан псевдоним k, нужно использовать макрокоманду &~k. При такой конструкции перебираются все субконто, даже те, которые никогда не использовались в проводках.
Лучше, по возможности, всегда использовать конструкцию с указанием счета - сч и номера аналитики - m. В такой конструкции перебираются только те субконто, которые фигурировали в проводках с данным счетом в аналитике номер m. Эта конструкция в большинстве случаев работает намного быстрее, чем предыдущая. Для получения указателей на текущие субконто нужно использовать те же макрокоманды, что и в предыдущем варианте.
Продемонстрирую использование этой конструкции на следующем примере. Пусть у Вас настроен план счетов следующим образом:
Счет |
1 Аналитика |
2 Аналитика |
3 Аналитика |
41 |
Товар |
Склад |
Партия |
Если Вы хотите получить отчет по остаткам товара на складах товара одновременно в разрезе всех трех аналитик (товара, склада и партии), Вам нужно будет написать следующий модуль:
!ВЫБРАТЬ СУБКОНТО ВИД "41~1"; "1" ВСЕ
!ВЫБРАТЬ СУБКОНТО ВИД "41~2"; "2" ВСЕ
!ВЫБРАТЬ СУБКОНТО ВИД "41~3"; "3" ВСЕ
!п1=СКД41:&1:&2:&3Н
!СООБЩИТЬ "Товар -"+СН&1+", Склад -"+СН&2+", Партия - "+СН&3+", Остаток"+п1
!СЛЕДУЮЩИЙ СУБКОНТО
!СЛЕДУЮЩИЙ СУБКОНТО
!СЛЕДУЮЩИЙ СУБКОНТО
В этом модуле перебираются поочередно все товары, склады и партии, которые фигурировали в проводках по 41 счету и для каждой такой комбинации выводится сообщение: "Товар – наименование товара, Склад – наименование склада, Партия – наименование партии, Остаток – количество, оставшееся от партии на складе товара".
В данном примере Вы наверняка заметили новую, пока еще не описанную, макрокоманду – СН. Она относится к группе макрокоманд, с помощью которых можно получать дополнительные сведения о субконто. Кроме макрокоманды СН, к этой группе относятся макрокоманды СП и СЦ.
Макрокоманда СН{n:m,&k} возвращает наименование субконто с кодом n:m, или наименование субконто, которое в данный момент текущее в цикле с псевдонимом k.
Макрокоманда СЦ{n:m,&k} возвращает наименование субконто с кодом n:m, или наименование субконто, которое в данный момент текущее в цикле с псевдонимом k.
Макрокоманда СП{n:m,&k}.i возвращает параметр номер i субконто с кодом n:m, или субконто, которое в данный момент текущее в цикле с псевдонимом k.
Макрокоманды для SQL-запросов к данным. (Настоящая эффективность настоящего SQL. Отладчик.)
Account 2000 является открытой даже на системном уровне. Таблицы данных программы описаны (описание модели хранения объектов, описание таблиц проводок и сальдо) и вы можете строить SQL-запросы к ним из пользовательского генератора форм программы.
Рассмотрим простейший SQL-запрос. Отчет выводящий список платежных документов за указанный период.
Поясним на примере как строится отчет по платежным документам. До того как вы приступите к данному примеру, вам необходима рабочая станция где установлен клиент Account и Microsoft SQL Enterprise Manager (далее Enterprise).
Составление SQL-запроса в Microsoft SQL Enterprise Manager
Создание формы и программы для обслуживания SQL-запроса
Использование отладчика
!п1="1.1.99"
!п2="31.8.99"
!п10="
select Date as ДАТА, Name as НАЗВАНИЕ, No as НОМЕР,SummTotal as
СУММА
from sPays
where Date>='"+ДАТАСЕРВ(п1)+"' and Date<='"
+ДАТАСЕРВ(п2)+"'
order by Date"
!выбрать ряд п10
[пДата] [пНазвание] [пНомер E0] [пСумма]
!следующий ряд
Отладчик удобен для отработки различных конструкций макроязыка без создания печатных форм
Подробнее об использовании отладчика см. тут.
Account 2000 позволяет иметь форму запроса параметров для отчетов, а не пользоваться серией команд !ВВЕСТИ. Кроме того, программа позволяет администрировать доступ пользователей к отчетам (пользователь просто не видит в списке отчет на который у него нет прав). На рис. приведена форма запроса параметров для отчета "Приход товара по приемным актам" в режиме разработки.
Вдобавок у программы есть специальный ключ запуска, который позволяет сразу попасть в список отчетов, это облегчает работу тем, кто пользуется программой только для просмотра отчетности. Этот вариант особенно удобен тем, кто формирует проводки из оперативного контура Ultima-S, а произвольные отчеты строит в Account 2000 (Ultima-S и Account 2000 совместимы по базе данных)
Макрокоманды для составления кросс-отчетов и организации массивов
Account содержит ряд новых команд, которые позволяют строить отчеты принципиального нового типа, это кросс-отчеты. В кросс-отчетах, применяется вертикальная группировка аналитики. На рис. приведен такой отчет, с боку указаны отдельные накладные, а сверху товары из них. Обратите внимание, что все колонки кросс-отчета в общем случае не помещаются на одном листе, поэтому отчет может "расти" при увеличении количества данных не только в длину, но и в ширину.
Среди новых команд обслуживающих кросс-отчеты, есть команды позволяющие из ряда переменных использовать как массив. В начале статьи приведен рис. на котором виден процесс разработки приведенного отчета. Следует заметить, что переменные п1-п7, пп1-пп7 и пт1-пт7 образуют три массива. Приведем примеры команд.
!ОЧИСТИТЬ 1;пколон;"Т"
- Данная команда очищает массив переменных пт1-пт7!ППП ПКол; П_КОЛИЧЕСТВО -
Данная команда заносит значение П_КОЛИЧЕСТВО в переменную п1-п7 в зависимости от значения переменной ПКол, заодно увеличивается парная переменная-счетчик пп1-пп7 для итогов.Макрокоманды для шапок и нижнего поля отчетов
Те, кто составлял ранее отчеты в 1С 6.0 и Account знают, как было сложно сделать шапку с названиями (большая шапка) или номерами колонок (малая шапка) над таблицей. Дело в том, что нужно выводить шапку заново на каждой новой странице отчета. Обычно это делал замысловатый алгоритм с подсчетом строк, в случае сложной группированной таблицы, требовалось потратить несколько часов на его разработку. Новая версия Account 2000 включает команды ШАПКА, ШАПКА2, КОНЕЦШАПКИ. Всего 3 командами можно описать большую и малую шапку таблицы. Программа автоматически определяет, что достигнут конец страницы, и автоматически находит изображение шапки. Программа также автоматически нумерует страницы в специальной переменной пСтр_Но.
В программу добавлена
возможность организовывать печать на нижнем
поле страницы (page footer, "футер страницы", низ
страницы). Например, внизу страницы выводить ее
номер. Для организации "футеров" имеются
команды НИЗ, КОНЕЦНИЗА.
Также добавлена возможность "склеить" малую и
большую шапку на при печати большой шапки. Это
удобно вывода номеров столбцов в отчете, которые
обычно делают в малой шапке. Для этого достаточно
указать !ШАПКА ВМЕСТЕ
Отладчик макроязыка (пошаговый режим, просмотр переменных, точки остановки)
В программу встроен отладчик полноценный отладчик макроязыка (см. рис выше) со следующими возможностями.
Для разработки сложных отчетов требуются продвинутые средства структурирования алгоритмов, такие как процедуры и макросы. Следует отметить, что задача разработки сложной финансовой отчетности имеет свою специфику. Это четкое разделение алгоритма отчета на две составляющих: логику выборки данных (Data logic) и логику отображения данных в форме отчета (Presentative logic).
Логика данных. Хранимые процедуры.
Для манипуляции с логикой данных оптимальным является язык SQL (Transact SQL). Если логика данных сложна, то рекомендуется использовать хранимые процедуры на Transact SQL для ее формирования. Использование макроязыка на манер 1С (ВЫБРАТЬ ОПЕРАЦИИ, СКД, СКК...) является нежелательным для выборки данных в сложных отчетах. Ориентированные на SQL отчеты работают в 10-15 раз быстрее, значительно быстрее разрабатываются, легче модифицируются и поддерживаются. Однако макроязык удобен для организации логики отображения данных в отчете (см. ниже).
Приведем пример использования хранимой процедуры в Account 2000 из рабочего отчета "Состояние склада" (остатки, резервирование, себестоимость по группам и подгруппам товаров).
!пзап="
exec UpdateGroups -- Вызов хранимой процедуры
select -- Запрос, использующий результаты
подготовленные в хранимой процедуре
!выбрать ряд пзап
...
!следующий ряд
Также следует отметить, что используя хранимые процедуры можно применять элементы технологии Data Warehouse ("Склад данных"). Иными словами, можно в хранимых процедурах подготавливать в неких таблицах сырьевые данные ("склады данных") для целых групп сложных отчетов. Например, процедура UpdateGroups подготавливает данные о добавочных группировках товаров в таблице Groups, которая может быть задействована сразу в нескольких отчетах.
Логика отображения. Макросы
Логика отображения данных в формах имеет специфическую особенность, она часто плохо структурируется. Поэтому для логики отображения часто более удобны макросы, а не процедуры. Account 2000 поддерживает возможность организации макросов и библиотек макросов. Account 2000 допускает определение макросов со следующими возможностями:
Глобальные макросы содержатся в файле Account.mac. Рассмотрим примеры макросов.
_СЧЕТ= !Псчет=Псчет+1
Если в программу вставить вызов _СЧЕТ, то на его
место подставится выражение !Псчет=Псчет+1
Обратите внимание, что название макросов
чувствительно к регистру.
Другой пример (многострочный макрос). Обратите внимание, что текст многострочного макроса ограничен ={ и }. Причем замыкающая скобка должна быть одна в строке.
_СБРОС_ПЕРЕМЕННЫХ2={
!ПП_Дох=0
!ППСум=
!ППСум2=
!ППСумДол=
}
В программе имеется возможность для прямого вызова SQL-команд. Программист-настройщик может использовать операторы insert/update/delete/exec. На первый взгляд это кажется ненужным для разработки отчетов, т.к. вроде бы достаточно одного select. Однако это не так, сложные алгоритмы трудно и даже часто невозможно построить в виде одного select-запроса. Кроме того, черезмерно громоздкие SQL-выражения медленно выполняются. Часто более эффективное решение, это создание "складов данных" (Dataware house). Их можно создавать в хранимых процедурах (как то описано выше). Однако во многих случаях более удобно избежать создания хранимых процедур, а просто выполнить серию SQL-операторов. В этом случае несколько снижается быстродействие, но программист используя программу SQL Trace может наблюдать за результатом каждой команды, т.е. отладка значительно упрощается.
Приведем примеры вызова SQL-команд.
!выполнить "
exec UpdateGroups -- Выполняем хранимую процедуру"!выполнить "
delete OP3Totals where u=@@spid -- Чистим наш Data WarehouseВладимир Иванов. Руководитель группы разработки Accoun
t 2000более подробная информация содержится на сайте www.ivn.newmail.ru