Имя: Пароль:
1C
1С v8
Нет соединения с локальным сервером Apache
,
0 nsergn
 
27.12.23
11:43
1) Работающий вариант
Есть база-источник (самописная) с Apache-сервером и есть база-приемник (серверная, Бухгалтерия)
Обработка в Бухгалтерии получает данные с базы-источника c указанного ip.
2) Неработающий вариант
База-источник скопирована на локальный компьютер, установлен Apache, произведена публикация на веб-сервере, через браузер по localhost и имени публикации вход в базу происходит на локальном компьютере
и есть та же база-приемник (серверная, Бухгалтерия) из первого варианта с той же обработкой.
Но при изменении ip-адреса удаленного компьютера на localhost сообщение:
"Во время выполнения действия была потеряна связь с сервером"
Почему не работает? Что я упустил?
1 Builder
 
27.12.23
11:45
(0) Ничего не понял, но зачем менять IP и вообще где-либо использовать localhost? Это же только СВОЙ компьютер.
2 nsergn
 
27.12.23
11:48
(1) Для изменения обработки, получающей данные из базы-источника (обработка пока работает) и не сломана) надо потестировать на копии некоторые изменения.
3 nsergn
 
27.12.23
11:53
+(2) потом в базе-источнике изменить отдаваемые данные, дополнить
4 Builder
 
27.12.23
12:13
(3) Что мешает прописать реальный IP компа и не страдать фигней?
5 nsergn
 
27.12.23
12:26
(3) я пробовал вместо localhost написать только 127.0.0.1
А такая простая мысль, как Вы озыучиили, лежащая на поверхности, и не пришла мне в голову )
Сейчас попробую.
6 nsergn
 
27.12.23
12:29
(4) попробовал написать реальный адрес 10.1....
В ответ - ошибка "Непредвиденный символ при чтении JSON"
7 nsergn
 
27.12.23
12:31
Ошибка при вызове метода контекста (ПрочитатьJSON)
{ВнешняяОбработка.ДокументыЗачисленияПоHttp.Форма.Форма.Форма(26)}:Структура = ПрочитатьJSON(ЧтениеJSON, Ложь, "Дата", ФорматДатыJSON.ISO);//, "ФункцияВосстановленияЧтения", Объект);
8 nsergn
 
27.12.23
12:38
Мой косяк, ошибка другая:
"Недопустимое состояние потока записи JSON"
9 nsergn
 
27.12.23
12:39
Ошибка при вызове метода контекста (ПрочитатьJSON)
{ВнешняяОбработка.ДокументыЗачисленияПоHttp.Форма.Форма.Форма(27)}:Структура = ПрочитатьJSON(ЧтениеJSON, Ложь, "Дата", ФорматДатыJSON.ISO);//, "ФункцияВосстановленияЧтения", Объект);
10 nsergn
 
27.12.23
12:50
код состояния 401
11 nsergn
 
27.12.23
12:57
(10) может с пользователем связано?
В базе-приемнике, откуда выполняется обработка(запрос), имя пользователя ИвановИИ, а в базе-источнике такого пользователя нет
12 nsergn
 
27.12.23
14:11
Создание пользователя с таким же именем и паролем в базе-источнике ни к чему не привели, ошибка та же -
"код состояния 401"
13 abask
 
30.12.23
16:00
опишите подробнее схему взаимодействия. как данные забираются
ws, hs, что-то другое?
14 nsergn
 
09.01.24
13:47
(13) hs
В базе-источнике есть HTTP-сервис getdocuments -работающий, если к работающей базе-источнику подключаться из БГУ на сервере, то соединение проходит и ответ обработка получает.
Как только база-источник копируется на локальный компьютер, там создается веб-сервис, база становится в браузере доступна, но данные уже не получаются.

В базе Бухгалтерии (приемник) выполняется код:
    Соединение = Новый HTTPСоединение(Объект.АдресСервиса);
    HTTPЗапрос = Новый HTTPЗапрос("/xxxx/hs/getdocuments/?from="+Формат(Объект.Период.ДатаНачала,"ДФ=yyyy-MM-dd")+"&to="+Формат(Объект.Период.ДатаОкончания,"ДФ=yyyy-MM-dd"));

где xxxx - имя веб публикации базы.
Уже и перенес ее в папку без русских букв в названии и повторно опубликовал.

Адрес если ставить localhost или 127.0.0.1, то связь отсутствует.
Если прописать реальный IP компьютера  -
"Код состояния 401"
15 Donkey_hot
 
