Сервис регистрации ошибок 1С (пример создания)

13.10.20

Разработка - Инструментарий разработчика

Разработаем вместе простой сервис регистрации ошибок для 1С на самой 1С =)

 

Всем привет!

Сегодня продолжим рассматривать новый механизм платформы по отображения ошибок в 1С.

Ранее я показывал, как это в базе 1С выглядит со стороны пользователя, администратора и разработчика. А сегодня поговорим о сервисе регистрации ошибок.

Данная статья - текстовый вариант свежего видеоролика по теме.

 

 

Содержание

 

 

 

Введение ^

Что это такое? Это некий опубликованный http-сервис, на который автоматически будут отправляться возникающие у пользователей ошибки. Сервис будет их принимать, обрабатывать и хранить. А ответственные за разбор ошибок люди будут далее просматривать накопленные данные.

На чём мы это будем делать? Естественно, на 1С! И начнём прямо сейчас.

Для начала создадим новую базу для разработки. Назовём её "Сервис регистрации ошибок". Запускать её будем с версией 8.3.17. Так же сразу для удобства я сделаю себе хранилище разработки. И теперь можно разрабатывать.

 

 

Разработка HTTP-сервиса ^

 

Первое, что нам нужно в базе - создать новый HTTP-сервис. Назовём его "Основной Сервис". Укажем корневой URL. Пусть будет "main".

 

 

Теперь нам нужно добавить новый шаблон URL. Назовём его ПолучитьИнформацию. И в шаблоне укажем "/getInfo". Добавим в шаблон новый метод POST-метод с таким же названием и сразу создадим для него обработчик.

 

 

Но для работы сервиса нам нужен ещё один метод. Создадим новый шаблон URL и назовём его "ОтправитьОтчет". Шаблон у него будет "/pushReport". Аналогично прошлому шаблону, создадим POST-метод с обработчиком.

 

 

 

Публикация сервиса ^

В данном видео мы не будем рассматривать процесс установки сервера, публикации базы и так далее. По этой теме есть множество информации и публикация нашего сервиса ничем не отличается от других. По разворачиванию сервера могу посоветовать видео на канале Ильи Низамова. Лично я делал по этому видео: https://nizamov.school/server-1s-apache-ustanovka-apache/

Так что просто примем как факт, что для работы нашего сервиса я уже установил сервер, опубликовал базу и мы готовы начинать.

 

 

Смотрим на метод getInfo() ^

Я открою ту тестовую демо-базу, которую мы использовали в прошлой статье. Необходимо, чтобы в её настройках был указан наш сервис регистрации ошибок. 

 

 

Откроем в демо-базе нашу обработку, которая будет просто совершать ошибку. Появилось новое окно об ошибке и мы можем перейти в отладку нашего сервиса.

 

 

Мы сейчас находимся в отладке на методе "ПолучитьИнформацию" ("getInfo"). Давайте посмотрим, что нам пришло в запросе. Для этого выполним метод Запрос.ПолучитьТелоКакСтроку().

 

 

Что мы видим? Этим запросом 1С говорит нам информацию о себе. Какая конфигурация, какая платформа и версия приложения. И далее 1С ожидает ответа от этого первого метода. Нужно ли действительно отправлять на сервис регистрации текущую ошибку? Давайте теперь сделаем так, чтобы наш метод отвечал "да".

 

Разработка метода getInfo() ^

 

Я подготовил простую функцию, которая поможет нам в этом. Она нужна для преобразования значений 1С в JSON.

 

Текст функции
// Возвращает значение в виде JSON-строки.
// Преобразованы в JSON-строку (сериализованы) могут быть только те объекты,
// для которых в описании указано, что они сериализуются.
//
// Параметры:
//   Значение - Произвольный. Значение, которое необходимо сериализовать в JSON-строку.
//
// Возвращаемое значение:
//   Строка - JSON-строка представления значения в сериализованном виде.
//
Функция ЗначениеВСтрокуJSON(Значение) Экспорт
	
	ЗаписьJSON = Новый ЗаписьJSON;
	ЗаписьJSON.УстановитьСтроку();
	ЗаписатьJSON(ЗаписьJSON, Значение);
	
	Возврат ЗаписьJSON.Закрыть();
	
КонецФункции

 

