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

Обмен - Интеграция с WEB

Без сайта в интернете сейчас сложно представить какую-либо компанию, как и без продуктов компании 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

 

Скачать файлы

Наименование Файл Версия Размер
Структура базы 1С
.erf 6,91Kb
02.07.13
192
.erf 6,91Kb 192 Скачать бесплатно

См. также

Комментарии
1. Артур Аюханов (artbear) 867 04.12.09 17:38 Сейчас в теме
А как же тонкий клиент для 8.2 ?
2. Vitaly In-Touch (stail_en) 04.12.09 17:48 Сейчас в теме
3. Трактор Трактор (Трактор) 1136 04.12.09 17:57 Сейчас в теме
ИМХО web сервисы гораздо проще и эффективнее.

Минусы подхода № 3 по сравнению с web сервисами:
1. 1С несовместимо.
2. Сложнее в разработке поскольку требуется разбираться со странно именованными полями.
3. Нельзя писать в базу 1С

Минус использование web сервисов только один. Нужно работать двоим. И программисту 1С и web программисту. Свалить всю работу на одного не удастся.

Моё решение на эту тему http://infostart.ru/public/59207/
С web программистом у меня прекрасные отношения, по всем тонкостям выгрузки и структуры данных я ему могу дать и даю полноценный ответ, возникающие трудности решаем вместе.
В моём решении web сервисы сделаны на основе CommercML, поэтому есть избыточность. На работе сделаны без использования CommercML, там избыточности нет.

Для полноты обзора добавь в статью четвёртый способ - web сервисы.

Статье плюс за раскрытие темы прямого доступа к базе 1С.
4. Василий Казьмин (awk) 676 04.12.09 18:41 Сейчас в теме
(1) У тонкого клиента и веб клиента разное назначение. И оно далеко от сайтостроительства.

(3) Писать можно... 1С совместимо. Разбираться надо во всем, с чем работаешь. Веб сервисы спрятаны за словами, "некоторые из них". Не могу писать о том чего еще не попробовал.

А если честно я просто люблю T-SQL.
5. Василий Казьмин (awk) 676 04.12.09 22:58 Сейчас в теме
(3) Создал веб сервис. Мдя... Ну, я до этого их создавал на PHP и С#... Если честно, то гемморно... Надо на сервер ставить веб расширение 1С. А это значит закупаться лицензиями. Выводы:

Минусы:
1. Не кроссплатформенно (опубликовать на FreeBSD только после плясок с бубном можно).
1. 1С ключезависимо (дорого).

Плюсы:
1. Удобно (для 1С-ника).
2. Онлайн.
6. dushelov (Душелов) 04.12.09 23:11 Сейчас в теме
7. Василий Казьмин (awk) 676 04.12.09 23:25 Сейчас в теме
Если с одного клиента - то одна... А с десяти - десять...
8. Трактор Трактор (Трактор) 1136 05.12.09 00:32 Сейчас в теме
(5) Ненадо приписывать web сервисам несуществующие минусы.
>> 1. Не кроссплатформенно
B под линуксом и под виндовсом работают прекрасно. На FreeBSD ты сам говоришь тоже работают.

>> 1С ключезависимо (дорого).
web сервисы не проверяют наличие ключа. http://infostart.ru/forum/messages/forum19/topic28997/message330063/#message330063


При прямом доступе в базу 1С писать нельзя однозначно. Иначе рискуешь огрести кучу неприятностей.
- оперативная отметка времени (ее значение должно быть уникальным, а в рассматриваемом случае может оказаться не уникальным);
- полнотекстовый поиск будет работать неверно;
- неуникальность номеров и кодов практически гарантирована;
- блокировки объектов (используются в методе Заблокировать прикладных объектов 1С:Предприятия и при их редактировании в диалогах);


Кроме того при прямом доступе недоступен весь функционал 1С. Например в поле Представление адреса в регистре контактной информации это самое представление нужно писать в том виде в каком его возвращает функция глобального модуля, иначе адрес будет трактоваться как иностранный.
Придётся дублировать часть функционала 1С на сайте. А это гемор.
9. Василий Казьмин (awk) 676 05.12.09 10:13 Сейчас в теме
(8) А еще я говорил что у меня предвзятое отношение...

