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

Публикация № 1308548

Разработка - Практика программирования

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

Разработаем вместе простой сервис регистрации ошибок для 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С. 

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

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

 

 

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

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

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

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

 

 

Специальные предложения

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

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

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

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

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

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

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

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

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

А по таймауту не знаю - надо заменить.
Cyberhawk; +1 Ответить
Оставьте свое сообщение

См. также

Использование программных перечислений, ч.1: строковые константы Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

Часто ли у вас возникает необходимость в коде выполнять сравнение на строку?

10.12.2016    37571    unichkin    74    

Множественные клики [Полтергейсты 1С]

Практика программирования v8 1cv8.cf Бесплатно (free)

Что будет, если нажимать на кнопки в Предприятии в момент выполнения кода? А если в отладке? Оказывается, 1С в отладке в ожидании запоминает нажатые кнопки, а потом выполняет их поочерёдно...

25.09.2020    980    SeiOkami    5    

Новое отображение ошибок в 1С

Практика программирования v8 1cv8.cf Бесплатно (free)

Рассмотрим развитие механизма отображения ошибок в 1С (начиная с 8.3.17)

10.08.2020    5064    SeiOkami    19    

Серверные вызовы, которые нельзя вызывать

Практика программирования v8 v8::УФ 1cv8.cf Бесплатно (free)

Не баян, а классика. Рассмотрим особенность платформы настолько же древнюю, как сами УФ.

12.05.2020    6348    SeiOkami    31    

Вспомогательные инструкции в коде 1С Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

Помогаем редактору кода 1С помогать нам писать и анализировать код.

15.10.2018    30580    tormozit    100    

Как ограничить поля отбора в динамическом списке и ничего не сломать

Практика программирования v8::УФ 1cv8.cf Бесплатно (free)

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

06.05.2020    5014    SeiOkami    3    

Программная работа с настройками СКД

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Нюансы программной работы с настройками системы компоновки данных в отчетах и динамических списках. Обзор всех видов настроек компоновки. Что в каких случаях правильно применять. В качестве примера рассмотрена работа с отборами и группировками.

27.01.2020    28068    ids79    26    

[СКД] Программное создание схемы компоновки данных

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Сделаем отчет на СКД полностью программно, без использования макета "схема компоновки данных".

15.01.2020    24735    John_d    22    

Оформление и рефакторинг сложных логических выражений Промо

Практика программирования v8 Россия Бесплатно (free)

В сложных логических выражениях нередко самому автору спустя какое-то время тяжело разобраться, не говоря уже о других программистах. Предлагаемая методика позволяет повысить наглядность таких выражений путем оформления в виде И-ИЛИ дерева и одновременно выполнять их рефакторинг.

20.09.2012    78218    tormozit    131    

Последовательности событий при проведении документа 1С. Шпаргалка + про формы + про расширения

Практика программирования v8 Россия Бесплатно (free)

Собрал информацию о событиях/подписках/расширениях в одном месте.

30.12.2019    19026    kuzyara    33    

30 задач. Странных и не очень

Практика программирования v8 Бесплатно (free)

30 задач на знание языка программирования 1С и некоторого поведения платформы. Маленьких. Странных и не очень.

02.12.2019    17268    YPermitin    72    

Как передать IP адрес, который вызвал HTTP запрос в 1C (для веб-сервера Apache)

Практика программирования v8 Бесплатно (free)

Столкнулся с задачей получения IP адреса, который вызывает http сервис 1С. Итак, решение:

22.11.2019    8589    Sibars    19    

Запись значения в поле ввода/формы со срабатыванием события ПриИзменении Промо

Практика программирования v8 1cv8.cf Россия Бесплатно (free)

Иногда возникает необходимость после записи значения в какое либо поле ввода/формы вызвать для него обработчик события ПриИзменении, а о вызове самого события приходится только мечтать. В этой статье приводится программный способ вызова этого события.

11.07.2007    48695    tormozit    41    

Таблица значений. Нюансы

Практика программирования v8 Бесплатно (free)

Обзор некоторых аспектов использования общеизвестного инструмента 1С.

01.10.2019    34178    Yashazz    50    

О программе Postman для тестирования API и для чего она нужна 1С-нику

Практика программирования Программное обеспечение (software) v8 Бесплатно (free)

Для чего нужна программа Postman для тестирования API и какая от него польза для 1С-программиста.

24.09.2019    12235    budidich    28    

[Шпаргалка] Программное создание элементов формы

Практика программирования Работа с интерфейсом v8 1cv8.cf Бесплатно (free)

Программное создание практически всех популярных элементов формы.

06.09.2019    51946    rpgshnik    63    

Как сделать из &НаКлиентеНаСервереБезКонтекста почти &НаКлиентеНаСервере Промо