Теперь создадим структуру ДанныеОтвета. В неё будем помещать передаваемые в качестве ответа данные. Комментарии к свойствам я буду брать из ИТС.

 



Функция ПолучитьИнформацию(Запрос)
	
	ДанныеОтвета = Новый Структура;
	
	//данная ошибка должна быть отправлена в сервис регистрации
	ДанныеОтвета.Вставить("needSendReport", Истина); 
	
	//Текст, который будет показан пользователю в качестве дополнительной информации об ошибке (подробнее см. здесь). 
	//https://its.1c.ru/db/v8317doc#bookmark:dev:TI000002261
	//Текст желательно возвращать на том языке, который будет понятен пользователю. 
	//Информацию о локализации можно получить из запроса, который поступает в метод getInfo.
	//Если желательно, чтобы пользователь отправил отчет о конкретной ошибке в сервис регистрации ошибок, 
	//то с помощью данного свойства можно показать пользователю рекомендацию, мотивирующую на отправку отчета об ошибке.
	ДанныеОтвета.Вставить("userMessage", "Чем быстрее разработчик узнает об ошибке, тем скорее она будет исправлена =)");
	
	//тип дампа, который нужно приложить к отчету об ошибке (аналогичен значению атрибута type элемента dump файла logcfg.xml)
	ДанныеОтвета.Вставить("dumpType", 1);
	
	
	ДанныеОтветаСтрокой = ЗначениеВСтрокуJSON(ДанныеОтвета);
	
	Ответ = Новый HTTPСервисОтвет(200);
	
	Ответ.УстановитьТелоИзСтроки(ДанныеОтветаСтрокой);
	
	Возврат Ответ;
	
КонецФункции

 

needSendReport - Булево.

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

UserMessage - Строка

В этот параметр можно передать текст, который будет показан пользователю в качестве дополнительной информации. Мы сюда поместим мотивирующую строку

"Чем быстрее разработчик узнает об ошибке, тем скорее она будет исправлена =)"

Так же есть ещё свойство dumpType - это тип дампа, который необходимо приложить к отчету об ошибке. Его мы сейчас рассматривать не будем.

Когда данные готовы, мы можем отправить их в качестве ответа. Но для начала нужно преобразовать их в JSON. Для этого и понадобится та функция, которую я показывал ранее.

Метод getInfo готов.

Обновим базу и снова сымитируем ошибку.

Мы в отладке. Посмотрим, как выглядят данные, которые мы даём в качестве ответа.

 

 

И её строковый вариант в формате JSON.

 

 

 

 

Смотрим метод pushReport() ^

В окне об ошибке мы видим нашу мотивирующую строку. Это значит, что метод getInfo сработал корректно и 1С готова к отправке отчета об ошибке.

 

 

Добавим в него комментарий пользователя и нажмём "Отправить".

 

 

Теперь мы в отладке на методе "ОтправитьОтчет" ("pushReport"). Посмотрим содержимое объекта "Запрос". Сначала попробуем выполнить метод ПолучитьТелоКакСтроку().

 

 

Содержимое явно не строковое. Всё верно - в этом запросе 1С присылает нам файл-архив с отчётом об ошибке. В нём будет содержаться то, что мы рассматривали в прошлом видео - вся информация об случившемся исключении. Получим же его в виде двоичных данных с помощью метода ПолучитьТелоКакДвоичныеДанные().

 

 

Это и есть необходимый нам файл. И, фактически, наша цель достигнута - мы создали сервис, который получает отчёты об ошибках пользователей. Но пока что никак их не обрабатываем.

 

 

Разработка метода pushReport() ^

И так, мы на входе имеем двоичные данные с архивом, в котором содержится нужная нам информация. Очевидно, что нам нужно её извлечь, обработать и сохранить в базе. Но мы не будем делать это сразу. Потому что на это может потребоваться время. В которое 1С будет ожидать ответа от сервиса. Так что длительные операции мы будем выполнять после. А в самом методе http-сервиса будем просто складывать полученные данные в специальный регистр. Такая запись потребует минимум времени. Не нагружает сервис регистрации ошибок, и при этом гарантирует сохранность данных.