http://v8.1c.ru/predpriyatie/questions_licence.htm

58. Организация публикует всем желающим доступ к веб-сервисам, реализованным в "1С:Предприятии 8". Какое количество и каких лицензий необходимо приобрести Организации?

В данном случае на рабочих местах организации осуществляется доступ к информационной базе "1С:Предприятия 8" с использованием веб-сервисов, причем сами веб-сервисы реализуют всего лишь способ доступа к данным "1С:Предприятия 8" и предметом для отдельного лицензирования не являются. В соответствии с Лицензионным Соглашением "1С:Предприятия 8" каждое рабочее место, с которого тем или иным способом осуществляется доступ к данным информационной базы "1С:Предприятия 8", должно быть обеспечено клиентской лицензией. То есть Организации для работы с программами, использующими веб-сервисы, необходимо приобрести клиентские лицензии на такое количество рабочих мест, которое позволит одновременно осуществлять доступ к информационной базе.

См. также ответы на вопросы 31, 32, 56, 57.

Про прямую вставку в 1С, надо, отдельную статью писать...
10. Трактор Трактор (Трактор) 1136 05.12.09 12:44 Сейчас в теме
Про прямую вставку в 1С, надо, отдельную статью писать...

(9) Вот это дело! Такой статьи я ещё не видел. Можешь быть первым.
Правда это запрещено лицензионным соглашением 1С. Запрещено, но ненаказуемо.
11. dushelov (Душелов) 05.12.09 15:18 Сейчас в теме
(9) А написать свой вебсервис, который будет цепляться к 1С-ному? 1 же лицензия ;)
12. Игорь <...> (I_G_O_R) 41 05.12.09 15:37 Сейчас в теме
13. Трактор Трактор (Трактор) 1136 05.12.09 15:46 Сейчас в теме
(9) Вот и про прямой доступ к базе написали http://v8.1c.ru/predpriyatie/questions_licence.htm#64
64. Для реализации своих задач Организация предполагает изменить структуру некоторых таблиц базы данных. Также предполагается использовать хранимые процедуры и триггеры для реализации обработки данных, реализовать экспорт данных путем прямого чтения таблиц, добавить новые индексы и изменить структуру некоторых индексов. Имеет ли Организация право вносить в систему перечисленные изменения?


Лицензионное соглашение не позволяет использовать недокументированные фирмой "1С" средства для построения решений на платформе 1С:Предприятие. Это означает, что средства СУБД (или любые другие внесистемные средства) можно использовать только в том случае, если документация по продуктам линейки "1С:Предприятие" (включая ИТС) содержит явную рекомендацию использовать данное средство для решения данной задачи.

Во всех остальных случаях лицензионное соглашение позволяет использовать для построения решений только штатные средства платформы. В частности, можно обращаться к данным информационной базы только при помощи объектов "1С:Предприятия", специально предназначенных для работы с данными (запросы, справочники, документы и т.д.). Нельзя обращаться к данным информационной базы напрямую, минуя уровень объектов работы с данными "1С:Предприятия" - например при помощи средств СУБД или при помощи внешних компонент, которые реализуют прямой доступ к СУБД. Это ограничение распространяется на любые действия с данными, в том числе на изменение их структуры, а так же на чтение или изменение самих данных информационной базы или служебных данных "1С:Предприятия".

Данное ограничение необходимо для обеспечения стабильности работы механизмов системы, осуществления поддержки и возможности перехода на новые версии "1С:Предприятия".

Но ты статью напиши. Ибо база принадлежит клиенту и пункт 64 можно оспорить в суде.

(11) Это тоже запрещено толкованиями к лицензионному соглашению 1С :-) Например пункт 56
В соответствии с действующим Лицензионным соглашением, использование программных или аппаратных средств, уменьшающих количество пользователей, которые имеют непосредственный доступ к "1С:Предприятию 8", не уменьшает количества требуемых лицензий. Организация должна приобрести Клиентские лицензии по количеству пользователей, в действительности одновременно работающих с системой "1С:Предприятие 8".

