Без сайта в интернете сейчас сложно представить какую-либо компанию, как и без продуктов компании 1С. Но как их объединить?
Итак какие же есть варианты для отображения информации из 1С на сайте, некоторые из них:
- Создать и сохранить отчет в формате HTML.
-
Воспользоваться выгрузкой в базу данных сайта.
-
«Прямой запрос» к базе данных 1С.
Рассмотрим их плюсы и минусы:
В первом варианте плюсы очевидны — это быстрота и простота разработки.
Во втором варианте и сложность выше, и простоты нет. Такие варианты обычно делаются как: выгрузка в файл и пусть веб программист «мучается» с загрузкой в базу.
У обоих вариантов есть один недостаток — это оффлайн режим работы. То есть пользователь сайта видит информацию которая может быть уже не актуальна.
Попробую нарисовать все варианты (красным выделена актуальная информация):
Вариант 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