Практика программирования v8 1cv8.cf Россия Бесплатно (free)

Как сделать метод формы, доступный на клиенте и на сервере одновременно, и сохранить при этом удобство разработки

10.09.2017    45041    tormozit    74    

Агрегатные функции СКД, о которых мало кто знает

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Пользуетесь ли Вы всеми возможными агрегатными функциями, которые предоставляет система компоновки данных? Если Вы используете только: СУММА, КОЛИЧЕСТВО, МИНИМУМ, МАКСИМУМ, СРЕДНЕЕ, то эта статья для Вас.

05.09.2019    50549    ids79    54    

Регистры бухгалтерии. Общая информация

Практика программирования Математика и алгоритмы v8 v8::БУ БУ Бесплатно (free)

Общая информация о внутреннем устройстве регистров бухгалтерии.

05.09.2019    29146    YPermitin    24    

Три костыля. Сказ про фокусы в коде

Практика программирования v8 Бесплатно (free)

Три интересных (или странных) костыля в коде, которые могут помочь в повседневных и не очень задачах.

03.09.2019    25749    YPermitin    80    

Выгрузка документа по условию Промо

Практика программирования Разработка v8 Бесплатно (free)

Что делать, если документы нужно выгружать не все подряд, а по какому-то фильтру: статусу, дате, набору условий... А что если он соответствовал этим условиям, а потом перестал? А если потом опять начал? Такие ситуации заставили попотеть не одного программиста.

25.04.2019    16130    m-rv    2    

Отслеживание выполнения фонового задания

Практика программирования Универсальные функции Разработка v8 1cv8.cf Бесплатно (free)

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

17.08.2019    31908    ids79    16    

Функции СКД: ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Подробное описание и использование внутренних функций системы компоновки данных: Вычислить, ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив, ВычислитьВыражениеСГруппировкойТаблицаЗначений.

08.08.2019    85516    ids79    49    

Фоновое выполнение кода в 1С - это просто

Практика программирования v8 1cv8.cf Бесплатно (free)

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

02.08.2019    36551    avalakh    22    

Как прикрутить ГУИД к регистру сведений Промо

Практика программирования Перенос данных из 1C8 в 1C8 Разработка v8 Бесплатно (free)

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

16.04.2019    20387    m-rv    17    

Разбираемся с параметрами редактирования СКД

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Связь по типу, Параметры выбора, Связи параметров выбора

31.07.2019    24595    json    14    

СКД - наборы данных и связи между ними, создание собственной иерархии, вложенные отчеты

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Набор данных объект. Использование в схеме компоновки нескольких наборов данных. Различные варианты связи наборов: объединение, соединение. Использование иерархии в отчетах на СКД. Создание собственной иерархии, иерархия детальных записей. Использование вложенных схем в отчетах на СКД.

26.07.2019    61779    ids79    11    

СКД - использование расширений языка запросов, секция ХАРАКТЕРИСТИКИ

Инструментарий разработчика Практика программирования v8 v8::СКД Бесплатно (free)

Автоматическое и не автоматическое заполнение полей компоновки данных. Использование расширений языка запросов для СКД «{…}», секция ВЫБРАТЬ, секция ГДЕ, параметры виртуальных таблиц. Автоматизированное использование дополнительных данных в запросе: секция ХАРАКТЕРИСТИКИ.

17.07.2019    36373    ids79    27    

Как сделать запрос на изменение данных Промо

Практика программирования v8 v8::Запросы 1cv8.cf Бесплатно (free)

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

01.06.2018    30885    m-rv    21    

Регистры сведений. За кулисами

Практика программирования Разработка v8 1cv8.cf Бесплатно (free)

Небольшие заметки по внутреннему устройству регистров сведений.

09.07.2019    26384    YPermitin    14    

"Меньше копипаста!", или как Вася универсальную процедуру писал

Практика программирования Разработка v8 v8::СКД 1cv8.cf Бесплатно (free)

Программист Вася разбирает подход создания универсальных методов на примере программного вывода СКД.

04.07.2019    19791    SeiOkami    50    

Работа с настройками системы компоновки данных

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Варианты отчетов, работа с настройками вариантов: структура группировок, поля отчета, отборы, сортировка, условное оформление, другие настройки, настройки отображения диаграмм.

02.07.2019    48180    ids79    17    

Метод формирования движений в типовых регистрах нетиповыми регистраторами Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

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

05.12.2017    28355    itriot11    34    

Создание отчетов с помощью СКД - основные понятия и элементы

Практика программирования Математика и алгоритмы v8 v8::СКД Бесплатно (free)

Основные принципы работы СКД. Понятия схемы компоновки и макета компоновки. Описание основных элементов схемы компоновки: наборы данных, поля, вычисляемые поля, ресурсы, параметры.

