Автоматическое тестирование ИБ через Web-Сервисы.

31.10.13

Задачи пользователя - Корректировка данных

Время идет, количество клиентов растет как и количество проблем. У кого то криво ведется учет и постоянно появляются отрицательные остатки, у кого то еще что то. Вот и появилась идея сделать систему которая в автоматическом режиме будет периодически проверять те самые отрицательные остатки или еще что то. Задача стояла сделать все как можно универсальней, что бы можно было приспособить ни только под отрицательные остатки. Под капотом более менее универсальное и интересное решение.

Скачать файлы

Наименование Файл Версия Размер
Файл конфигурации всей системы
.cf 58,59Kb
5
.cf 1 58,59Kb 5 Скачать

Время идет, количество клиентов растет как и количество проблем. У кого то криво ведется учет и постоянно появляются отрицательные остатки, у кого то еще что то. Вот и появилась идея сделать систему которая в автоматическом режиме будет периодически проверять те самые отрицательные остатки или еще что то. Задача стояла сделать все как можно универсальней, что бы можно было приспособить ни только под отрицательные остатки.

Для решения проблемы была выбрана технология Веб-Сервисы. Что требовалось сделать:

На сервере (Конфигурация КРС контроль работы системы) человек пишет код тестирования, именно код а ни какие то параметры. Потом этот код передается на сервер нашего клиента, и там выполняется. После чего результат выполнения отправляется обратно на наш сервер.

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

А теперь как это все выглядит:

Есть конрагенты, у каждого контрагента может быть несколько баз, поэтому введен справочник "КРССправочникКонфигурацийКонтрагентов" где и указывается что контрагенту "ООО" и его конфигурации "Управление торговлей База для Ведения учета" присвоен номер "211123".

Далее в справочнике "КРСОбщиеПараметрыПроверки" мы создаем параметры проверки, пишим код и присваеваем тип конфигурации.

После чего запоняем справочник "КРСДействующиеПараметрыПроверкиКлиентскихКонфигураций" там есть выбор шаблонов или можно написать новый код, указываем период проверки, через какое время сообщять если проверка просрочена и т.д выглядит так

 

На каждом сервере клиента указываем параметры подключения

У нас имеется два регламентных задания одно это сторона сервера, другое клиента.

  1. КонтрольРаботыСистемыКлиент
  2. КонтрольРаботыСистемыСервер

Листинг первого 

Функция ЗапуститьПроверкуКонфигурации() Экспорт
	Результат = "";
	АдресФайла = Константы.КонтрольРаботыРасположениеФайлаСервера.Получить();
	Определение = Новый WSОпределения(АдресФайла,"СамоТестирование","");
	Сервис = Новый WSПрокси(Определение,"http://www.webtest.org","КРСВернутьПараметрыПроверкиКлиенту","КРСВернутьПараметрыПроверкиКлиентуSoap");
	Сервис.Пользователь = "СамоТестирование";
	Сервис.Пароль = "";
	Ид = Константы.КРМИДКлиентаВУКККод1С.Получить();
	Конф = Константы.КРМИДКлиентаВУКККонфигурация.Получить();
	ВыборкаСервис = Сервис.ПолучитьПараметрыПроверкиКлиента(Ид,Конф);
	Для Каждого Парам Из ВыборкаСервис.ПараметрКлиент Цикл
		Попытка
			Выполнить(Парам.Текст);
		Исключение
			Результат = "При выполнении кода тестирования возникла ошибка!";
		КонецПопытки;
		Если Результат = "" Тогда
			Парам.Текст = "Проверка прошла успешно. Ошибок не обнаружено!";   
			Парам.ТребуетсяВмешательство = Ложь;
		Иначе
			Парам.Текст = Результат;
			Парам.ТребуетсяВмешательство = Истина;
		КонецЕсли;
	КонецЦикла;
	РезультатВыполненияЗаписиЛога = Сервис.ЗаписатьЛог(ВыборкаСервис,Ид,Конф);
	Если РезультатВыполненияЗаписиЛога = 0 Тогда
		///Процедура создания сообщения пользователю	
	КонецЕсли;
	Возврат РезультатВыполненияЗаписиЛога;
КонецФункции

Происходит подключение к серверу и получение параметров проверки с сервера.

Листинг второго