Для начала добавим регистр сведений. Каждый отчёт об ошибке будет сохранён в отдельную запись регистра. Добавим измерение. Значение в нём должно быть максимально уникальным, ведь запросы могут происходить часто. Поэтому сделаем его типом "УникальныйИдентификатор". Можно, конечно, сделать строковый тип с длиной достаточной для идентификатора, но мы же делаем просто прототип и сейчас не будем заморачиваться в таких тонкостях.

 

 

И так, у нас есть регистр с измерением. Сами данные отчета будут храниться в ресурсе с типом ХранилищеЗначения.

 

 

Теперь создадим методы для работы с регистром. Перейдём в его модуль менеджера. Вставим для красоты "стандартный" БСПшный текст с директивами и областями.

 

Стандартные области
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

#Область ПрограммныйИнтерфейс



#КонецОбласти

#Область СлужебныйПрограммныйИнтерфейс



#КонецОбласти

#Область СлужебныеПроцедурыИФункции



#КонецОбласти

#КонецЕсли

 

И создадим экспортную процедуру ДобавитьЗапись(). Входными параметрами будут данные отчёта и идентификатор. При этом второй необязательный - если не передавать, то его значение будет автоматически генерироваться. Внутри метода будет создаваться и записываться новая запись регистра.

А так же процедуру по удалению записи регистра. Она нам понадобится позднее

 

Модуль менеджера
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

#Область ПрограммныйИнтерфейс

Процедура ДобавитьЗапись(Содержимое, Идентификатор = Неопределено, Дата = Неопределено) Экспорт
	
	МенеджерЗаписи = РегистрыСведений.ПолученныеОтчетыОбОшибках.СоздатьМенеджерЗаписи();
	МенеджерЗаписи.Активность    = Истина;
	МенеджерЗаписи.Идентификатор = ?(Идентификатор = Неопределено, Новый УникальныйИдентификатор, Идентификатор);
	МенеджерЗаписи.Содержимое    = Содержимое;
	МенеджерЗаписи.Дата          = ?(Дата = Неопределено, ТекущаяДата(), Дата);
	МенеджерЗаписи.Записать(Истина);
	
КонецПроцедуры

Процедура УдалитьЗапись(Идентификатор) Экспорт
	
	МенеджерЗаписи = РегистрыСведений.ПолученныеОтчетыОбОшибках.СоздатьМенеджерЗаписи();
	МенеджерЗаписи.Идентификатор = Идентификатор;
	МенеджерЗаписи.Прочитать();
	МенеджерЗаписи.Удалить();
	
КонецПроцедуры

#КонецОбласти

#Область СлужебныйПрограммныйИнтерфейс



#КонецОбласти

#Область СлужебныеПроцедурыИФункции



#КонецОбласти

#КонецЕсли

 

Вернёмся в метод http-сервиса. Сначала получим двоичные данные из входящего запроса. Это и есть наш файл. Запакуем его в хранилище значения и передадим в наш новый метод регистра сведений. Ответ менять не будем - просто вернём код 200 (успешное выполнение).

 

Функция ОтправитьОтчет(Запрос)
	
	ДанныеОтчета = Запрос.ПолучитьТелоКакДвоичныеДанные();
	ДанныеОтчета = Новый ХранилищеЗначения(ДанныеОтчета);
	
	РегистрыСведений.ПолученныеОтчетыОбОшибках.ДобавитьЗапись(ДанныеОтчета);
	
	Возврат Новый HTTPСервисОтвет(200);
	
КонецФункции

 

Теперь обновим базу и зайдём в неё. У нас появился регистр, записей в нём пока нет.

 

 

В демо-базе выполним нашу обработку с генерацией ошибки. Нажмём "Отправить" и сразу видим надпись "Отчет отправлен".

 

 

Хорошо, перейдём в сервис регистрации. Вот наша запись регистра.

 

 

Посмотрим как он будет заполняться в отладке. Для этого поставим точку останова и снова вызовем ошибку в демо-базе.

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

 

 

Отпускаем отладку. Запись в регистр добавилась.

 

 

А что сейчас в демо-базе? Кнопка "Отправить" теперь называется "Отправить (был отправлен)".

 

 

Если сейчас нажать на неё повторно, то она снова отправит тот же самый отчёт об ошибке. И мы видим, что в регистре уже три записи.

 

 

 

Постобработка данных ^