25.06.2019    53665    ids79    25    

Многопоточное ускорение однопользовательских нагрузок в 1С + Microsoft SQL Server 2017

Практика программирования Производительность и оптимизация (HighLoad) v8 v8::Запросы Бесплатно (free)

Взаимодействие с Microsoft SQL Server нередко вызывает трудности у 1С-ников, а потому интересны любые моменты, связанные с его использованием. О своем опыте работы с новым SQL Server 2017 участникам конференции Infostart-2018 рассказал директор ООО «Аналитика софт» Дмитрий Дудин.

11.06.2019    25402    dmurk    145    

Регистры накопления. Структура хранения в базе данных

Практика программирования Разработка v8 1cv8.cf Бесплатно (free)

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

16.05.2019    43998    YPermitin    30    

Использование классов .Net в 1С для новичков Промо

Практика программирования Разработка внешних компонент Универсальные функции v7.7 v8 Бесплатно (free)

Руководство для новичков. Написав статью http://infostart.ru/public/238584/, я понял, что многие не понимают того, что написано. Поэтому в этой статье постараюсь более подробно остановиться на азах и без кода на вражеском языке (C#)

27.01.2016    76697    Serginio    108    

О расширениях замолвите слово...

Практика программирования Разработка v8 Бесплатно (free)

О чём стоит задуматься при принятии решения о создании расширения конфигурации…

07.04.2019    35739    ellavs    126    

Git-репозитории для 1С-кода (опыт использования при небольших проектах)

Практика программирования v8 Бесплатно (free)

Инструкции по взаимодействию с Git-репозиторием, которые писались для тех наших программистов, которые вообще никогда не работали с Git (руководства в духе "Как получить код из git-репозитория?", "Как отправить код в git-репозиторий")...

28.03.2019    27601    ellavs    90    

Трюки с внешними источниками данных

Практика программирования Разработка v8 1cv8.cf Бесплатно (free)

Некоторые трюки для преодоления ограничений внешних источников данных.

14.03.2019    31694    YPermitin    53    

Автоматические и управляемые блокировки применительно к типовым конфигурациям 1С Промо

Математика и алгоритмы Практика программирования v8 v8::blocking 1cv8.cf Бесплатно (free)

Основные принципы работы с режимами автоматических и управляемых блокировок в 1С Предприятие 8. Теория и применение в типовых конфигурациях: БП, УТ, ЕРП

10.11.2018    35193    ids79    40    

Ошибки при работе с хранилищем конфигурации и способы их решения

Практика программирования v8 Бесплатно (free)

В статье собраны наиболее распространенные ошибки при работе с хранилищем конфигурации и способы их обхода и решения.

01.03.2019    40350    Смешной 1С    28    

Разработка и сценарное тестирование с Vanessa-ADD. Отчетность Allure. Автоматизация запуска сценариев

Практика программирования Vanessa Automation v8 Россия Бесплатно (free)

Формируем отчетность о результатах выполнения сценариев. Автоматизируем запуск.

26.02.2019    22396    Vladimir Litvinenko    27    

Тестер: частые вопросы Промо

Практика программирования v8 Бесплатно (free)

Ошибкам бой - тесты норма жизни!

25.07.2018    29384    grumagargler    28    

Возможности типовых шаблонов ограничения доступа на уровне записей (RLS)

Практика программирования БСП (Библиотека стандартных подсистем) Роли и права v8 v8::Права Бесплатно (free)

Краткий обзор применения типовых шаблонов ограничения доступа на уровне записей в конфигурациях, созданных на базе БСП: #ПоЗначениям, #ПоНаборамЗначений, #ПоЗначениямРасширенный, #ПоЗначениямИНаборамРасширенный

03.02.2019    40539    ids79    9    

Ускоряем 1С: модули с повторным использованием возвращаемых значений Промо

Практика программирования v8 Бесплатно (free)

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

04.09.2017    53073    m-rv    61    

EnterpriseData – часть 2. Процесс выгрузки данных

Практика программирования Обмен через XML v8 v8::УФ Россия Бесплатно (free)

Основные этапы выгрузки данных через ED, обработчики событий выгрузки, правила обработки данных, правила конвертации объектов, конвертация свойств первого и второго этапов, процедуры БСП, используемые при выгрузке данных, структура «КомпонентыОбмена».

26.12.2018    27157    ids79    31    

Новый подход к обмену данными EnterpriseData

Практика программирования Обмен через XML v8 v8::УФ Россия Бесплатно (free)

Хочу предложить Вашему вниманию цикл статей, посвященных обмену данными через универсальный формат (EnterpriseData или ED).

14.12.2018    42050    ids79    72