Процедура КРСКонтрольРаботыКлиентскихФоновыхСлужб() Экспорт
	Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ
	               |	ЕСТЬNULL(КРСЛогВыполненияЗаданийСрезПоследних.Контрагент, 0) КАК Контрагент,
	               |	КРСЛогВыполненияЗаданийСрезПоследних.Параметр,
	               |	КРСЛогВыполненияЗаданийСрезПоследних.ДатаСледующегоСтарта,
	               |	КРСДействующиеПараметрыПроверкиКлиентскихКонфигураций.СообщитьЕслиЗаданиеПросроченоБолееЧемМинут,
	               |	КРСДействующиеПараметрыПроверкиКлиентскихКонфигураций.РасположениеФайла,
	               |	КРСДействующиеПараметрыПроверкиКлиентскихКонфигураций.Владелец
	               |ИЗ
	               |	Справочник.КРСДействующиеПараметрыПроверкиКлиентскихКонфигураций КАК КРСДействующиеПараметрыПроверкиКлиентскихКонфигураций
	               |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КРСЛогВыполненияЗаданий.СрезПоследних КАК КРСЛогВыполненияЗаданийСрезПоследних
	               |		ПО (КРСЛогВыполненияЗаданийСрезПоследних.Параметр = КРСДействующиеПараметрыПроверкиКлиентскихКонфигураций.Ссылка)";
	Выборка = Запрос.Выполнить().Выбрать();
	Пока Выборка.Следующий() Цикл
		Если Выборка.Контрагент = 0 Тогда
			//Сформировать сообщение ответственному, Самотестирование не выполнялось. Проверте настройки на стороне клиента!
			Продолжить;
		КонецЕсли;
		Если  ТекущаяДата() > Выборка.ДатаСледующегоСтарта +(Выборка.СообщитьЕслиЗаданиеПросроченоБолееЧемМинут*60)  Тогда
			
			Попытка
				Определение = Новый WSОпределения(Выборка.РасположениеФайла);
				Сервис = Новый WSПрокси(Определение,"http://www.webtest.org","КРСПолучитьПараметрыПроверки","КРСПолучитьПараметрыПроверкиSoap");
				Результат = Сервис.ЗапуститьПроверкуКонфигурации();
				///Сформировать ообщение сотруднику о не работе фонового задания клиента
				Если Результат = 0 Тогда
					///Сформировать ообщение сотруднику, "При записи лога возникли ошибки"	
				КонецЕсли;
			Исключение
				///Сформировать сообщение сотруднику о недоступности вебсервиса клиента
				Сообщить(Выборка.Параметр);
			КонецПопытки;
			
		КонецЕсли;
	КонецЦикла;
КонецПроцедуры

Данная процедура ведет проверку выполнялись проверки или нет, если нет пробует запустить проверку удаленно на клиенте.

После дого как выполняется проверка все пишется в ригистр "КРСЛогВыполненияЗаданий".

 

Листинг веб сервисов 

"КРСВернутьПараметрыПроверкиКлиенту"

//!! Козырев 25/10/12
//Веб сервис сервера
//Функц. вовзращает таблицу параметров клиенту.
Функция ПолучитьПараметрыПроверкиКлиента(Ид,Конф) Экспорт
	Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ
	|	КРСДействующиеПараметрыПроверкиКлиентскихКонфигураций.Наименование,
	|	КРСДействующиеПараметрыПроверкиКлиентскихКонфигураций.КодПроверки
	|ИЗ
	|	Справочник.КРСДействующиеПараметрыПроверкиКлиентскихКонфигураций КАК КРСДействующиеПараметрыПроверкиКлиентскихКонфигураций
	|ГДЕ
	|	КРСДействующиеПараметрыПроверкиКлиентскихКонфигураций.Владелец.Код = &КонтрагентКод
	|	И КРСДействующиеПараметрыПроверкиКлиентскихКонфигураций.Конфигурация.Код = &Код";
	Запрос.УстановитьПараметр("КонтрагентКод",Строка(Ид));
	Запрос.УстановитьПараметр("Код",Строка(Конф));
	ТаблицаПараметровТип = ФабрикаXDTO.Тип("http://www.webtest.org","Параметры");
	ТаблицаПараметров = ФабрикаXDTO.Создать(ТаблицаПараметровТип);
	ПараметрТип = ФабрикаXDTO.Тип("http://www.webtest.org","Параметр");
	Выборка = Запрос.Выполнить().Выбрать();
	Пока Выборка.Следующий() Цикл
		Параметр = ФабрикаXDTO.Создать(ПараметрТип);
		Параметр.Наименование = Выборка.Наименование;
		Параметр.Текст = Выборка.КодПроверки;
		ТаблицаПараметров.ПараметрКлиент.Добавить(Параметр);
	КонецЦикла;
	Возврат ТаблицаПараметров;
КонецФункции
//Вызывается с клиента.Записывает лог проверки системы клиента.
//Возвращает 0 или 1 (0- запись лога НЕ удалась, 1-запись лога прошла успешна).
Функция ЗаписатьЛог(ТаблицаТестирования,Ид,Конфигурация) Экспорт
	КодВыполненияЗаписи = 0 ; 
	Попытка
		Для Каждого Парам Из ТаблицаТестирования.ПараметрКлиент Цикл
			Рег = РегистрыСведений.КРСЛогВыполненияЗаданий.СоздатьМенеджерЗаписи();
			Рег.Период = ТекущаяДата();
			Рег.Контрагент = Справочники.Контрагенты.НайтиПоКоду(Ид);
			Рег.Параметр = Справочники.КРСДействующиеПараметрыПроверкиКлиентскихКонфигураций.НайтиПоНаименованию(Парам.Наименование);
			Рег.Результат = Парам.Текст;
			Рег.Конфигурация = Справочники.КРССправочникКонфигурацийКонтрагентов.НайтиПоКоду(Конфигурация);
			Рег.ЕстьОшибки = Парам.ТребуетсяВмешательство;
			Рег.ДатаСледующегоСтарта = ТекущаяДата()+(Справочники.КРСДействующиеПараметрыПроверкиКлиентскихКонфигураций.НайтиПоНаименованию(Парам.Наименование).ПериодПроверки*60);
			Рег.Записать();
			КодВыполненияЗаписи = 1;
		КонецЦикла;	
	Исключение
		КодВыполненияЗаписи = 0;
	КонецПопытки;
	Возврат КодВыполненияЗаписи;
КонецФункции
//! Козырев 25/10/12
 

Второй "КРСПолучитьПараметрыПроверки"

//!! Козырев 25/10/12
//Веб сервис клиента.
//проц. запуска проверки системы соеденяется с веб сервисом Сервера, получает таблицу параметров проверки, выполняет проверку, вызывает функцию записи лога на Сервере
// возвращает 0 или 1 (0-запись лога НЕ удалась, 1- запись лога прошла успешно) 
Функция ЗапуститьПроверкуКонфигурации() Экспорт
	Результат = "";
	АдресФайла = Константы.КонтрольРаботыРасположениеФайлаСервера.Получить();
	Определение = Новый WSОпределения(АдресФайла,"СамоТестирование","");
	Сервис = Новый WSПрокси(Определение,"http://www.webtest.org","КРСВернутьПараметрыПроверкиКлиенту","КРСВернутьПараметрыПроверкиКлиентуSoap");
	Сервис.Пароль = "";
	Сервис.Пользователь = "СамоТестирование";
	Ид = Константы.КРМИДКлиентаВУКККод1С.Получить();
	Конф = Константы.КРМИДКлиентаВУКККонфигурация.Получить();
	ВыборкаСервис = Сервис.ПолучитьПараметрыПроверкиКлиента(Ид,Конф);
	Для Каждого Парам Из ВыборкаСервис.ПараметрКлиент Цикл
		Попытка
			Выполнить(Парам.Текст);
		Исключение
			Результат = "При выполнении кода тестирования возникла ошибка!";
		КонецПопытки;
		Если Результат = "" Тогда
			Парам.Текст = "Проверка прошла успешно. Ошибок не обнаружено!";   
			Парам.ТребуетсяВмешательство = Ложь;
		Иначе
			Парам.Текст = Результат;
			Парам.ТребуетсяВмешательство = Истина;
		КонецЕсли;
	КонецЦикла;
	РезультатВыполненияЗаписиЛога = Сервис.ЗаписатьЛог(ВыборкаСервис,Ид,Конф);
	Если РезультатВыполненияЗаписиЛога = 0 Тогда
		///Процедура создания сообщения пользователю	
	КонецЕсли;
	Возврат РезультатВыполненияЗаписиЛога;
КонецФункции
//! Козырев 25/10/12

Тут думаю все понятно.

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

Интеграция производиться простым сравнением и объединением по подсистемам. Вся система разбита на две подсистемы Клиентская часть и Сервераная.

P.S. Не судите строго:) это был мой первый опыт работы с Веб сервисами да и вообще с чем то подобным.

Веб Сервисы Веб-Сервисы Web-Сервисы 1C Тестирование Проверка Автоматическое Автомат Web-Service

См. также

Исправление в 1С:ЗУП/ЗКГУ ошибок по НДФЛ и взаиморасчетам с сотрудниками на начало расчетного года.

Корректировка данных Зарплата Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры бюджетного учреждения 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет НДФЛ Платные (руб)

Обработка исправляет технические ошибки по НДФЛ, взаиморасчетам с сотрудниками в 1С:ЗУП (1С:ЗКГУ) на начало года. Фактически все ошибки, которые проявляются в ведомостях на выплату, расчетных листках, при заполнении ведомостей на выплату и отчетах 6-НДФЛ и т.д. нужно начинать исправлять с начала расчетного года. Это позволит быть уверенными, что после завершения расчетов предыдущего года, начали работать с «чистого листа» без ошибочных остатков.

4800 руб.

06.10.2023    2317    29    15    

33

Тестирование и исправление ключей аналитики ERP, УТ11, КА

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

Незаменимая обработка для сопровождения конфигураций: ERP, УТ, КА. Позволяет вычистить многие ошибки в ключах аналитики, в ключевых справочниках конфигурации.

3600 руб.

10.02.2017    106799    633    173    

676

Ускоренное проведение документов (x4), устранение ошибок 60/62 счетов и зачет авансов (Бухгалтерия 3.0)

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

Расширение «Оперативное проведение» в 4 раза уменьшает время проведения документов и закрытия месяца. Является комплексным решением проблем 62 и 60 счетов. Оптимизирует проведение при включенной функциональной опции «Раздельный учет НДС». Используется в более 10 организациях уже 2 года. Совместимо с конфигурацией Бухгалтерия 3.0 (+КОРП).

14400 руб.

29.04.2020    27372    79    146    

59

Исправление ошибки закрытия месяца "Обнаружены ненулевые остатки по суммам при нулевом остатке по количеству в регистре себестоимости по организации". УТ 11.4,УТ 11.5, КА 2.4,КА 2.5, ERP 2.4, ERP 2.5, КА 2 Казахстан, Управление торговлей 3 для Казахстана

Закрытие периода Корректировка данных Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 11 Управленческий учет Платные (руб)

Закрытие месяца - важный процесс в современных конфигурациях, таких как УТ 11.4, УТ 11.5, КА 2.4, КА 2.5 ERP 2.4,ERP 2.5, КА 2 Казахстан, УТ 3 Казахстан регламентные операции влияют на расчет себестоимости, и ошибки в данном расчете не дают картины деятельности организации.

2400 руб.

27.10.2021    22318    299    35    

71

SALE! 20%

Заполнение документа "Корректировка регистров" произвольными данными

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

Внешняя обработка, позволяющая произвольным образом заполнять документ "Корректировка регистров" Предназначена для использования в конфигурациях "Управление торговлей 11", "Управление небольшой фирмой", "ERP Управление предприятием", а также в других конфигурациях, в состав которых входит библиотека стандартных подсистем (БСП) версии 2.2+ и указанный выше документ.

2400 1920 руб.

13.07.2015    50164    171    29    

121
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Новиков 292 31.10.13 14:21 Сейчас в теме
В типовых конфигурациях, для подобных выкрутасов есть выполнение отчетов по расписанию с отсылкой оного на e-mail.
2. WizaXxX 360 31.10.13 14:41 Сейчас в теме
Да потом данные из письма заносишь в 1с ручками а потом строишь отчеты...
Здесь же данные заносятся автоматом, плюс можно написать тестирование чего угодно.

Кому удобнее через почту, почему нет?! я что заставляю? мне такой вариант понравился больше.
3. Yashazz 4709 31.10.13 17:16 Сейчас в теме
Нечто мне подсказывает, что произвольный "код проверки" в таких случаях - это очаровательная дыра в безопасности. Ваши клиенты знают о подобной фиче?
Светлый ум; AlX0id; planar74; VasMart; charushkin; DitriX; WizaXxX; +7 Ответить
4. WizaXxX 360 31.10.13 18:38 Сейчас в теме
Согласен , об этом не думал , вы имеете ввиду что можно написать запрос и получить данные из базы? Если так то все клиенты находятся у нас на поддержке и у нас итак имеется полный доступ, и про безопасность веб сервисов, можно использовать защищенное соединение.
5. DitriX 2091 01.11.13 21:38 Сейчас в теме
(4) что то мне подсказывает что на той стороне есть конструкция ВЫПОЛНИТЬ. И если это так - то это просто пипец :)
Если еще с 8.3, то там можно поставить режим безопасности. а иначе - можно получить доступ к серверу, а там уже ...

Не шутите так НИКОГДА :)

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

Так что переделайте это все, моя к вам просьба.

Иначе сейчас начинающие программисты - начнут это все копировать, а вы уж думайте о последствиях.
charushkin; +1 Ответить
6. WizaXxX 360 05.11.13 07:54 Сейчас в теме
(5) Спасибо за совет:) и на будущее учту что больше надо думать о безопасности.
Задача так и стояла сделать так что бы на стороне клиента можно было выполнить любой код. Задачу я выполнил но о безопасности даже не задумывался, видимо заказчика это устраивало раз он тоже ни чего не сказал.
7. charushkin 104 06.11.13 07:44 Сейчас в теме
(6)
видимо заказчика это устраивало раз он тоже ни чего не сказал

Заказчик мог об этом и не подумать. В любом случае, я бы на вашем месте предупредил его о возможных, скажем так, проблемах
8. WizaXxX 360 06.11.13 14:19 Сейчас в теме
Оставьте свое сообщение