Теперь у нас есть быстрый сервис, который просто пишет входящие данные в регистр. И нам нужно их как-то обрабатывать.

В нашем прототипе сервиса регистрации сделаем новый вид документов "ОтчетыОбОшибках". В них будут превращаться двоичные данные из нашего буферного регистра. В качестве прототипа нам будет достаточно получать содержимое основного текстового файла из архива. Выделим для него реквизит ТекстОтчета с неограниченной строкой.

 

 

И сразу поправим одну недоработку. Было бы удобно, если в буферный регистр будет писаться помимо самого файла ещё и дата, когда он был получен. Добавим в регистр дату и заполним.

 

 

Теперь у нас есть источника данных (регистр сведений) и приёмник (документ). Нам нужен инструмент, который будет брать записи регистра и создавать на их основе документы. Добавим новую обработку. Сделаем ей форму и основную команду, которая будет выполнять метод модуля обработки.

 

 

А вот уже в модуле обработки будет содержаться логика превращения записи регистра в документ.

 

Логика выполнения такая:

Сначала нам нужно выбрать накопленные записи регистра сведений. И каждую запись попытаться обработать. Если это не удастся, то сообщить об ошибке и заодно сделать соответствующую запись в журнале регистрации.

Сама обработка записи будет заключаться в следующем. Сначала мы извлечём двоичные данные во временный файл. Затем откроем чтение Zip-файла и извлечём его содержимое в специально подготовленный временный каталог. Как только удалось это сделать, мы откроем в текстовом документе файл "report.json". Этот файл содержит основные данные отчета об ошибке. Содержимое этого файла и есть наш отчёт.

Теперь, когда мы имеем нужные нам данные, создадим новый документ, заполним его ими и запишем в базу. А временные файлы удалим.

Если запись регистра успешно была обработана, то удалим её тоже. Она нам больше не нужна.

Под капотом код с прототипа:
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

#Область ПрограммныйИнтерфейс

Процедура ВыполнитьОсновноеДействие() Экспорт
	
	Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ
	|	*
	|ИЗ
	|	РегистрСведений.ПолученныеОтчетыОбОшибках";
	РезультатЗапроса = Запрос.Выполнить();
	Если НЕ РезультатЗапроса.Пустой() Тогда
		Выборка	= РезультатЗапроса.Выбрать();
		Пока Выборка.Следующий() Цикл
			
			Попытка
				ОбработатьДанныеПолученногоОтчетаОбОшибке(Выборка);
			Исключение
				ТекстОшибки = "Не удалось обработать отчет об ошибке с идентификатором %1 по причине %2";
				ТекстОшибки = СтрШаблон(ТекстОшибки, Выборка.Идентификатор, ОписаниеОшибки());
			    ДобавитьСообщение(ТекстОшибки);
			КонецПопытки;
			
		КонецЦикла;
	КонецЕсли;
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытий



#КонецОбласти

#Область СлужебныеПроцедурыИФункции

Процедура ОбработатьДанныеПолученногоОтчетаОбОшибке(ДанныеОбОтчете)
	
	ДанныеОтчета = ДанныеОбОтчете.Содержимое.Получить();
	
	ИмяВременногоФайла = ПолучитьИмяВременногоФайла(".zip");
	ДанныеОтчета.Записать(ИмяВременногоФайла);
	
	Архиватор = Новый ЧтениеZipФайла(ИмяВременногоФайла);
	
	ВременныйКаталог = Новый Массив;
	ВременныйКаталог.Добавить(КаталогВременныхФайлов());
	ВременныйКаталог.Добавить("ОбработкаПолученныхОтчетовОбОшибках");
	ВременныйКаталог.Добавить(ДанныеОбОтчете.Идентификатор);
	ВременныйКаталог = СтрСоединить(ВременныйКаталог, "\");
	
	Архиватор.ИзвлечьВсе(ВременныйКаталог);
	Архиватор.Закрыть();
	УдалитьФайлы(ИмяВременногоФайла);
	
	ИмяОсновногоФайла = СтрШаблон("%1\%2", ВременныйКаталог, "report.json");
	ТекстовыйДокумент = Новый ТекстовыйДокумент;
	ТекстовыйДокумент.Прочитать(ИмяОсновногоФайла, КодировкаТекста.UTF8);
	
	ТекстОсновногоФайла = ТекстовыйДокумент.ПолучитьТекст();
	
	УдалитьФайлы(ВременныйКаталог);
	
	СсылкаНаОтчет = Документы.ОтчетыОбОшибках.ПолучитьСсылку(ДанныеОбОтчете.Идентификатор);
	ОтчетОбОшибке = СсылкаНаОтчет.ПолучитьОбъект();
	
	Если ОтчетОбОшибке = Неопределено Тогда
		ОтчетОбОшибке = Документы.ОтчетыОбОшибках.СоздатьДокумент();
		ОтчетОбОшибке.УстановитьСсылкуНового(СсылкаНаОтчет);
	КонецЕсли;
	
	ОтчетОбОшибке.ТекстОтчета = ТекстОсновногоФайла;
	ОтчетОбОшибке.Дата = ДанныеОбОтчете.Дата;
	ОтчетОбОшибке.Записать();
	
	РегистрыСведений.ПолученныеОтчетыОбОшибках.УдалитьЗапись(ДанныеОбОтчете.Идентификатор);
		
КонецПроцедуры

Процедура ДобавитьСообщение(ТекстСообщения)
	
	Сообщить(ТекстСообщения);
	
	ЗаписьЖурналаРегистрации("ОбработкаПолученныхОтчетовОбОшибках",
	УровеньЖурналаРегистрации.Ошибка,,,ТекстСообщения);
		
КонецПроцедуры

#КонецОбласти

#КонецЕсли

 

Выполним обработку. 

У нас создались три документа. В каждом хранится содержимое файла report.json. И теперь такую обработку можно поставить на регламентное выполнение и она будет превращать накопленные в регистре отчёты об ошибках в документы. 

 

 

 

Выводы ^

Мы разработали простой сервис регистрации ошибок и теперь понимаем, как работать с новым механизмом от 1С. 

Данный прототип можно развивать до более сложного инструмента, который поможет в вашей компании обрабатывать ошибки в базах.

А далее мы рассмотрим более подробно извлечение содержимого из архива с отчётом об ошибке. 

 

 

Понравилась статья? ^

Не будьте равнодушными! Поставьте лайк плюс, оставьте комментарий.

Не забудьте посмотреть видео по этой теме, в нём я наглядно показываю всё то, что говорится в статье: Сервис регистрации ошибок

И переходите к другим публикациям:

 

 

Вступайте в нашу телеграмм-группу Инфостарт

ошибки сервис регистрации отчеты http getInfo pushReport

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта 1С v8.3 Управляемые формы Запросы Система компоновки данных Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

15500 руб.

02.09.2020    201547    1114    410    

1019

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Программист Руководитель проекта 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP, УНФ, КА и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку одновременно в несколько потоков. А так же автоматически, без непосредственного участия пользователя. Решение в Реестре отечественного ПО

8400 руб.

20.08.2024    35303    203    104    

195

Пакетная печать Печатные формы Инструментарий разработчика Программист 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

Расширение для создания и редактирования печатных форм в системе 1С:Предприятие 8.3. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и прозрачность разработки, а также навести порядок в многообразии корпоративных печатных форм.

22200 руб.

06.10.2023    23823    63    26    

92

Инструменты администратора БД Инструментарий разработчика Роли и права Программист 1С v8.3 1C:Бухгалтерия Россия Платные (руб)

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

16000 руб.

10.11.2023    16361    70    39    

88

Инструментарий разработчика Программист 1С v8.3 Платные (руб)

Инструмент для написания и отладки кода в режиме «1С:Предприятие». Представляет собой консоль кода с возможностью пошаговой отладки, просмотра значений переменных любых типов, использования процедур и функций, просмотра стека вызовов, вычисления произвольных выражений на встроенном языке в контексте точки останова, синтаксического контроля и остановки по ошибке. В консоли используется удобный редактор кода с подсветкой, контекстной подсказкой, возможностью вызова конструкторов запроса и форматной строки.

9360 руб.

17.05.2024    34519    122    53    

165

Инструментарий разработчика WEB-интеграция 1С v8.3 1C v8.2 1C:Бухгалтерия 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Зарплата и Управление Персоналом 3.x Платные (руб)

Инструмент для генерации OpenApi (Swagger) спецификаций на основании файлов конфигураций 1С. Это консольное и десктопное приложение на языке Rust с полноценным редактором кода, содержащим автозамену и подсвечивание ошибок для быстрого и безошибочного написания документирующего комментария.

18000 руб.

22.11.2024    1565    1    0    

8

Инструментарий разработчика Программист 1С v8.3 1C:Бухгалтерия Россия Платные (руб)

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

6000 руб.

07.02.2018    107063    249    100    

313
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Sander80 104 13.10.20 17:12 Сейчас в теме
Скажите пожалуйста, вам не удалось как-то в адрес сервиса регистрации ошибок вбить логин и пароль? Я вчера пробовал после вашего видео, ничего не вышло. Хотя через curl первый метода сервиса регистрации очень легко включить логин и пароль.
2. SeiOkami 3590 13.10.20 17:32 Сейчас в теме
(1) к сожалению, никаких подобных настроек в самом интерфейсе 1С я найти не смог. А глубже пока не разбирался. Но, безусловно, это важный момент для сервиса регистрации. Если первый метод просто даёт нам инфу о клиенте, то второй присылает файл. И просто так (не доверяя однозначно источнику запроса) его нельзя принимать и распаковывать.
mordiros; +1 Ответить
3. Sander80 104 13.10.20 17:34 Сейчас в теме
(2) понятно, спасибо. Возможно, в 1с что-то не доработали.
Потому что через curl работает
http://user:password*url, но вбитый в поле настроек в 1с не прокатило
7. SeiOkami 3590 13.10.20 20:08 Сейчас в теме
(3) можно вывернуться. Для этого к адресу сервиса можно прибавить произвольные данные. Идентификатор или тот же пароль. Но, к сожалению, это будет светиться и в настройках в 1С и в адресе запроса (если его отловить).
8. Sander80 104 13.10.20 20:10 Сейчас в теме
(7) В каком формате? У меня не получилось...
9. SeiOkami 3590 13.10.20 20:13 Сейчас в теме
(8) вышлю, как буду у компьютера. Если к адресу сервиса прибавить произвольные данные, то их можно будет прочитать в методе в объекте Запрос. У меня получалось. На основе этого я хочу в конфигурации по регистрации ошибок сделать "подсервисы". Выделять не отдельный сервис для разных групп/нужд/клиентов, а просто в адресе сервиса прописывать нужный идентификатор
10. SeiOkami 3590 13.10.20 21:03 Сейчас в теме
(8)
Для этого нужно видоизменить шаблон URL

Например, так можно вставить в шаблон адреса параметр name

/{name}/getInfo
/{name}/pushReport

Сам адрес к сервису такой:
http://localhost/ErrorRegistrationService/hs/main/test/
где выделенное жирным - это значение параметра {name}
В результате, в отладке можно увидеть передаваемые параметры

11. Sander80 104 13.10.20 22:16 Сейчас в теме
(10) очень интересно, спасибо.
Хоть какой-то вариант дополнительной авторизации.

Со своей стороны могу сказать, что вот эта не готовность 1с передавать параметры авторизации привела к тому, что мы сейчас опубликовали через Апач базу отдельно, зашив в публикацию пользователя и пароль. Так хотя бы избегаешь необходимости держать базу без авторизации
22. Flok 3 12.04.21 16:29 Сейчас в теме
(1) Добрый день , я столкнулся с такой же проблемой и понял что единственный выход , это сделать вторую публикацию базы , где указать имя и пароль пользователя

У меня Apache 2.4 Сделал я так
1) Каталог моей публикации скопировал и переименовал
2 ) в файл default.vrd внес изменения -

<?xml version="1.0" encoding="UTF-8"?>
<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
base="/tskhidden"
ib="Srvr="ЧЧЧЧЧ";Ref="ННННН";usr=user;pwd=user">

Изменил параметр /base на новую публикацию
и в параметр IB - прописал имя пользователя и пароль ( в примере user )

Публикаю добавляем редактированием файла httpd.conf
4. Steelvan 308 13.10.20 18:20 Сейчас в теме
Поставил плюс за зачеркнутое вражеское слово "лайк".
5. ltfriend 13.10.20 18:33 Сейчас в теме
Народ тупеет. Уже софт ставят по видео-инструкциям.
user649060; +1 5 Ответить
6. SeiOkami 3590 13.10.20 19:00 Сейчас в теме
(5) как будто в видео инструкциях есть что-то плохое
bladeson; romankoav; rpgshnik; mrChOP93; lihomanov; adhocprog; serg-lom89; cuztam; +8 Ответить
12. serg-lom89 82 14.10.20 08:43 Сейчас в теме
"На чём мы это будем делать? Естественно, на 1С! И начнём прямо сейчас."
Ключевой посыл понятен,и это хорошо в своем роде)

но для ошибок есть и другие инструменты.Тот же ELK .
13. wowik 894 14.10.20 09:31 Сейчас в теме
+1 за статью, + подписка на канал. Успехов!
14. adhocprog 1129 14.10.20 12:43 Сейчас в теме
15. EGOLEGE 14.10.20 21:21 Сейчас в теме
16. Cyberhawk 136 24.10.20 11:47 Сейчас в теме
Как ведет себя отображение диалога (сообщения) об ошибке, если сервис недоступен?
17. SeiOkami 3590 24.10.20 16:41 Сейчас в теме
(16) пропадает возможность отправки на сервис. Остаётся только вариант с сохранением отчёта об ошибке в файл.

