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