XMLTsdMagazinVasilek/Catalogs/ПодключаемоеОборудование/Ext/ManagerModule.bsl

331 lines
25 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ПрограммныйИнтерфейс
// Возвращает список подключенного в справочнике ПО по установленному отбору
//
// Параметры:
// Отбор - см. МенеджерОборудованияКлиентСервер.СписокОборудованияОтбор.
//
// Возвращаемое значение:
// Массив из Структура.
//
Функция СписокОборудования(Отбор) Экспорт
Идентификатор = Отбор.Идентификатор;
ТипыПО = Отбор.ТипыПО;
РабочееМесто = Отбор.РабочееМесто;
Организация = Отбор.Организация;
МассивТиповПО = МенеджерОборудования.ПолучитьТипыОборудования(ТипыПО);
СетевоеОборудование = Отбор.СетевоеОборудование;
ТекущийПользовательИБ = Строка(ПользователиИнформационнойБазы.ТекущийПользователь());
КодЯзыка = Отбор.КодЯзыка;
УстановитьПривилегированныйРежим(Истина);
Если НЕ ЗначениеЗаполнено(РабочееМесто) Тогда
// Если РМ не задано в параметрах, то всегда текущее из параметров сеанса.
РабочееМесто = МенеджерОборудованияВызовСервера.РабочееМестоКлиента();
КонецЕсли;
Запрос = Новый Запрос();
ТекстЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ПодключаемоеОборудование.Ссылка КАК Ссылка,
| ПодключаемоеОборудование.Наименование КАК Наименование,
| ПодключаемоеОборудование.ТипОборудования КАК ТипОборудования,
| ПодключаемоеОборудование.ДрайверОборудования КАК ДрайверОборудования,
| ПодключаемоеОборудование.ДрайверОборудования.ИмяПредопределенныхДанных КАК ДрайверОборудованияИмя,
| ПодключаемоеОборудование.ДрайверОборудования.Предопределенный КАК ВСоставеКонфигурации,
| ПодключаемоеОборудование.ДрайверОборудования.ИдентификаторОбъекта КАК ИдентификаторОбъекта,
| ПодключаемоеОборудование.ДрайверОборудования.СнятСПоддержки КАК СнятСПоддержки,
| ПодключаемоеОборудование.ДрайверОборудования.ВерсияДрайвера КАК ВерсияДрайвера,
| ПодключаемоеОборудование.ДрайверОборудования.ИмяМакетаДрайвера КАК ИмяМакетаДрайвера,
| ПодключаемоеОборудование.ДрайверОборудования.СпособПодключения КАК СпособПодключения,
| ПодключаемоеОборудование.ДрайверОборудования.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных,
| ПодключаемоеОборудование.ТипПодключения КАК ТипПодключения,
| ПодключаемоеОборудование.РабочееМесто КАК РабочееМесто,
| ПодключаемоеОборудование.АвтоматическаяФискализация КАК АвтоматическаяФискализация,
| ПодключаемоеОборудование.ТребуетсяПереустановка КАК ТребуетсяПереустановка,
| ПодключаемоеОборудование.ТребуетсяУстановка КАК ТребуетсяУстановка,
| ПодключаемоеОборудование.ИспользуетсяФН36 КАК ИспользуетсяФН36,
| ПодключаемоеОборудование.Организация КАК Организация,
| ПодключаемоеОборудование.ОграничениеДоступа.(
| Пользователь КАК Пользователь,
| Ссылка КАК Ссылка
| ) КАК ОграничениеДоступа,
| ПодключаемоеОборудование.Параметры КАК Параметры
|ИЗ
| Справочник.ПодключаемоеОборудование КАК ПодключаемоеОборудование
|ГДЕ
| &Условие
|
|УПОРЯДОЧИТЬ ПО
| Наименование";
Если Идентификатор <> Неопределено Тогда
ТекстУсловия = "(ПодключаемоеОборудование.Ссылка = &Идентификатор)";
Запрос.УстановитьПараметр("Идентификатор", Идентификатор);
Иначе
ТекстУсловия = "(НЕ ПодключаемоеОборудование.ПометкаУдаления И ПодключаемоеОборудование.УстройствоИспользуется)"
+ " И (ПодключаемоеОборудование.РабочееМесто = &РабочееМесто";
Запрос.УстановитьПараметр("РабочееМесто", РабочееМесто);
Если СетевоеОборудование Тогда
// Оборудование, подключенное к конкретному рабочему месту и сетевое оборудование.
ТекстУсловия = ТекстУсловия
+ " ИЛИ ПодключаемоеОборудование.ТипПодключения = ЗНАЧЕНИЕ(Перечисление.ТипыПодключенияОборудования.ОбщийДоступ))";
Иначе
ТекстУсловия = ТекстУсловия + ")";
КонецЕсли;
Если МассивТиповПО.Количество()>0 Тогда
ТекстУсловия = ТекстУсловия + " И (ПодключаемоеОборудование.ТипОборудования В (&ТипОборудования))";
Запрос.УстановитьПараметр("ТипОборудования", МассивТиповПО);
КонецЕсли;
Если Организация <> Неопределено Тогда
ТекстУсловия = ТекстУсловия + " И (ПодключаемоеОборудование.Организация = &Организация)";
Запрос.УстановитьПараметр("Организация", Организация);
КонецЕсли;
КонецЕсли;
Запрос.Текст = СтрЗаменить(ТекстЗапроса, "&Условие", ТекстУсловия);
Выборка = Запрос.Выполнить().Выбрать();
// Перебирая выборку составляем список устройств
СписокОборудования = Новый Массив();
Пока Выборка.Следующий() Цикл
ДанныеУстройства = ЗаполнитьДанныеУстройства(Выборка, ТекущийПользовательИБ, КодЯзыка);
СписокОборудования.Добавить(ДанныеУстройства);
КонецЦикла;
// Возвращаем полученный список с данными всех найденных устройств
Возврат СписокОборудования;
КонецФункции
// Функция возвращает по идентификатору устройства его параметры
//
// Параметры:
// Идентификатор - СправочникСсылка.ПодключаемоеОборудование.
//
// Возвращаемое значение:
// Структура.
//
Функция ПараметрыУстройства(Идентификатор) Экспорт
Запрос = Новый Запрос("
|ВЫБРАТЬ
| ПодключаемоеОборудование.Параметры
|ИЗ
| Справочник.ПодключаемоеОборудование КАК ПодключаемоеОборудование
|ГДЕ
| ПодключаемоеОборудование.Ссылка = &Идентификатор");
Запрос.УстановитьПараметр("Идентификатор", Идентификатор);
Выборка = Запрос.Выполнить().Выбрать();
Выборка.Следующий();
ПараметрыОборудования = Выборка.Параметры; // ХранилищеЗначения
Результат = ПараметрыОборудования.Получить();
Возврат Результат;
КонецФункции
// Процедура предназначена для сохранения параметров устройства
// в реквизит Параметры типа хранилище значения в элементе справочника.
//
// Параметры:
// Идентификатор - СправочникСсылка.ПодключаемоеОборудование.
// Параметры - Структура - параметры устройства.
//
// Возвращаемое значение:
// Булево.
//
Функция СохранитьПараметрыУстройства(Идентификатор, Параметры) Экспорт
Запрос = Новый Запрос();
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| ПодключаемоеОборудование.Ссылка КАК Ссылка
|ИЗ
| Справочник.ПодключаемоеОборудование КАК ПодключаемоеОборудование
|ГДЕ
| ПодключаемоеОборудование.Ссылка = &Идентификатор";
Запрос.УстановитьПараметр("Идентификатор", Идентификатор);
РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() Тогда
Возврат Ложь;
КонецЕсли;
Попытка
Выборка = РезультатЗапроса.Выбрать();
Выборка.Следующий();
ОбъектСправочника = Выборка.Ссылка.ПолучитьОбъект(); // СправочникОбъект.ПодключаемоеОборудование
ОбъектСправочника.Заблокировать();
ОбъектСправочника.Параметры = Новый ХранилищеЗначения(Параметры);
ОбъектСправочника.Записать();
Результат = Истина;
Исключение
Результат = Ложь;
КонецПопытки;
Возврат Результат;
КонецФункции
// Функция возвращает структуру с данными устройства
//
// Параметры:
// Идентификатор - СправочникСсылка.ПодключаемоеОборудование.
// КодЯзыка - Строка
//
// Возвращаемое значение:
// Структура:
// * Ссылка - СправочникСсылка.ПодключаемоеОборудование
// * ТипОборудования - Структура
// * Наименование - Строка
// * Параметры - Структура
// * ДрайверОборудования - СправочникСсылка.ДрайверыОборудования
// * ВСоставеКонфигурации - Булево
// * ИдентификаторОбъекта - Строка
// * СнятСПоддержки - Булево
// * ВерсияДрайвера - Строка
// * СетевоеОборудование - Булево
// * СпособПодключения - ПеречислениеСсылка.СпособПодключенияДрайвера
// * ПодключениеИзМакета - Булево
// * ПодключениеЛокальноПоИдентификатору - Булево
// * ИмяМакетаДрайвера - Строка
// * МакетДоступен - Булево
// * АвтоматическаяФискализация - Булево
// * ИспользуетсяФН36 - Булево
// * ТребуетсяПереустановка - Булево
// * ТребуетсяУстановка - Булево
// * ОграничениеДоступа - Массив из Строка
// * ДоступноТекущемуПользователю - Булево
// * ПараметрыРегистрации - Структура
//
Функция ДанныеУстройства(Идентификатор, КодЯзыка = Неопределено) Экспорт
СписокОтбор = МенеджерОборудованияКлиентСервер.СписокОборудованияОтбор();
СписокОтбор.Идентификатор = Идентификатор;
СписокОтбор.КодЯзыка = КодЯзыка;
СписокОборудования = СписокОборудования(СписокОтбор);
Если СписокОборудования.Количество() > 0 Тогда
Результат = СписокОборудования[0]
Иначе
Результат = Неопределено;
КонецЕсли;
Возврат Результат;
КонецФункции
// СтандартныеПодсистемы.УправлениеДоступом
// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа.
//
// Параметры:
// Ограничение - Структура:
// * Текст - Строка - ограничение доступа для пользователей.
// Если пустая строка, значит, доступ разрешен.
// * ТекстДляВнешнихПользователей - Строка - ограничение доступа для внешних пользователей.
// Если пустая строка, значит, доступ запрещен.
// * ПоВладельцуБезЗаписиКлючейДоступа - Неопределено - определить автоматически.
// - Булево - если Ложь, то всегда записывать ключи доступа,
// если Истина, тогда не записывать ключи доступа,
// а использовать ключи доступа владельца (требуется,
// чтобы ограничение было строго по объекту-владельцу).
// * ПоВладельцуБезЗаписиКлючейДоступаДляВнешнихПользователей - Неопределено, Булево - также
// как у параметра ПоВладельцуБезЗаписиКлючейДоступа.
//
Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт
Менеджер = "Справочник.ПодключаемоеОборудование";
МенеджерОборудованияВызовСервераПереопределяемый.ПриЗаполненииОграниченияДоступа(Менеджер, Ограничение);
КонецПроцедуры
// Конец СтандартныеПодсистемы.УправлениеДоступом
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
// Заполнить структуру данных устройства
//
Функция ЗаполнитьДанныеУстройства(Выборка, ТекущийПользовательИБ, КодЯзыка)
ДанныеУстройства = Новый Структура();
ПараметрыОборудования = Выборка.Параметры; // ХранилищеЗначения
ДанныеУстройства.Вставить("Ссылка" , Выборка.Ссылка);
ДанныеУстройства.Вставить("ТипыОборудования" , МенеджерОборудования.ПараметрыТипыОборудования(Выборка.ТипОборудования));
ДанныеУстройства.Вставить("ТипОборудования" , Выборка.ТипОборудования);
ДанныеУстройства.Вставить("ТипОборудованияИмя" , XMLСтрока(Выборка.ТипОборудования));
ДанныеУстройства.Вставить("Наименование" , Выборка.Наименование);
ДанныеУстройства.Вставить("Параметры" , ПараметрыОборудования.Получить());
ДанныеУстройства.Вставить("ДрайверОборудования" , Выборка.ДрайверОборудования);
ДанныеУстройства.Вставить("ВСоставеКонфигурации" , Выборка.ВСоставеКонфигурации);
ДанныеУстройства.Вставить("ИдентификаторОбъекта" , Выборка.ИдентификаторОбъекта);
ДанныеУстройства.Вставить("СнятСПоддержки" , Выборка.СнятСПоддержки);
ДанныеУстройства.Вставить("ВерсияДрайвера" , Выборка.ВерсияДрайвера);
ДанныеУстройства.Вставить("СетевоеОборудование" , Выборка.ТипПодключения = Перечисления.ТипыПодключенияОборудования.ОбщийДоступ);
СпособПодключения = Выборка.СпособПодключения;
ПодключениеИзМакета = СпособПодключения = Перечисления.СпособПодключенияДрайвера.ИзМакета;
ПодключениеЛокальноПоИдентификатору = СпособПодключения = Перечисления.СпособПодключенияДрайвера.ЛокальноПоИдентификатору;
ШаблонЛокализации = Неопределено;
МакетДоступен = Ложь;
ИмяМакетаДрайвера = "";
Если ПодключениеИзМакета Тогда // Заполнить данные по макету
ИмяДрайвера = Выборка.ИмяПредопределенныхДанных;
ИмяМакетаДрайвера = Выборка.ИмяМакетаДрайвера;
МенеджерОборудования.ЗаполнитьДанныеМакетов(ИмяДрайвера, ИмяМакетаДрайвера, МакетДоступен, ШаблонЛокализации, КодЯзыка);
КонецЕсли;
ДанныеУстройства.Вставить("СпособПодключения" , СпособПодключения);
ДанныеУстройства.Вставить("ПодключениеИзМакета" , ПодключениеИзМакета);
ДанныеУстройства.Вставить("ПодключениеЛокальноПоИдентификатору", ПодключениеЛокальноПоИдентификатору);
ДанныеУстройства.Вставить("ИмяМакетаДрайвера" , ИмяМакетаДрайвера);
ДанныеУстройства.Вставить("МакетДоступен" , МакетДоступен);
ДанныеУстройства.Вставить("ШаблонЛокализации" , ШаблонЛокализации);
ДанныеУстройства.Вставить("АвтоматическаяФискализация" , Выборка.АвтоматическаяФискализация);
ДанныеУстройства.Вставить("ИспользуетсяФН36" , Выборка.ИспользуетсяФН36);
ДанныеУстройства.Вставить("ТребуетсяПереустановка" , Выборка.ТребуетсяПереустановка);
ДанныеУстройства.Вставить("ТребуетсяУстановка" , Выборка.ТребуетсяУстановка);
ДанныеУстройства.Вставить("Организация" , Выборка.Организация);
// Ограничение доступа
ОграничениеДоступа = Новый Массив();
РезультатЗапросаОграничениеДоступа = Выборка.ОграничениеДоступа; // РезультатЗапроса
ВыборкаОграничениеДоступа = РезультатЗапросаОграничениеДоступа.Выбрать();
Пока ВыборкаОграничениеДоступа.Следующий() Цикл
ОграничениеДоступа.Добавить(Строка(ВыборкаОграничениеДоступа.Пользователь));
КонецЦикла;
ДанныеУстройства.Вставить("ОграничениеДоступа", ОграничениеДоступа);
Если ОграничениеДоступа.Количество() > 0 Тогда
ДоступноТекущемуПользователю = ОграничениеДоступа.Найти(ТекущийПользовательИБ) <> Неопределено;
Иначе
ДоступноТекущемуПользователю = Истина;
КонецЕсли;
ДанныеУстройства.Вставить("ДоступноТекущемуПользователю", ДоступноТекущемуПользователю);
Если Выборка.ТипОборудования = Перечисления.ТипыПодключаемогоОборудования.ККТ
И ОбщегоНазначенияБПО.ИспользуетсяЧекопечатающиеУстройства() Тогда
МодульОборудованиеЧекопечатающиеУстройства = ОбщегоНазначенияБПО.ОбщийМодуль("ОборудованиеЧекопечатающиеУстройства");
ПараметрыРегистрации = МодульОборудованиеЧекопечатающиеУстройства.ПараметрыРегистрацииУстройства(Выборка.Ссылка);
Иначе
ПараметрыРегистрации = Новый Структура();
КонецЕсли;
ДанныеУстройства.Вставить("ПараметрыРегистрации", ПараметрыРегистрации);
Возврат ДанныеУстройства;
КонецФункции
#КонецОбласти
#КонецЕсли