diff --git a/.bsl-language-server.json b/.bsl-language-server.json index ec9744e0..9fed3c20 100644 --- a/.bsl-language-server.json +++ b/.bsl-language-server.json @@ -10,7 +10,7 @@ "userWordsToIgnore": "пбп" }, "LatinAndCyrillicSymbolInWord": { - "excludeWords": "ЧтениеXML, ЧтениеJSON, ЗаписьXML, ЗаписьJSON, ComОбъект, ФабрикаXDTO, ОбъектXDTO, СоединениеFTP, HTTPСоединение, HTTPЗапрос, HTTPСервисОтвет, SMSСообщение, WSПрокси, ИмяCOMОбъекта, ЭтоWindowsКлиент", + "excludeWords": "ЧтениеXML, ЧтениеJSON, ЗаписьXML, ЗаписьJSON, ComОбъект, ФабрикаXDTO, ОбъектXDTO, СоединениеFTP, HTTPСоединение, HTTPЗапрос, HTTPСервисОтвет, SMSСообщение, WSПрокси, ИмяCOMОбъекта, ЭтоWindowsКлиент, ВыполнитьПодключениеКFTPСерверуДляИнтеграционногоПотока", "allowTrailingPartsInAnotherLanguage": true } } diff --git "a/src/cf/Catalogs/\320\277\320\261\320\277_\320\230\320\275\321\202\320\265\320\263\321\200\320\260\321\206\320\270\320\276\320\275\320\275\321\213\320\265\320\237\320\276\321\202\320\276\320\272\320\270/Forms/\320\244\320\276\321\200\320\274\320\260\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\260/Ext/Form/Module.bsl" "b/src/cf/Catalogs/\320\277\320\261\320\277_\320\230\320\275\321\202\320\265\320\263\321\200\320\260\321\206\320\270\320\276\320\275\320\275\321\213\320\265\320\237\320\276\321\202\320\276\320\272\320\270/Forms/\320\244\320\276\321\200\320\274\320\260\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\260/Ext/Form/Module.bsl" index 35faa43e..d09a6c9d 100644 --- "a/src/cf/Catalogs/\320\277\320\261\320\277_\320\230\320\275\321\202\320\265\320\263\321\200\320\260\321\206\320\270\320\276\320\275\320\275\321\213\320\265\320\237\320\276\321\202\320\276\320\272\320\270/Forms/\320\244\320\276\321\200\320\274\320\260\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\260/Ext/Form/Module.bsl" +++ "b/src/cf/Catalogs/\320\277\320\261\320\277_\320\230\320\275\321\202\320\265\320\263\321\200\320\260\321\206\320\270\320\276\320\275\320\275\321\213\320\265\320\237\320\276\321\202\320\276\320\272\320\270/Forms/\320\244\320\276\321\200\320\274\320\260\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\260/Ext/Form/Module.bsl" @@ -174,12 +174,21 @@ ЭлементНаследования = Справочники.пбп_ТипыИнтеграций .ПолучитьПредопределенныйЭлементНаследованияНастроекТипаИнтеграции(РеквизитыОбъекта.ТипИнтеграции); Если ЭлементНаследования = Справочники.пбп_ТипыИнтеграций.Каталог - Или ЭлементНаследования = Справочники.пбп_ТипыИнтеграций.FTPРесурсы Или ЭлементНаследования = Справочники.пбп_ТипыИнтеграций.ПочтовыйКлиент Тогда УстановитьВидимостьЭлементовДляТипаФайловыеОбмены(); пбп_ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы( - Элементы, "ПользовательскаяФункция", УстанавливаемоеСвойство, + Элементы, ПользовательскаяФункция, УстанавливаемоеСвойство, + РеквизитыОбъекта.ИспользоватьПользовательскиеФункции); + ИначеЕсли ЭлементНаследования = Справочники.пбп_ТипыИнтеграций.FTPРесурсы Тогда + Элементы.ТочкаВхода.Заголовок = НСтр("ru = 'Путь к каталогу на сервере'"); + + пбп_ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы( + Элементы, "ТочкаВхода", УстанавливаемоеСвойство, Истина); + пбп_ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы( + Элементы, "ПараметрыВхода", УстанавливаемоеСвойство, Ложь); + пбп_ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы( + Элементы, ПользовательскаяФункция, УстанавливаемоеСвойство, РеквизитыОбъекта.ИспользоватьПользовательскиеФункции); ИначеЕсли ЭлементНаследования = Справочники.пбп_ТипыИнтеграций.COM Тогда Элементы.ТочкаВхода.Заголовок = НСтр("ru = 'Функция / запрос'"); diff --git "a/src/cf/Catalogs/\320\277\320\261\320\277_\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270\320\230\320\275\321\202\320\265\320\263\321\200\320\260\321\206\320\270\320\270/Forms/\320\244\320\276\321\200\320\274\320\260\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\260/Ext/Form/Module.bsl" "b/src/cf/Catalogs/\320\277\320\261\320\277_\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270\320\230\320\275\321\202\320\265\320\263\321\200\320\260\321\206\320\270\320\270/Forms/\320\244\320\276\321\200\320\274\320\260\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\260/Ext/Form/Module.bsl" index d55c1b0d..b7642b5e 100644 --- "a/src/cf/Catalogs/\320\277\320\261\320\277_\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270\320\230\320\275\321\202\320\265\320\263\321\200\320\260\321\206\320\270\320\270/Forms/\320\244\320\276\321\200\320\274\320\260\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\260/Ext/Form/Module.bsl" +++ "b/src/cf/Catalogs/\320\277\320\261\320\277_\320\235\320\260\321\201\321\202\321\200\320\276\320\271\320\272\320\270\320\230\320\275\321\202\320\265\320\263\321\200\320\260\321\206\320\270\320\270/Forms/\320\244\320\276\321\200\320\274\320\260\320\255\320\273\320\265\320\274\320\265\320\275\321\202\320\260/Ext/Form/Module.bsl" @@ -278,7 +278,7 @@ пбп_ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы( Элементы, СписокНастроекСтрока, УстанавливаемоеСвойство, Ложь); ИначеЕсли ЭлементНаследования = Справочники.пбп_ТипыИнтеграций.FTPРесурсы Тогда - Элементы.СтрокаПодключения.Заголовок = НСтр("ru = 'Путь к каталогу'"); + Элементы.СтрокаПодключения.Заголовок = НСтр("ru = 'Адрес сервера'"); УстановитьВидимостьЭлементовДляТипаФайловыеОбмены(); diff --git "a/src/cf/CommonModules/\320\277\320\261\320\277_\320\230\320\275\321\202\320\265\320\263\321\200\320\260\321\206\320\270\320\270\320\241\320\265\321\200\320\262\320\265\321\200/Ext/Module.bsl" "b/src/cf/CommonModules/\320\277\320\261\320\277_\320\230\320\275\321\202\320\265\320\263\321\200\320\260\321\206\320\270\320\270\320\241\320\265\321\200\320\262\320\265\321\200/Ext/Module.bsl" index d1f92241..64be4c1b 100644 --- "a/src/cf/CommonModules/\320\277\320\261\320\277_\320\230\320\275\321\202\320\265\320\263\321\200\320\260\321\206\320\270\320\270\320\241\320\265\321\200\320\262\320\265\321\200/Ext/Module.bsl" +++ "b/src/cf/CommonModules/\320\277\320\261\320\277_\320\230\320\275\321\202\320\265\320\263\321\200\320\260\321\206\320\270\320\270\320\241\320\265\321\200\320\262\320\265\321\200/Ext/Module.bsl" @@ -473,6 +473,236 @@ #КонецОбласти // REST +#Область FTP + +// Параметры сообщения FTP +// +// Возвращаемое значение: +// Структура - содержит ключи для описания сообщения обмена +// +Функция ПараметрыСообщенияFTP() Экспорт + + Результат = Новый Структура("Путь, ИмяФайла, Расширение, ДвоичныеДанные"); + Возврат Результат; + +КонецФункции + +// Получить структуру параметров подключения к серверу FTP / SFTP +// +// Параметры: +// НастройкаИнтеграции - СправочникСсылка.пбп_НастройкиИнтеграции - настройка интеграции, +// для которой необходимо получить параметры +// +// Возвращаемое значение: +// Структура - Параметры соединения с сервером из настроек интеграции и безопасного хранилища +// +Функция ПолучитьПараметрыПодключенияFTPSFTP(НастройкаИнтеграции) Экспорт + + СтруктураНастроек = ПолучитьСтруктуруНастроекИнтеграции(НастройкаИнтеграции); + + ПараметрыСоединения = ПараметрыСоединенияFTP(); + ПараметрыСоединения.Адрес = СтруктураНастроек.СтрокаПодключения; + ПараметрыСоединения.Порт = Число(СтруктураНастроек.Порт); + + Если СтруктураНастроек.Свойство("Логин") Тогда + ПараметрыСоединения.ИмяПользователя = СтруктураНастроек.Логин.Значение; + Иначе + ПараметрыСоединения.ИмяПользователя = ""; + КонецЕсли; + + Если СтруктураНастроек.Свойство("Пароль") Тогда + ПараметрыСоединения.Пароль = СтруктураНастроек.Пароль.Значение; + Иначе + ПараметрыСоединения.Пароль = ""; + КонецЕсли; + + Возврат ПараметрыСоединения; + +КонецФункции + +// Выполнить подключение к FTP-серверу по настройке интеграции +// +// Параметры: +// ИнтеграционныйПоток - СправочникСсылка.пбп_ИнтеграционныеПотоки - интеграционный поток, +// для которого выполняется подключение к FTP-серверу +// +// Возвращаемое значение: +// FTPСоединение, Строка - возвращает FTP-соединение по указанным настройкам, либо строку с описанием ошибки +// +Функция ВыполнитьПодключениеКFTPСерверуДляИнтеграционногоПотока(ИнтеграционныйПоток) Экспорт + + СтруктураРеквизитов = пбп_ОбщегоНазначенияСервер.ЗначенияРеквизитовОбъекта( + ИнтеграционныйПоток, "НастройкаИнтеграции, ТочкаВхода"); + + ПараметрыСоединения = ПолучитьПараметрыПодключенияFTPSFTP(СтруктураРеквизитов.НастройкаИнтеграции); + + Порт = ?(Не ЗначениеЗаполнено(ПараметрыСоединения.Порт), 21, ПараметрыСоединения.Порт); + + Таймаут = 60; + + Попытка + FTPСоединение = Новый FTPСоединение(ПараметрыСоединения.Адрес, + Порт, ПараметрыСоединения.Логин, ПараметрыСоединения.Пароль, , , Таймаут); + Исключение + ЗаголовокОшибки = "Не удалось установить соединение с FTP-сервером. Подробно: "; + ПолноеОписаниеОшибки = СтрШаблон("ru = '%1%2'", + ЗаголовокОшибки, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + СообщениеОбОшибке = НСтр(ПолноеОписаниеОшибки); + + Возврат СообщениеОбОшибке; + КонецПопытки; + + КаталогИсходящие = СтруктураРеквизитов.ТочкаВхода; + КаталогИсходящие = СокрЛП(КаталогИсходящие); + Если Лев(КаталогИсходящие, 1) <> "/" Тогда + КаталогИсходящие = "/" + КаталогИсходящие; + КонецЕсли; + + Если FTPСоединение.ТекущийКаталог() <> КаталогИсходящие Тогда + Попытка + FTPСоединение.УстановитьТекущийКаталог(КаталогИсходящие); + Исключение + ЗаголовокОшибки = "Не удалось установить каталог для исходящих на FTP-сервере. Подробно: "; + ПолноеОписаниеОшибки = СтрШаблон("ru = '%1%2'", + ЗаголовокОшибки, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + СообщениеОбОшибке = НСтр(ПолноеОписаниеОшибки); + + Возврат СообщениеОбОшибке; + КонецПопытки; + КонецЕсли; + + Возврат FTPСоединение; + +КонецФункции + +// Отправить сообщение FTP +// +// Параметры: +// ПодключениеКFTP - FTPСоединение- текущее соединение с FTP-сервером +// ПараметрыСообщения - Структура - параметры сообщения (см. ПараметрыСообщенияFTP) +// +// Возвращаемое значение: +// Строка - описание ошибки +// +Функция ОтправитьСообщениеFTP(ПодключениеКFTP, ПараметрыСообщения) Экспорт + + ЗаголовокОшибки = "Файл не был создан. Подробно: "; + СообщениеОбОшибке = ""; + + Попытка + Если ПустаяСтрока(ПараметрыСообщения.Путь) Тогда + // BSLLS:MissingTemporaryFileDeletion-off + // Необходимо пропустить проверку, так как файл удаляется позже + НовыйФайл = ПолучитьИмяВременногоФайла(ПараметрыСообщения.Расширение); + // BSLLS:MissingTemporaryFileDeletion-on + ПараметрыСообщения.Данные.Записать(НовыйФайл); + ПараметрыСообщения.Путь = НовыйФайл; + КонецЕсли; + + НовоеИмяФайлаНаСервере = СтрШаблон("%1.%2", ПараметрыСообщения.ИмяФайла, ПараметрыСообщения.Расширение); + ПодключениеКFTP.Записать(ПараметрыСообщения.Путь, НовоеИмяФайлаНаСервере); + + // Повторно проверяем наличие записанного файла + КаталогИсходящие = ПодключениеКFTP.ТекущийКаталог(); + + Если Не ПроверитьФайлЕстьНаFTP(ПодключениеКFTP, НовоеИмяФайлаНаСервере, КаталогИсходящие) Тогда + ПолноеОписаниеОшибки = СтрШаблон("ru = '%1%2'", + ЗаголовокОшибки, "подробности уточните у администратора системы"); + СообщениеОбОшибке = НСтр(ПолноеОписаниеОшибки); + КонецЕсли; + + УдалитьФайлы(НовыйФайл); + Исключение + ПолноеОписаниеОшибки = СтрШаблон("ru = '%1%2'", + ЗаголовокОшибки, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + СообщениеОбОшибке = НСтр(ПолноеОписаниеОшибки); + КонецПопытки; + + Возврат СообщениеОбОшибке; + +КонецФункции + +// Прочитать сообщение FTP +// +// Параметры: +// ПодключениеКFTP - FTPСоединение- текущее соединение с FTP-сервером +// ПараметрыСообщения - Структура - параметры сообщения (см. ПараметрыСообщенияFTP) +// +// Возвращаемое значение: +// Строка - описание ошибки +// +Функция ПрочитатьСообщениеFTP(ПодключениеКFTP, ПараметрыСообщения) Экспорт + + ЗаголовокОшибки = "Файл не был получен. Подробно: "; + СообщениеОбОшибке = ""; + + Попытка + ИмяФайлаНаСервере = СтрШаблон("%1.%2", ПараметрыСообщения.ИмяФайла, ПараметрыСообщения.Расширение); + + // Проверяем наличие получаемого файла + КаталогВходящие = ПодключениеКFTP.ТекущийКаталог(); + + Если Не ПроверитьФайлЕстьНаFTP(ПодключениеКFTP, ИмяФайлаНаСервере, КаталогВходящие) Тогда + ПолноеОписаниеОшибки = СтрШаблон("ru = '%1%2'", + ЗаголовокОшибки, "искомый файл отсутствует на FTP-сервере"); + СообщениеОбОшибке = НСтр(ПолноеОписаниеОшибки); + Возврат СообщениеОбОшибке; + КонецЕсли; + + Если ПустаяСтрока(ПараметрыСообщения.Путь) Тогда + // BSLLS:MissingTemporaryFileDeletion-off + // Необходимо пропустить проверку, так как полученный файл должен храниться до его обработки + ПараметрыСообщения.Путь = ПолучитьИмяВременногоФайла(ПараметрыСообщения.Расширение); + // BSLLS:MissingTemporaryFileDeletion-on + КонецЕсли; + + ПодключениеКFTP.Получить(ИмяФайлаНаСервере, ПараметрыСообщения.Путь); + Исключение + ПолноеОписаниеОшибки = СтрШаблон("ru = '%1%2'", + ЗаголовокОшибки, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + СообщениеОбОшибке = НСтр(ПолноеОписаниеОшибки); + КонецПопытки; + + Возврат СообщениеОбОшибке; + +КонецФункции + +// Проверяет наличие файла на FTP +// +// Параметры: +// FTPСоединение - FTPСоединение - текущее соединение с FTP-сервером +// ИмяФайла - Строка - имя искомого файла +// КаталогПоиска - Строка - каталог поиска файла на FTP-сервере +// ПоТочномуСовпадению - Булево - если Истина, то поиск на равенство, если Ложь - по вхождению +// +// Возвращаемое значение: +// Булево - файл найден +// +Функция ПроверитьФайлЕстьНаFTP(FTPСоединение, ИмяФайла, КаталогПоиска = "/", ПоТочномуСовпадению = Истина) Экспорт + + Результат = Ложь; + + ФайлыНаРесурсе = FTPСоединение.НайтиФайлы(КаталогПоиска); + Для Каждого ФайлНаСервере Из ФайлыНаРесурсе Цикл + Если ПоТочномуСовпадению Тогда + Если ВРег(ФайлНаСервере) = ВРег(ИмяФайла) Тогда + Результат = Истина; + Прервать; + КонецЕсли; + Иначе + Если СтрНайти(ВРег(ФайлНаСервере), ВРег(ИмяФайла), НаправлениеПоиска.СНачала) > 0 Тогда + Результат = Истина; + Прервать; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Возврат Результат; + +КонецФункции + +#КонецОбласти // FTP + #КонецОбласти #Область СлужебныеПроцедурыИФункции @@ -560,4 +790,11 @@ КонецФункции +Функция ПараметрыСоединенияFTP() + + Результат = Новый Структура("Адрес, Порт, Логин, Пароль, КаталогВходящие, КаталогИсходящие"); + Возврат Результат; + +КонецФункции + #КонецОбласти // СлужебныеПроцедурыИФункции \ No newline at end of file diff --git "a/src/cf/CommonModules/\320\277\320\261\320\277_\320\236\320\261\321\211\320\265\320\263\320\276\320\235\320\260\320\267\320\275\320\260\321\207\320\265\320\275\320\270\321\217\320\241\320\265\321\200\320\262\320\265\321\200/Ext/Module.bsl" "b/src/cf/CommonModules/\320\277\320\261\320\277_\320\236\320\261\321\211\320\265\320\263\320\276\320\235\320\260\320\267\320\275\320\260\321\207\320\265\320\275\320\270\321\217\320\241\320\265\321\200\320\262\320\265\321\200/Ext/Module.bsl" index 41c2e0d1..04c40655 100644 --- "a/src/cf/CommonModules/\320\277\320\261\320\277_\320\236\320\261\321\211\320\265\320\263\320\276\320\235\320\260\320\267\320\275\320\260\321\207\320\265\320\275\320\270\321\217\320\241\320\265\321\200\320\262\320\265\321\200/Ext/Module.bsl" +++ "b/src/cf/CommonModules/\320\277\320\261\320\277_\320\236\320\261\321\211\320\265\320\263\320\276\320\235\320\260\320\267\320\275\320\260\321\207\320\265\320\275\320\270\321\217\320\241\320\265\321\200\320\262\320\265\321\200/Ext/Module.bsl" @@ -814,6 +814,33 @@ #Область МетодыАналогиБСП +// Аналог метода БСП. Возвращает Истина, если функциональная подсистема существует в конфигурации. +// Предназначена для реализации вызова необязательной подсистемы (условного вызова). +// У функциональной подсистемы снят флажок "Включать в командный интерфейс". +// См. также ОбщегоНазначенияПереопределяемый.ПриОпределенииОтключенныхПодсистем +// и ОбщегоНазначенияКлиент.ПодсистемаСуществует для вызова из клиентского кода. +// +// Параметры: +// ПолноеИмяПодсистемы - Строка - полное имя объекта метаданных подсистема +// без слов "Подсистема." и с учетом регистра символов. +// Например: "СтандартныеПодсистемы.ВариантыОтчетов". +// +// Пример: +// Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВариантыОтчетов") Тогда +// МодульВариантыОтчетов = ОбщегоНазначения.ОбщийМодуль("ВариантыОтчетов"); +// МодульВариантыОтчетов.<Имя метода>(); +// КонецЕсли; +// +// Возвращаемое значение: +// Булево - Истина, если подсистема существует. +// +Функция ПодсистемаСуществует(ПолноеИмяПодсистемы) Экспорт + + ИменаПодсистем = пбп_СтандартныеПодсистемыСлужебныйПовтИсп.ИменаПодсистем(); + Возврат ИменаПодсистем.Получить(ПолноеИмяПодсистемы) <> Неопределено; + +КонецФункции + // Аналог метода БСП. Возвращает ссылку на общий модуль или модуль менеджера по имени. // // Параметры: @@ -1211,10 +1238,6 @@ #КонецОбласти -// Аналог метода БСП. Пока заглушка, см. ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания -Процедура ПриНачалеВыполненияРегламентногоЗадания(РегламентноеЗадание = Неопределено) Экспорт -КонецПроцедуры - // Аналог метода БСП. Возвращает структуру, содержащую значения реквизитов, прочитанные из информационной базы по ссылке на объект. // Рекомендуется использовать вместо обращения к реквизитам объекта через точку от ссылки на объект // для быстрого чтения отдельных реквизитов объекта из базы данных. @@ -1477,6 +1500,25 @@ КонецФункции +// Аналог меотда БСП Возвращает код основного языка информационной базы, например "ru". +// На котором программно записываются автогенерируемые строки в информационную базу. +// Например, при начальном заполнении информационной базы данными из макета, автогенерации комментария +// к проводке или определении значения параметра ИмяСобытия метода ЗаписьЖурналаРегистрации. +// +// Возвращаемое значение: +// Строка +// +Функция КодОсновногоЯзыка() Экспорт + + Если ПодсистемаСуществует("СтандартныеПодсистемы.Мультиязычность") Тогда + МодульМультиязычностьСервер = ОбщийМодуль("МультиязычностьСервер"); + Возврат МодульМультиязычностьСервер.КодОсновногоЯзыка(); + КонецЕсли; + + Возврат Метаданные.ОсновнойЯзык.КодЯзыка; + +КонецФункции + // Аналог метода БСП. Возвращает значения реквизитов, прочитанные из информационной базы для нескольких объектов. // Рекомендуется использовать вместо обращения к реквизитам объекта через точку от ссылки на объект // для быстрого чтения отдельных реквизитов объекта из базы данных. @@ -1947,6 +1989,14 @@ КонецФункции +#Область Прочее + +// Аналог метода БСП. Пока заглушка, см. ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания +Процедура ПриНачалеВыполненияРегламентногоЗадания(РегламентноеЗадание = Неопределено) Экспорт +КонецПроцедуры + +#КонецОбласти // Прочее + #КонецОбласти #Область ПользовательскиеФункции diff --git "a/src/cf/CommonModules/\320\277\320\261\320\277_\320\241\321\202\320\260\320\275\320\264\320\260\321\200\321\202\320\275\321\213\320\265\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\321\213\320\237\320\276\320\262\321\202\320\230\321\201\320\277/Ext/Module.bsl" "b/src/cf/CommonModules/\320\277\320\261\320\277_\320\241\321\202\320\260\320\275\320\264\320\260\321\200\321\202\320\275\321\213\320\265\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\321\213\320\237\320\276\320\262\321\202\320\230\321\201\320\277/Ext/Module.bsl" index 0270671d..cb9061ce 100644 --- "a/src/cf/CommonModules/\320\277\320\261\320\277_\320\241\321\202\320\260\320\275\320\264\320\260\321\200\321\202\320\275\321\213\320\265\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\321\213\320\237\320\276\320\262\321\202\320\230\321\201\320\277/Ext/Module.bsl" +++ "b/src/cf/CommonModules/\320\277\320\261\320\277_\320\241\321\202\320\260\320\275\320\264\320\260\321\200\321\202\320\275\321\213\320\265\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\321\213\320\237\320\276\320\262\321\202\320\230\321\201\320\277/Ext/Module.bsl" @@ -37,4 +37,45 @@ КонецФункции -#КонецОбласти \ No newline at end of file +// Аналог метода БСП. Возвращает соответствие имен "функциональных" подсистем и значения Истина. +// У "функциональной" подсистемы снят флажок "Включать в командный интерфейс". +// +// Возвращаемое значение: +// ФиксированноеСоответствие из КлючИЗначение: +// * Ключ - Строка +// * Значение - Булево +// +Функция ИменаПодсистем() Экспорт + + Имена = Новый Соответствие; + ВставитьИменаПодчиненныхПодсистем(Имена, Метаданные); + + Возврат Новый ФиксированноеСоответствие(Имена); + +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Процедура ВставитьИменаПодчиненныхПодсистем(Имена, РодительскаяПодсистема, ИмяРодительскойПодсистемы = "") + + Для Каждого ТекущаяПодсистема Из РодительскаяПодсистема.Подсистемы Цикл + + Если ТекущаяПодсистема.ВключатьВКомандныйИнтерфейс Тогда + Продолжить; + КонецЕсли; + + ИмяТекущейПодсистемы = ИмяРодительскойПодсистемы + ТекущаяПодсистема.Имя; + Имена.Вставить(ИмяТекущейПодсистемы, Истина); + + Если ТекущаяПодсистема.Подсистемы.Количество() = 0 Тогда + Продолжить; + КонецЕсли; + + ВставитьИменаПодчиненныхПодсистем(Имена, ТекущаяПодсистема, ИмяТекущейПодсистемы + "."); + КонецЦикла; + +КонецПроцедуры + +#КонецОбласти // СлужебныеПроцедурыИФункции \ No newline at end of file diff --git "a/src/cf/CommonModules/\320\277\320\261\320\277_\320\241\321\202\320\260\320\275\320\264\320\260\321\200\321\202\320\275\321\213\320\265\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\321\213\320\241\320\273\321\203\320\266\320\265\320\261\320\275\321\213\320\271\320\237\320\276\320\262\321\202\320\230\321\201\320\277/Ext/Module.bsl" "b/src/cf/CommonModules/\320\277\320\261\320\277_\320\241\321\202\320\260\320\275\320\264\320\260\321\200\321\202\320\275\321\213\320\265\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\321\213\320\241\320\273\321\203\320\266\320\265\320\261\320\275\321\213\320\271\320\237\320\276\320\262\321\202\320\230\321\201\320\277/Ext/Module.bsl" index 7aafb82f..10aab2cf 100644 --- "a/src/cf/CommonModules/\320\277\320\261\320\277_\320\241\321\202\320\260\320\275\320\264\320\260\321\200\321\202\320\275\321\213\320\265\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\321\213\320\241\320\273\321\203\320\266\320\265\320\261\320\275\321\213\320\271\320\237\320\276\320\262\321\202\320\230\321\201\320\277/Ext/Module.bsl" +++ "b/src/cf/CommonModules/\320\277\320\261\320\277_\320\241\321\202\320\260\320\275\320\264\320\260\321\200\321\202\320\275\321\213\320\265\320\237\320\276\320\264\321\201\320\270\321\201\321\202\320\265\320\274\321\213\320\241\320\273\321\203\320\266\320\265\320\261\320\275\321\213\320\271\320\237\320\276\320\262\321\202\320\230\321\201\320\277/Ext/Module.bsl" @@ -30,6 +30,14 @@ КонецФункции +// См. пбп_СтандартныеПодсистемыПовтИсп.ИменаПодсистем. +Функция ИменаПодсистем() Экспорт + + Модуль = ПолучитьМодуль(); + Возврат Модуль.ИменаПодсистем(); + +КонецФункции + #КонецОбласти #КонецОбласти