09.01.24
15:35
(14) 401 - это, как правило, ошибка авторизации. Попробуйте обратиться к каждой из публикаций через браузер. Вероятно, на живой у вас пароль не спросит, а на тестовой будет выведен браузерный диалог авторизации. Если поведение такое, то сравните файлы default.vrd в рабочем и нерабочем вариантах. Скорее всего, в рабочем вручную прописан юзер.
16 nsergn
 
09.01.24
16:39
(15) действительно, через браузер в тестовой спрашивает логин-пароль.
В живой базе в  default.vrd  прописан пользователь и пароль.
Прописал в тестовой.
Теперь через браузер пароль не спрашивает, но ответ в браузере такой:
"{HTTPСервис.getdocuments.Модуль(13)}: Ошибка при вызове метода контекста (XMLЗначение)"
Что-то дальше надо настроить?
17 nsergn
 
09.01.24
17:15
в строке 13 такой код:
НачДата = XMLЗначение(Тип("Дата"),НачДата);
18 Donkey_hot
 
09.01.24
18:05
(17) Ну теперь Вы уже точно внутри, проще всего поставить точку останова и сделать вызов (не забыв подключить отладку http-сервисов). Параметры from, to точно в требуемом (yyyy-MM-dd) формате задали?
19 nsergn
 
10.01.24
13:54
(18) На серверной базе во внешней обработке нельзя же включить точки останова?
20 nsergn
 
10.01.24
13:59
(18) Как в (14) указано, так и осталось. Я вообще код еще нигде не менял. Только перенес базу-источник на локальный компьютер, сделал веб-публикацию и запустил внешнюю обработку в базе-приемнике.
Когда источник берется оригинальный (указывается его ip-арес), то эта обработка работает.
21 nsergn
 
10.01.24
14:06
на работающей базе-источнике default.vrd лежит в папке с базой в подпапке web, а у меня в C:\Apache24\htdocs\
И путь к базе другой, не как у меня.
Может тоже надо такие же пути сделать и базу заново опубликовать?
22 Donkey_hot
 
10.01.24
15:39
(21) Если вы получили сообщение из (16), значит вопросы авторизации благополучно решены. Сделайте скрин адресной строки браузера, как вызываете?
23 nsergn
 
10.01.24
16:34
(22) http://10.1.X.XX/idpo/hs/getdocuments?wsdl
(где ХХ- цифры адреса моего компьютера, где лежит база-источник и стоит Apache с опубликованной базой).
Также пробовал написать http://localhost/XXXX/hs/getdocuments
(XXXX-имя веб публикации)

Результат в обоих случаях одинаковый:
"{HTTPСервис.getdocuments.Модуль(13)}: Ошибка при вызове метода контекста (XMLЗначение)"
В строке 13 такой код:
НачДата = XMLЗначение(Тип("Дата"),НачДата);

Наверное, такой запрос без даты и возвращает такой ответ.
Обработка посылает запрос с датой, которая берется из поля на форме, я ничего не менял еще, в реальной базе-источнике код такой же и он работает.
24 Donkey_hot
 
10.01.24
18:07
(23) У Вас смешались веб-сервисы и http-сервисы. WSDL-описание характерно для первых. В Вашем же случае надо написать типа:

http://10.1.x.xx/idpo/hs/getdocuments?from=2024-01-01&to=2024-01-10

ну там даты подберите, чтобы в диапазоне какие-то документы были.
25 nsergn
 
11.01.24
10:40
(24) Спасибо, заработало!!!
Ответ вначале пришел с сообщением об ошибке - оказывается я уже внес изменение в обработку всего одну строчку и забыл про нее. В выдаваемом ответе была ссылка на ошибку в этой строке. Закомментировал строку и все заработало.
Теперь надо придумать как эту строку внести обратно, только правильно.
В ответ надо вставить два поля из табличной части документа - номер договора и дата договора.
Вначале пишу номер договора:
        МассивТабличнойЧасти = Новый Массив;
        Пока ВыборкаНомерСтроки.Следующий() Цикл
            ВыборкаДетальныеЗаписи = ВыборкаНомерСтроки.Выбрать();
    
            Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
                СтруктураТЧ = Новый Структура();
                //тут далее много полей идет...
                СтруктураТЧ.Вставить("СлушательТелефон", СокрЛП(ВыборкаДетальныеЗаписи.СлушательТелефон));
                //--- а это НомерДоговора - единственое поле, которое вставил и на нем вылетает с ошибкой:
                СтруктураТЧ.Вставить("СлушательНомерДоговора", СокрЛП(ВыборкаДетальныеЗаписи.СлушательНомерДоговора));
                //---
                МассивТабличнойЧасти.Добавить(СтруктураТЧ);
            КонецЦикла;
        КонецЦикла;
        Структура.Вставить("ТабличнаяЧасть", МассивТабличнойЧасти);
        МассивДокументов.Добавить(Структура);
    КонецЦикла;