За это 1С постоянно трамбуют на партнёрском форуме.
14. Василий Казьмин (awk) 676 05.12.09 20:58 Сейчас в теме
Веб сервисы к 1С 7.7 я писал.. А разговор про лицензии мне напоминает кота мотроскина. И его вечный вопрос: Чей телёнок? Если честно, то данные в базе данных - это не интеллектуальная собственность 1С. И ограничивать доступ к ней - это прямое нарушение законодательства РФ. Я даже по нашему законодательству могу дизассембилирьвать и вносить исправления в двоичный код 1С, если приобрел его на легальных основаниях. Есть в лицензионных соглашениях смешные пункты. Например: Разработчик не несет ответственности. Не надо подменять лицензионными соглашениями законодательство. Кстати если договор содержит нарушение законодательства, то он автоматически становится недействительным.
kswsar; markers; artbear; +3 Ответить
15. Игорь Л. (ilp06) 09.12.09 10:13 Сейчас в теме
пару замечаний, имхо.

1. веб сервер расположен на одной площадке с 1с-сервером, т.е. он ваш. в результате получаете головную боль по сопровождению вашего веб-сервера.
2. веб сервер расположен на площадке провайдера. вам придётся открыть доступ к 1c-sql-серверу, что потенциально очень приличная дыра. несколько лет назад в такую дыру провалились сотни тысяч подобных решений из-за головотяпства микрософт.

вы разрешаете пользователю генерировать запросы к 1c-sql-серверу. в обоих случаях (и п.1, и п.2) вы создаёте потенциальную опасность завалить ваш sql (например, генерируя роботом милионы запросов в секунду) или исказить/уничтожить в нём данные. если даже в коде ваших веб-программистов будет всё тип-топ, это не означает что нельзя взломать сам веб-сервер. да и за код ваших веб-программистов я бы не стал ручаться. погуглите на тему дыр в разных крутых/раскрутых веб-приложениях.

вывод, мой, естественно:
- очень вредное, потенциально опасное решение - лазить из веб в 1c-sql.
16. Aleks Mikitin (e-aleks) 09.12.09 11:11 Сейчас в теме
(5) Создал веб сервис. Мдя... Ну, я до этого их создавал на PHP и С#... Если честно, то гемморно... Надо на сервер ставить веб расширение 1С. А это значит закупаться лицензиями.Выводы:

Уважаемый вы путает Web расширение, и Web сервисы.

Web расширение - программный продукт 1С:Предприятия 8. Он позволяет организовать доступ через веб-интерфейс к функциональности прикладных решений новых категорий пользователей, в том числе и тех, у которых на компьютерах не установлена платформа 1С:Предприятия.

Для работы с web сервисами покупать и ставить данную конфу не обязательно, никто не мешает вам написать web сервис руками. Для решения поставленной вами задачи это не сложно.

17. Василий Казьмин (awk) 676 09.12.09 11:40 Сейчас в теме
(16) Не путаю. Если Веб сервис как код 1С - то нужны модули от 1С. Написать web сервис самому не сложно - согласен.
(15)
1. Если web сервер - не только реклама (хотя рекламу то же двигать надо), но и ещё что-то, то это "головная боль" в любом случае. У меня стоит - голова почему-то не болит.
2. Риски есть всегда. Вопрос как с ними бороться. Да я знаю не один способ взломать сервер. Из-за этого предпочитаю держать его у себя в сети. Но я знаю и пару способов противостояния атакам. Никто не отменял парсинг пакетов на моем фаерволе (FreeBSD + PF). Никто не отменял разграничение прав пользователей на SQL сервере. Если 1С не умеет пользоваться правами, то почему вы думаете, что я не умею. Если провести аналогию то: на машине ездить опасно, но ведь многие ездят. Поверьте, цепь не сильнее самого слабого из звеньев. А самым слабым звеном (на мой взгляд) являются пользователи внутри сети. Просто потому, что не умеют предохраняться.
18. Трактор Трактор (Трактор) 1136 09.12.09 11:57 Сейчас в теме
(17)
Если Веб сервис как код 1С - то нужны модули от 1С.

web расширение нужно только для 1С версий 8.0 и младше. Начиная с версии 8.1 web сервисы обеспечиваются средствами платформы.

В остальном согласен с тобой.
19. Василий Казьмин (awk) 676 09.12.09 12:27 Сейчас в теме
(18) Только платформа эта 1С. Я не имел ввиду web расширении 1C. Я говорил о модулях к web серверу от 1С. Прошу прощения за некорректность.
20. Игорь Л. (ilp06) 09.12.09 12:32 Сейчас в теме
(17) решение о том, привязывать ли корпаративный sql к экстра-net-web-приложению или не привязывать - в большинстве компаний решается в пользу - не привязывать. несмотря на очевидные преимущества on-line веб-приложения. если ит-службы поддержки достаточно мощные (не в плане количества, а в плане компетенции, т.е. способные осознать и предотвратить/минимизировать риски), то такая схема вполне имеет право на жизнь, почему бы и нет.
Для в вашей ситуации: риски - это не возможность взломать и т.п. риски - это деньги, теряемые в случае каких-либо инцидентов. вероятно, у вас это небольшие деньги. так что можно смело рулить самому без хостинг-провайдера и в случае проблем подкрутить где нужно.
ну а на счёт аналогий - вы же не поедете в отпуск на автомобиле, предпочтете самолёт или поезд или автобус на худой конец. если конечно не к бабушке в подмосковье :-) Это и есть минимизация рисков.
web-сервис - это в общем, тоже риски. только они немного поменьше, потому что: 1. этот интерфейс со стороны 1с писАли профи, следовательно дыр там априори меньше чем у обычного программера; 2. это стандартный механизм, а не изобретение велосипеда.
ну а для параноиков, к которым я и себя отношу, лучший механизм subj - файловый обмен.
21. Василий Казьмин (awk) 676 09.12.09 13:05 Сейчас в теме
Для в вашей ситуации: риски - это не возможность взломать и т.п. риски - это деньги, теряемые в случае каких-либо инцидентов. вероятно, у вас это небольшие деньги. так что можно смело рулить самому без хостинг-провайдера и в случае проблем подкрутить где нужно.