На видео можно это увидеть. Там был момент, когда я сервис держал долго в отладке и 1С решила, что он недоступен.

Вообще, не очень в этом плане удобно. Никакой информации нормально не отображается. Просто пропадает возможность отправки на сервис. Для пользователя это вообще не очевидно. Написали б хотя бы, что "Сервис регистрации недоступен, сохраните отчёт в файл".
SSErmolaev; Cyberhawk; +2 Ответить
18. Cyberhawk 136 24.10.20 17:03 Сейчас в теме
(17) А таймаут у проверки доступности сервиса известен?
Т.е. отображается ли окно ошибки с задержкой в случае, когда сервис недоступен? Ведь в формировании текста (подвала) сообщения участвует сам сервис, насколько я понял.
19. SeiOkami 3590 24.10.20 17:24 Сейчас в теме
(18) если сервис недоступен, то окно с ошибкой формируется так же (за исключением того доп. текста, который сервис должен был вернуть).
Задержка есть, но окно с ошибкой при этом функционирует. Просто надпись в подвале появится сразу, как будет получен ответ от сервиса.

А по таймауту не знаю - надо заменить.
Cyberhawk; +1 Ответить
20. rpgshnik 3885 22.03.21 04:18 Сейчас в теме
Спасибо за серию статей, очень интересно. Жду продолжения.

С меня подписка на канал и инфостарт :)
21. G_101846321568140033637 25.03.21 11:01 Сейчас в теме
Можно ли получить как то ссылку на документ в котором произошла ошибка?
23. buzzzard 51 22.10.21 16:46 Сейчас в теме
Я подготовил простую функцию, которая поможет нам в этом. Она нужна для преобразования значений 1С в JSON.
Текст функции


А где собственно текст функции?
24. SeiOkami 3590 22.10.21 16:59 Сейчас в теме
(23) а нажмите на фразу "текст функции"
25. buzzzard 51 25.10.21 10:34 Сейчас в теме
Немного не по теме, но в ее продолжение...
В функции pushReport http-сервиса делаю:

ДанныеОтчета = Запрос.ПолучитьТелоКакДвоичныеДанные();
ДанныеОтчета.Записать(ПолноеИмяФайла);

В итоге записывается файл с лишним содержанием, которое потом не позволяет открыть файл архиватором.
Что я делаю не так? Как с этим бороться?
Прикрепленные файлы:
26. buzzzard 51 25.10.21 13:00 Сейчас в теме
(25) Сам разобрался. Обычным архиватором такой zip не открыть.
Для распаковки нужно использовать именно ЧтениеZipФайла как и описано в статье.
27. 7OH 70 28.10.21 15:42 Сейчас в теме
(26) может сразу пересохранять ? чтобы потом можно было выдать на гора пользователю для просмотра.
Никто не поделится готовой конфой ? ))))
33. gruk 43 24.10.23 09:45 Сейчас в теме
(25) Вы сохраняете всё тело. Автор умолчал про Content-Type "multipart/form-data" и как с ним работать).
См. https://its.1c.ru/db/metod8dev#content:5917:hdoc:http-messages

