пятница, 7 июня 2013 г.

Представляем программу для автоматизации бухгалтерского учета




Представляем программу для автоматизации бухгалтерского, складского и других подобных видов учета. Программа значительно проще и очевиднее аналогов – 1С, SAP, Axapta и пр. При этом есть основания полагать, что программа будет более масштабируемой и быстродействующей отдельных аналогов. Мы убеждены, что наша программа способна произвести эпохальные изменения в области бухгалтерских программ и что в будущем и другие программы будут использовать идеи и принципы, заложенные в нашу программу. И остановить данный процесс уже невозможно.

Ссылки для скачивания:
Программа:
https://docs.google.com/file/d/0B_RW51DhUaqlNDVUR0lPZnNFVzA/edit?usp=sharing



 Конфигурация:
https://docs.google.com/file/d/0B_RW51DhUaqlb0NZMXhXRHNZQ00/edit?usp=sharing


Подключение информационной базы:
1. Нажать кнопку "Добавить" в списке информационных баз (появляется при входе в программу).
2. Для Access базы задать путь к базе вида D:\MyData\MyFinance.mdb
3. Для SQL-баз полностью нужно задать поле ConnString с именем базы, паролем если есть (проще вставив текст через буфер обмена или отредактировав файл для win xp «"C:\Documents and Settings\Петров\Application Data\Siberian Pineapple\DBList.txt"» или для win 7 "C:\Users\Петров\AppData\Roaming\Siberian Pineapple\DBList.txt").
4. Файл базы данных (для Access и прочих файловых СУБД) или базу в SQL сервере нужно создать самому. Только базу, служебные таблицы - T1, T2 и т.д. создаются по кнопке "Создать таблицы" в списке информационных баз, предварительно "встав" на нужную базу в списке информационных баз. После этого в базу можно заходить и работать, через кнопку "Выбрать".
На всякий случай приводим пример текстового файла списка информационных баз DBList.txt:
ID;Presentation;DBType;DBName;ServerName;UserName;UserPassword;ConnString
1;"Мои финансы";1;"D:\MyData\MyFinance.mdb";"";"";"";""
2;"Мои финансы SQL";3;"";"";"";"";"Provider=SQLNCLI10.1;Integrated Security="""";Persist Security Info=False;User ID=sa;Initial Catalog=MyFinance;Data Source=(local);Initial File Name="""";Server SPN="""""
При выборе Access в качестве СУБД устанавливать его не обязательно. Нужны драйверы ADO соответствующий OLEDB 4.0.



Далее описываются основные идеи и принципы программы, данный раздел рассчитан больше на программистов-разработчиков.

Программа представляет собой exe-файл который взаимодействует с базой данных, выводит и обрабатывает данные. В базе данных кроме учетных таблиц описывающих предметную область (например таблицы контрагентов или таблицы выставленных клиенту счетов), хранятся конфигурационные таблицы. Конфигурационные таблицы как раз и описывают набор таблиц, полей, алгоритмы работы с ними и пр. используемых для данной конкретной конфигурации.
Описание и параметры всех таблиц, которые создаются и используются в конкретной конфигурации, хранится в конфигурационной таблице с именем T1. Описание всех полей (кроме предопределенных) хранится в таблице T2, данная таблица подчинена таблице T1 через поле Owner. При добавлении записи в таблицу T1 автоматически создается новая таблица в базе данных с именем «T» + ID добавленной записи, например T101, T102 и т.д. Таблицы создаются с набором предопределенных полей, соответствующих типу таблицы – справочник, документ, регистр и т.п. При добавлении записи в таблицу T2 автоматически добавляется поле в соответствующую таблицу – F101, F102, … F125. ID от 1 до 100 зарезервированы для предопределенных таблиц, таких как таблица таблиц T1, таблица полей T2 и т.д. Аналогично и поля нумеруются начиная со 101.
Основные предопределенные поля таблицы таблиц T1:
Поле
Описание
ID
ID записи и таблицы. Данное поле используется для идентификации таблиц в базах данных, например T1, T2, …, T125, и используется в SQL-запросах. Также оно используется для установления связей подчинения между таблицами
Presentation
Представление, описание таблицы
NameTable
Имя таблицы
Parent
ID родительской таблицы. С помощью данного поля организуется иерархия подчинения между таблицами, например, когда таблица договоров подчиняется таблице контрагентов. Табличные части документов также подчиняются с помощью данного поля, причем может быть любой уровень иерархии, т.е. можно одну табличную часть документа подчинить другой табличной части.
TypeTable
Тип таблицы – справочник, документ, план учета, регистр и т.д. Подробное описание ниже
AddProp
Дополнительное свойство описывающее поле TypeTable
Dialog
Истина – редактировать таблицу в диалоге. Иначе – в списке

Основные предопределенные поля таблицы полей T2:
Поле
Описание
ID
ID записи и поля. Данное поле используется для идентификации полей в таблицах базы данных, например F101, F102, …, F125, и используется в SQL-запросах.
Presentation
Представление, описание поля
NameField
Имя поля
Owner
ID таблицы-владельца данного поля, это ссылка на поле ID таблицы T1
TypeField
Тип поля – строка, число, дата, булево, ссылка на запись другой таблицы и пр. Подробное описание ниже
Lenght
Длина поля
Scale
Точность
IDRelationTable
ID ссылочной таблицы (для ссылочных полей)
TypeRekvisit
Тип реквизита – реквизит, измерение, ресурс, оборотное измерение

Организация бухгалтерского учета:
Для организации бухгалтерского учета используются объекты план учета и регистры. План учета соответствует понятию план счетов в бухгалтерских терминах, но при этом план учета несколько более широкое понятие. Регистры – это таблицы для хранения проводок и бухгалтерских остатков.
Регистры в программе могут быть двух видов – регистры, где хранятся проводки по всем счетам плана учета (с корреспонденцией или без), и регистры где хранятся проводки с полями аналитического учета (субконто) конкретных счетов. Регистр первого типа обычно содержит предопределенные поля Счет дебета, Счет Кредита, Дата проводки, ID документа, ID вида документа, Номер проводки, Номер корр. проводки. Плюс он содержит измерения и ресурсы который добавит программист (например измерение «Организация» и ресурс «Сумма»). Данный регистр подчиняется конкретному плану учета из таблицы T1 через поле Parent, см. скриншот 2. С помощью регистров второго типа хранятся данные аналитического учета по счетам – значения контрагентов, основных средств, товаров и т.п, а также ресурсы – валютная сумма, количество и т.п. Для каждого счета плана учета может быть назначен свой отдельный регистр второго типа, при этом один и тот же регистр может быть назначен нескольким счетам. Связь регистра второго типа и конкретного счета хранится в таблице конкретного плана учета в поле «Регистр итогов» см. скриншот 2. Остатки хранятся во вспомогательных таблицах к данным двум видам регистров, создаются автоматически при создании этих регистров (и получают имя равное имени регистра плюс символ “S”, т.е. если имя таблицы регистра «T120», то остатки хранятся в таблице «T120S»). Измерения и ресурсы, введенные для регистра первого типа, автоматически добавляются в подчиненные регистры второго типа. Т.е. например измерение «Организация» и ресурс «Сумма» будут и в подчиненных регистрах второго типа. При этом никаких ограничений по количеству измерений и ресурсов в программе нет.

Описанный в данном обзоре механизм организации метаданных (описание таблиц и полей) и бухгалтерских данных дает огромные преимущества:
1. Простая выборка и изменение данных и метаданных с помощью обычных SQL-запросов. Полное использование возможностей конкретных СУБД. При анализе и отладке запросов нет необходимости конвертации запроса программы в запрос СУБД ввиду их идентичности.
2. Независимость пользователей программы от регулярных болезненных несовместимых изменений платформы и конфигураций как это происходит в случае с 1С.
3. Возможность программисту самому описывать алгоритмы, выбирающие необходимые поля для форм списка и редактирования таблиц с помощью SQL-запросов.
4. Раздельное хранение проводок, итогов по разным счетам позволит:
    - увеличить быстродействие, масштабирование больших баз
    - быстрая массовая запись проводок на основе записей табличных частей документов через простые SQL-инструкции типа «INSERT INTO Регистр_X Контрагент, Сумма select Контрагент, Сумма from ТабличнаяЧастьДокумента_Y where Owner=@Owner»
   - организовать ограничения доступа пользователей к бухгалтерским данным на уровне записей в соответствии со своими правами
5. Несравнимо более простые и понятные конфигурации чем типовые конфигурации 1С.
6. Простая выборка иерархических данных, бухгалтерских остатков и проводок через обычные SQL запросы.
7. Работа с иерархией без временных таблиц для конструкций «В иерархии» и пр.
18. Возможность программисту самому через достаточно простые и очевидные хранимые процедуры описывать алгоритмы проводок и пересчета остатков.
9. Возможность использования хранимых процедур, блокировок как задумано в SQL-сервере.
10. Возможность добавления разработчиками во все таблицы метаданных собственных полей. Это позволяет группировать различные служебные данные и при  необходимости обрабатывать изменения этих данных.
11. Простая интеграция и обмен с другими системами, например с сайтами. Возможна простая выборка данных из базы другими приложениями.
12. Простой анализ метаданных. Возможность написания приложений для работы с метаданными.
13. Изменение метаданных без принудительного выхода пользователей из  программы, в т.ч. непосредственно через таблицы базы данных.
14. Простой анализ алгоритмов формирования проводок. Простой поиск ошибок. Возможность формирования блок-схем проводок.
15. При изменении наименования таблицы или поля нет необходимости переписывать программный код, т.к. обращение к полям и таблицам идет через их ID, а они не меняются.
16. Возможность оптимизации быстродействия базы интенсивными методами через оптимизацию SQL  запросов. Сейчас в 1С это делается в основном экстенсивными методами (параллельное проведение в нескольких exe-процессах, кластеры) по причине трудоемкости оптимизации запредельно огромных запросов и программного кода в типовых конфигурациях 1С.

Другие преимущества программы:
17. Единый интерфейс форм списка и редактирования, начиная от списка выбора информационных баз и таблиц метаданных до таблиц справочников, документов и пр. Такой интерфейс прост в освоении и удобнее в использовании для пользователей. Есть возможность индивидуальной настройки интерфейса пользователем.
18. Стандартная контрастная серая цветовая схема в формах.
19. Быстрый запуск программы и вход в базу – порядка 1-2 секунд.
20. При редактировании строки табличной части документа в формах редактирования документов не блокируется вся табличная часть данного документа. Как следствие отсутствует озвученная на форумах проблема одновременного редактирования табличной части одного документа разными пользователями.
21. При редактировании строки табличной части документа она записывается сразу же (после окончания редактирования последней колонки), а не по кнопке «Записать». Это бывает необходимо при редактировании больших табличных частей документов. Были случаи, когда пользователи в течение часа вводили данные в программе-аналоге в табличную часть документа, и она «вылетала» потом без сохранения данных.
22. Возможность простого создания таблиц подчиненных табличным частям документов.
23. В новой конфигурации для организации бухгалтерского учета необходимо лишь описать регистры, документы, проводки. Остальное – оборотно-сальдовую ведомость, формы программа сформирует сама. Никаких общих модулей перетаскивать из других конфигураций как в аналогах не нужно.
24. Никаких ежеквартальных открытий периода бухгалтерских итогов и т.п.
25. Быстрый перенос данных (конвертация) между базами, в т.ч. напрямую без промежуточного файла.
26. Отсутствие аппаратных и программных ключей защиты программы и многочисленных проблем с ними связанных.
27. Минимальные требования к памяти: вся программа представляет собой один exe-файл размером менее 1 МБ на жестком диске, при выполнении он занимает от 5 МБ оперативной памяти. Для сравнения 1С с конфигурацией «Бухгалтерия предприятия 2.0» после старта занимает от 75 Мб оперативной памяти, версия 3.0 уже от 100 Мб, «Управление производственным предприятием»  - от 135 Мб (для пользователя гл. бухгалтер в режиме «толстый клиент» SQL-версия). Можно предположить, какую дополнительную нагрузку создает 1С на сервер при работе большого количества пользователей через RDP.

Мы намеренно не используем термины типа «ERP», «MRP» и пр. вводящие в заблуждение пользователей относительно возможностей бухгалтерских программ.

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

Вы можете отправить ваши предложения и отзывы  на электронную почту siberianpineapple@gmail.com, и они не уйдут в пустоту и обязательно будут рассмотрены.
Приветствуются конкретные предложения по увеличению быстродействия, улучшению и упрощению алгоритмов, запросов, структуры таблиц, интерфейса.

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

Описание полей TypeTable и AddProp таблицы T1:
Type
Table
Описание
AddProp
Предопределенные поля
Кнопки панели
Формы списка
Кнопки панели
Формы элемента
1
Справочник
1.       Непериодический
2.       Периодический (с возможностью подчинения другой таблице как например справочник «Валют»)
1.       ID
2.       Представление Presentation
3.       Родитель Parent
4.       Владелец для подч. спр Owner
5.       Пометка удаления IsDelete
6.       Это группа IsFolder
7.       Это предопределенный IsPreDefined
8.       Имя предопред. элем-та Name
1.       Действия
2.       Добавить
3.       Копировать
4.       Изменить
5.       Удалить
6.       Настройки
7.       Закрыть
1.       Действия
2.       ОК
3.       Записать
4.       В список
5.       Настройки
6.       Закрыть
2
Документ

1.       ID
2.       Дата документа DateDoc
3.       Номер документа NumberDoc
4.       Проведен
5.       Пометка удаления
6.       Владелец для подч табл
Подчинен. таблицы документа:
1.       ID
2.       NumberRow
3.       Пока нет
4.       Owner
Кнопки справочников
8.       Проводки

Кнопки справочников
7.       Проводки

3
План учета
1.       C корреспонденции счетов
2.       Без корреспонденции счетов
Пред. поля справочников +
9.       TypeAktPas Тип (активный-пасс.)
10.   TypeBalance Тип (баланс-забалан)
11.   RegistrID Рег. итогов счета
12.   Code
Кнопки справочников
Кнопки справочников
4
Регистр
1.       Регистр остатков без корреспонденции счетов
2.       Регистр остатков всех счетов бухгалтерский с корреспонденцией. В данных регистрах ведется учет остатков и проводок по всем счетам с корреспонденцией или без.
3.       Регистр остатков бухгалтерского счета или группы счетов. В данных регистрах ведется аналитический учет.
1.       ID = 0 . введено для единообразия
2.       DateMove Дата проводки
3.       Doc
4.       KindDoc
5.       NumberProv Номер проводки
6.       NumberKorrProv Номер корреспонд.
7.       ScDt – Sc Счет дебет - Счет
8.       ScKt – DebetCredit Счет кредит–Флагдк
9.       Sc – для регистров без корреспонденции
Остатки:
1.       ID = 0 . введено для единообразия
2.       DateSaldo Дата остатка
3.       Sc Счет
4.       Сумма Сальдо, Оборот Дт-Кт
1.       Действия
2.       Настройки
3.       Закрыть

5
Настройки проводок
(системн. начинается с 40)
1.       Проводки документов
2.       Проводки документа
3.       Реквизиты соответствие
4.       Связи проводок
5.       Связи реквизитов соответствие
6.       Поля запроса с условием
7.       Условия поля запроса с условием
8.       Условия проводок
 Пред. поля справочников +
1 Проводки документов
9.       Document Вид документа
10.   DisableMoves Отключить
// --- 2 Проводки документа
9.       ChartOfAccounts План учета
10.   RegistrDebet - Регистр дебет
11.   RegistrCredit - Регистр кредит
12.   NewQueryForRow - Запрос-проводка
13.   TextQuery - Текст запроса
14.   KindMove Вид проводки ??? не нужно
15.   DisableMove – Отключить
16.   DateMove – дата проводки
// --- 3 Реквизиты соответствие
9.       FieldRegistr - Поле регистра
10.   FieldQuery - Поле запроса
11.   DebetCredit - Дебет-Кредит
12.   TableJoins – Соединения
13.   ParameterValue – ПараметрЗначение
// --- 4 Связи проводок
Пред. поля справочников
// --- 5 Связи проводок поля связи
9.       FieldJoin - Поле соединения
// 6 Проводки поля запроса с условием
9.       TableJoins – Соединения
10.   FieldQuery - Поле запроса
// 7 Проводки поля запроса с усл. (условия
9.       TableJoins – Соединения
10.   FieldCondition - Поле условие запроса
11.   TypeCondition - Тип условия (и-или)
12.   TypeRavenstvo - Тип равенства (=-не =)
13.   ValueCondition&ValueConditionT - Значение условия




Кнопки справочников
8.       Заполнить по именам (AddProp == 3)

6
Настройки отчетов
1.       Таблица группировок
2.       Таблица ресурсов
3.       Таблица условий
4.       Таблица полей (подч. Т. группировок)
//  1. Группировки
9.       Поле
//  2. Ресурсы
9.       Поле
10.   Тип ресурса
//  3. Условия
9.       Поле
10.   Тип условия
11.   Тип равенства
12.   Значение условия
Кнопки справочников
8.       Вверх
9.       Вниз

1.       Действия
2.       ОК
3.       Настройки
4.       Закрыть
7
Настройки обмена данными
(системн. начинается с 30)
древовидный
1.       Конфигурации (поля)
2.       Таблицы (подчинена конфигурациям древовидный)
3.       Поля (подчинена Таблицам)
4.       Обмен данными (поля конф. источник-приемник)
5.       Таблицы обмена (подчинена обмену данными древовидный)
6.       Поля таблиц обмена (подчинена таблицам обмена)
7.       Обработка по обмену данными
8.       Таблица информационных баз

Пред. поля справочников +
//  1. Конфигурации (поля)
9.       TypeConfiguration - Тип конфигурации
// 2. Таблицы (подчинена конфигурациям)
9.       NameTable - Имя таблицы
10.   TypeTable - Тип таблицы
11.   AddProp - Доп. Свойство
12.   Dialog – редакт в диалоге
13.   HierarchyType – тип иерархии
14.   IDTable –
// 3. Поля (подчинена Таблицам)
9.       NameField – Имя поля
10.   TypeField - Тип поля
11.   IDRelationTable - Таблица ссылки
12.   Lenght – Длина
13.   Scale – Точность
14.   TypeRekvisit - Тип реквизита
15.   SortID – сортировка в формах
16.   AddProp – доп. Свойство
17.   InNewColumn – в новой колонке
18.   AutoIncrementRekv – автонумер. поле
19.   IDField –
// 4. Обмен данными
9.       ConfFrom - Конф. откуда
10.   ConfTo - Конф. куда
11.   TextFrom
12.   TextTo
// 5. Таблицы обмена (подч обмену данными)
9.       TableFrom - Таблица откуда
10.   TableTo - Таблица куда
11.   NewID – Не созд. Новый ID
12.   EraseTable - Очистить таблицу перед импортом
// 6. Поля таблиц обмена (подчинена таблицам обмена)
9.       FieldFrom - Поле откуда
10.   FieldTo - Поле куда
11.   ValueTo - Значение поле куда
// 8. Таблица информационных баз
9.       DBType - Тип базы
10.   DBName – Имя базы
11.   ServerName – Имя сервера
12.   UserName
13.   UserPassword
14.   ConnString



Кнопки справочников
(AddProp == 4)
8.       Заполнить таблицы по ID
9.       Заполнить таблицы по имени

(AddProp == 5)
8.       Заполнить поля по ID
9.       Заполнить поля по имени

Кнопки справочников

(AddProp == 7)
7.        Выполнить обмен
8.       Сохранить настр..
9.       Открыть настр.

(AddProp == 4)
7.       Текст выгрузки
8.       Текст загрузки
8
Конфигурационные таблицы
(системн. начинается с 1)

1.       Таблица типов (при начале создать авто группы – Справочники, Документы и т.д. древовидный)
2.       Таблица реквизитов (подч. табл. типов)
3.       Таблица предопределенных значений справочников, перечислений
4.       Параметры конфигурации
5.       Таблица форм
6.       Таблица элементов форм (подчинена формам)
7.       Таблица системных перечислений (отдельное поле указывающее на ID перечисления)
8.       Таблица значений перечислений

Кнопки справочников
8.       Создать таблицы (метаданных)


9
Перечисление




10
Отчеты
50 – оборотно-сальд. Вед-ть


1.       ОК
2.       Закрыть


1.       Действия
2.       Сформировать
3.       Сохранить настр.
4.       Открыть настр.
5.       Настройки
6.       Закрыть
11
Список информационных баз


Кнопки справочников
8.       Выбрать
9.       Создать таблицы (служебные)


12
Системное перечисление (может и не нужно)





Описание поля TypeField таблицы T2. Предопределенные типы:
1
Строка
2
Число
3
Дата
4
Булево
5
Ссылка на строки других таблиц
6
Сложная ссылка (на строки разных таблиц, кроме ID строки в отдельном поле хранится ID таблицы)
7
Системное перечисление. Тип системного перечисления задается в поле IDRelationTable:
1.       Булево (да-нет)
2.       И-или
3.       Равно-не равно
4.       Дебет-кредит-баланс перечисление
5.       Бухгалтерский тип счета: активный, пассивный, а-п
6.       Бухгалтерский тип счета: балансовый-забалансовый
7.       Вид проводки: бухгалтерское с корреспонденцией-обычный регистр
8.       Вид проводки: приход-расход
9.       Тип таблицы (поле TypeTable): справочник, документ, план учета, регистр и т.д.
10.   Тип поля (поле TypeField): 1 – строка, 2 число, 3 дата, 4 булево, 5 ссылка, 6 сложная ссылка (на несколько таблиц или на системные типы), 7 ссылка на сист. перечисление,
11.   Тип реквизита (поле TypeRekvisit):
1.       Реквизит
2.       Измерение
3.       Ресурс
4.       Оборотное измерение
12.   Доп. свойство таблицы типов (AddProp): периодич-непериодич, рег. Остатков-рег. Счета и т.п.
13.   Типы конфигураций:
1.       SP
2.       1С 7.7
3.       1С 8
4.       Прочее
14.   Доп. свойство таблицы типов (возможно не нужно):
1.       Конфигурации (поля)
2.       Таблицы (подчинена конфигурациям)
3.       Поля (подчинена Таблицам)
4.       Обмен данными (поля конфигурация источник-приемник)
5.       Таблицы обмена (подчинена обмену данными)
6.       Поля таблиц обмена (подчинена таблицам обмена)
15.   Типы СУБД:
1.       Access
2.       DBF
3.       MS SQL Server
4.       Oracle Database
5.       IBM DB2
6.       PostgreSQL
7.       My SQL
8.       Прочее
16.   Тип ресурса:
1.       Начальное сальдо
2.       Дебетовый оборот
3.       Кредитовый оборот
4.       Конечное сальдо
17.   Тип иерархии:
1.       Линейная
2.       Древовидная
18.   Тип параметра конфигурации:
1.       Версия метаданных
2.       Тип ID таблиц – число или строка
19.   Тип ID таблиц:
1.       Число
2.       Строка
8
Перечисление пользовательское
9
MEMO
 
Скриншот 1. Список таблиц конфигурации с развернутой группой "Справочники" и открытым для редактирования свойств и полей таблица "Денежные счета"



Скриншот 2. Описание таблиц метаданных для бухгалтерского учета и план счетов "Личные финансы"

Скриншот 3. Список документов «Перевод денежных средств» и открытый для редактирования документ №1:



Скриншот 4. Бухгалтерские проводки

Скриншот 5. Оборотно-сальдовая ведомость

Скриншот 6. Настройки оборотно-сальдовой ведомости

Скриншот 7. Настройки проводок

2 комментария: