gifts2017

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

Опубликовал Василий Казьмин (awk) в раздел Обмен - Интеграция с 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
187
.erf 6,91Kb 187 Бесплатно

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Артур Аюханов (artbear) 04.12.09 17:38
А как же тонкий клиент для 8.2 ?
2. Vitaly In-Touch (stail_en) 04.12.09 17:48
3. Трактор Трактор (Трактор) 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) 04.12.09 18:41
(1) У тонкого клиента и веб клиента разное назначение. И оно далеко от сайтостроительства.

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

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

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

Плюсы:
1. Удобно (для 1С-ника).
2. Онлайн.
6. dushelov (Душелов) 04.12.09 23:11
7. Василий Казьмин (awk) 04.12.09 23:25
Если с одного клиента - то одна... А с десяти - десять...
8. Трактор Трактор (Трактор) 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) 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. Трактор Трактор (Трактор) 05.12.09 12:44
Про прямую вставку в 1С, надо, отдельную статью писать...

(9) Вот это дело! Такой статьи я ещё не видел. Можешь быть первым.
Правда это запрещено лицензионным соглашением 1С. Запрещено, но ненаказуемо.
11. dushelov (Душелов) 05.12.09 15:18
(9) А написать свой вебсервис, который будет цепляться к 1С-ному? 1 же лицензия ;)
12. Игорь <...> (I_G_O_R) 05.12.09 15:37
13. Трактор Трактор (Трактор) 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) 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) 09.12.09 11:40
(16) Не путаю. Если Веб сервис как код 1С - то нужны модули от 1С. Написать web сервис самому не сложно - согласен.
(15)
1. Если web сервер - не только реклама (хотя рекламу то же двигать надо), но и ещё что-то, то это "головная боль" в любом случае. У меня стоит - голова почему-то не болит.
2. Риски есть всегда. Вопрос как с ними бороться. Да я знаю не один способ взломать сервер. Из-за этого предпочитаю держать его у себя в сети. Но я знаю и пару способов противостояния атакам. Никто не отменял парсинг пакетов на моем фаерволе (FreeBSD + PF). Никто не отменял разграничение прав пользователей на SQL сервере. Если 1С не умеет пользоваться правами, то почему вы думаете, что я не умею. Если провести аналогию то: на машине ездить опасно, но ведь многие ездят. Поверьте, цепь не сильнее самого слабого из звеньев. А самым слабым звеном (на мой взгляд) являются пользователи внутри сети. Просто потому, что не умеют предохраняться.
18. Трактор Трактор (Трактор) 09.12.09 11:57
(17)
Если Веб сервис как код 1С - то нужны модули от 1С.

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

В остальном согласен с тобой.
19. Василий Казьмин (awk) 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) 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) 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) 09.12.09 17:13
26. lucius (lucius) 10.12.09 11:16
очередной раз высококачественный текст от awk, спасибо

печально наблюдать, что очередной же раз статья не находит читателя, в обсуждении принимают участие не профессионалы, а менеджеры (к бесславному сообществу коих вынужден отнести и себя).
Вместо дельного обсуждения - куча постов "а кабы че не вышло, ай-ай-ай".
27. Артур Аюханов (artbear) 10.12.09 17:00
(26) Те, кому статья интересна, сами знают и делают нечто подобное, а остальным это просто ненужно - тупой файловый или вообще ручной обмен :)
Душелов; +1 Ответить 1
28. Василий Казьмин (awk) 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) ... а расскажи по подробнее, ежели не жалко
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа