Имя: Пароль:
1C
1C 7.7
v7: Веб-сервис на файловой 77
,
0 Базис
 
naïve
22.09.20
07:45
Нужно по запросу с веб-сервера отдавать результат простого запроса.

Как у Василия Ивановича Чапаева -

- Петька! Приборы! (1)
- 140, командир! (2)

Как формировать json (2) - ясно. Как получать запрос (1) - неясно. Файл-флаг в каталоге ИБ\web и обработка ожидания - криво. База, повторюсь, файловая и это не изменить.
1 uzerp2
 
22.09.20
08:24
веб сервисов на 7-ке нету (она ж развитие прекратила где то в начала 2000-ных)
ты видимо хочешь http запрос послать из 7-ки
это видимо что-то внешнее использовать надо ( 1с 7.7 отправить файл json с помощью post-запроса )
2 ДенисЧ
 
22.09.20
08:34
(1) Он хочет принять этот запрос...
3 Bigbro
 
22.09.20
08:40
в 7ке либо обработка ожидания либо обработка внешнего события либо ручная инициация действий.
вроде больше вариантов заставить что-то 7ку сделать - нет.
4 ДенисЧ
 
22.09.20
08:42
(3) Олю отметаем?
5 Mikeware
 
22.09.20
08:44
(4) Запускать сеанс 1с по событию - долго, а оставлять висящим - стремно.
6 Bigbro
 
22.09.20
08:47
(4) ну да, оле, но это фактически событие тоже, которое извне приходит. то есть все равно нужна будет какая-то прокладка для приема запроса и пересылки в базу 1с.
7 ДенисЧ
 
22.09.20
08:47
(5) Или отлов событий, или ничего и...
8 ДенисЧ
 
22.09.20
08:48
(6) примитивный веб-сервер с цги
9 Eeeehhhh
 
22.09.20
08:53
(0) поставить 8 ))) нарисовать промежуточный веб сервис и юзать ком
10 Mikeware
 
22.09.20
09:06
может, проще свою ВК?
11 arsik
 
гуру
22.09.20
09:10
У 77 есть компонента стандартная. Называется "Web-расширение". Поставьте ее.
12 Базис
 
naïve
22.09.20
09:20
(2) Да, вопрос только в быстром и лёгком для базы получении сигнала.
(5) Стрёмно в части безопасности? Отдельный пользователь, прав дам минимум, выход по файлу-флагу и таймеру.
(8) Ссылку на это дашь?
(11) Спасибо, гляну.
13 Mikeware
 
22.09.20
09:23
(11) вообще, ее теоретически надо покупать.
Ну и я не уверен, что она решит задачу ТС (работал с ней последний раз в 2005, поэтому плохо помню)
14 Mikeware
 
22.09.20
09:24
(12) не, стремно в том, что лично я не люблю просто так болтающиеся процессы
15 Mikeware
 
22.09.20
09:24
16 ДенисЧ
 
22.09.20
09:29
(15) а в этом случае не будут болтаться процессы?
17 trad
 
22.09.20
09:33
(15) это только реализация пула com-серверов в dcom-обертке
ТС же нужнее вопрос реализации http слоя
Ему, по сути, нужна какая-нибудь реализация http-сервреа имеющего возможность достучаться в базу
18 Mikeware
 
22.09.20
09:33
(16) в этом - будут.
в принципе, dcom - это та же оля
19 Builder
 
22.09.20
09:35
Ух, вот только хотел создать похожую тему.
Только база скулевая, сейчас проверяю наличие файла запроса на ftp через обработку ожидания.
20 Garykom
 
гуру
22.09.20
09:36
(0) У меня есть веб-сервис для 1С 7.7

Продам недорого
21 trad
 
22.09.20
09:38
возможны варианты
1.WEB расширение. Но оно (13) и наверно потребует древнючую версию iis (и win).
2.Можно свою ВК написать, которая сама реализует простенький веб-сервер.
3.Можно (на каком-нибудь модном голанге) написать приложение/сервис, которое реализует веб-сервер, а северку в себя загрузить по ОЛЕ
22 trad
 
22.09.20
09:39
4.Обратиться к (20)
23 Garykom
 
гуру
22.09.20
09:43
(22) гы у меня вариант 3 из (21)
24 Garykom
 
гуру
22.09.20
09:49
(23) Вот так выглядит https://i.paste.pics/487daa893525c62776681adf442590c9.png
25 Базис
 
naïve
22.09.20
09:50
(20) Давай попробуем, кинь в личку описание, цену, совсем хорошо бы тест производительности (за какое время выполняется первый запрос "Количество товара с кодом %1 на складе %2 на ТА").
26 Базис
 
naïve
22.09.20
09:51
(19) Жыве 1с77!
27 Garykom
 
гуру
22.09.20
10:00
(25) По сути это обычный доступ по OLE в 1С 7.7
Только обернутый в http сервис

Где вызов 1С 77 из 1С 8.3 выглядит примерно так


&НаСервере
Функция ВыполнитьЗапрос(КодНаВыполнение, КолонкиРезультата)
    
    База = "\\Server1c77\Bases1C\BaseSQL\";
    Пользователь = "Администратор";
    Пароль = "";

    Соединение = Новый HTTPСоединение("192.168.1.11", 8090,,,,,);
    
    Заголовки = Новый Соответствие;
    Заголовки.Вставить("Base", СтрокаВBase64(База));
    Заголовки.Вставить("User", СтрокаВBase64(Пользователь));
    Заголовки.Вставить("Password", СтрокаВBase64(Пароль));
    
    Запрос = Новый HTTPЗапрос("/eval", Заголовки);
    Запрос.УстановитьТелоИзСтроки(""+КодНаВыполнение, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
    
    Ответ = Соединение.ОтправитьДляОбработки(Запрос);
    ТекстОтвета = Ответ.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8);

    Таблица = СтрокуВТаблицу(ТекстОтвета, КолонкиРезультата);

    Возврат Таблица;

КонецФункции

&НаСервере
Процедура ЗагрузитьКонтрагентыНаСервере()
    КодНаВыполнение = "
    |
    |лтзКонтрагенты = СоздатьОбъект(""ТаблицаЗначений"");
    |лтзКонтрагенты.НоваяКолонка(""Контрагент"");
    |
    |лдокПлатежка = СоздатьОбъект(""Документ.Платежка"");
    |
    |ДатаС = '01.01.2017';
    |ДатаПо = РабочаяДата();
    |
    |лдокПлатежка.ВыбратьДокументы(ДатаС, ДатаПо);
    |Пока лдокПлатежка.ПолучитьДокумент() = 1 Цикл
    |    Если лдокПлатежка.Проведен()<>1 Тогда
    |        Продолжить;
    |    КонецЕсли;
    |    лтзКонтрагенты.НоваяСтрока();
    |    лтзКонтрагенты.Контрагент = лдокПлатежка.Получатель;
    |КонецЦикла;
    |
    |лдокПриходная = СоздатьОбъект(""Документ.Приходная"");
    |лдокПриходная.ВыбратьДокументы(ДатаС, ДатаПо);
    |Пока лдокПриходная.ПолучитьДокумент() = 1 Цикл
    |    Если лдокПриходная.Проведен()<>1 Тогда
    |        Продолжить;
    |    КонецЕсли;
    |    лтзКонтрагенты.НоваяСтрока();
    |    лтзКонтрагенты.Контрагент = лдокПриходная.Поставщик;
    |КонецЦикла;
    |
    |лтзКонтрагенты.Свернуть(""Контрагент"","""");
    |
    |КоличествоКонтрагентов = лтзКонтрагенты.КоличествоСтрок();
    |лтзКонтрагенты.ВыбратьСтроки();
    |Пока лтзКонтрагенты.ПолучитьСтроку() = 1 Цикл
    |    Контрагент = лтзКонтрагенты.Контрагент;
    |   Поле(Контрагент.ИНН);
    |   Поле(Контрагент.КПП);
    |   Поле(Контрагент.Наименование);
    |   Поле(Контрагент.ЮрЛицо);
    |   Поле(Контрагент.ОсновнойСчет);
    |   Поле(Контрагент.Банк);
    |   Поле(Контрагент.БИК);
    |   Поле(Контрагент.КорСчет);
    |   Поле(Контрагент.ЮрАдрес);
    |   Поле(Контрагент.ФактАдрес);
    |   Поле(Контрагент.Телефоны);
    |   Поле(Контрагент.ДоговорНомер);
    |
    |    ДоговорДата = Контрагент.ДоговорДата;
    |    СтрокаГод = Формат(ДатаГод(ДоговорДата),""Ч(0)4"");
    |    СтрокаМесяц = Формат(ДатаМесяц(ДоговорДата),""Ч(0)2"");
    |    СтрокаЧисло = Формат(ДатаЧисло(ДоговорДата),""Ч(0)2"");
    |    ДоговорДата = """"+СтрокаГод+""-""+СтрокаМесяц+""-""+СтрокаЧисло;
    |   Поле(ДоговорДата);
    |
    |   Ввод();
    |КонецЦикла;
    |
    |";
    
    Колонки = "ИНН,КПП,Наименование,ЮрЛицо,ОсновнойСчет,Банк,БИК,КорСчет,ЮрАдрес,ФактАдрес,Телефоны,ДоговорНомер,ДоговорДата";
    Таблица = ВыполнитьЗапрос(КодНаВыполнение, Колонки);
    Для Каждого ТекСтр Из Таблица Цикл
        Сообщить("Загрузка "+ТекСтр.ИНН+" "+ТекСтр.Наименование+" "+ТекСтр.ДоговорДата);
        Элемент = СтруктураИзСтрокиТЗ(ТекСтр);
        ЗагрузитьКонтрагент(Элемент);
    КонецЦикла;
    
КонецПроцедуры
28 Salimbek
 
22.09.20
10:01
(23) А я на Ruby делал вариант 3 из (21) )))

Только мне быстро не надо было отвечать, поэтому сидел на сервере сеанс 1С-ки с пользователем "Робот" в процессах и мониторил этот мини-сервер с некоторой периодичностью. Как появлялись запросы - формировал ответ.
А если надо отвечать быстро, то лучше скрестить этот сервер с (15) Т.е. будут сидеть уже запущенные сеансы в памяти, к ним твой мини-сервер обращается и получает быстрый ответ. За счет того, что несколько сеансов работают одновременно можно уже обслуживать более-менее серьезную нагрузку.
29 Builder
 
22.09.20
10:53
(26) Да там такая нетленка, что на 8-ку еще лет 10 переписывать.
Сейчас к ней личный кабинет прикручиваем :)
30 trad
 
22.09.20
10:56
(29) Во. И у меня ЛК для ТП сделан.
Только http реализовал на 8-ке, а она уже стучится прямыми запросами в 7-ку.
31 Builder
 
22.09.20
11:00
(30) Ну как то держать 8-ку только ради прокладки между web и 7.7 мне показалось не очень оптимально.
Хотя как вариант можно рассмотреть.
А сам ЛК на чем написан?
32 trad
 
22.09.20
11:02
(31) Только ради этого наверно не рационально
Просто у нас 8-ка есть
33 trad
 
22.09.20
11:03
(31) "А сам ЛК на чем написан?"
На http-сервисах же
34 Builder
 
22.09.20
11:26
(32) Не ну у нас тоже есть, но чем меньше промежуточных звеньев, тем лучше.
(33) Не, сам фронт ЛК на 8-ке? Или движок какой или чистый PHP например?
35 trad
 
22.09.20
12:19
(34) сам фронт. Но он примитивный, там ничего лишнего.

https://prnt.sc/ulo83v
А по каждой ссылке формируется отчет и в виде html отдается
Все.
36 Mikeware
 
22.09.20
12:21
(35) а зачем так? никакой системы для мобильных устройств не юзаете?
37 trad
 
22.09.20
12:27
(36) А почему нет?
Какая разница разворачивать ту или иную систему. Моя реализация чем не система.
Устроена просто, работает быстро и онлайн.

