Данные из 1С в интернет.


Без сайта в интернете сейчас сложно представить какую-либо компанию, как и без продуктов компании 1С. Но как их объединить?

 

Без сайта в интернете сейчас сложно представить какую-либо компанию, как и без продуктов компании 1С. Но как их объединить?

Итак какие же есть варианты для отображения информации из 1С на сайте, некоторые из них:

  1. Создать и сохранить отчет в формате HTML.
  2. Воспользоваться выгрузкой в базу данных сайта.

  3. «Прямой запрос» к базе данных 1С.

Рассмотрим их плюсы и минусы:

В первом варианте плюсы очевидны — это быстрота и простота разработки.

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

У обоих вариантов есть один недостаток — это оффлайн режим работы. То есть пользователь сайта видит информацию которая может быть уже не актуальна.

Попробую нарисовать все варианты (красным выделена актуальная информация):

Вариант 1.

---->WEB<---USER

Вариант 2.

1C---->DB<----WEB<---USER

Вариант 3.

USER---->WEB---->DB1C

В этой статье я рассмотрю только третий вариант быстрый и простой, с моей точки зрения.

Что нам понадобится? Запрос к 1С (пример получение остатков по складам):

-- Выполнение запроса:

SELECT НОМЕНКЛАТУРА._Description AS Номенклатура,

СКЛАД._Description AS Склад,

ХАРАКТЕРИСТИКИ._Description AS Характеристика,

ОСТАТКИ._fld5152 AS Количество

FROM _accumrgt5162 AS ОСТАТКИ

INNER JOIN _Reference191 AS НОМЕНКЛАТУРА

ON НОМЕНКЛАТУРА._IDRRef = ОСТАТКИ._fld5149rref

INNER JOIN _Reference205 AS СКЛАД

ON СКЛАД._IDRRef = ОСТАТКИ._fld5150rref

LEFT JOIN _Reference227 AS ХАРАКТЕРИСТИКИ -- Так как возможны пустые значения

ON ХАРАКТЕРИСТИКИ._IDRRef = ОСТАТКИ._fld5151rref

WHERE ОСТАТКИ._Period = '3999-11-01 00:00:00';

Он соответствует запросу 1С:

ВЫБРАТЬ

ОстаткиТоваровКомпанииОстатки.Номенклатура.Наименование КАК Номенклатура,

ОстаткиТоваровКомпанииОстатки.СкладКомпании.Наименование КАК Склад,

ОстаткиТоваровКомпанииОстатки.ХарактеристикаНоменклатуры.Наименование КАК Характеристика,

ОстаткиТоваровКомпанииОстатки.КоличествоОстаток КАК Количество

ИЗ

РегистрНакопления.ОстаткиТоваровКомпании.Остатки(&Период, ) КАК ОстаткиТоваровКомпанииОстатки

 

Откуда же я узнал как называются таблицы и поля? Всё очень просто. Есть функция ПолучитьСтруктуруХраненияБазыДанных. Привожу часть текста из справки:

Описание:
Получает информацию о структуре таблиц базы данных для переданных в качестве параметра массива имен объектов метаданных или массива объектов метаданных для административных действий с ней.
Если параметр не используется, то возвращаемая таблица значений содержит информацию о структуре таблиц базы данных всех объектов метаданных.
Доступность:

Сервер, толстый клиент, внешнее соединение.

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

Вопрос который возникнет у внимательного читателя — почему WHERE ОСТАТКИ._Period = '3999-11-01 00:00:00'? Тут все просто. 01 декабря 3999 года в полночь 1С версии восемь перестанет работать правильно. Некая дата конца света по версии 1С, на которую она хранит все итоги.

В принципе 90% работы мы выполнили. Осталось только отдать запрос веб программисту, что бы он преобразовал полученные данные в красивые веб страницы. И попросить системного администратора дать доступ с веб сервера (если он находится снаружи) на сервер баз данных.

Код на PHP, C# и т.д.я приводить не буду, как и правила для брандмауэра, так как это темы отдельных статей.

Ссылки:

http://php.net/manual/en/book.pgsql.php

http://msdn.microsoft.com/ru-ru/vcsharp/default.aspx

http://house.hcn-strela.ru/BSDCert/BSDA-course/apc.html

 

Файлы обработки:

-