26 nsergn
 
11.01.24
10:42
перед этим есть текст запроса, в котором выбирается в том числе и номер договора
27 Donkey_hot
 
11.01.24
11:28
(26) Ну Вы хотя бы текст ошибки приведите... А в идеале еще и текст запроса.
28 nsergn
 
11.01.24
17:31
Запрос = Новый Запрос;
    ТекстЗапроса =
        "ВЫБРАТЬ
        |    ЗачислениеНаЦиклСлушатели.Ссылка КАК Ссылка,
        |    ЗачислениеНаЦиклСлушатели.Ссылка.Номер,
        |    ЗачислениеНаЦиклСлушатели.Ссылка.Дата,
        |    ЗачислениеНаЦиклСлушатели.Ссылка.ПометкаУдаления,
        |    ЗачислениеНаЦиклСлушатели.Ссылка.Проведен,
        |    ЗачислениеНаЦиклСлушатели.НомерДоговора,
        |    ЗачислениеНаЦиклСлушатели.ДатаДоговора
//это часть запроса
        |ИЗ
        |    Документ.ЗачислениеНаЦикл.Слушатели КАК ЗачислениеНаЦиклСлушатели
        |ГДЕ
        |    ЗачислениеНаЦиклСлушатели.Ссылка.ДатаНачала МЕЖДУ &НачДата И &КонДата
        |
        |СГРУППИРОВАТЬ ПО
        |    ЗачислениеНаЦиклСлушатели.НомерСтроки,
        |    ЗачислениеНаЦиклСлушатели.Ссылка.Номер,
        |    ЗачислениеНаЦиклСлушатели.Ссылка.Дата,
        |    ЗачислениеНаЦиклСлушатели.Ссылка.ПометкаУдаления,
        |    ЗачислениеНаЦиклСлушатели.Ссылка.Проведен,

        |    ЗачислениеНаЦиклСлушатели.НомерДоговора,
        |    ЗачислениеНаЦиклСлушатели.ДатаДоговора
        |ИТОГИ ПО
        |    Ссылка,
        |    НомерСтроки";
29 Donkey_hot
 
11.01.24
17:43
(28) Очевидно, у Вас в выборке нет поля СлушательНомерДоговора.

Правильно будет   СтруктураТЧ.Вставить("СлушательНомерДоговора", СокрЛП(ВыборкаДетальныеЗаписи.НомерДоговора));
30 nsergn
 
11.01.24
17:46
(27) а текст ошибки отсутствует )
я что-то наверное изменил, отвлекся на другое и теперь не помню что именно
Но в таблицу в обработке не попадает НомерДоговора.
Завтра надо внимательно глянуть для начала, сейчас не соображаю )
Напишу завтра
31 nsergn
 
11.01.24
17:51
(29) и спасибо Вам большое, что помогаете
32 nsergn
 
12.01.24
12:40
(29) с НомерДоговора получилось, оказывается в запросе неправильно было написано
ЗачислениеНаЦиклСлушатели.НомерДоговора

а надо:
ЗачислениеНаЦиклСлушатели.НомерДоговора КАК НомерДоговораТабличнаяЧасть

так заработало, в ответ в браузере выдаются теперь Номера договоров из табличной части документа
33 nsergn
 
12.01.24
12:41
(29) А вот с ДатаДоговора это не сработало почему-то, хотя это соседнее поле с НомерДоговора
34 nsergn
 
12.01.24
13:31
ЗачислениеНаЦиклСлушатели.НомерДоговора
- а теперь и так работает.
Вообще не понятно, почему заработало )
35 Мимохожий Однако
 
12.01.24
13:55
Квест 1С в действии
36 nsergn
 
12.01.24
15:13
(35) Ага, теперь еще и ДатаДоговора выбираться стали - тоже непонятно, что случилось )
Теперь новый квест -
Не выводится в нужном формате дата:
В коде:
Структура.Вставить("ДатаДоговора", Формат(ВыборкаСсылка.ДатаДоговора,"ДФ='yyyy-MM-dd'"));
Выдает :
"28.03.2023 0:00:00"
37 nsergn
 
12.01.24
15:15
(36) не в той строке смотрю )
38 nsergn
 
12.01.24
15:27
В итоге всё получилось, ради чего тема создавалась. )
Спасибо всем, кто направлял )
29Donkey_hot и 1Builder - спасибо!