Добрый день, коллеги!
Участвуя в проектах перехода в облако (по технологии 1С:Фреш) в проектах компании ООО НПФ «Форус», столкнулись с необходимостью переноса данных из системы "АС СМЕТА" версии 3.2 (разработчик НПО "КРИСТА", далее АС Смета) в программную конфигурацию 1С:Бухгалтерия Государственного Учреждения 8 ред.2.0 (далее БГУ).
Структура хранения данных в АС СМЕТА.
Расширения файлов базы данных: gdb. Используемая СУБД: FireBird 2.5 (x86).
АС СМЕТА использует две базы данных при работе: конфигурация и база с данными. Наименование файла конфигурации и базы с данными может быть любым. Например, у меня были следующие наименования файлов: для конфигурации - Config_Budget157n.gdb, для базы с данными - STIMATE_BUDGET157N.GDB.
АС СМЕТА может работать в нескольких режимах: веб-клиент и обычное приложение (не могу точно сказать тонкий клиент или толстый клиент). Для просмотра данных, использовал обычное приложение (как выглядит обычное приложение смотрите рисунок ниже).
Исполняемый файл "АС СМЕТА" в обычном приложении: Stimate.exe.
Каталог с программой обычно называется RunImage, в этом каталоге хранятся все необходимые файлы для запуска АС СМЕТА. В этом каталоге также может храниться сама база данных, обновления системы и файлы для подключения к базе данных (в них хранятся пользователи, путь до базы данных и другая служебная информация для входа в АС СМЕТА), хотя база данных и файлы подключения к базе данных могут находиться и в других каталогах или локальной сети.
Для запуска базы клиента локально у себя лучше копировать всю папку RunImage целиком, файл подключения и базу данных.
Настройка подключения к АС СМЕТА.
Настройки подключения к АС Смета хранятся в специальном файле подключения. Файл подключения представляет из себя файл базы данных со списком пользователей, доступом к разделам и модулям системы, путём до базы данных, а также другой необходимой информацией для запуска АС СМЕТА.
Файл подключения имеет расширение dbx и редактируется специальной утилитой SysAdm.exe (подробно информацию можно найти в руководствах по АС СМЕТА).
Для тех, кто не хочет изучать руководство АС СМЕТА, вкратце:
- Номер подключения. На рисунке выше значение "0". Это значение говорит о том, что мы настраиваем путь к базе данных с данными, путь к базе данных указан в п.4. Значение "1" - это путь до базы данных конфигурации; значение "2" - это путь до базы данных с КЛАДром (его не подключали, можно работать без него).
- LANGDRIVER = ancyrr. Используем, как есть.
- PASSWORD = masterkey. Пароль для подключения к серверу базы данных FireBird.
- SERVER NAME = путь до базы данных с данными.
- USER NAME = SYSDBA. Пользователь для подключения к серверу базы данных FireBird.
На вкладке "Пользователи" задаются пользователи и доступные рабочие места (доступная подсистема для пользователя при входе в систему).
После того, как пути до базы данных и конфигурации прописаны, пользователи настроены, файл подключения необходимо сохранить.
Запуск АС СМЕТА
Для запуска приложения воспользуйтесь Stimate.exe, далее выберите в поле "Конфигурация" ваш файл подключения, выберите пользователя, введите пароль, выберите рабочее место и нажмите "ОК". Если ошибок не будет, АС СМЕТА запустится.
Внутренняя архитектура хранения данных АС СМЕТА
Немного познакомились с АС СМЕТА, теперь перейдем к архитектурным особенностям АС СМЕТА и хранению данных. Выше было написано, что АС СМЕТА имеет две базы данных: конфигурация и база для данных, а также часть логики скрыта внутри их приложения.
В базе данных, где хранятся данные около 530 таблиц (количество таблиц варьируется от обновлений и, возможно, используемого функционала, точно не могу сказать). В базе не существует связей между таблицами, т.е. схему посмотреть не удастся и, к сожалению, разобраться, как таблицы связаны друг с другом очень непросто и требует больших временных затрат и использование дополнительного программного обеспечения для трассировки запросов к базе данных и поиску нужных таблиц и связей.
В конфигурации около 216 таблиц. В конфигурации хранится план счетов, различные классификаторы (ОКОФ, ОКДП, ОКЕИ и другие), другая служебная информация, которая видимо используется для создания базы данных.
Для получения данных из АС СМЕТА из базы данных мы тянем данные (справочники, транзакции); остатки в базе не хранятся, поэтому приходилось их рассчитывать по детальным транзакциям; классификаторы, план счетов мы тянул из конфигурации.
Обработка для подключения:
Пример запроса для получения параметров ОС:
SQLQuery = "select
|*
|from (
|select stgresourceparams.id as ID, stgresourceparams.resourceid as Fixed_Asset_ID, stgresourceparams.nameid as Param_ID, str032.strval as Param_Name, stgresourceparams.objref as ObjRef, floatvals.val / 100 as param_value, (cast('30.12.1899' as date) + stgresourceparams.useddate) as useddate
|from stgresourceparams
|left join str032 on str032.id = stgresourceparams.nameid
|left join floatvals on floatvals.id = stgresourceparams.objref
|where (str032.strval = 'БалансоваяСтоимость') or (str032.strval = 'Цена') or (str032.strval = 'Амортизация2005') or (str032.strval = 'СтоимостьДляАмортизации')
|union
|select stgresourceparams.id, stgresourceparams.resourceid, stgresourceparams.nameid, str032.strval, stgresourceparams.objref, persons.tabnum as param_value, (cast('30.12.1899' as date) + stgresourceparams.useddate) as useddate
|from stgresourceparams
|left join str032 on str032.id = stgresourceparams.nameid
|left join persons on persons.id = stgresourceparams.objref
|where (str032.strval = 'МОЛ')
|union
|select stgresourceparams.id, stgresourceparams.resourceid, stgresourceparams.nameid, str032.strval, stgresourceparams.objref, (cast('30.12.1899' as date) + stgresourceparams.objref) as param_value, (cast('30.12.1899' as date) + stgresourceparams.useddate) as useddate
|from stgresourceparams
|left join str032 on str032.id = stgresourceparams.nameid
|where (str032.strval = 'ДатаВводаВЭксплуатацию') or (str032.strval = 'ДатаПринятияКУчету')
|union
|select stgresourceparams.id, stgresourceparams.resourceid, stgresourceparams.nameid, str032.strval, stgresourceparams.objref, stgresourceparams.objref as param_value, (cast('30.12.1899' as date) + stgresourceparams.useddate) as useddate
|from stgresourceparams
|left join str032 on str032.id = stgresourceparams.nameid
|where (str032.strval = 'СрокДляАмортизации') or (str032.strval = 'Счет') or (str032.strval = 'НомерКарточки')) as InnerTable
|where (InnerTable.Fixed_Asset_ID <> 0) /* 0 - это группа */
|order by Fixed_Asset_ID, Param_Name, Useddate";
Выгрузка справочников и остатков из АС СМЕТА в 1С:БГУ.
Несмотря на потраченное время на написание и отладку запросов, получить корректные остатки в разрезе необходимой аналитики, так и не удалось. Например, МОЛ в результате запроса не соответствовал МОЛ в реальных остатках из АС Сметы. Остатки я сверял через стандартные и специализированные отчеты в АС СМЕТА: Оборотная ведомость по счету в разрезе МОЛ, Оборотная ведомость по НФА ф0504035. В АС СМЕТА практически все отчеты можно настроить с нужной детализацией с помощью настройки нужного шаблона:
Более того, шаблон можно выгрузить во внешний файл .СПО и загрузить его в другую базу АС СМЕТА.
Поэтому решили справочники перенести с помощью прямого подключения к АС СМЕТА, а уже перенос остатков выполнить через xls. Настроили шаблоны, сформировали отчеты на нужную дату, сохранили в xls и загрузили в 1С. Обработки для переноса из xls остатков в БГУ есть на Инфостарте.
Состав переносимых данных в терминах БГУ
В результате выполненных работ был перенесен необходимый объем данных.
Справочники:
- Источники финансового обеспечения;
- Классификационные признаки счетов;
- Организации;
- Подразделения;
- Физические лица;
- Сотрудники;
- Места хранения;
- Центры материальной ответственности;
- Контрагенты;
- Банки;
- Банковские счета;
- Номенклатура;
- Единицы измерения;
- Основные средства;
- Инвентарные номера ОС;
Остатки на начало года по балансовым счетам:
- 101 "Основные средства";
- 102 "Нематериальные активы";
- 103 "Непроизведенные активы";
- 104 "Амортизация";
- 105 "Материальные запасы";
- 108 "Нефинансовые активы имущества казны";
- 205 "Расчеты по доходам";
- 206 "Расчеты по выданным авансам";
- 207 "Расчеты по кредитам, займам (ссудам)";
- 208 "Расчеты с подотчетными лицами";
- 209 "Расчеты по ущербу и иным доходам";
- 301 "Расчеты с кредиторами по долговым обязательствам";
- 302 "Расчеты по принятым обязательствам";
- 303 "Расчеты по платежам в бюджеты";
Остатки на начало года по забалансовым счетам:
- 01 "Имущество, полученное в пользование";
- 02 "Материальные ценности на хранении";
- 03 "Бланки строгой отчетности";
- 09 "Запасные части к транспортным средствам, выданные взамен изношенных";
- 12 "Спецоборудование для выполнения научно-исследовательских работ по договорам с заказчиками";
- 13 "Экспериментальные устройства";
- 21 "Основные средства в эксплуатации";
- 22 "Материальные ценности, полученные по централизованному снабжению";
- 23 "Периодические издания для пользования";
- 25 "Имущество, переданное в возмездное пользование (аренду)";
- 26 "Имущество, переданное в безвозмездное пользование";
- 27 "Материальные ценности, выданные в личное пользование работникам (сотрудникам)".
Особенности переноса справочников:
1. Не все справочники переносились в полном объеме. Например, справочник основных средств переносился только в части элементов, которые были в остатках. Контрагенты же переносились полностью.
2. Некоторые справочники отсутствовали в АС СМЕТА в явном виде, таки справочники были созданы автоматически при переносе (например, договоры контрагентов). В АС СМЕТА не смогли получить остатки в разрезе договоров.
4. Некоторые справочники потребовали дополнения (например, инвентарные номера ОС). Дело в том, что в АС Смета для групповых ОС не ведется поинвентарный учет (как правило, присвоен один инвентарный номер на групповую карточку). В БГУ приходится «дробить» такие инвентарные номера. Это может привести к погрешности в копейки, такие ситуации уже исправлялись пользователем вручную в 1С.
Методика переноса остатков:
Остатки переносили в специализированные документы для ввода остатков:
- Ввод начальных остатков ОС, НМА, НПА;
- Ввод начальных остатков;
- Операция (бухгалтерская).
Все остатки переносили в разрезе Источников финансового обеспечения (в АС СМЕТА есть аналогичный справочник, и он шире, чем КФО).
Этапы перехода
Переход рекомендуем выполнять в начале года (годовая отчетность за прошлый год сдается из АС Смета, в БГУ учет ведется с 01 января).
Обычно переход осуществляется в 2 итерации:
1 итерация: перенос остатков для того, чтобы пользователи начали работать с 01 января. Перенос в чистую базу. Обычно выполняется с октября по декабрь.
2 итерация: финальный перенос остатков. Перенос в рабочую базу с сохранением внесенных оборотов с 01 января по дату переноса. Выполняется после закрытия года (в феврале-марте), когда остатки сформированы (уже не будут меняться, или изменения будут незначительны).
Однако, возможна схема, в которой сразу выполняется финальный перенос остатков (2 итерация). В этом случае обороты вносятся пользователем вручную, либо загружаются из смежных систем (например, с СУФД).
Полная схема перехода (с двумя итерациями) выглядела так:
- Согласование графика перевода баз;
- Заказчик передаёт Исполнителю базу АС Смета, административный пароль/логин, а также временную лицензию для возможности просмотра данных и формирования отчетов;
- Тестовый перенос данных. Полученная база с перенесёнными данными и особенностями переноса (см ниже «Сверка после переноса данных») возвращается Заказчику;
- Проверка Заказчиком перенесенных данных, исправление выявленных проблем;
- Перенос данных (1 итерация). Протокол переноса данных с результатами сверки передается Заказчику.
- Пользователи работают в двух системах: в АС Смета для ввода операций за прошлый год, в БГУ для ввода операций за новый год.
- Перенос данных (2 итерация). Протокол переноса данных с результатами сверки передается Заказчику.
Сверка после переноса данных:
По результатам переноса подготавливался Акт о корректности данных, в котором отражался результат сверки перенесенных остатков по субсчетам с описанием причин расхождения и рекомендациями по исправлению расхождений. Выявленные ошибки учета в АС Смета исправлял Заказчик самостоятельно.