Нет взлом - это для меня потеря репутации, а это потеря денег (лично моих). Принятие IT решений в компании - это вопрос квалификации руководителя IT подразделения. Собственники, зачастую, ничего не смыслят в этих вопросах. Был у меня случай. В конторе где я работал была нарушена логическая структура базы данных (не я её нарушил - до меня умельцы были). То есть получить корректные данные было можно либо средствами 1С и долго (день, а то и неделя), либо прямыми запросами к SQL серверу (минуты три максимум). Оборот компании был примерно 2 000 000$ в месяц (2007 год). Когда ко мне подошёл директор по IT и спросил почему оно так? Я объяснил почему. Когда я услышал, что озвучил директор руководству, я упал под стол. Директор по IT рассказал, что такое индексы и что у нас с ними проблема. Цель была достигнута. Вопрос Почему так? для руководства был закрыт. Упал я под стол второй раз вместе со всем отделом - когда новый директор по IT (бывший программист 1С) сказал - "Я знаю, у вас проблема с индексами". Тогда я понял, что значит быть компетентным руководителем.
22. Игорь Л. (ilp06) 09.12.09 15:53 Сейчас в теме
(21) польза от прямых запросов конечно же может быть. но в данном subj это весьма рискованная ситуация. если существует хоть какая-нибудь возможность получать/изменять данные в sql средствами самой 1с - необходимо именно этой возможностью и пользоваться. Скорость доступа к данным совсем не единственный критерий применения той или иной технологии. немаловажно кроме перечисленных выше проблем с безопасностью и такие, на первый взгляд не очевидные вещи, как поддержка такого решения. например, имена таблиц, полей в разных базах с однотипной конфигурацией могут отличаться. написание кода, не зависящего от этой особенности - не такая уж простая задача. небольшое изменение структуры базы - весь веб-доступ порушился, а программер, который писал этот веб-доступ может уже давно не работать у вас. и даже если он и не уволился, он может и не вспомнить все те костыли, которые он наставил вокруг 1с.
это самая обычная ситуация, все, полагаю с этим сталкивались. но многие почему-то думают, что у них будет не так, как у предшественника.
23. Василий Казьмин (awk) 676 09.12.09 16:45 Сейчас в теме
(22) Я позволю себе вас перефразировать: Велика вероятность того что на место программиста придёт человек с меньшей квалификацией который не сможет поддерживать(изменить) решение. К сожалению - это сплошь и рядом. Особенно когда нет документации на решение. После моего увольнения - одной фирме пришлось нанят программиста SQL, программиста PHP, администратора UNIX, программиста 1С, программиста С#. А причина тому - это полное пренебрежение моих предупреждений о моей высокой загруженности и отсутствие времени на должное документирование. Вторая причина - это экономия на специалистах. Это отчётливо наблюдается когда фирма использует продукты типа 1С или Microsoft. Я не имею ничего против данных фирм. Но специалисты которые поддерживают их продукты ... иногда приводят меня в тихий ужас. Как можно работать системным администратором и настраивать фаервол - не зная на каких портах какие сервисы работают. Или программист 1С который не знает что такое 51 счёт или партионный учёт. Универсальность решений - это хорошо. Нарушение стандартов - это плохо. Но решение которое пишется (при соблюдении определенных условий) под клиента - всегда лучше ширпотреба который идёт в массы, правда и стоит он в разы дороже.
Душелов; +1 Ответить 1
24. Игорь Л. (ilp06) 09.12.09 16:55 Сейчас в теме
25. Василий Казьмин (awk) 676 09.12.09 17:13 Сейчас в теме
26. lucius (lucius) 10.12.09 11:16 Сейчас в теме
очередной раз высококачественный текст от awk, спасибо

печально наблюдать, что очередной же раз статья не находит читателя, в обсуждении принимают участие не профессионалы, а менеджеры (к бесславному сообществу коих вынужден отнести и себя).
Вместо дельного обсуждения - куча постов "а кабы че не вышло, ай-ай-ай".
27. Артур Аюханов (artbear) 867 10.12.09 17:00 Сейчас в теме
(26) Те, кому статья интересна, сами знают и делают нечто подобное, а остальным это просто ненужно - тупой файловый или вообще ручной обмен :)
Душелов; +1 Ответить 1
28. Василий Казьмин (awk) 676 10.12.09 17:17 Сейчас в теме
(27) Знал я одну контору которая лет пять назад специализировалась на переносе данных. Брались переносить из любой конфигурации в любую. Когда я узнал как они это делают, я удивился, но посчитав суммы понял, что это зачастую, экономически выгодно. Переносились данные вручную операторами.
Трактор; +1 Ответить
29. lucius (lucius) 10.12.09 17:45 Сейчас в теме
ну не совсем.
Вот я, как почетный ораклоид (а также подвижник, и ненавистник 1С нашего королевства (( с)Горин)) очень даже с интересом читаю, (и реализую) прямую работу с БД.
Не без гордости отмечу, что по моим ТЗ все фото товара, а также версии оригиналов документов (сканы, эксели, ворды и тд) хранятся в отдельной не 1С базе и подтягиваются по требованию.

Так что побольше грамотных статей и поменьше бессмысленных постов
30. dushelov (Душелов) 11.12.09 00:18 Сейчас в теме
А у меня болтается на сервере собственный сервис, который зацеплен к 1С через ком-коннектор и предоставляет собственный вебсервис наружу + следит за очередью транзакций на запись.
31. lucius (lucius) 11.12.09 15:31 Сейчас в теме
(30) ... а расскажи по подробнее, ежели не жалко
Оставьте свое сообщение