Функция ПолучитьОтчетPOST(Запрос)
	
	ТипСодержимого = СтрРазделить(Запрос.Заголовки["Content-Type"], ";");
	
	Если ТипСодержимого[0] = "multipart/form-data" Тогда
		
		Разделитель = СтрРазделить(ТипСодержимого[1], "=")[1];
		
		Маркеры = Новый Массив();
		Маркеры.Добавить("--" + Разделитель);
		Маркеры.Добавить("--" + Разделитель + Символы.ПС);
		Маркеры.Добавить("--" + Разделитель + Символы.ВК);
		Маркеры.Добавить("--" + Разделитель + Символы.ВК + Символы.ПС);
		Маркеры.Добавить("--" + Разделитель + "--");
		
		Данные = Новый ЧтениеДанных(Запрос.ПолучитьТелоКакДвоичныеДанные());
		
		Данные.ПропуститьДо(Маркеры);

		Пока Истина Цикл
			Часть = Данные.ПрочитатьДо(Маркеры);
			Если Не Часть.МаркерНайден Тогда
				Прервать;
			КонецЕсли;
			ЧастьДанных = Новый ЧтениеДанных(Часть.ОткрытьПотокДляЧтения());
			ЗаголовкиЧасти = ПрочитатьЗаголовки(ЧастьДанных);
			ИмяЧасти = ПолучитьИмяЧасти(ЗаголовкиЧасти);
			Если ИмяЧасти = "report" Тогда

				 // Если распаковать
				 // Архив = Новый ЧтениеZipФайла(Новый ПотокВПамяти(ЧастьДанных.Прочитать().ПолучитьБуферДвоичныхДанных()));
				 // Архив.ИзвлечьВсе(<Путь>);

				 // Если сохранить
				 // ЧастьДанных.Прочитать().ПолучитьДвоичныеДанные().Записать(<ИмяФайла>);

				Возврат Новый HTTPСервисОтвет(200);
			КонецЕсли;                            
		КонецЦикла;
	КонецЕсли;
	
	Возврат Новый HTTPСервисОтвет(400);
	
КонецФункции
Показать
28. Necessitudo 14.06.22 10:47 Сейчас в теме
29. jwslavin 26 04.07.22 17:55 Сейчас в теме
Спасибо большое за статью. Помогла при разборе этого механизма. Единственный нюанс, который я не смог понять: если ошибка происходит на веб-клиенте, то на веб-сервис регистрации ошибки вместо post-запроса getInfo происходит options-запрос. И этот момент нигде в документации не освещен. В итоге так и не получилось получить ошибку с веб-клиента. У кого-нибудь были похожие трудности?
30. user1498686 29.07.22 13:08 Сейчас в теме
Это не поможет. Сделал у себя. Теперь присылают скриншоты на которых кнопка отправить отчет. И все время задают вопрос почему одна и таже ошибка так часто выскакивает.
31. user1146461 09.10.23 07:31 Сейчас в теме
Кто нибудь сталкивался с тем, что не работает на мобильной платформе?
34. user1497432 17.05.24 15:06 Сейчас в теме
Благодарим за статью. Использовали ее в написании своего сервиса. Подскажите, пожалуйста: При использовании метода ВызватьИсключение в сервисе по сбору ошибок метод getInfo отрабатывает (отладкой туда попадаем, все нормально), а pushReport - нет. Кто-то сталкивался с таким поведением ?
35. olbu 25.07.24 19:14 Сейчас в теме
Добрый день, сделал как тут описано, но в окне возникновения ошибки, у меня нет кнопки "Отправить", не подскажите, что я не доделал?

Ошибка - просто деление на 0.
36. olbu 26.07.24 07:59 Сейчас в теме
(35) Еще заметил следующее, если вызывать сервис из Браузера, с вводом Логина и Пароля, то 1с выпадает в отладку.
(Админы опубликовали сервис с запросом Логина и Пароля 1с.)

А при появлении ошибки в 1с, 1с не уходит в отладку.
путь к сервису:
https://localhost/test/hs/errors
37. Светлый ум 455 11.11.24 20:44 Сейчас в теме
Оставьте свое сообщение