Для своих ТП применяли А+. Сейчас этой части бизнеса нет.
А эти ТП не наши. Эксклюзивщики от производителей. У них свой софт.
38 Mikeware
 
22.09.20
12:37
(37) ну так почему бы этим эксклюзивщикам не отдавать данные для загрузки в их системы, чтоб смотрели "через одну дырку"?
39 trad
 
22.09.20
12:48
(38) отдать то я бы отдал, да только кто их возьмет и покажет так как нам этого надо.
Ноу рил.
40 trad
 
22.09.20
12:59
+ и у них у каждого свои геморои и тараканы. Нах нах мне это.
Представь компании типа балтики или пепси. Как ты представляешь хотя бы с пяток таких причесать под себя??!!
Они же сами диктуют порядок инфо-взаимодействия, и дистры им не указ.

В их системы (в их формате) я разумеется гружу и дебиторку и отгрузку заказов.
Да вот что-то ТП не могут через их системы оперировать этой информацией.
Им, при необходимости, приходилось связываться с нашим торговым отделом запрашивать инфу. Те отгружали по электропочте нужные отчеты.
Теперь оперативная инфа доступна круглосуточно без задержек.
ТП очень довольны, торговый отдел доволен. И это главное!
41 Mikeware
 
22.09.20
13:16
(40) с пепсями работаем...Влобешное слово iSales я знаю...
42 Злопчинский
 
22.09.20
20:09
(27) А докрутить как-то чтобы прокладка-сервис посылало в 77 ВнешнееСобытие (опционально-настраиваемо), с соответствующими данными?
43 Ёпрст
 
22.09.20
20:13
(42) кому ? Должен быть хотя бы 1 запущенный процесс 1с-ины, который бы это слушал
44 Garykom
 
гуру
22.09.20
20:46
(42) Внешнее событие умеет только ВК посылать.
Ну да можно ВК сваять которая роль веб-сервера играет, вроде для tcp/ip такие даже были.
45 Builder
 
24.09.20
11:01
(44) Вот вариант с внешним событием был бы отличным.
Где найти такую ВК?
А никто не пробовал ВК от сканеров ШК + виртуальный COM-порт и в него данные слать например?
46 Ёпрст
 
24.09.20
11:02
(45) формекс жешь.. умеет генерить внешнее событие
47 Builder
 
24.09.20
11:03
(46) Генерить должен сайт. А формексу то зачем генерить?
48 Базис
 
naïve
24.09.20
11:04
(46) Как что-то на веб-сервере может вызвать формекс?
49 Ёпрст
 
24.09.20
11:07
(47) ну да, не так понял.
Один хрен, это событие кто-то должен слушать всё время, т.е должен быть запущен сеанс 1с-ки
50 Builder
 
24.09.20
11:09
(49) Это не проблема. И мне кажется это лучше чем каждый определенный интервал времени опрашивать FTP сервер например.
51 Ёпрст
 
24.09.20
11:11
(50) проще уж сам вэб сервер опрашивать, на предмет есть там че или нет
52 Ёпрст
 
24.09.20
11:12
Опрос раз в минуту..не так и долго
53 Builder
 
24.09.20
11:21
(51) Чем лучше опрашивать web-сервер?
54 Ёпрст
 
24.09.20
11:25
(53) да обычным пост запросом
55 Builder
 
24.09.20
11:29
(54) Не, я про компоненту. Без нее же не получится.
v7plus ?
56 Ёпрст
 
24.09.20
11:33
(55) боже упаси
57 Ёпрст
 
24.09.20
11:33
это изделие вообще не надо испаользовать :)
58 Ёпрст
 
24.09.20
11:35
тупо через  СоздатьОбъект("Msxml2.XMLHTTP.6.0") хотя бы и его методы
59 Builder
 
24.09.20
11:36
(57) Ойц, с чего это? Вроде глюков не замечал.
60 Ёпрст
 
24.09.20
11:38
(59) парсить ответы ей же будешь ?
не-не-не... это медленно