1С как источник данных для вероятностно-статистических исследований
Эта статья расскажет, как получить данные из 1С для последующей обработки в среде
R.
На протяжении последних двадцати лет в России куплены и инсталлированы десятки, если не сотни, тысяч копий
информационной бизнес-платформы 1С различных конфигураций.
Даже в соседнем магазине шаговой доступности площадью 50 кв. метров скорее всего есть 1С, которая частично отражает логистику,
и очень достоверно отражает продажи (иначе зачем она нужна).
Понятно, что большая часть из этих инсталляций - это бухгалтерские версии 1С. Но и эти данные можно использовать для
формирования начальных метрик предприятия.
Платформы и среды:
1С 8.1 (клиент-серверный вариант) version 8.1.15.14
СУБД PostgreSQL version 8.3.8
pgAdmin III version 1.18.1
среда для вероятностно-статистических исследований R version 3.2.3
RStudio version 0.99.489
Версии 1С и PostgreSQL не самые последние, что, впрочем, не мешает продемонстрировать принцип работы в R
с самой массовой в России информационной платформой.
Важно!!!
Не подключайтесь к базе данных, которую 1С использует непосредственно для OLTP.
Для работы в R cоздайте отдельную исследовательскую базу данных
и настройте ее синхронизацию с основной базой при помощи проверенных, гарантированно не влияющих на исходные данные,
инструментов в том объеме и с той частотой обновления, которые считаете необходимыми и достаточными.
Для получения данных будет использовано непосредственное подключение к базе данных на сервере в той же локальной сети,
в которой находится компьютер с R.
Для этого мы получим структуру данных 1С, создадим представление в базе данных, логически объединяющее несколько таблиц, и
подключимся из R к созданному представлению, чтобы получить данные для дальнейших исследований.
Получение структуры данных 1С.
Для начала работы нам необходимо получить структуру данных 1С. Для этого скачаем готовую
обработку
(так в терминологии 1С называются небольшие подпрограммы, выполняющие некоторые законченные действия в среде 1С).
Код обработки:
Процедура ВывестиСтруктуруТаблиц(Команда)
МассивИменМетаданных = Новый Массив();
// Если нужна структура таблиц только некоторых объектов конфигурации
// их можно перечислить в массиве имен метаданных
Осталось подключить процедуру ВывестиСтруктуруТаблиц к обработчику на кнопке формы и запустить ее.
В итоге выполнения этой обработки получим текстовый файл с описанием структуры данных для конфигурации 1С Розница, редакция 1.0 (1.0.6.4),
что позволит создать представление в базе данных.
Создание представления с данными розничных продаж при помощи утилиты pgAdmin III.
При помощи pgAdmin III cоздаем представление, которое предоставит данные из документов типа ОтчетОРозничныхПродажах за период,
начиная с 1 января 2013 года.
Конечно, согласно идеологии 1С, получать данные лучше из таблиц регистров (объекты 1С - таблицы,
где хранится специальным образом обработанная информация),
но в данном случае это не принципиально и нас устроит вариант получения данных из документов.
Имена таблиц и полей взяты из описания структуры данных 1С и соответствуют стандартной конфигурации 1С Розница, редакция 1.0 (1.0.6.4).
-- View: "saleView" -- DROP VIEW "saleView"; CREATE OR REPLACE VIEW"saleView"AS SELECT
_document63._date_time
AS
datetimeofdoc,
_reference32._description
AS
title,
_reference32._fld430
AS
article,
_document63_vt906._fld913
AS
price,
_document63_vt906._fld914
AS
cost
FROM
_document63
LEFT JOIN
_document63_vt906
ON
_document63_vt906._document63_idrref = _document63._idrref
LEFT JOIN
_reference32
ON
_reference32._idrref = _document63_vt906._fld908rref
WHERE
_document63._date_time > to_date('2012-12-31',
'YYYY-MM-DD');
ALTER TABLE"saleView" OWNER TO
postgres;
GRANT ALL ON TABLE"saleView"TO
postgres;
В запросе на создание представления были использованы операторы левого соединения.
Подключение к базе и получение данных о продажах в среде R.
При использовании кода в среде R устанавливайте собственные параметры подключения.
#подключим пакет sqldf, который позволит работать с postgreSQL #путь к пакету - для исключения ошибки, пользуйтесь подключением пакетов из интерфейса RStudio
library("sqldf", lib.loc="~/R/x86_64-pc-linux-gnu-library/3.2") #установите свои параметры подключения к базе данных postgreSQL
options(sqldf.RPostgreSQL.user
="your_DB_user",
sqldf.RPostgreSQL.password
="your_DB_password",
sqldf.RPostgreSQL.dbname
="your_dbname",
sqldf.RPostgreSQL.host
="your_ip_address_host",
sqldf.RPostgreSQL.port
=5432) #получим данные из postgreSQL в среду R #обратите внимание на кавычки - если имя представления не будет обрамлено кавычками, то запрос не выполнится
myTableSale <-
sqldf('SELECT * FROM "saleView"',
drv='RPostgreSQL')
Весь программный код, представленный в статье, протестирован и полностью работоспособен в соответсвующих для этого средах.
Резюме
В статье показано, как использовать платформу 1С в качестве источника данных для последующих статистических исследований в среде R.
Схема с подключением к представлению позволяет уже на этапе получения данных производить предварительную кластеризацию данных средствами sql-запросов,
гибко формируя выборку по параметрам, не перегружая R лишними данными.
В свою очередь среда R, обладая мощными аналитическими средствами, позволит очень быстро и качественно провести анализ и выявить скрытые закономерности,
или уточнить уже формализованные метрики.