epf_QueryConsole/src/ИнструментыРазработчикаКонс.../Forms/Форма/Ext/Form/Module.bsl

1678 lines
101 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.

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