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

31.10.13

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Файл конфигурации всей системы
.cf 58,59Kb ver:1
5
5 Скачать (1 SM) Купить за 1 850 руб.

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

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

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

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

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

Есть конрагенты, у каждого контрагента может быть несколько баз, поэтому введен справочник "КРССправочникКонфигурацийКонтрагентов" где и указывается что контрагенту "ООО" и его конфигурации "Управление торговлей База для Ведения учета" присвоен номер "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С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

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

14400 руб.

29.04.2020    32717    106    152    

73

SALE! 20%

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

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

3600 2880 руб.

10.02.2017    110547    662    174    

702

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

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

4800 руб.

06.10.2023    4039    35    17    

44

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

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

4800 руб.

27.10.2021    23938    241    35    

78

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

Обработка предназначена для корректировки входящего НДС при смене системы налогообложения индивидуального предпринимателя с УСН на ОСНО в 1С:Бухгалтерия предприятия 3.0

4000 руб.

18.07.2024    690    1    0    

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

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

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

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

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

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

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