├── src ├── Documents │ ├── Радар_Отчет │ │ ├── Ext │ │ │ ├── ManagerModule.bsl │ │ │ └── ObjectModule.bsl │ │ └── Forms │ │ │ ├── ФормаСписка.xml │ │ │ ├── ФормаДокумента.xml │ │ │ ├── ФормаДокумента │ │ │ └── Ext │ │ │ │ └── Form.xml │ │ │ └── ФормаСписка │ │ │ └── Ext │ │ │ └── Form.xml │ └── Радар_Отчет.xml ├── CommonModules │ ├── Радар_КлиентСервер │ │ └── Ext │ │ │ └── Module.bsl │ ├── Радар_Кэш.xml │ ├── Радар_Типы.xml │ ├── Радар_Клиент.xml │ ├── Радар_Сервер.xml │ ├── Радар_Задания.xml │ ├── Радар_КлиентСервер.xml │ ├── Радар_Клиент │ │ └── Ext │ │ │ └── Module.bsl │ ├── Радар_Типы │ │ └── Ext │ │ │ └── Module.bsl │ ├── Радар_Сервер │ │ └── Ext │ │ │ └── Module.bsl │ └── Радар_Задания │ │ └── Ext │ │ └── Module.bsl ├── Catalogs │ ├── Радар_Плагины │ │ └── Forms │ │ │ ├── ФормаЭлемента │ │ │ └── Ext │ │ │ │ ├── Form │ │ │ │ └── Module.bsl │ │ │ │ └── Form.xml │ │ │ └── ФормаЭлемента.xml │ ├── Радар_Проекты │ │ ├── Commands │ │ │ ├── ВыполнитьАнализ │ │ │ │ └── Ext │ │ │ │ │ └── CommandModule.bsl │ │ │ └── ВыгрузитьОшибкиВСонар │ │ │ │ └── Ext │ │ │ │ └── CommandModule.bsl │ │ ├── Ext │ │ │ └── ObjectModule.bsl │ │ └── Forms │ │ │ ├── ФормаСписка.xml │ │ │ ├── ФормаЭлемента.xml │ │ │ ├── ФормаЭлемента │ │ │ └── Ext │ │ │ │ ├── Form │ │ │ │ └── Module.bsl │ │ │ │ └── Form.xml │ │ │ └── ФормаСписка │ │ │ └── Ext │ │ │ └── Form.xml │ ├── Радар_Модули │ │ └── Forms │ │ │ ├── ФормаЭлемента.xml │ │ │ └── ФормаЭлемента │ │ │ └── Ext │ │ │ └── Form.xml │ ├── Радар_Модули.xml │ └── Радар_Плагины.xml ├── Ext │ └── HomePageWorkArea.xml ├── Languages │ └── Русский.xml ├── DataProcessors │ ├── Радар_Навигатор │ │ └── Forms │ │ │ ├── Форма │ │ │ └── Ext │ │ │ │ └── Form │ │ │ │ └── Module.bsl │ │ │ └── Форма.xml │ ├── Радар_Консоль │ │ └── Forms │ │ │ └── Форма.xml │ ├── Радар_Посетитель.xml │ ├── Радар_КонструкторГлобальногоОкружения.xml │ ├── Радар_Навигатор.xml │ ├── Радар_Консоль.xml │ └── Радар_ПарсерВстроенногоЯзыка.xml ├── Reports │ ├── Радар_Тренд │ │ └── Templates │ │ │ └── ОсновнаяСхемаКомпоновкиДанных.xml │ └── Радар_Тренд.xml ├── InformationRegisters │ ├── Радар_Ошибки │ │ └── Forms │ │ │ └── ФормаСписка.xml │ ├── Радар_Проверки │ │ └── Forms │ │ │ └── ФормаСписка.xml │ └── Радар_ХешСуммы.xml ├── Subsystems │ └── Радар_Подсистема.xml ├── Enums │ └── ФорматыВыгрузки.xml ├── Configuration.xml └── AccumulationRegisters │ └── Радар_Тренд.xml ├── .gitignore ├── dump_plugins.ps1 ├── README.md ├── plugins ├── ЗапросВЦикле │ └── src │ │ ├── ЗапросВЦикле.xml │ │ └── ЗапросВЦикле │ │ └── Ext │ │ └── ObjectModule.bsl ├── МетодЗапрещен │ └── src │ │ ├── МетодЗапрещен.xml │ │ └── МетодЗапрещен │ │ └── Ext │ │ └── ObjectModule.bsl ├── ПустаяОбласть │ └── src │ │ ├── ПустаяОбласть.xml │ │ └── ПустаяОбласть │ │ └── Ext │ │ └── ObjectModule.bsl ├── ПустойБлокИсключение │ └── src │ │ ├── ПустойБлокИсключение │ │ └── Ext │ │ │ └── ObjectModule.bsl │ │ └── ПустойБлокИсключение.xml ├── ИспользованиеНСтр │ └── src │ │ ├── ИспользованиеНСтр.xml │ │ └── ИспользованиеНСтр │ │ └── Ext │ │ └── ObjectModule.bsl ├── СвойствоЗапрещено │ └── src │ │ ├── СвойствоЗапрещено.xml │ │ └── СвойствоЗапрещено │ │ └── Ext │ │ └── ObjectModule.bsl ├── ДублируетсяУсловие │ └── src │ │ ├── ДублируетсяУсловие.xml │ │ └── ДублируетсяУсловие │ │ └── Ext │ │ └── ObjectModule.bsl ├── ОператорПерейтиЗапрещен │ └── src │ │ ├── ОператорПерейтиЗапрещен.xml │ │ └── ОператорПерейтиЗапрещен │ │ └── Ext │ │ └── ObjectModule.bsl ├── НеиспользуемаяПеременная │ └── src │ │ ├── НеиспользуемаяПеременная.xml │ │ └── НеиспользуемаяПеременная │ │ └── Ext │ │ └── ObjectModule.bsl ├── ПропущенПоследнийПараметр │ └── src │ │ ├── ПропущенПоследнийПараметр.xml │ │ └── ПропущенПоследнийПараметр │ │ └── Ext │ │ └── ObjectModule.bsl ├── ВложенныйТернарныйОператор │ └── src │ │ ├── ВложенныйТернарныйОператор.xml │ │ └── ВложенныйТернарныйОператор │ │ └── Ext │ │ └── ObjectModule.bsl ├── ВставкаКоллекцииВСамуСебя │ └── src │ │ ├── ВставкаКоллекцииВСамуСебя.xml │ │ └── ВставкаКоллекцииВСамуСебя │ │ └── Ext │ │ └── ObjectModule.bsl ├── БесполезныйПереборКоллекции │ └── src │ │ ├── БесполезныйПереборКоллекции.xml │ │ └── БесполезныйПереборКоллекции │ │ └── Ext │ │ └── ObjectModule.bsl └── ВыражениеСодержитНесколькоТернарныхОператоров │ └── src │ ├── ВыражениеСодержитНесколькоТернарныхОператоров.xml │ └── ВыражениеСодержитНесколькоТернарныхОператоров │ └── Ext │ └── ObjectModule.bsl └── ps └── common.ps1 /src/Documents/Радар_Отчет/Ext/ManagerModule.bsl: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .tempdb/* 2 | bin/* 3 | *.epf 4 | *.txt 5 | *.todo -------------------------------------------------------------------------------- /dump_plugins.ps1: -------------------------------------------------------------------------------- 1 | 2 | . .\ps\common.ps1 3 | 4 | Cmd_epf DumpExternalDataProcessorOrReportToFiles Разборка 5 | -------------------------------------------------------------------------------- /src/CommonModules/Радар_КлиентСервер/Ext/Module.bsl: -------------------------------------------------------------------------------- 1 | 2 | Функция ЭтоФайловаяБаза() Экспорт 3 | 4 | Возврат СтрНайти(СтрокаСоединенияИнформационнойБазы(), "File=") > 0; 5 | 6 | КонецФункции -------------------------------------------------------------------------------- /src/Catalogs/Радар_Плагины/Forms/ФормаЭлемента/Ext/Form/Module.bsl: -------------------------------------------------------------------------------- 1 | 2 | &НаКлиенте 3 | Процедура ПутьНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) 4 | 5 | СтандартнаяОбработка = Ложь; 6 | Радар_Клиент.ВыбратьПуть(Элемент, ЭтотОбъект, РежимДиалогаВыбораФайла.Открытие, "(*.epf)|*.epf"); 7 | 8 | КонецПроцедуры 9 | 10 | &НаКлиенте 11 | Процедура ПутьПриИзменении(Элемент) 12 | 13 | Если ПустаяСтрока(Объект.Наименование) Тогда 14 | Файл = Новый Файл(Объект.Путь); 15 | Объект.Наименование = Файл.ИмяБезРасширения; 16 | КонецЕсли; 17 | 18 | КонецПроцедуры 19 | -------------------------------------------------------------------------------- /src/Catalogs/Радар_Проекты/Commands/ВыполнитьАнализ/Ext/CommandModule.bsl: -------------------------------------------------------------------------------- 1 | 2 | &НаКлиенте 3 | Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) 4 | 5 | ВыполнитьАнализНаСервере(ПараметрКоманды); 6 | ОповеститьОбИзменении(Тип("ДокументСсылка.Радар_Отчет")); 7 | 8 | КонецПроцедуры 9 | 10 | &НаСервере 11 | Процедура ВыполнитьАнализНаСервере(Проект) 12 | 13 | ОбъектОтчета = Документы.Радар_Отчет.СоздатьДокумент(); 14 | ОбъектОтчета.Проект = Проект; 15 | ОбъектОтчета.УстановитьНовыйНомер(); 16 | ОбъектОтчета.Дата = ПолучитьОперативнуюОтметкуВремени(); 17 | ОбъектОтчета.ОбменДанными.Загрузка = Истина; 18 | ОбъектОтчета.Записать(РежимЗаписиДокумента.Запись); 19 | 20 | КонецПроцедуры -------------------------------------------------------------------------------- /src/Ext/HomePageWorkArea.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | TwoColumnsEqualWidth 4 | 5 | 6 |
Catalog.Радар_Проекты.Form.ФормаСписка
7 | 10 8 | 9 | true 10 | 11 |
12 |
13 | 14 | 15 |
Document.Радар_Отчет.Form.ФормаСписка
16 | 10 17 | 18 | true 19 | 20 |
21 |
22 |
-------------------------------------------------------------------------------- /src/Catalogs/Радар_Проекты/Ext/ObjectModule.bsl: -------------------------------------------------------------------------------- 1 | 2 | Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) 3 | 4 | Если ЭтотОбъект.ВнешняяКонфигурация 5 | И Не ЗначениеЗаполнено(ЭтотОбъект.ПутьКонфигурации) Тогда 6 | 7 | Радар_Сервер.СообщитьПолеНеЗаполнено(ЭтотОбъект, "ПутьКонфигурации", Отказ); 8 | 9 | КонецЕсли; 10 | 11 | Если Не Радар_КлиентСервер.ЭтоФайловаяБаза() 12 | И ЭтотОбъект.ИспользоватьМногопоточность Тогда 13 | 14 | Если Не ЗначениеЗаполнено(ЭтотОбъект.РазмерПартии) Тогда 15 | 16 | Радар_Сервер.СообщитьПолеНеЗаполнено(ЭтотОбъект, "РазмерПартии", Отказ); 17 | 18 | КонецЕсли; 19 | 20 | Если Не ЗначениеЗаполнено(ЭтотОбъект.МаксимумПотоков) Тогда 21 | 22 | Радар_Сервер.СообщитьПолеНеЗаполнено(ЭтотОбъект, "МаксимумПотоков", Отказ); 23 | 24 | КонецЕсли; 25 | 26 | КонецЕсли; 27 | 28 | КонецПроцедуры 29 | -------------------------------------------------------------------------------- /src/Catalogs/Радар_Проекты/Commands/ВыгрузитьОшибкиВСонар/Ext/CommandModule.bsl: -------------------------------------------------------------------------------- 1 | 2 | &НаКлиенте 3 | Процедура ОбработкаКоманды(Проект, ПараметрыВыполненияКоманды) 4 | 5 | Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение); 6 | Диалог.МножественныйВыбор = Ложь; 7 | Диалог.Заголовок = НСтр("ru = 'Укажите имя файла'"); 8 | 9 | Адрес = ВыгрузитьОшибкиНаСервере(Проект); 10 | 11 | ОписаниеФайла = Новый ОписаниеПередаваемогоФайла; 12 | ОписаниеФайла.Имя = "generic-issue-report.json"; 13 | ОписаниеФайла.Хранение = Адрес; 14 | 15 | Файлы = Новый Массив; 16 | Файлы.Добавить(ОписаниеФайла); 17 | 18 | Заглушка = Новый ОписаниеОповещения("Заглушка", ЭтотОбъект); 19 | 20 | НачатьПолучениеФайлов(Заглушка, Файлы, Диалог, Истина); 21 | 22 | КонецПроцедуры 23 | 24 | &НаКлиенте 25 | Процедура Заглушка(Результат, Параметры) 26 | 27 | КонецПроцедуры 28 | 29 | &НаСервере 30 | Функция ВыгрузитьОшибкиНаСервере(Проект) 31 | 32 | Адрес = Радар_Сервер.ВыгрузитьОшибкиВСонар(Проект); 33 | 34 | Возврат Адрес; 35 | 36 | КонецФункции -------------------------------------------------------------------------------- /src/Languages/Русский.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Русский 6 | Adopted 7 | ru 8 | 9 | 10 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Радар - статический анализатор конфигураций 2 | 3 | Это расширение для платформы не ниже 8.3.13 4 | 5 | Варианты использования: 6 | 7 | 1. Расширение ставится на отдельной (возможно пустой) базе данных. В проекте указывается путь к выгрузке конфигурации в XML или EDT формате, и путь к файлу конфигурации *.cf 8 | 2. Расширение ставится на базе данных анализируемой конфигурации. В проекте указывается путь к выгрузке конфигурации в XML или EDT формате. 9 | 10 | Многопоточный анализ доступен только в клиент-серверном варианте. 11 | 12 | Отладка существенно увеличивает время анализа. 13 | 14 | Первый анализ выполняется довольно долго. Последующие быстро, так как проверяются только измененные модули. 15 | Например, для УХ 3.0 первый анализ 10 минут (6 потоков), последующие меньше минуты (машина: i5 8400, SSD). 16 | Оперативной памяти в зависимости от варианта использования и анализируемой конфигурации требуется примерно от 0,2 до 2 гигабайт. 17 | 18 | Плагины к каждому проекту цепляются отдельно. 19 | 20 | В разработке используется версия платформы 8.3.13.1809 21 | 22 | Разбор исходного кода выполняется с помощью [bsparser](https://github.com/lead-tools/bsparser) 23 | 24 | Внешних зависимостей на данный момент: 0 25 | 26 | По всем вопросам можно обращаться в личку: https://t.me/astsukanov 27 | -------------------------------------------------------------------------------- /src/DataProcessors/Радар_Навигатор/Forms/Форма/Ext/Form/Module.bsl: -------------------------------------------------------------------------------- 1 | 2 | &НаКлиенте 3 | Процедура ОшибкиВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) 4 | 5 | СтандартнаяОбработка = Ложь; 6 | 7 | Строка = Элементы.Ошибки.ТекущиеДанные; 8 | 9 | Если Строка = Неопределено Тогда 10 | Возврат; 11 | КонецЕсли; 12 | 13 | ОбработкаПослеВыбора = Новый ОписаниеОповещения("ОбработкаПослеВыбора", ЭтотОбъект, Строка); 14 | 15 | Путь = Неопределено; 16 | 17 | Если Строка.Свойство("Путь", Путь) И ЭтотОбъект.ПутьИсходника <> Путь Тогда 18 | ЭтотОбъект.ПутьИсходника = Путь; 19 | Исходник.НачатьЧтение(ОбработкаПослеВыбора, ЭтотОбъект.ПутьИсходника, КодировкаТекста.UTF8); 20 | Иначе 21 | ОбработкаПослеВыбора(Строка); 22 | КонецЕсли; 23 | 24 | КонецПроцедуры 25 | 26 | &НаКлиенте 27 | Процедура ОбработкаПослеВыбора(Строка) Экспорт 28 | 29 | ОбновитьОтображениеДанных(Элементы.Исходник); 30 | 31 | Если Не Строка.Свойство("ПозицияНачала") 32 | Или Не Строка.Свойство("ПозицияКонца") Тогда 33 | Возврат; 34 | КонецЕсли; 35 | 36 | Если Строка.ПозицияНачала > 0 Тогда 37 | ЭтотОбъект.ТекущийЭлемент = ЭтотОбъект.Элементы.Исходник; 38 | ЭтотОбъект.Элементы.Исходник.УстановитьГраницыВыделения(Строка.ПозицияНачала, Строка.ПозицияКонца); 39 | ЭтотОбъект.ТекущийЭлемент = ЭтотОбъект.Элементы.Исходник; 40 | КонецЕсли; 41 | 42 | КонецПроцедуры -------------------------------------------------------------------------------- /src/Reports/Радар_Тренд/Templates/ОсновнаяСхемаКомпоновкиДанных.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16 | -------------------------------------------------------------------------------- /src/Catalogs/Радар_Проекты/Forms/ФормаСписка.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 | ФормаСписка 6 | 7 | 8 | ru 9 | Форма списка 10 | 11 | 12 | 13 | Managed 14 | false 15 | 16 | PlatformApplication 17 | MobilePlatformApplication 18 | 19 | 20 |
21 |
-------------------------------------------------------------------------------- /src/Documents/Радар_Отчет/Forms/ФормаСписка.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 | ФормаСписка 6 | 7 | 8 | ru 9 | Форма списка 10 | 11 | 12 | 13 | Managed 14 | false 15 | 16 | PlatformApplication 17 | MobilePlatformApplication 18 | 19 | 20 |
21 |
-------------------------------------------------------------------------------- /src/Catalogs/Радар_Модули/Forms/ФормаЭлемента.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 | ФормаЭлемента 6 | 7 | 8 | ru 9 | Форма элемента 10 | 11 | 12 | 13 | Managed 14 | false 15 | 16 | PlatformApplication 17 | MobilePlatformApplication 18 | 19 | 20 |
21 |
-------------------------------------------------------------------------------- /src/Catalogs/Радар_Плагины/Forms/ФормаЭлемента.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 | ФормаЭлемента 6 | 7 | 8 | ru 9 | Форма элемента 10 | 11 | 12 | 13 | Managed 14 | false 15 | 16 | PlatformApplication 17 | MobilePlatformApplication 18 | 19 | 20 |
21 |
-------------------------------------------------------------------------------- /src/Catalogs/Радар_Проекты/Forms/ФормаЭлемента.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 | ФормаЭлемента 6 | 7 | 8 | ru 9 | Форма элемента 10 | 11 | 12 | 13 | Managed 14 | false 15 | 16 | PlatformApplication 17 | MobilePlatformApplication 18 | 19 | 20 |
21 |
-------------------------------------------------------------------------------- /src/Documents/Радар_Отчет/Forms/ФормаДокумента.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 | ФормаДокумента 6 | 7 | 8 | ru 9 | Форма документа 10 | 11 | 12 | 13 | Managed 14 | false 15 | 16 | PlatformApplication 17 | MobilePlatformApplication 18 | 19 | 20 |
21 |
-------------------------------------------------------------------------------- /src/InformationRegisters/Радар_Ошибки/Forms/ФормаСписка.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 | ФормаСписка 6 | 7 | 8 | ru 9 | Форма списка 10 | 11 | 12 | 13 | Managed 14 | false 15 | 16 | PlatformApplication 17 | MobilePlatformApplication 18 | 19 | 20 |
21 |
-------------------------------------------------------------------------------- /src/InformationRegisters/Радар_Проверки/Forms/ФормаСписка.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 | ФормаСписка 6 | 7 | 8 | ru 9 | Форма списка 10 | 11 | 12 | 13 | Managed 14 | false 15 | 16 | PlatformApplication 17 | MobilePlatformApplication 18 | 19 | 20 |
21 |
-------------------------------------------------------------------------------- /src/DataProcessors/Радар_Консоль/Forms/Форма.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 | Форма 6 | 7 | 8 | ru 9 | Форма 10 | 11 | 12 | 13 | Managed 14 | false 15 | 16 | PlatformApplication 17 | MobilePlatformApplication 18 | 19 | 20 | 21 |
22 |
-------------------------------------------------------------------------------- /src/DataProcessors/Радар_Навигатор/Forms/Форма.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 | Форма 6 | 7 | 8 | ru 9 | Форма 10 | 11 | 12 | 13 | Managed 14 | false 15 | 16 | PlatformApplication 17 | MobilePlatformApplication 18 | 19 | 20 | 21 |
22 |
-------------------------------------------------------------------------------- /src/CommonModules/Радар_Кэш.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Радар_Кэш 6 | 7 | 8 | ru 9 | Кэш 10 | 11 | 12 | 13 | false 14 | false 15 | true 16 | false 17 | false 18 | false 19 | false 20 | DuringSession 21 | 22 | 23 | -------------------------------------------------------------------------------- /src/CommonModules/Радар_Типы.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Радар_Типы 6 | 7 | 8 | ru 9 | Радар типы 10 | 11 | 12 | 13 | false 14 | false 15 | true 16 | false 17 | false 18 | false 19 | false 20 | DontUse 21 | 22 | 23 | -------------------------------------------------------------------------------- /src/CommonModules/Радар_Клиент.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Радар_Клиент 6 | 7 | 8 | ru 9 | Радар клиент 10 | 11 | 12 | 13 | false 14 | true 15 | false 16 | false 17 | false 18 | false 19 | false 20 | DontUse 21 | 22 | 23 | -------------------------------------------------------------------------------- /src/CommonModules/Радар_Сервер.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Радар_Сервер 6 | 7 | 8 | ru 9 | Радар сервер 10 | 11 | 12 | 13 | false 14 | false 15 | true 16 | false 17 | false 18 | false 19 | false 20 | DontUse 21 | 22 | 23 | -------------------------------------------------------------------------------- /src/CommonModules/Радар_Задания.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Радар_Задания 6 | 7 | 8 | ru 9 | Радар задания 10 | 11 | 12 | 13 | false 14 | false 15 | true 16 | false 17 | false 18 | false 19 | false 20 | DontUse 21 | 22 | 23 | -------------------------------------------------------------------------------- /src/CommonModules/Радар_КлиентСервер.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Радар_КлиентСервер 6 | 7 | 8 | ru 9 | Радар клиент сервер 10 | 11 | 12 | 13 | false 14 | true 15 | true 16 | false 17 | false 18 | false 19 | false 20 | DontUse 21 | 22 | 23 | -------------------------------------------------------------------------------- /plugins/ЗапросВЦикле/src/ЗапросВЦикле.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | c3831ec8-d8d5-4f93-8a22-f9bfae07327f 7 | 7c289c8c-b293-4982-9499-0890ff597a92 8 | 9 | 10 | c6733ee0-c56b-4f88-bcd0-f6eb200cedf3 11 | 0f5d30e5-1415-4228-aa24-368a5f41cdc4 12 | 13 | 14 | 15 | ЗапросВЦикле 16 | 17 | 18 | ru 19 | Запрос в цикле 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /plugins/МетодЗапрещен/src/МетодЗапрещен.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | c3831ec8-d8d5-4f93-8a22-f9bfae07327f 7 | 17a3926a-bc6b-48a9-8d72-d9c607949bae 8 | 9 | 10 | 8976ede7-4ff0-42c2-a8bc-0d19826c320a 11 | bd29cd44-aca3-4faf-bb04-da2c8e044ea9 12 | 13 | 14 | 15 | МетодЗапрещен 16 | 17 | 18 | ru 19 | Метод запрещен 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /plugins/ПустаяОбласть/src/ПустаяОбласть.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | c3831ec8-d8d5-4f93-8a22-f9bfae07327f 7 | 17a3926a-bc6b-48a9-8d72-d9c607949bae 8 | 9 | 10 | 8976ede7-4ff0-42c2-a8bc-0d19826c320a 11 | bd29cd44-aca3-4faf-bb04-da2c8e044ea9 12 | 13 | 14 | 15 | ПустаяОбласть 16 | 17 | 18 | ru 19 | Пустая область 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /plugins/ПустойБлокИсключение/src/ПустойБлокИсключение/Ext/ObjectModule.bsl: -------------------------------------------------------------------------------- 1 | 2 | Перем ТаблицаОшибок; 3 | 4 | Процедура Открыть(Парсер, Параметры) Экспорт 5 | ТаблицаОшибок = Парсер.ТаблицаОшибок(); 6 | КонецПроцедуры 7 | 8 | Функция Закрыть() Экспорт 9 | Возврат Неопределено; 10 | КонецФункции 11 | 12 | Функция Подписки() Экспорт 13 | Перем Подписки; 14 | Подписки = Новый Массив; 15 | Подписки.Добавить("ПосетитьОператорИсключение"); 16 | Возврат Подписки; 17 | КонецФункции 18 | 19 | #Область РеализацияПодписок 20 | 21 | Процедура ПосетитьОператорИсключение(ОператорИсключение) Экспорт 22 | Если ОператорИсключение.Операторы.Количество() = 0 Тогда 23 | Ошибка("Пустой блок исключение", ОператорИсключение.Начало, ОператорИсключение.Конец); 24 | КонецЕсли; 25 | КонецПроцедуры 26 | 27 | #КонецОбласти // РеализацияПодписок 28 | 29 | Процедура Ошибка(Текст, Начало, Конец = Неопределено, ЕстьЗамена = Ложь) 30 | 31 | Ошибка = ТаблицаОшибок.Добавить(); 32 | Ошибка.Источник = Метаданные().Имя; 33 | Ошибка.Текст = Текст; 34 | 35 | Ошибка.МинутНаИсправление = 5; 36 | Ошибка.Серьезность = "INFO"; 37 | Ошибка.Приоритет = 0; 38 | Ошибка.Правило = Метаданные().Синоним; 39 | Ошибка.Тип = "CODE_SMELL"; 40 | 41 | Ошибка.ПозицияНачала = Начало.Позиция; 42 | Ошибка.НомерСтрокиНачала = Начало.НомерСтроки; 43 | Ошибка.НомерКолонкиНачала = Начало.НомерКолонки; 44 | Если Конец = Неопределено Или Конец = Начало Тогда 45 | Ошибка.ПозицияКонца = Начало.Позиция + Начало.Длина; 46 | Ошибка.НомерСтрокиКонца = Начало.НомерСтроки; 47 | Ошибка.НомерКолонкиКонца = Начало.НомерКолонки + Начало.Длина; 48 | Иначе 49 | Ошибка.ПозицияКонца = Конец.Позиция + Конец.Длина; 50 | Ошибка.НомерСтрокиКонца = Конец.НомерСтроки; 51 | Ошибка.НомерКолонкиКонца = Конец.НомерКолонки + Конец.Длина; 52 | КонецЕсли; 53 | 54 | Ошибка.ЕстьЗамена = ЕстьЗамена; 55 | 56 | КонецПроцедуры 57 | -------------------------------------------------------------------------------- /plugins/ИспользованиеНСтр/src/ИспользованиеНСтр.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | c3831ec8-d8d5-4f93-8a22-f9bfae07327f 7 | 17a3926a-bc6b-48a9-8d72-d9c607949bae 8 | 9 | 10 | 8976ede7-4ff0-42c2-a8bc-0d19826c320a 11 | bd29cd44-aca3-4faf-bb04-da2c8e044ea9 12 | 13 | 14 | 15 | ИспользованиеНСтр 16 | 17 | 18 | ru 19 | Использование НСтр 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /plugins/СвойствоЗапрещено/src/СвойствоЗапрещено.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | c3831ec8-d8d5-4f93-8a22-f9bfae07327f 7 | 17a3926a-bc6b-48a9-8d72-d9c607949bae 8 | 9 | 10 | 8976ede7-4ff0-42c2-a8bc-0d19826c320a 11 | bd29cd44-aca3-4faf-bb04-da2c8e044ea9 12 | 13 | 14 | 15 | СвойствоЗапрещено 16 | 17 | 18 | ru 19 | Свойство запрещено 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /plugins/ДублируетсяУсловие/src/ДублируетсяУсловие.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | c3831ec8-d8d5-4f93-8a22-f9bfae07327f 7 | 17a3926a-bc6b-48a9-8d72-d9c607949bae 8 | 9 | 10 | 8976ede7-4ff0-42c2-a8bc-0d19826c320a 11 | bd29cd44-aca3-4faf-bb04-da2c8e044ea9 12 | 13 | 14 | 15 | ДублируетсяУсловие 16 | 17 | 18 | ru 19 | Дублируется условие 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /plugins/ПустойБлокИсключение/src/ПустойБлокИсключение.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | c3831ec8-d8d5-4f93-8a22-f9bfae07327f 7 | 17a3926a-bc6b-48a9-8d72-d9c607949bae 8 | 9 | 10 | 8976ede7-4ff0-42c2-a8bc-0d19826c320a 11 | bd29cd44-aca3-4faf-bb04-da2c8e044ea9 12 | 13 | 14 | 15 | ПустойБлокИсключение 16 | 17 | 18 | ru 19 | Пустой блок исключение 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /src/Catalogs/Радар_Модули/Forms/ФормаЭлемента/Ext/Form.xml: -------------------------------------------------------------------------------- 1 | 2 |
3 | Items 4 | 5 | 6 | 7 | Объект.Code 8 | EnterOnInput 9 | 10 | 11 | 12 | 13 | Объект.Description 14 | EnterOnInput 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | cfg:CatalogObject.Радар_Модули 23 | 24 | true 25 | true 26 | 27 | 28 | -------------------------------------------------------------------------------- /plugins/ОператорПерейтиЗапрещен/src/ОператорПерейтиЗапрещен.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | c3831ec8-d8d5-4f93-8a22-f9bfae07327f 7 | 17a3926a-bc6b-48a9-8d72-d9c607949bae 8 | 9 | 10 | 8976ede7-4ff0-42c2-a8bc-0d19826c320a 11 | bd29cd44-aca3-4faf-bb04-da2c8e044ea9 12 | 13 | 14 | 15 | ОператорПерейтиЗапрещен 16 | 17 | 18 | ru 19 | Оператор перейти запрещен 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /plugins/НеиспользуемаяПеременная/src/НеиспользуемаяПеременная.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | c3831ec8-d8d5-4f93-8a22-f9bfae07327f 7 | 0b705b84-bf41-4cd5-bc60-ec69b1d8da59 8 | 9 | 10 | 4562246a-4143-43c8-b9ce-4c5c0206a913 11 | 46a74894-1395-4527-901f-bdfa781f95ad 12 | 13 | 14 | 15 | НеиспользуемаяПеременная 16 | 17 | 18 | ru 19 | Неиспользуемая переменная 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /plugins/ПропущенПоследнийПараметр/src/ПропущенПоследнийПараметр.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | c3831ec8-d8d5-4f93-8a22-f9bfae07327f 7 | 17a3926a-bc6b-48a9-8d72-d9c607949bae 8 | 9 | 10 | 8976ede7-4ff0-42c2-a8bc-0d19826c320a 11 | bd29cd44-aca3-4faf-bb04-da2c8e044ea9 12 | 13 | 14 | 15 | ПропущенПоследнийПараметр 16 | 17 | 18 | ru 19 | Пропущен последний параметр 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /src/CommonModules/Радар_Клиент/Ext/Module.bsl: -------------------------------------------------------------------------------- 1 | 2 | Процедура ВыбратьПуть(Элемент, Форма, РежимДиалога = Неопределено, Фильтр = Неопределено) Экспорт 3 | 4 | Если РежимДиалога = Неопределено Тогда 5 | РежимДиалога = РежимДиалогаВыбораФайла.ВыборКаталога; 6 | КонецЕсли; 7 | 8 | ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалога); 9 | ДиалогВыбораФайла.МножественныйВыбор = Ложь; 10 | ДиалогВыбораФайла.Фильтр = Фильтр; 11 | Если РежимДиалога = РежимДиалогаВыбораФайла.ВыборКаталога Тогда 12 | ДиалогВыбораФайла.Каталог = Элемент.ТекстРедактирования; 13 | Иначе 14 | ДиалогВыбораФайла.ПолноеИмяФайла = Элемент.ТекстРедактирования; 15 | КонецЕсли; 16 | 17 | ДополнительныеПараметры = Новый Структура("Элемент, Форма", Элемент, Форма); 18 | 19 | ОписаниеОповещения = Новый ОписаниеОповещения("ОбработатьВыборФайла", ЭтотОбъект, ДополнительныеПараметры); 20 | 21 | ДиалогВыбораФайла.Показать(ОписаниеОповещения); 22 | 23 | КонецПроцедуры 24 | 25 | Процедура ОбработатьВыборФайла(Результат, ДополнительныеПараметры) Экспорт 26 | 27 | Если Результат <> Неопределено Тогда 28 | ИнтерактивноУстановитьЗначениеЭлементаФормы( 29 | Результат[0], 30 | ДополнительныеПараметры.Элемент, 31 | ДополнительныеПараметры.Форма 32 | ); 33 | КонецЕсли; 34 | 35 | КонецПроцедуры 36 | 37 | Процедура ИнтерактивноУстановитьЗначениеЭлементаФормы(Значение, Элемент, Форма) Экспорт 38 | 39 | СтарыйВладелецФормы = Форма.ВладелецФормы; 40 | ЗакрыватьПриВыборе = Форма.ЗакрыватьПриВыборе; 41 | 42 | Форма.ВладелецФормы = Элемент; 43 | Форма.ЗакрыватьПриВыборе = Ложь; 44 | 45 | Форма.ОповеститьОВыборе(Значение); 46 | 47 | Если Форма.ВладелецФормы = Элемент Тогда 48 | Форма.ВладелецФормы = СтарыйВладелецФормы; 49 | КонецЕсли; 50 | 51 | Если Форма.ЗакрыватьПриВыборе = Ложь Тогда 52 | Форма.ЗакрыватьПриВыборе = ЗакрыватьПриВыборе; 53 | КонецЕсли; 54 | 55 | Форма.ОбновитьОтображениеДанных(Элемент); 56 | 57 | КонецПроцедуры -------------------------------------------------------------------------------- /plugins/ВложенныйТернарныйОператор/src/ВложенныйТернарныйОператор.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | c3831ec8-d8d5-4f93-8a22-f9bfae07327f 7 | 17a3926a-bc6b-48a9-8d72-d9c607949bae 8 | 9 | 10 | 8976ede7-4ff0-42c2-a8bc-0d19826c320a 11 | bd29cd44-aca3-4faf-bb04-da2c8e044ea9 12 | 13 | 14 | 15 | ВложенныйТернарныйОператор 16 | 17 | 18 | ru 19 | Вложенный тернарный оператор 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /plugins/ВставкаКоллекцииВСамуСебя/src/ВставкаКоллекцииВСамуСебя.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | c3831ec8-d8d5-4f93-8a22-f9bfae07327f 7 | 7c289c8c-b293-4982-9499-0890ff597a92 8 | 9 | 10 | c6733ee0-c56b-4f88-bcd0-f6eb200cedf3 11 | 0f5d30e5-1415-4228-aa24-368a5f41cdc4 12 | 13 | 14 | 15 | ВставкаКоллекцииВСамуСебя 16 | 17 | 18 | ru 19 | Вставка коллекции в саму себя 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /plugins/БесполезныйПереборКоллекции/src/БесполезныйПереборКоллекции.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | c3831ec8-d8d5-4f93-8a22-f9bfae07327f 7 | 7c289c8c-b293-4982-9499-0890ff597a92 8 | 9 | 10 | c6733ee0-c56b-4f88-bcd0-f6eb200cedf3 11 | 0f5d30e5-1415-4228-aa24-368a5f41cdc4 12 | 13 | 14 | 15 | БесполезныйПереборКоллекции 16 | 17 | 18 | ru 19 | Бесполезный перебор коллекции 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /plugins/ВложенныйТернарныйОператор/src/ВложенныйТернарныйОператор/Ext/ObjectModule.bsl: -------------------------------------------------------------------------------- 1 | 2 | Перем Типы; 3 | Перем ТаблицаОшибок; 4 | Перем Счетчики; 5 | 6 | Процедура Открыть(Парсер, Параметры) Экспорт 7 | Типы = Парсер.Типы(); 8 | Счетчики = Парсер.Счетчики(); 9 | ТаблицаОшибок = Парсер.ТаблицаОшибок(); 10 | КонецПроцедуры 11 | 12 | Функция Закрыть() Экспорт 13 | Возврат Неопределено; 14 | КонецФункции 15 | 16 | Функция Подписки() Экспорт 17 | Перем Подписки; 18 | Подписки = Новый Массив; 19 | Подписки.Добавить("ПосетитьВыражениеТернарное"); 20 | Возврат Подписки; 21 | КонецФункции 22 | 23 | #Область РеализацияПодписок 24 | 25 | Процедура ПосетитьВыражениеТернарное(ВыражениеТернарное) Экспорт 26 | Если Счетчики.ВыражениеТернарное > 0 Тогда 27 | Ошибка("Вложенный тернарный оператор", ВыражениеТернарное.Начало, ВыражениеТернарное.Конец); 28 | КонецЕсли; 29 | КонецПроцедуры 30 | 31 | #КонецОбласти // РеализацияПодписок 32 | 33 | Процедура Ошибка(Текст, Начало, Конец = Неопределено, ЕстьЗамена = Ложь) 34 | 35 | Ошибка = ТаблицаОшибок.Добавить(); 36 | Ошибка.Источник = Метаданные().Имя; 37 | Ошибка.Текст = Текст; 38 | 39 | Ошибка.МинутНаИсправление = 5; 40 | Ошибка.Серьезность = "INFO"; 41 | Ошибка.Приоритет = 0; 42 | Ошибка.Правило = Метаданные().Синоним; 43 | Ошибка.Тип = "CODE_SMELL"; 44 | 45 | Ошибка.ПозицияНачала = Начало.Позиция; 46 | Ошибка.НомерСтрокиНачала = Начало.НомерСтроки; 47 | Ошибка.НомерКолонкиНачала = Начало.НомерКолонки; 48 | Если Конец = Неопределено Или Конец = Начало Тогда 49 | Ошибка.ПозицияКонца = Начало.Позиция + Начало.Длина; 50 | Ошибка.НомерСтрокиКонца = Начало.НомерСтроки; 51 | Ошибка.НомерКолонкиКонца = Начало.НомерКолонки + Начало.Длина; 52 | Иначе 53 | Ошибка.ПозицияКонца = Конец.Позиция + Конец.Длина; 54 | Ошибка.НомерСтрокиКонца = Конец.НомерСтроки; 55 | Ошибка.НомерКолонкиКонца = Конец.НомерКолонки + Конец.Длина; 56 | КонецЕсли; 57 | 58 | Ошибка.ЕстьЗамена = ЕстьЗамена; 59 | 60 | КонецПроцедуры 61 | -------------------------------------------------------------------------------- /src/CommonModules/Радар_Типы/Ext/Module.bsl: -------------------------------------------------------------------------------- 1 | 2 | Функция Окружение(ФиксированныйОкружение = Неопределено) Экспорт 3 | Окружение = Новый Структура; 4 | Окружение.Вставить("__Тип__", "Радар_Типы.Окружение"); 5 | Если ФиксированныйОкружение = Неопределено Тогда 6 | Окружение.Вставить("Переменные", Новый Массив); 7 | Окружение.Вставить("Методы", Новый Массив); 8 | Иначе 9 | Окружение.Вставить("Переменные", Новый Массив(ФиксированныйОкружение.Переменные)); 10 | Окружение.Вставить("Методы", Новый Массив(ФиксированныйОкружение.Методы)); 11 | КонецЕсли; 12 | Возврат Окружение; 13 | КонецФункции 14 | 15 | Функция ФиксированноеОкружение(Окружение) Экспорт 16 | ФиксированныйОкружение = Новый Структура; 17 | ФиксированныйОкружение.Вставить("Переменные", Новый ФиксированныйМассив(Окружение.Переменные)); 18 | ФиксированныйОкружение.Вставить("Методы", Новый ФиксированныйМассив(Окружение.Методы)); 19 | Возврат Новый ФиксированнаяСтруктура(ФиксированныйОкружение); 20 | КонецФункции 21 | 22 | Функция Переменная(Имя) Экспорт 23 | Переменная = Новый Структура; 24 | Переменная.Вставить("__Тип__", "Радар_Типы.Переменная"); 25 | Переменная.Вставить("Имя", Имя); 26 | Возврат Переменная; 27 | КонецФункции 28 | 29 | Функция Метод(Имя) Экспорт 30 | Метод = Новый Структура; 31 | Метод.Вставить("__Тип__", "Радар_Типы.Метод"); 32 | Метод.Вставить("Имя", Имя); 33 | Возврат Метод; 34 | КонецФункции 35 | 36 | Функция РеквизитФормы(Имя, Тип = Неопределено) Экспорт 37 | РеквизитФормы = Новый Структура; 38 | РеквизитФормы.Вставить("__Тип__", "Радар_Типы.РеквизитФормы"); 39 | РеквизитФормы.Вставить("Имя", Имя); 40 | РеквизитФормы.Вставить("Тип", Тип); 41 | Возврат РеквизитФормы; 42 | КонецФункции 43 | 44 | Функция ПредопределенныйЭлемент(Имя) Экспорт 45 | ПредопределенныйЭлемент = Новый Структура; 46 | ПредопределенныйЭлемент.Вставить("__Тип__", "Радар_Типы.ПредопределенныйЭлемент"); 47 | ПредопределенныйЭлемент.Вставить("Имя", Имя); 48 | Возврат ПредопределенныйЭлемент; 49 | КонецФункции -------------------------------------------------------------------------------- /plugins/ВыражениеСодержитНесколькоТернарныхОператоров/src/ВыражениеСодержитНесколькоТернарныхОператоров.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | c3831ec8-d8d5-4f93-8a22-f9bfae07327f 7 | 17a3926a-bc6b-48a9-8d72-d9c607949bae 8 | 9 | 10 | 8976ede7-4ff0-42c2-a8bc-0d19826c320a 11 | bd29cd44-aca3-4faf-bb04-da2c8e044ea9 12 | 13 | 14 | 15 | ВыражениеСодержитНесколькоТернарныхОператоров 16 | 17 | 18 | ru 19 | Выражение содержит несколько тернарных операторов 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /src/DataProcessors/Радар_Посетитель.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ca9be5ca-1ac3-477e-a36b-12246eacacf4 7 | 9f3d07eb-cd0a-43fa-acd1-ff2e9152a1c0 8 | 9 | 10 | 8d85a21d-6e4b-45cf-a60d-131582b9de9a 11 | cac20bf8-721e-44bb-87fb-0a47967b386b 12 | 13 | 14 | 15 | Радар_Посетитель 16 | 17 | 18 | ru 19 | Посетитель 20 | 21 | 22 | 23 | false 24 | 25 | 26 | false 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /plugins/ВыражениеСодержитНесколькоТернарныхОператоров/src/ВыражениеСодержитНесколькоТернарныхОператоров/Ext/ObjectModule.bsl: -------------------------------------------------------------------------------- 1 | 2 | Перем Типы; 3 | Перем ТаблицаОшибок; 4 | 5 | Процедура Открыть(Парсер, Параметры) Экспорт 6 | Типы = Парсер.Типы(); 7 | ТаблицаОшибок = Парсер.ТаблицаОшибок(); 8 | КонецПроцедуры 9 | 10 | Функция Закрыть() Экспорт 11 | Возврат Неопределено; 12 | КонецФункции 13 | 14 | Функция Подписки() Экспорт 15 | Перем Подписки; 16 | Подписки = Новый Массив; 17 | Подписки.Добавить("ПосетитьВыражениеБинарное"); 18 | Возврат Подписки; 19 | КонецФункции 20 | 21 | #Область РеализацияПодписок 22 | 23 | Процедура ПосетитьВыражениеБинарное(ВыражениеБинарное) Экспорт 24 | Если ВыражениеБинарное.ЛевыйОперанд.Тип = Типы.ВыражениеТернарное 25 | И ВыражениеБинарное.ПравыйОперанд.Тип = Типы.ВыражениеТернарное Тогда 26 | Ошибка("Выражение содержит несколько тернарных операторов", ВыражениеБинарное.Начало, ВыражениеБинарное.Конец); 27 | КонецЕсли; 28 | КонецПроцедуры 29 | 30 | #КонецОбласти // РеализацияПодписок 31 | 32 | Процедура Ошибка(Текст, Начало, Конец = Неопределено, ЕстьЗамена = Ложь) 33 | 34 | Ошибка = ТаблицаОшибок.Добавить(); 35 | Ошибка.Источник = Метаданные().Имя; 36 | Ошибка.Текст = Текст; 37 | 38 | Ошибка.МинутНаИсправление = 5; 39 | Ошибка.Серьезность = "INFO"; 40 | Ошибка.Приоритет = 0; 41 | Ошибка.Правило = Метаданные().Синоним; 42 | Ошибка.Тип = "CODE_SMELL"; 43 | 44 | Ошибка.ПозицияНачала = Начало.Позиция; 45 | Ошибка.НомерСтрокиНачала = Начало.НомерСтроки; 46 | Ошибка.НомерКолонкиНачала = Начало.НомерКолонки; 47 | Если Конец = Неопределено Или Конец = Начало Тогда 48 | Ошибка.ПозицияКонца = Начало.Позиция + Начало.Длина; 49 | Ошибка.НомерСтрокиКонца = Начало.НомерСтроки; 50 | Ошибка.НомерКолонкиКонца = Начало.НомерКолонки + Начало.Длина; 51 | Иначе 52 | Ошибка.ПозицияКонца = Конец.Позиция + Конец.Длина; 53 | Ошибка.НомерСтрокиКонца = Конец.НомерСтроки; 54 | Ошибка.НомерКолонкиКонца = Конец.НомерКолонки + Конец.Длина; 55 | КонецЕсли; 56 | 57 | Ошибка.ЕстьЗамена = ЕстьЗамена; 58 | 59 | КонецПроцедуры 60 | -------------------------------------------------------------------------------- /src/DataProcessors/Радар_КонструкторГлобальногоОкружения.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 273b6966-9957-4de7-8086-6675d2f61807 7 | 015980e6-6b2a-4dc9-a843-94cd2ed51001 8 | 9 | 10 | 73f16560-2dd0-4fa3-bab3-13ca6050a474 11 | 49d769f4-427d-4c9f-9278-20cfac7f455e 12 | 13 | 14 | 15 | Радар_КонструкторГлобальногоОкружения 16 | 17 | 18 | ru 19 | Глобальное окружение 20 | 21 | 22 | 23 | false 24 | 25 | 26 | false 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /src/DataProcessors/Радар_Навигатор.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | e8c2f578-d24a-4170-841a-12cb4422e507 7 | 1d110ad6-b22e-4508-befc-4c310e3da781 8 | 9 | 10 | b494f674-b889-4998-b847-9049a05f4ce8 11 | fed4dfd0-7a91-409d-a27d-32cf7b9d59bc 12 | 13 | 14 | 15 | Радар_Навигатор 16 | 17 | 18 | ru 19 | Навигатор 20 | 21 | 22 | 23 | true 24 | DataProcessor.Радар_Навигатор.Form.Форма 25 | 26 | false 27 | 28 | 29 | 30 | 31 |
Форма
32 |
33 |
34 |
-------------------------------------------------------------------------------- /plugins/ОператорПерейтиЗапрещен/src/ОператорПерейтиЗапрещен/Ext/ObjectModule.bsl: -------------------------------------------------------------------------------- 1 | 2 | Перем ТаблицаОшибок; 3 | Перем Типы; 4 | Перем ЗапрещенныеСвойства; 5 | 6 | Процедура Открыть(Парсер, Параметры) Экспорт 7 | 8 | ТаблицаОшибок = Парсер.ТаблицаОшибок(); 9 | Типы = Парсер.Типы(); 10 | 11 | ЗапрещенныеСвойства = Новый Структура; 12 | 13 | ЗапрещенныеСвойства.Вставить("ЭтаФорма"); 14 | ЗапрещенныеСвойства.Вставить("ThisForm"); 15 | 16 | КонецПроцедуры 17 | 18 | Функция Закрыть() Экспорт 19 | Возврат Неопределено; 20 | КонецФункции 21 | 22 | Функция Подписки() Экспорт 23 | Перем Подписки; 24 | Подписки = Новый Массив; 25 | Подписки.Добавить("ПосетитьОператорПерейти"); 26 | Подписки.Добавить("ПосетитьОператорМетка"); 27 | Возврат Подписки; 28 | КонецФункции 29 | 30 | #Область РеализацияПодписок 31 | 32 | Процедура ПосетитьОператорПерейти(ОператорПерейти) Экспорт 33 | Ошибка("Оператор перейти запрещен", ОператорПерейти.Начало, ОператорПерейти.Конец); 34 | КонецПроцедуры 35 | 36 | Процедура ПосетитьОператорМетка(ОператорМетка) Экспорт 37 | Ошибка("Метки запрещены", ОператорМетка.Начало, ОператорМетка.Конец); 38 | КонецПроцедуры 39 | 40 | 41 | #КонецОбласти // РеализацияПодписок 42 | 43 | Процедура Ошибка(Текст, Начало, Конец = Неопределено, ЕстьЗамена = Ложь) 44 | 45 | Ошибка = ТаблицаОшибок.Добавить(); 46 | Ошибка.Источник = Метаданные().Имя; 47 | Ошибка.Текст = Текст; 48 | 49 | Ошибка.МинутНаИсправление = 5; 50 | Ошибка.Серьезность = "INFO"; 51 | Ошибка.Приоритет = 0; 52 | Ошибка.Правило = Метаданные().Синоним; 53 | Ошибка.Тип = "CODE_SMELL"; 54 | 55 | Ошибка.ПозицияНачала = Начало.Позиция; 56 | Ошибка.НомерСтрокиНачала = Начало.НомерСтроки; 57 | Ошибка.НомерКолонкиНачала = Начало.НомерКолонки; 58 | Если Конец = Неопределено Или Конец = Начало Тогда 59 | Ошибка.ПозицияКонца = Начало.Позиция + Начало.Длина; 60 | Ошибка.НомерСтрокиКонца = Начало.НомерСтроки; 61 | Ошибка.НомерКолонкиКонца = Начало.НомерКолонки + Начало.Длина; 62 | Иначе 63 | Ошибка.ПозицияКонца = Конец.Позиция + Конец.Длина; 64 | Ошибка.НомерСтрокиКонца = Конец.НомерСтроки; 65 | Ошибка.НомерКолонкиКонца = Конец.НомерКолонки + Конец.Длина; 66 | КонецЕсли; 67 | 68 | Ошибка.ЕстьЗамена = ЕстьЗамена; 69 | 70 | КонецПроцедуры 71 | -------------------------------------------------------------------------------- /src/DataProcessors/Радар_Консоль.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 1f2842a5-494b-4d10-8c9a-1968c51e7b70 7 | 2899dc36-270d-4a9d-998d-f7189707e9dd 8 | 9 | 10 | 1d70685a-c8bf-4849-be98-f443e137674a 11 | 3af4c8f9-fb91-4fbe-88e8-68e5a4d634ff 12 | 13 | 14 | 15 | Радар_Консоль 16 | 17 | 18 | en 19 | BSParser (built-in script parser) 20 | 21 | 22 | ru 23 | Парсер встроенного языка (консоль) 24 | 25 | 26 | 27 | true 28 | DataProcessor.Радар_Консоль.Form.Форма 29 | 30 | false 31 | 32 | 33 | 34 | 35 |
Форма
36 |
37 |
38 |
-------------------------------------------------------------------------------- /src/DataProcessors/Радар_ПарсерВстроенногоЯзыка.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 1ce151ea-cd76-4e9a-8949-7e882feef6d0 7 | 7d7901aa-5d3d-481f-9761-32b83dd5291b 8 | 9 | 10 | 5c0b04b4-8859-4322-8c65-625cab9e3a80 11 | 1a366f8f-b26a-422e-883d-9d7b1efc7f08 12 | 13 | 14 | 15 | Радар_ПарсерВстроенногоЯзыка 16 | 17 | 18 | en 19 | BSParser (built-in script parser) 20 | 21 | 22 | ru 23 | Парсер встроенного языка 24 | 25 | 26 | https://github.com/lead-tools/bsparser 27 | false 28 | 29 | 30 | false 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /plugins/МетодЗапрещен/src/МетодЗапрещен/Ext/ObjectModule.bsl: -------------------------------------------------------------------------------- 1 | 2 | Перем ТаблицаОшибок; 3 | Перем ЗапрещенныеМетоды; 4 | 5 | Процедура Открыть(Парсер, Параметры) Экспорт 6 | 7 | ТаблицаОшибок = Парсер.ТаблицаОшибок(); 8 | 9 | ЗапрещенныеМетоды = Новый Структура; 10 | 11 | ЗапрещенныеМетоды.Вставить("ПолучитьФорму"); 12 | ЗапрещенныеМетоды.Вставить("GetForm"); 13 | 14 | ЗапрещенныеМетоды.Вставить("ДанныеФормыВЗначение"); 15 | ЗапрещенныеМетоды.Вставить("FormDataToValue"); 16 | 17 | ЗапрещенныеМетоды.Вставить("Сообщить"); 18 | ЗапрещенныеМетоды.Вставить("Message"); 19 | 20 | КонецПроцедуры 21 | 22 | Функция Закрыть() Экспорт 23 | Возврат Неопределено; 24 | КонецФункции 25 | 26 | Функция Подписки() Экспорт 27 | Перем Подписки; 28 | Подписки = Новый Массив; 29 | Подписки.Добавить("ПосетитьВыражениеИдентификатор"); 30 | Возврат Подписки; 31 | КонецФункции 32 | 33 | #Область РеализацияПодписок 34 | 35 | Процедура ПосетитьВыражениеИдентификатор(ВыражениеИдентификатор) Экспорт 36 | Если ВыражениеИдентификатор.Аргументы <> Неопределено 37 | И ЗапрещенныеМетоды.Свойство(ВыражениеИдентификатор.Голова.Имя) Тогда 38 | Ошибка("Метод запрещен", ВыражениеИдентификатор.Начало, ВыражениеИдентификатор.Конец); 39 | КонецЕсли; 40 | КонецПроцедуры 41 | 42 | #КонецОбласти // РеализацияПодписок 43 | 44 | Процедура Ошибка(Текст, Начало, Конец = Неопределено, ЕстьЗамена = Ложь) 45 | 46 | Ошибка = ТаблицаОшибок.Добавить(); 47 | Ошибка.Источник = Метаданные().Имя; 48 | Ошибка.Текст = Текст; 49 | 50 | Ошибка.МинутНаИсправление = 5; 51 | Ошибка.Серьезность = "INFO"; 52 | Ошибка.Приоритет = 0; 53 | Ошибка.Правило = Метаданные().Синоним; 54 | Ошибка.Тип = "CODE_SMELL"; 55 | 56 | Ошибка.ПозицияНачала = Начало.Позиция; 57 | Ошибка.НомерСтрокиНачала = Начало.НомерСтроки; 58 | Ошибка.НомерКолонкиНачала = Начало.НомерКолонки; 59 | Если Конец = Неопределено Или Конец = Начало Тогда 60 | Ошибка.ПозицияКонца = Начало.Позиция + Начало.Длина; 61 | Ошибка.НомерСтрокиКонца = Начало.НомерСтроки; 62 | Ошибка.НомерКолонкиКонца = Начало.НомерКолонки + Начало.Длина; 63 | Иначе 64 | Ошибка.ПозицияКонца = Конец.Позиция + Конец.Длина; 65 | Ошибка.НомерСтрокиКонца = Конец.НомерСтроки; 66 | Ошибка.НомерКолонкиКонца = Конец.НомерКолонки + Конец.Длина; 67 | КонецЕсли; 68 | 69 | Ошибка.ЕстьЗамена = ЕстьЗамена; 70 | 71 | КонецПроцедуры 72 | -------------------------------------------------------------------------------- /src/Reports/Радар_Тренд.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 59a4b4bf-e438-430a-9a29-e90326727e21 7 | 913249cb-a639-413b-ab96-2aa60f7358e3 8 | 9 | 10 | 0e52ce50-67e6-4624-a588-c928f8ebfc67 11 | dbee3dc9-0a73-4af0-bdc8-0e05a95f68ea 12 | 13 | 14 | 15 | Радар_Тренд 16 | 17 | 18 | ru 19 | Тренд 20 | 21 | 22 | 23 | true 24 | 25 | 26 | Report.Радар_Тренд.Template.ОсновнаяСхемаКомпоновкиДанных 27 | 28 | 29 | 30 | 31 | 32 | false 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /plugins/СвойствоЗапрещено/src/СвойствоЗапрещено/Ext/ObjectModule.bsl: -------------------------------------------------------------------------------- 1 | 2 | Перем ТаблицаОшибок; 3 | Перем Типы; 4 | Перем ЗапрещенныеСвойства; 5 | 6 | Процедура Открыть(Парсер, Параметры) Экспорт 7 | 8 | ТаблицаОшибок = Парсер.ТаблицаОшибок(); 9 | Типы = Парсер.Типы(); 10 | 11 | ЗапрещенныеСвойства = Новый Структура; 12 | 13 | ЗапрещенныеСвойства.Вставить("ЭтаФорма"); 14 | ЗапрещенныеСвойства.Вставить("ThisForm"); 15 | 16 | КонецПроцедуры 17 | 18 | Функция Закрыть() Экспорт 19 | Возврат Неопределено; 20 | КонецФункции 21 | 22 | Функция Подписки() Экспорт 23 | Перем Подписки; 24 | Подписки = Новый Массив; 25 | Подписки.Добавить("ПосетитьВыражениеИдентификатор"); 26 | Возврат Подписки; 27 | КонецФункции 28 | 29 | #Область РеализацияПодписок 30 | 31 | Процедура ПосетитьВыражениеИдентификатор(ВыражениеИдентификатор) Экспорт 32 | Если ВыражениеИдентификатор.Аргументы = Неопределено 33 | И ЗапрещенныеСвойства.Свойство(ВыражениеИдентификатор.Голова.Имя) Тогда 34 | Ошибка("Свойство запрещено", ВыражениеИдентификатор.Начало, ВыражениеИдентификатор.Начало); 35 | КонецЕсли; 36 | Для Каждого Элемент Из ВыражениеИдентификатор.Хвост Цикл 37 | Если Элемент.Тип = Типы.ВыражениеПоле И ЗапрещенныеСвойства.Свойство(Элемент.Имя) Тогда 38 | Ошибка("Свойство запрещено", Элемент.Начало, Элемент.Конец); 39 | КонецЕсли; 40 | КонецЦикла; 41 | КонецПроцедуры 42 | 43 | #КонецОбласти // РеализацияПодписок 44 | 45 | Процедура Ошибка(Текст, Начало, Конец = Неопределено, ЕстьЗамена = Ложь) 46 | 47 | Ошибка = ТаблицаОшибок.Добавить(); 48 | Ошибка.Источник = Метаданные().Имя; 49 | Ошибка.Текст = Текст; 50 | 51 | Ошибка.МинутНаИсправление = 5; 52 | Ошибка.Серьезность = "INFO"; 53 | Ошибка.Приоритет = 0; 54 | Ошибка.Правило = Метаданные().Синоним; 55 | Ошибка.Тип = "CODE_SMELL"; 56 | 57 | Ошибка.ПозицияНачала = Начало.Позиция; 58 | Ошибка.НомерСтрокиНачала = Начало.НомерСтроки; 59 | Ошибка.НомерКолонкиНачала = Начало.НомерКолонки; 60 | Если Конец = Неопределено Или Конец = Начало Тогда 61 | Ошибка.ПозицияКонца = Начало.Позиция + Начало.Длина; 62 | Ошибка.НомерСтрокиКонца = Начало.НомерСтроки; 63 | Ошибка.НомерКолонкиКонца = Начало.НомерКолонки + Начало.Длина; 64 | Иначе 65 | Ошибка.ПозицияКонца = Конец.Позиция + Конец.Длина; 66 | Ошибка.НомерСтрокиКонца = Конец.НомерСтроки; 67 | Ошибка.НомерКолонкиКонца = Конец.НомерКолонки + Конец.Длина; 68 | КонецЕсли; 69 | 70 | Ошибка.ЕстьЗамена = ЕстьЗамена; 71 | 72 | КонецПроцедуры 73 | -------------------------------------------------------------------------------- /plugins/ПропущенПоследнийПараметр/src/ПропущенПоследнийПараметр/Ext/ObjectModule.bsl: -------------------------------------------------------------------------------- 1 | 2 | Перем Типы; 3 | Перем ТаблицаОшибок; 4 | 5 | Процедура Открыть(Парсер, Параметры) Экспорт 6 | Типы = Парсер.Типы(); 7 | ТаблицаОшибок = Парсер.ТаблицаОшибок(); 8 | КонецПроцедуры 9 | 10 | Функция Закрыть() Экспорт 11 | Возврат Неопределено; 12 | КонецФункции 13 | 14 | Функция Подписки() Экспорт 15 | Перем Подписки; 16 | Подписки = Новый Массив; 17 | Подписки.Добавить("ПосетитьВыражениеИдентификатор"); 18 | Возврат Подписки; 19 | КонецФункции 20 | 21 | #Область РеализацияПодписок 22 | 23 | Процедура ПосетитьВыражениеИдентификатор(ВыражениеИдентификатор) Экспорт 24 | Аргументы = ВыражениеИдентификатор.Аргументы; 25 | Если Аргументы <> Неопределено И Аргументы.Количество() > 0 И Аргументы[Аргументы.ВГраница()] = Неопределено Тогда 26 | Ошибка("Пропущен последний параметр", ВыражениеИдентификатор.Начало, ВыражениеИдентификатор.Конец); 27 | КонецЕсли; 28 | Для Каждого Элемент Из ВыражениеИдентификатор.Хвост Цикл 29 | Если Элемент.Тип = Типы.ВыражениеПоле Тогда 30 | Аргументы = Элемент.Аргументы; 31 | Если Аргументы <> Неопределено И Аргументы.Количество() > 0 И Аргументы[Аргументы.ВГраница()] = Неопределено Тогда 32 | Ошибка("Пропущен последний параметр", Элемент.Начало, Элемент.Конец); 33 | КонецЕсли; 34 | КонецЕсли; 35 | КонецЦикла; 36 | КонецПроцедуры 37 | 38 | #КонецОбласти // РеализацияПодписок 39 | 40 | Процедура Ошибка(Текст, Начало, Конец = Неопределено, ЕстьЗамена = Ложь) 41 | 42 | Ошибка = ТаблицаОшибок.Добавить(); 43 | Ошибка.Источник = Метаданные().Имя; 44 | Ошибка.Текст = Текст; 45 | 46 | Ошибка.МинутНаИсправление = 5; 47 | Ошибка.Серьезность = "INFO"; 48 | Ошибка.Приоритет = 0; 49 | Ошибка.Правило = Метаданные().Синоним; 50 | Ошибка.Тип = "CODE_SMELL"; 51 | 52 | Ошибка.ПозицияНачала = Начало.Позиция; 53 | Ошибка.НомерСтрокиНачала = Начало.НомерСтроки; 54 | Ошибка.НомерКолонкиНачала = Начало.НомерКолонки; 55 | Если Конец = Неопределено Или Конец = Начало Тогда 56 | Ошибка.ПозицияКонца = Начало.Позиция + Начало.Длина; 57 | Ошибка.НомерСтрокиКонца = Начало.НомерСтроки; 58 | Ошибка.НомерКолонкиКонца = Начало.НомерКолонки + Начало.Длина; 59 | Иначе 60 | Ошибка.ПозицияКонца = Конец.Позиция + Конец.Длина; 61 | Ошибка.НомерСтрокиКонца = Конец.НомерСтроки; 62 | Ошибка.НомерКолонкиКонца = Конец.НомерКолонки + Конец.Длина; 63 | КонецЕсли; 64 | 65 | Ошибка.ЕстьЗамена = ЕстьЗамена; 66 | 67 | КонецПроцедуры 68 | -------------------------------------------------------------------------------- /src/Subsystems/Радар_Подсистема.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Радар_Подсистема 6 | 7 | 8 | ru 9 | Радар 10 | 11 | 12 | 13 | true 14 | true 15 | 16 | 17 | 18 | Catalog.Радар_Плагины 19 | Catalog.Радар_Модули 20 | InformationRegister.Радар_Ошибки 21 | InformationRegister.Радар_Проверки 22 | Document.Радар_Отчет 23 | DataProcessor.Радар_Консоль 24 | DataProcessor.Радар_ПарсерВстроенногоЯзыка 25 | DataProcessor.Радар_Посетитель 26 | DataProcessor.Радар_КонструкторГлобальногоОкружения 27 | Catalog.Радар_Проекты 28 | Report.Радар_Тренд 29 | DataProcessor.Радар_Навигатор 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /ps/common.ps1: -------------------------------------------------------------------------------- 1 | 2 | $1CPath = "C:\Program Files\1cv8\8.3.13.1809\bin\1cv8.exe" 3 | if (-not (Test-Path $1CPath)) { 4 | $1CPath = 'C:\Program Files\1cv8\common\1cestart.exe' 5 | } 6 | if (-not (Test-Path $1CPath)) { 7 | $1CPath = 'C:\Program Files (x86)\1cv8\common\1cestart.exe' 8 | } 9 | 10 | function complete($percent, $activity) { 11 | Write-Progress -Activity $activity -Status "Прогресс:" -PercentComplete $percent 12 | } 13 | 14 | $list = @{ 15 | НеиспользуемаяПеременная = "Плагины", "plugins\НеиспользуемаяПеременная\src" 16 | ВставкаКоллекцииВСамуСебя = "Плагины", "plugins\ВставкаКоллекцииВСамуСебя\src" 17 | БесполезныйПереборКоллекции = "Плагины", "plugins\БесполезныйПереборКоллекции\src" 18 | ВложенныйТернарныйОператор = "Плагины", "plugins\ВложенныйТернарныйОператор\src" 19 | ВыражениеСодержитНесколькоТернарныхОператоров = "Плагины", "plugins\ВыражениеСодержитНесколькоТернарныхОператоров\src" 20 | ПропущенПоследнийПараметр = "Плагины", "plugins\ПропущенПоследнийПараметр\src" 21 | ДублируетсяУсловие = "Плагины", "plugins\ДублируетсяУсловие\src" 22 | ПустойБлокИсключение = "Плагины", "plugins\ПустойБлокИсключение\src" 23 | МетодЗапрещен = "Плагины", "plugins\МетодЗапрещен\src" 24 | СвойствоЗапрещено = "Плагины", "plugins\СвойствоЗапрещено\src" 25 | ОператорПерейтиЗапрещен = "Плагины", "plugins\ОператорПерейтиЗапрещен\src" 26 | ИспользованиеНСтр = "Плагины", "plugins\ИспользованиеНСтр\src" 27 | ПустаяОбласть = "Плагины", "plugins\ПустаяОбласть\src" 28 | ЗапросВЦикле = "Плагины", "plugins\ЗапросВЦикле\src" 29 | } 30 | 31 | function Cmd_epf ($command, $description){ 32 | 33 | complete 0 $description 34 | 35 | $x = 0; $dx = 100 / $list.Count 36 | foreach ($item in $list.GetEnumerator()) { 37 | $ArgList = "DESIGNER", "/DumpResult designer_result.txt", "/Out designer_out.txt", 38 | "/DisableStartupDialogs", 39 | "/F .\.tempdb\", 40 | "/$command `".\$($item.Value[1])\$($item.Name).xml`" `".\bin\$($item.Value[0])\$($item.Name).epf`"" 41 | Start-Process $1CPath -ArgumentList $ArgList -Wait 42 | if ((Get-Content .\designer_result.txt) -ne '0') { 43 | Get-Content .\designer_out.txt 44 | } 45 | $x += $dx 46 | complete $x $description 47 | } 48 | 49 | } -------------------------------------------------------------------------------- /plugins/ДублируетсяУсловие/src/ДублируетсяУсловие/Ext/ObjectModule.bsl: -------------------------------------------------------------------------------- 1 | 2 | Перем Исходник; 3 | Перем ТаблицаОшибок; 4 | 5 | Процедура Открыть(Парсер, Параметры) Экспорт 6 | Исходник = Парсер.Исходник(); 7 | ТаблицаОшибок = Парсер.ТаблицаОшибок(); 8 | КонецПроцедуры 9 | 10 | Функция Закрыть() Экспорт 11 | Возврат Неопределено; 12 | КонецФункции 13 | 14 | Функция Подписки() Экспорт 15 | Перем Подписки; 16 | Подписки = Новый Массив; 17 | Подписки.Добавить("ПосетитьОператорЕсли"); 18 | Возврат Подписки; 19 | КонецФункции 20 | 21 | #Область РеализацияПодписок 22 | 23 | Процедура ПосетитьОператорЕсли(ОператорЕсли) Экспорт 24 | Если ОператорЕсли.ИначеЕсли <> Неопределено Тогда 25 | НачалоВыражения = ОператорЕсли.Выражение.Начало; 26 | КонецВыражения = ОператорЕсли.Выражение.Конец; 27 | ДлинаВыражения = КонецВыражения.Позиция + КонецВыражения.Длина - НачалоВыражения.Позиция; 28 | УникальныеУсловия = Новый Соответствие; 29 | УникальныеУсловия[Сред(Исходник, НачалоВыражения.Позиция, ДлинаВыражения)] = Истина; 30 | Для Каждого ОператорИначеЕсли Из ОператорЕсли.ИначеЕсли Цикл 31 | НачалоВыражения = ОператорИначеЕсли.Выражение.Начало; 32 | КонецВыражения = ОператорИначеЕсли.Выражение.Конец; 33 | ДлинаВыражения = КонецВыражения.Позиция + КонецВыражения.Длина - НачалоВыражения.Позиция; 34 | ТекстУсловия = Сред(Исходник, НачалоВыражения.Позиция, ДлинаВыражения); 35 | Если УникальныеУсловия[ТекстУсловия] <> Неопределено Тогда 36 | Ошибка("Дублируется условие", НачалоВыражения, КонецВыражения); 37 | Иначе 38 | УникальныеУсловия[ТекстУсловия] = Истина; 39 | КонецЕсли; 40 | КонецЦикла; 41 | КонецЕсли; 42 | КонецПроцедуры 43 | 44 | #КонецОбласти // РеализацияПодписок 45 | 46 | Процедура Ошибка(Текст, Начало, Конец = Неопределено, ЕстьЗамена = Ложь) 47 | 48 | Ошибка = ТаблицаОшибок.Добавить(); 49 | Ошибка.Источник = Метаданные().Имя; 50 | Ошибка.Текст = Текст; 51 | 52 | Ошибка.МинутНаИсправление = 5; 53 | Ошибка.Серьезность = "INFO"; 54 | Ошибка.Приоритет = 0; 55 | Ошибка.Правило = Метаданные().Синоним; 56 | Ошибка.Тип = "CODE_SMELL"; 57 | 58 | Ошибка.ПозицияНачала = Начало.Позиция; 59 | Ошибка.НомерСтрокиНачала = Начало.НомерСтроки; 60 | Ошибка.НомерКолонкиНачала = Начало.НомерКолонки; 61 | Если Конец = Неопределено Или Конец = Начало Тогда 62 | Ошибка.ПозицияКонца = Начало.Позиция + Начало.Длина; 63 | Ошибка.НомерСтрокиКонца = Начало.НомерСтроки; 64 | Ошибка.НомерКолонкиКонца = Начало.НомерКолонки + Начало.Длина; 65 | Иначе 66 | Ошибка.ПозицияКонца = Конец.Позиция + Конец.Длина; 67 | Ошибка.НомерСтрокиКонца = Конец.НомерСтроки; 68 | Ошибка.НомерКолонкиКонца = Конец.НомерКолонки + Конец.Длина; 69 | КонецЕсли; 70 | 71 | Ошибка.ЕстьЗамена = ЕстьЗамена; 72 | 73 | КонецПроцедуры 74 | -------------------------------------------------------------------------------- /src/Catalogs/Радар_Плагины/Forms/ФормаЭлемента/Ext/Form.xml: -------------------------------------------------------------------------------- 1 | 2 |
3 | LockOwnerWindow 4 | Items 5 | 6 | 7 | 8 | Объект.Code 9 | EnterOnInput 10 | 11 | 12 | 13 | 14 | Объект.Description 15 | EnterOnInput 16 | 17 | 18 | 19 | 20 | Объект.Owner 21 | 22 | false 23 | 24 | EnterOnInput 25 | 26 | 27 | 28 | 29 | Объект.Путь 30 | EnterOnInput 31 | true 32 | 33 | 34 | 35 | ПутьПриИзменении 36 | ПутьНачалоВыбора 37 | 38 | 39 | 40 | 41 | 42 | 43 | cfg:CatalogObject.Радар_Плагины 44 | 45 | true 46 | true 47 | 48 | 49 | -------------------------------------------------------------------------------- /plugins/БесполезныйПереборКоллекции/src/БесполезныйПереборКоллекции/Ext/ObjectModule.bsl: -------------------------------------------------------------------------------- 1 | 2 | Перем Типы; 3 | Перем ТаблицаОшибок; 4 | Перем Стек; 5 | 6 | Перем ИспользуемыеПеременные; 7 | 8 | Процедура Открыть(Парсер, Параметры) Экспорт 9 | 10 | Типы = Парсер.Типы(); 11 | ТаблицаОшибок = Парсер.ТаблицаОшибок(); 12 | Стек = Парсер.Стек(); 13 | 14 | ИспользуемыеПеременные = Новый Соответствие; 15 | 16 | КонецПроцедуры 17 | 18 | Функция Закрыть() Экспорт 19 | 20 | ИспользуемыеПеременные = Неопределено; 21 | 22 | Возврат Неопределено; 23 | 24 | КонецФункции 25 | 26 | Функция Подписки() Экспорт 27 | Перем Подписки; 28 | Подписки = Новый Массив; 29 | Подписки.Добавить("ПосетитьОператорДляКаждого"); 30 | Подписки.Добавить("ПокинутьОператорДляКаждого"); 31 | Подписки.Добавить("ПосетитьВыражениеИдентификатор"); 32 | Возврат Подписки; 33 | КонецФункции 34 | 35 | #Область РеализацияПодписок 36 | 37 | Процедура ПосетитьОператорДляКаждого(ОператорДляКаждого) Экспорт 38 | 39 | ИспользуемыеПеременные[ОператорДляКаждого.Идентификатор.Голова] = Ложь; 40 | 41 | КонецПроцедуры 42 | 43 | Процедура ПосетитьВыражениеИдентификатор(ВыражениеИдентификатор) Экспорт 44 | 45 | Родитель = Стек[Стек.ВГраница()]; 46 | Если Родитель.Тип <> Типы.ОператорДляКаждого 47 | Или Родитель.Идентификатор <> ВыражениеИдентификатор Тогда 48 | ИспользуемыеПеременные[ВыражениеИдентификатор.Голова] = Истина; 49 | КонецЕсли; 50 | 51 | КонецПроцедуры 52 | 53 | Процедура ПокинутьОператорДляКаждого(ОператорДляКаждого) Экспорт 54 | 55 | Если Не ИспользуемыеПеременные[ОператорДляКаждого.Идентификатор.Голова] Тогда 56 | Ошибка("Бесполезный перебор коллекции", ОператорДляКаждого.Начало, ОператорДляКаждого.Конец); 57 | КонецЕсли; 58 | 59 | КонецПроцедуры 60 | 61 | #КонецОбласти 62 | 63 | Процедура Ошибка(Текст, Начало, Конец = Неопределено, ЕстьЗамена = Ложь) 64 | 65 | Ошибка = ТаблицаОшибок.Добавить(); 66 | Ошибка.Источник = Метаданные().Имя; 67 | Ошибка.Текст = Текст; 68 | 69 | Ошибка.МинутНаИсправление = 5; 70 | Ошибка.Серьезность = "INFO"; 71 | Ошибка.Приоритет = 0; 72 | Ошибка.Правило = Метаданные().Синоним; 73 | Ошибка.Тип = "CODE_SMELL"; 74 | 75 | Ошибка.ПозицияНачала = Начало.Позиция; 76 | Ошибка.НомерСтрокиНачала = Начало.НомерСтроки; 77 | Ошибка.НомерКолонкиНачала = Начало.НомерКолонки; 78 | Если Конец = Неопределено Или Конец = Начало Тогда 79 | Ошибка.ПозицияКонца = Начало.Позиция + Начало.Длина; 80 | Ошибка.НомерСтрокиКонца = Начало.НомерСтроки; 81 | Ошибка.НомерКолонкиКонца = Начало.НомерКолонки + Начало.Длина; 82 | Иначе 83 | Ошибка.ПозицияКонца = Конец.Позиция + Конец.Длина; 84 | Ошибка.НомерСтрокиКонца = Конец.НомерСтроки; 85 | Ошибка.НомерКолонкиКонца = Конец.НомерКолонки + Конец.Длина; 86 | КонецЕсли; 87 | 88 | Ошибка.ЕстьЗамена = ЕстьЗамена; 89 | 90 | КонецПроцедуры 91 | -------------------------------------------------------------------------------- /src/Documents/Радар_Отчет/Forms/ФормаДокумента/Ext/Form.xml: -------------------------------------------------------------------------------- 1 | 2 |
3 | CurrentOrLast 4 | Auto 5 | true 6 | 7 | 8 | 9 | Объект.Number 10 | EnterOnInput 11 | 12 | 13 | 14 | 15 | Объект.Date 16 | EnterOnInput 17 | 18 | 19 | 20 | 21 | Объект.Проект 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | cfg:DocumentObject.Радар_Отчет 30 | 31 | true 32 | true 33 | 34 | Объект.RegisterRecords 35 | 36 | 37 | 38 | 39 | 40 | 41 | InformationRegister.Радар_Ошибки.StandardCommand.OpenByRecorder 42 | Auto 43 | false 44 | 45 | 46 | InformationRegister.Радар_Проверки.StandardCommand.OpenByRecorder 47 | Auto 48 | false 49 | 50 | 51 | AccumulationRegister.Радар_Тренд.StandardCommand.OpenByRecorder 52 | Auto 53 | false 54 | 55 | 56 | 57 | -------------------------------------------------------------------------------- /plugins/ПустаяОбласть/src/ПустаяОбласть/Ext/ObjectModule.bsl: -------------------------------------------------------------------------------- 1 | 2 | Перем ТаблицаОшибок; 3 | Перем ТаблицаТокенов; 4 | Перем Токены; 5 | Перем Типы; 6 | 7 | Перем СтекОбластей; 8 | 9 | Процедура Открыть(Парсер, Параметры) Экспорт 10 | 11 | ТаблицаОшибок = Парсер.ТаблицаОшибок(); 12 | ТаблицаТокенов = Парсер.ТаблицаТокенов(); 13 | Токены = Парсер.Токены(); 14 | Типы = Парсер.Типы(); 15 | 16 | СтекОбластей = Новый Массив; 17 | 18 | КонецПроцедуры 19 | 20 | Функция Закрыть() Экспорт 21 | СтекОбластей = Неопределено; 22 | Возврат Неопределено; 23 | КонецФункции 24 | 25 | Функция Подписки() Экспорт 26 | Перем Подписки; 27 | Подписки = Новый Массив; 28 | Подписки.Добавить("ПосетитьИнструкциюПрепроцессора"); 29 | Возврат Подписки; 30 | КонецФункции 31 | 32 | #Область РеализацияПодписок 33 | 34 | 35 | Процедура ПосетитьИнструкциюПрепроцессора(ИнструкцияПрепроцессора) Экспорт 36 | 37 | Если ИнструкцияПрепроцессора.Тип = Типы.ИнструкцияПрепроцессораОбласть Тогда 38 | 39 | СтекОбластей.Добавить(ИнструкцияПрепроцессора); 40 | 41 | ИначеЕсли ИнструкцияПрепроцессора.Тип = Типы.ИнструкцияПрепроцессораКонецОбласти Тогда 42 | 43 | КонецОбласти = ИнструкцияПрепроцессора; 44 | 45 | Если СтекОбластей.Количество() > 0 Тогда 46 | 47 | Область = СтекОбластей[СтекОбластей.ВГраница()]; 48 | СтекОбластей.Удалить(СтекОбластей.ВГраница()); 49 | 50 | НетЗначимыхТокенов = Истина; 51 | 52 | Для Индекс = Область.Конец.Индекс + 1 По КонецОбласти.Начало.Индекс - 1 Цикл 53 | Если ТаблицаТокенов[Индекс].Токен <> Токены.Комментарий Тогда 54 | НетЗначимыхТокенов = Ложь; 55 | Прервать; 56 | КонецЕсли; 57 | КонецЦикла; 58 | 59 | Если НетЗначимыхТокенов Тогда 60 | Ошибка("Пустая область", Область.Начало, КонецОбласти.Конец); 61 | КонецЕсли; 62 | 63 | КонецЕсли; 64 | 65 | КонецЕсли; 66 | 67 | КонецПроцедуры 68 | 69 | #КонецОбласти // РеализацияПодписок 70 | 71 | Процедура Ошибка(Текст, Начало, Конец = Неопределено, ЕстьЗамена = Ложь) 72 | 73 | Ошибка = ТаблицаОшибок.Добавить(); 74 | Ошибка.Источник = Метаданные().Имя; 75 | Ошибка.Текст = Текст; 76 | 77 | Ошибка.МинутНаИсправление = 5; 78 | Ошибка.Серьезность = "INFO"; 79 | Ошибка.Приоритет = 0; 80 | Ошибка.Правило = Метаданные().Синоним; 81 | Ошибка.Тип = "CODE_SMELL"; 82 | 83 | Ошибка.ПозицияНачала = Начало.Позиция; 84 | Ошибка.НомерСтрокиНачала = Начало.НомерСтроки; 85 | Ошибка.НомерКолонкиНачала = Начало.НомерКолонки; 86 | Если Конец = Неопределено Или Конец = Начало Тогда 87 | Ошибка.ПозицияКонца = Начало.Позиция + Начало.Длина; 88 | Ошибка.НомерСтрокиКонца = Начало.НомерСтроки; 89 | Ошибка.НомерКолонкиКонца = Начало.НомерКолонки + Начало.Длина; 90 | Иначе 91 | Ошибка.ПозицияКонца = Конец.Позиция + Конец.Длина; 92 | Ошибка.НомерСтрокиКонца = Конец.НомерСтроки; 93 | Ошибка.НомерКолонкиКонца = Конец.НомерКолонки + Конец.Длина; 94 | КонецЕсли; 95 | 96 | Ошибка.ЕстьЗамена = ЕстьЗамена; 97 | 98 | КонецПроцедуры 99 | -------------------------------------------------------------------------------- /src/Enums/ФорматыВыгрузки.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | af518e16-7599-4761-a3e4-57739ad8f486 7 | a5ceada1-a1a3-4ab6-9c5e-68c8d1d7af52 8 | 9 | 10 | 956eaff7-a5e5-4331-afcc-78a7f272b4da 11 | b039dc74-1224-4870-bd46-d399315a7cc2 12 | 13 | 14 | 9d5a867a-2d59-4098-904a-194c1bff2f38 15 | c87ee21e-fbe2-4f53-befb-07c2ff303eba 16 | 17 | 18 | 19 | ФорматыВыгрузки 20 | 21 | 22 | ru 23 | Форматы выгрузки 24 | 25 | 26 | 27 | false 28 | 29 | true 30 | BothWays 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | Auto 39 | 40 | 41 | 42 | 43 | EDT 44 | 45 | 46 | ru 47 | EDT 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | XML 56 | 57 | 58 | ru 59 | XML 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | -------------------------------------------------------------------------------- /src/Documents/Радар_Отчет/Ext/ObjectModule.bsl: -------------------------------------------------------------------------------- 1 | 2 | Процедура ПриЗаписи(Отказ) 3 | 4 | Если ДополнительныеСвойства.Свойство("ЭтоНовый") Тогда 5 | 6 | Старт = ТекущаяУниверсальнаяДатаВМиллисекундах(); 7 | 8 | Посетитель = Обработки.Радар_Посетитель.Создать(); 9 | Посетитель.ПосетитьКонфигурацию(ЭтотОбъект); 10 | Модули = Посетитель.Модули; 11 | ГлобальныеСвойства = Посетитель.ГлобальныеСвойства; 12 | ГлобальныеМетоды = Посетитель.ГлобальныеМетоды; 13 | Посетитель = Неопределено; 14 | 15 | Запрос = Новый Запрос; 16 | Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; 17 | Запрос.УстановитьПараметр("Период", ТекущаяДатаСеанса()); 18 | Запрос.УстановитьПараметр("Проект", ЭтотОбъект.Проект); 19 | Запрос.Текст = 20 | "ВЫБРАТЬ 21 | | Радар_ТрендОстатки.Модуль КАК Модуль, 22 | | Радар_ТрендОстатки.КоличествоОшибокОстаток КАК КоличествоОшибок 23 | |ПОМЕСТИТЬ Остатки 24 | |ИЗ 25 | | РегистрНакопления.Радар_Тренд.Остатки(, Проект = &Проект) КАК Радар_ТрендОстатки 26 | | 27 | |ИНДЕКСИРОВАТЬ ПО 28 | | Модуль"; 29 | 30 | Запрос.Выполнить(); 31 | 32 | Если Радар_КлиентСервер.ЭтоФайловаяБаза() Или Не ЭтотОбъект.Проект.ИспользоватьМногопоточность Тогда 33 | Радар_Задания.РазобратьПартиюМодулей(Модули, ЭтотОбъект.Ссылка, ЭтотОбъект.Проект, ГлобальныеСвойства, ГлобальныеМетоды); 34 | Иначе 35 | Радар_Задания.РазобратьМодули(Модули, ЭтотОбъект.Ссылка, ЭтотОбъект.Проект, ГлобальныеСвойства, ГлобальныеМетоды); 36 | КонецЕсли; 37 | 38 | Запрос.УстановитьПараметр("Регистратор", ЭтотОбъект.Ссылка); 39 | Запрос.Текст = 40 | "ВЫБРАТЬ 41 | | Радар_Проверки.Период КАК Период, 42 | | ВЫБОР 43 | | КОГДА ЕСТЬNULL(Остатки.КоличествоОшибок, 0) < Радар_Проверки.КоличествоОшибок 44 | | ТОГДА ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) 45 | | ИНАЧЕ ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход) 46 | | КОНЕЦ КАК ВидДвижения, 47 | | Радар_Проверки.Проект КАК Проект, 48 | | Радар_Проверки.Модуль КАК Модуль, 49 | | ВЫБОР 50 | | КОГДА ЕСТЬNULL(Остатки.КоличествоОшибок, 0) < Радар_Проверки.КоличествоОшибок 51 | | ТОГДА Радар_Проверки.КоличествоОшибок - ЕСТЬNULL(Остатки.КоличествоОшибок, 0) 52 | | ИНАЧЕ ЕСТЬNULL(Остатки.КоличествоОшибок, 0) - Радар_Проверки.КоличествоОшибок 53 | | КОНЕЦ КАК КоличествоОшибок 54 | |ИЗ 55 | | РегистрСведений.Радар_Проверки КАК Радар_Проверки 56 | | ЛЕВОЕ СОЕДИНЕНИЕ Остатки КАК Остатки 57 | | ПО Радар_Проверки.Модуль = Остатки.Модуль 58 | |ГДЕ 59 | | Радар_Проверки.Регистратор = &Регистратор 60 | | И ВЫБОР 61 | | КОГДА ЕСТЬNULL(Остатки.КоличествоОшибок, 0) < Радар_Проверки.КоличествоОшибок 62 | | ТОГДА Радар_Проверки.КоличествоОшибок - ЕСТЬNULL(Остатки.КоличествоОшибок, 0) 63 | | ИНАЧЕ ЕСТЬNULL(Остатки.КоличествоОшибок, 0) - Радар_Проверки.КоличествоОшибок 64 | | КОНЕЦ > 0"; 65 | 66 | Ошибки = Запрос.Выполнить().Выгрузить(); 67 | 68 | ЭтотОбъект.Движения.Радар_Тренд.Загрузить(Ошибки); 69 | ЭтотОбъект.Движения.Радар_Тренд.Записать(Ложь); 70 | 71 | Финиш = ТекущаяУниверсальнаяДатаВМиллисекундах() - Старт; 72 | Сообщить(Финиш / 1000); 73 | 74 | ОбновитьПовторноИспользуемыеЗначения(); 75 | 76 | КонецЕсли; 77 | 78 | КонецПроцедуры 79 | 80 | Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) 81 | 82 | Если ЭтоНовый() Тогда 83 | ДополнительныеСвойства.Вставить("ЭтоНовый"); 84 | КонецЕсли; 85 | 86 | КонецПроцедуры 87 | -------------------------------------------------------------------------------- /plugins/ВставкаКоллекцииВСамуСебя/src/ВставкаКоллекцииВСамуСебя/Ext/ObjectModule.bsl: -------------------------------------------------------------------------------- 1 | 2 | Перем Типы; 3 | Перем ТаблицаОшибок; 4 | 5 | Перем ИменаМетодовВставки; 6 | 7 | Процедура Открыть(Парсер, Параметры) Экспорт 8 | 9 | Типы = Парсер.Типы(); 10 | ТаблицаОшибок = Парсер.ТаблицаОшибок(); 11 | 12 | ИменаМетодовВставки = Новый Структура; 13 | ИменаМетодовВставки.Вставить("Вставить"); 14 | ИменаМетодовВставки.Вставить("Insert"); 15 | ИменаМетодовВставки.Вставить("Добавить"); 16 | ИменаМетодовВставки.Вставить("Add"); 17 | 18 | КонецПроцедуры 19 | 20 | Функция Закрыть() Экспорт 21 | 22 | Возврат Неопределено; 23 | 24 | КонецФункции 25 | 26 | Функция Подписки() Экспорт 27 | Перем Подписки; 28 | Подписки = Новый Массив; 29 | Подписки.Добавить("ПосетитьОператорВызоваПроцедуры"); 30 | Подписки.Добавить("ПосетитьОператорПрисваивания"); 31 | Возврат Подписки; 32 | КонецФункции 33 | 34 | #Область РеализацияПодписок 35 | 36 | Процедура ПосетитьОператорПрисваивания(ОператорПрисваивания) Экспорт 37 | 38 | ЛевыйОперанд = ОператорПрисваивания.ЛевыйОперанд; 39 | 40 | Если ЛевыйОперанд.Хвост.Количество() = 0 Тогда 41 | Возврат; 42 | КонецЕсли; 43 | 44 | ПравыйОперанд = ОператорПрисваивания.ПравыйОперанд; 45 | 46 | Если ПравыйОперанд.Тип = Типы.ВыражениеИдентификатор 47 | И ПравыйОперанд.Хвост.Количество() = 0 48 | И ЛевыйОперанд.Голова = ПравыйОперанд.Голова Тогда 49 | 50 | Ошибка("Вставка коллекции в саму себя", ОператорПрисваивания.Начало, ОператорПрисваивания.Конец); 51 | 52 | КонецЕсли; 53 | 54 | КонецПроцедуры 55 | 56 | Процедура ПосетитьОператорВызоваПроцедуры(ОператорВызоваПроцедуры) Экспорт 57 | 58 | Голова = ОператорВызоваПроцедуры.Идентификатор.Голова; 59 | Хвост = ОператорВызоваПроцедуры.Идентификатор.Хвост; 60 | 61 | Если Хвост.Количество() = 1 Тогда 62 | 63 | Элемент = Хвост[0]; 64 | 65 | Если Элемент.Тип = Типы.ВыражениеПоле 66 | И Элемент.Аргументы <> Неопределено 67 | И ИменаМетодовВставки.Свойство(Элемент.Имя) Тогда 68 | 69 | Для Каждого Выражение Из Элемент.Аргументы Цикл 70 | 71 | Если Выражение <> Неопределено 72 | И Выражение.Тип = Типы.ВыражениеИдентификатор 73 | И Выражение.Голова = Голова 74 | И Выражение.Хвост.Количество() = 0 Тогда 75 | 76 | Ошибка("Вставка коллекции в саму себя", ОператорВызоваПроцедуры.Начало, ОператорВызоваПроцедуры.Конец); 77 | 78 | КонецЕсли; 79 | 80 | КонецЦикла; 81 | 82 | КонецЕсли; 83 | 84 | КонецЕсли; 85 | 86 | КонецПроцедуры 87 | 88 | #КонецОбласти 89 | 90 | Процедура Ошибка(Текст, Начало, Конец = Неопределено, ЕстьЗамена = Ложь) 91 | 92 | Ошибка = ТаблицаОшибок.Добавить(); 93 | Ошибка.Источник = Метаданные().Имя; 94 | Ошибка.Текст = Текст; 95 | 96 | Ошибка.МинутНаИсправление = 5; 97 | Ошибка.Серьезность = "INFO"; 98 | Ошибка.Приоритет = 0; 99 | Ошибка.Правило = Метаданные().Синоним; 100 | Ошибка.Тип = "CODE_SMELL"; 101 | 102 | Ошибка.ПозицияНачала = Начало.Позиция; 103 | Ошибка.НомерСтрокиНачала = Начало.НомерСтроки; 104 | Ошибка.НомерКолонкиНачала = Начало.НомерКолонки; 105 | Если Конец = Неопределено Или Конец = Начало Тогда 106 | Ошибка.ПозицияКонца = Начало.Позиция + Начало.Длина; 107 | Ошибка.НомерСтрокиКонца = Начало.НомерСтроки; 108 | Ошибка.НомерКолонкиКонца = Начало.НомерКолонки + Начало.Длина; 109 | Иначе 110 | Ошибка.ПозицияКонца = Конец.Позиция + Конец.Длина; 111 | Ошибка.НомерСтрокиКонца = Конец.НомерСтроки; 112 | Ошибка.НомерКолонкиКонца = Конец.НомерКолонки + Конец.Длина; 113 | КонецЕсли; 114 | 115 | Ошибка.ЕстьЗамена = ЕстьЗамена; 116 | 117 | КонецПроцедуры 118 | -------------------------------------------------------------------------------- /src/CommonModules/Радар_Сервер/Ext/Module.bsl: -------------------------------------------------------------------------------- 1 | 2 | Процедура СообщитьПолеНеЗаполнено(Объект, ИмяПоля, Отказ = Неопределено, Знач СинонимПоля = Неопределено) Экспорт 3 | 4 | Если СинонимПоля = Неопределено Тогда 5 | СинонимПоля = Объект.Метаданные().Реквизиты[ИмяПоля].Синоним; 6 | КонецЕсли; 7 | 8 | Шаблон = НСтр("ru = 'Поле ""%1"" не заполнено'"); 9 | 10 | Сообщение = Новый СообщениеПользователю; 11 | Сообщение.УстановитьДанные(Объект); 12 | Сообщение.Поле = ИмяПоля; 13 | Сообщение.Текст = СтрШаблон(Шаблон, СинонимПоля); 14 | Сообщение.Сообщить(); 15 | 16 | Отказ = Истина; 17 | 18 | КонецПроцедуры 19 | 20 | Функция ВыгрузитьОшибкиВСонар(Проект) Экспорт 21 | 22 | // https://docs.sonarqube.org/latest/analysis/generic-issue/ 23 | 24 | Запрос = Новый Запрос; 25 | Запрос.УстановитьПараметр("Проект", Проект); 26 | Запрос.Текст = 27 | "ВЫБРАТЬ 28 | | Радар_ПроверкиСрезПоследних.Проект КАК Проект, 29 | | Радар_ПроверкиСрезПоследних.Модуль КАК Модуль, 30 | | Радар_ПроверкиСрезПоследних.Путь КАК Путь, 31 | | Радар_Ошибки.Текст КАК Текст, 32 | | Радар_Ошибки.ПозицияНачала КАК ПозицияНачала, 33 | | Радар_Ошибки.НомерСтрокиНачала КАК НомерСтрокиНачала, 34 | | Радар_Ошибки.НомерКолонкиНачала КАК НомерКолонкиНачала, 35 | | Радар_Ошибки.ПозицияКонца КАК ПозицияКонца, 36 | | Радар_Ошибки.НомерСтрокиКонца КАК НомерСтрокиКонца, 37 | | Радар_Ошибки.НомерКолонкиКонца КАК НомерКолонкиКонца, 38 | | Радар_Ошибки.ЕстьЗамена КАК ЕстьЗамена, 39 | | Радар_Ошибки.Источник КАК Источник, 40 | | Радар_Ошибки.Код КАК Код, 41 | | Радар_Ошибки.МинутНаИсправление КАК МинутНаИсправление, 42 | | Радар_Ошибки.Серьезность КАК Серьезность, 43 | | Радар_Ошибки.Приоритет КАК Приоритет, 44 | | Радар_Ошибки.Правило КАК Правило, 45 | | Радар_Ошибки.Тип КАК Тип 46 | |ИЗ 47 | | РегистрСведений.Радар_Проверки.СрезПоследних(, Проект = &Проект) КАК Радар_ПроверкиСрезПоследних 48 | | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.Радар_Ошибки КАК Радар_Ошибки 49 | | ПО Радар_ПроверкиСрезПоследних.Регистратор = Радар_Ошибки.Регистратор 50 | | И Радар_ПроверкиСрезПоследних.Проект = Радар_Ошибки.Проект 51 | | И Радар_ПроверкиСрезПоследних.Модуль = Радар_Ошибки.Модуль 52 | |ГДЕ 53 | | НЕ Радар_ПроверкиСрезПоследних.НеОбнаружен"; 54 | 55 | ВыборкаОшибок = Запрос.Выполнить().Выбрать(); 56 | 57 | Проблемы = Новый Массив; 58 | 59 | Пока ВыборкаОшибок.Следующий() Цикл 60 | 61 | Диапазон = Новый Структура; 62 | Диапазон.Вставить("startLine", ВыборкаОшибок.НомерСтрокиНачала); 63 | Диапазон.Вставить("endLine", ВыборкаОшибок.НомерСтрокиКонца); 64 | Диапазон.Вставить("startColumn", ВыборкаОшибок.НомерКолонкиНачала - 1); 65 | Диапазон.Вставить("endColumn", ВыборкаОшибок.НомерКолонкиКонца - 1); 66 | 67 | Место = Новый Структура; 68 | Место.Вставить("message", ВыборкаОшибок.Текст); 69 | Место.Вставить("filePath", ВыборкаОшибок.Путь); 70 | Место.Вставить("textRange", Диапазон); 71 | 72 | Проблема = Новый Структура; 73 | Проблема.Вставить("engineId", "radar"); 74 | Проблема.Вставить("ruleId", ВыборкаОшибок.Правило); 75 | Проблема.Вставить("severity", ВыборкаОшибок.Серьезность); 76 | Проблема.Вставить("type", ВыборкаОшибок.Тип); 77 | Проблема.Вставить("primaryLocation", Место); 78 | Проблема.Вставить("effortMinutes", ВыборкаОшибок.МинутНаИсправление); 79 | Проблемы.Добавить(Проблема); 80 | 81 | КонецЦикла; 82 | 83 | Отчет = Новый Структура("issues", Проблемы); 84 | 85 | ЗаписьJSON = Новый ЗаписьJSON; 86 | 87 | ЗаписьJSON.УстановитьСтроку(Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Unix)); 88 | ЗаписатьJSON(ЗаписьJSON, Отчет); 89 | ТекстОтчета = ЗаписьJSON.Закрыть(); 90 | 91 | Адрес = ПоместитьВоВременноеХранилище(ТекстОтчета); 92 | 93 | Возврат Адрес; 94 | 95 | КонецФункции 96 | -------------------------------------------------------------------------------- /src/Configuration.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 9cd510cd-abfc-11d4-9434-004095e12fc7 7 | 5ce75f3e-51c5-4607-a898-80871a725f88 8 | 9 | 10 | 9fcd25a0-4822-11d4-9414-008048da11f9 11 | 2e2f7688-f14e-45e5-84a2-06c5d480a108 12 | 13 | 14 | e3687481-0a87-462c-a166-9f34594f9bba 15 | 2044837c-50dc-4df9-8ee4-51df767b7bcf 16 | 17 | 18 | 9de14907-ec23-4a07-96f0-85521cb6b53b 19 | f81306f6-d1db-48e7-8087-881739702fa2 20 | 21 | 22 | 51f2d5d8-ea4d-4064-8892-82951750031e 23 | cee2a30e-1ec2-44a8-8c0c-83e7fb154906 24 | 25 | 26 | e68182ea-4237-4383-967f-90c1e3370bc7 27 | c516fc29-ab8d-4bf9-a648-2840493cbb5a 28 | 29 | 30 | 31 | Радар 32 | 33 | 34 | ru 35 | Радар 36 | 37 | 38 | 39 | AddOn 40 | Adopted 41 | Радар_ 42 | Version8_3_13 43 | ManagedApplication 44 | 45 | PlatformApplication 46 | 47 | Russian 48 | 49 | 50 | Language.Русский 51 | 52 | 53 | 54 | 55 | 56 | Taxi 57 | 58 | 59 | Русский 60 | Радар_Подсистема 61 | Радар_Кэш 62 | Радар_Задания 63 | Радар_Типы 64 | Радар_Сервер 65 | Радар_Клиент 66 | Радар_КлиентСервер 67 | Радар_Плагины 68 | Радар_Модули 69 | Радар_Проекты 70 | Радар_Отчет 71 | ФорматыВыгрузки 72 | Радар_Тренд 73 | Радар_ПарсерВстроенногоЯзыка 74 | Радар_Посетитель 75 | Радар_КонструкторГлобальногоОкружения 76 | Радар_Консоль 77 | Радар_Навигатор 78 | Радар_Проверки 79 | Радар_Ошибки 80 | Радар_ХешСуммы 81 | Радар_Тренд 82 | 83 | 84 | -------------------------------------------------------------------------------- /src/Catalogs/Радар_Модули.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | f84359a7-2274-4340-a1f5-43769b67cd5e 7 | 41bf22ed-a483-42cb-bd6a-349b59074447 8 | 9 | 10 | ef7e088b-6186-460a-93e6-d2f7aae95736 11 | d041fe4e-ecf3-404b-9666-086f5aca2cc8 12 | 13 | 14 | f2b6bd61-7202-4602-9065-a3b3eb7f9d73 15 | eb37ccee-46ff-4f96-9e96-a61fb14e2fdd 16 | 17 | 18 | 8574db3e-b81a-4e9d-9a0d-d5679ae51dbb 19 | 6cbb9f08-8802-48d3-b606-40401c178df6 20 | 21 | 22 | 336f807e-4926-4b70-9e63-1fe31b312e2f 23 | ead25208-2cf4-41cc-9770-b04e3d791af5 24 | 25 | 26 | 27 | Радар_Модули 28 | 29 | 30 | ru 31 | Модули 32 | 33 | 34 | 35 | false 36 | HierarchyFoldersAndItems 37 | false 38 | 2 39 | true 40 | true 41 | 42 | Catalog.Радар_Проекты 43 | 44 | ToItems 45 | 9 46 | 150 47 | String 48 | Variable 49 | WholeCatalog 50 | true 51 | true 52 | AsDescription 53 | 54 | Auto 55 | InDialog 56 | false 57 | BothWays 58 | 59 | Catalog.Радар_Модули.StandardAttribute.Description 60 | Catalog.Радар_Модули.StandardAttribute.Code 61 | 62 | Begin 63 | DontUse 64 | Directly 65 | Catalog.Радар_Модули.Form.ФормаЭлемента 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | false 76 | 77 | 78 | Managed 79 | Use 80 | 81 | 82 | 83 | 84 | 85 | Use 86 | Auto 87 | DontUse 88 | 89 | 90 |
ФормаЭлемента
91 |
92 |
93 |
-------------------------------------------------------------------------------- /plugins/ИспользованиеНСтр/src/ИспользованиеНСтр/Ext/ObjectModule.bsl: -------------------------------------------------------------------------------- 1 | 2 | Перем ТаблицаОшибок; 3 | Перем Типы; 4 | 5 | Перем ИменаНСтр; 6 | Перем НедопустимыеСимволыКода; 7 | Перем Алфавиты; 8 | 9 | // TODO: проверять наличие всех языков 10 | 11 | Процедура Открыть(Парсер, Параметры) Экспорт 12 | 13 | ТаблицаОшибок = Парсер.ТаблицаОшибок(); 14 | Типы = Парсер.Типы(); 15 | 16 | ИменаНСтр = Новый Структура; 17 | ИменаНСтр.Вставить("НСтр"); 18 | ИменаНСтр.Вставить("NStr"); 19 | 20 | НедопустимыеСимволыКода = "#*|\:""<>?/="; 21 | 22 | Алфавиты = Новый Структура; 23 | Алфавиты.Вставить("en", " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"); 24 | Алфавиты.Вставить("ru", " абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"); 25 | 26 | КонецПроцедуры 27 | 28 | Функция Закрыть() Экспорт 29 | Возврат Неопределено; 30 | КонецФункции 31 | 32 | Функция Подписки() Экспорт 33 | Перем Подписки; 34 | Подписки = Новый Массив; 35 | Подписки.Добавить("ПосетитьВыражениеИдентификатор"); 36 | Возврат Подписки; 37 | КонецФункции 38 | 39 | #Область РеализацияПодписок 40 | 41 | Процедура ПосетитьВыражениеИдентификатор(ВыражениеИдентификатор) Экспорт 42 | Если ИменаНСтр.Свойство(ВыражениеИдентификатор.Голова.Имя) 43 | И ВыражениеИдентификатор.Аргументы <> Неопределено 44 | И ВыражениеИдентификатор.Аргументы.Количество() > 0 Тогда 45 | ПервыйАргумент = ВыражениеИдентификатор.Аргументы[0]; 46 | Если ПервыйАргумент = Неопределено Или ПервыйАргумент.Тип <> Типы.ВыражениеСтроковое Тогда 47 | Ошибка("Первым аргументом должна быть простая строка", ВыражениеИдентификатор.Начало, ВыражениеИдентификатор.Начало); 48 | Иначе 49 | РазобратьМультиязычнуюСтроку(ПервыйАргумент); 50 | КонецЕсли; 51 | КонецЕсли; 52 | КонецПроцедуры 53 | 54 | #КонецОбласти // РеализацияПодписок 55 | 56 | Функция РазобратьМультиязычнуюСтроку(ВыражениеСтроковое) 57 | 58 | СписокСтрок = Новый Массив; 59 | Для Каждого Элемент Из ВыражениеСтроковое.Элементы Цикл 60 | СписокСтрок.Добавить(Элемент.Значение); 61 | КонецЦикла; 62 | ИсходнаяСтрока = СтрСоединить(СписокСтрок); 63 | 64 | Индекс = 0; 65 | Символ = ";"; 66 | 67 | СинтаксисКорректен = Истина; 68 | 69 | Пока Символ = ";" Цикл 70 | 71 | Индекс = Индекс + 1; 72 | Символ = Сред(ИсходнаяСтрока, Индекс, 1); 73 | 74 | Начало = Индекс; 75 | 76 | Пока СтрНайти(НедопустимыеСимволыКода, Символ) = 0 Цикл 77 | Индекс = Индекс + 1; 78 | Символ = Сред(ИсходнаяСтрока, Индекс, 1); 79 | КонецЦикла; 80 | 81 | Если Символ <> "=" Тогда 82 | Ошибка("Ошибка формата строки", ВыражениеСтроковое.Начало, ВыражениеСтроковое.Конец); 83 | СинтаксисКорректен = Ложь; 84 | Прервать; 85 | КонецЕсли; 86 | 87 | КодЯзыка = СокрЛП(Сред(ИсходнаяСтрока, Начало, Индекс - Начало)); 88 | 89 | Алфавит = Неопределено; 90 | Алфавиты.Свойство(КодЯзыка, Алфавит); 91 | 92 | Индекс = Индекс + 1; 93 | Символ = Сред(ИсходнаяСтрока, Индекс, 1); 94 | Пока ПустаяСтрока(Символ) И Символ <> "" Цикл 95 | Индекс = Индекс + 1; 96 | Символ = Сред(ИсходнаяСтрока, Индекс, 1); 97 | КонецЦикла; 98 | 99 | Начало = Индекс; 100 | 101 | Если Символ <> "'" Тогда 102 | Ошибка("Ошибка формата строки", ВыражениеСтроковое.Начало, ВыражениеСтроковое.Конец); 103 | СинтаксисКорректен = Ложь; 104 | Прервать; 105 | КонецЕсли; 106 | 107 | КоличествоСимволовИзАлфавита = 0; 108 | 109 | Пока Символ = "'" Цикл 110 | Индекс = Индекс + 1; 111 | Символ = Сред(ИсходнаяСтрока, Индекс, 1); 112 | Пока Символ <> "'" И Символ <> "" Цикл 113 | Индекс = Индекс + 1; 114 | Символ = Сред(ИсходнаяСтрока, Индекс, 1); 115 | Если Алфавит <> Неопределено И СтрНайти(Алфавит, Символ) > 0 Тогда 116 | КоличествоСимволовИзАлфавита = КоличествоСимволовИзАлфавита + 1; 117 | КонецЕсли; 118 | КонецЦикла; 119 | Если Символ = "" Тогда 120 | Символ = Неопределено; 121 | Иначе 122 | Индекс = Индекс + 1; 123 | Символ = Сред(ИсходнаяСтрока, Индекс, 1); 124 | КонецЕсли; 125 | КонецЦикла; 126 | 127 | Если Символ = Неопределено Тогда 128 | Ошибка("Ошибка формата строки", ВыражениеСтроковое.Начало, ВыражениеСтроковое.Конец); 129 | СинтаксисКорректен = Ложь; 130 | Прервать; 131 | КонецЕсли; 132 | 133 | Если Алфавит <> Неопределено И КоличествоСимволовИзАлфавита < (Индекс - Начало) / 4 Тогда 134 | Ошибка(СтрШаблон("Возможно язык строки не соответствует коду языка '%1'", КодЯзыка), ВыражениеСтроковое.Начало, ВыражениеСтроковое.Конец); 135 | КонецЕсли; 136 | 137 | КонецЦикла; 138 | 139 | КонецФункции 140 | 141 | Процедура Ошибка(Текст, Начало, Конец = Неопределено, ЕстьЗамена = Ложь) 142 | 143 | Ошибка = ТаблицаОшибок.Добавить(); 144 | Ошибка.Источник = Метаданные().Имя; 145 | Ошибка.Текст = Текст; 146 | 147 | Ошибка.МинутНаИсправление = 5; 148 | Ошибка.Серьезность = "INFO"; 149 | Ошибка.Приоритет = 0; 150 | Ошибка.Правило = Метаданные().Синоним; 151 | Ошибка.Тип = "CODE_SMELL"; 152 | 153 | Ошибка.ПозицияНачала = Начало.Позиция; 154 | Ошибка.НомерСтрокиНачала = Начало.НомерСтроки; 155 | Ошибка.НомерКолонкиНачала = Начало.НомерКолонки; 156 | Если Конец = Неопределено Или Конец = Начало Тогда 157 | Ошибка.ПозицияКонца = Начало.Позиция + Начало.Длина; 158 | Ошибка.НомерСтрокиКонца = Начало.НомерСтроки; 159 | Ошибка.НомерКолонкиКонца = Начало.НомерКолонки + Начало.Длина; 160 | Иначе 161 | Ошибка.ПозицияКонца = Конец.Позиция + Конец.Длина; 162 | Ошибка.НомерСтрокиКонца = Конец.НомерСтроки; 163 | Ошибка.НомерКолонкиКонца = Конец.НомерКолонки + Конец.Длина; 164 | КонецЕсли; 165 | 166 | Ошибка.ЕстьЗамена = ЕстьЗамена; 167 | 168 | КонецПроцедуры 169 | -------------------------------------------------------------------------------- /src/Catalogs/Радар_Проекты/Forms/ФормаЭлемента/Ext/Form/Module.bsl: -------------------------------------------------------------------------------- 1 | 2 | #Область СобытияФормы 3 | 4 | &НаСервере 5 | Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) 6 | 7 | ЭтотОбъект.ЭтоФайловаяБаза = Радар_КлиентСервер.ЭтоФайловаяБаза(); 8 | 9 | УстановитьВидимость(ЭтотОбъект); 10 | УстановитьДоступность(ЭтотОбъект); 11 | УстановитьУсловноеОформление(); 12 | 13 | КонецПроцедуры 14 | 15 | #КонецОбласти 16 | 17 | #Область СобытияЭлементов 18 | 19 | &НаКлиенте 20 | Процедура ВнешняяКонфигурацияПриИзменении(Элемент) 21 | 22 | УстановитьВидимость(ЭтотОбъект); 23 | 24 | КонецПроцедуры 25 | 26 | &НаКлиенте 27 | Процедура ПутьКонфигурацииНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) 28 | 29 | СтандартнаяОбработка = Ложь; 30 | Радар_Клиент.ВыбратьПуть(Элемент, ЭтотОбъект, РежимДиалогаВыбораФайла.Открытие, "(*.cf; *.cfe)|*.cf;*.cfe"); 31 | 32 | КонецПроцедуры 33 | 34 | &НаКлиенте 35 | Процедура ПутьВыгрузкиНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) 36 | 37 | СтандартнаяОбработка = Ложь; 38 | Радар_Клиент.ВыбратьПуть(Элемент, ЭтотОбъект, РежимДиалогаВыбораФайла.ВыборКаталога); 39 | 40 | КонецПроцедуры 41 | 42 | &НаКлиенте 43 | Процедура ИспользоватьМногопоточностьПриИзменении(Элемент) 44 | 45 | УстановитьВидимость(ЭтотОбъект); 46 | 47 | КонецПроцедуры 48 | 49 | #КонецОбласти 50 | 51 | &НаКлиентеНаСервереБезКонтекста 52 | Процедура УстановитьВидимость(ЭтотОбъект) 53 | 54 | Объект = ЭтотОбъект.Объект; 55 | Элементы = ЭтотОбъект.Элементы; 56 | 57 | Элементы.ПутьКонфигурации.Видимость = Объект.ВнешняяКонфигурация; 58 | Элементы.ГруппаНастройкиМногопоточногоАнализа.Видимость = Объект.ИспользоватьМногопоточность И Не ЭтотОбъект.ЭтоФайловаяБаза; 59 | 60 | КонецПроцедуры 61 | 62 | &НаКлиентеНаСервереБезКонтекста 63 | Процедура УстановитьДоступность(ЭтотОбъект) 64 | 65 | Объект = ЭтотОбъект.Объект; 66 | Элементы = ЭтотОбъект.Элементы; 67 | 68 | Элементы.ИспользоватьМногопоточность.Доступность = Не ЭтотОбъект.ЭтоФайловаяБаза; 69 | 70 | КонецПроцедуры 71 | 72 | &НаСервере 73 | Процедура УстановитьУсловноеОформление() 74 | 75 | // справка: ОформлениеКомпоновкиДанных 76 | 77 | УстановитьУсловноеОформлениеПоляПутьКонфигурации(); 78 | УстановитьУсловноеОформлениеПоляРазмерПартии(); 79 | УстановитьУсловноеОформлениеПоляМаксимумПотоков(); 80 | 81 | КонецПроцедуры 82 | 83 | &НаСервере 84 | Процедура УстановитьУсловноеОформлениеПоляПутьКонфигурации() 85 | 86 | Элемент = УсловноеОформление.Элементы.Добавить(); 87 | 88 | ГруппаИ = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных")); 89 | ГруппаИ.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ; 90 | ГруппаИ.Использование = Истина; 91 | 92 | Отбор = ГруппаИ.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); 93 | Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ВнешняяКонфигурация"); 94 | Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; 95 | Отбор.ПравоеЗначение = Истина; 96 | 97 | Отбор = ГруппаИ.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); 98 | Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ПутьКонфигурации"); 99 | Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено; 100 | 101 | Свойство = Элемент.Оформление.Элементы.Найти("ОтметкаНезаполненного"); 102 | Свойство.Значение = Истина; 103 | Свойство.Использование = Истина; 104 | 105 | Поле = Элемент.Поля.Элементы.Добавить(); 106 | Поле.Поле = Новый ПолеКомпоновкиДанных("ПутьКонфигурации"); 107 | Поле.Использование = Истина; 108 | 109 | КонецПроцедуры 110 | 111 | &НаСервере 112 | Процедура УстановитьУсловноеОформлениеПоляРазмерПартии() 113 | 114 | Элемент = УсловноеОформление.Элементы.Добавить(); 115 | 116 | ГруппаИ = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных")); 117 | ГруппаИ.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ; 118 | ГруппаИ.Использование = Истина; 119 | 120 | Отбор = ГруппаИ.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); 121 | Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ИспользоватьМногопоточность"); 122 | Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; 123 | Отбор.ПравоеЗначение = Истина; 124 | 125 | Отбор = ГруппаИ.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); 126 | Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.РазмерПартии"); 127 | Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено; 128 | 129 | Свойство = Элемент.Оформление.Элементы.Найти("ОтметкаНезаполненного"); 130 | Свойство.Значение = Истина; 131 | Свойство.Использование = Истина; 132 | 133 | Поле = Элемент.Поля.Элементы.Добавить(); 134 | Поле.Поле = Новый ПолеКомпоновкиДанных("РазмерПартии"); 135 | Поле.Использование = Истина; 136 | 137 | КонецПроцедуры 138 | 139 | &НаСервере 140 | Процедура УстановитьУсловноеОформлениеПоляМаксимумПотоков() 141 | 142 | Элемент = УсловноеОформление.Элементы.Добавить(); 143 | 144 | ГруппаИ = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных")); 145 | ГруппаИ.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ; 146 | ГруппаИ.Использование = Истина; 147 | 148 | Отбор = ГруппаИ.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); 149 | Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ИспользоватьМногопоточность"); 150 | Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; 151 | Отбор.ПравоеЗначение = Истина; 152 | 153 | Отбор = ГруппаИ.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); 154 | Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.МаксимумПотоков"); 155 | Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено; 156 | 157 | Свойство = Элемент.Оформление.Элементы.Найти("ОтметкаНезаполненного"); 158 | Свойство.Значение = Истина; 159 | Свойство.Использование = Истина; 160 | 161 | Поле = Элемент.Поля.Элементы.Добавить(); 162 | Поле.Поле = Новый ПолеКомпоновкиДанных("МаксимумПотоков"); 163 | Поле.Использование = Истина; 164 | 165 | КонецПроцедуры -------------------------------------------------------------------------------- /src/CommonModules/Радар_Задания/Ext/Module.bsl: -------------------------------------------------------------------------------- 1 | 2 | Процедура РазобратьМодули(ДанныеМодулей, Отчет, Проект, ГлобальныеСвойства, ГлобальныеМетоды) Экспорт 3 | 4 | Всего = ДанныеМодулей.Количество(); 5 | 6 | Если Всего = 0 Тогда 7 | Возврат; 8 | КонецЕсли; 9 | 10 | РазмерПартии = Проект.РазмерПартии; 11 | МаксимумПотоков = Проект.МаксимумПотоков; 12 | МаксимумЗаданий = Макс(1, Мин(МаксимумПотоков, Цел(Всего / РазмерПартии))); 13 | СписокЗаданий = Новый Массив(МаксимумЗаданий); 14 | ПараметрыЗадания = Новый Массив(5); 15 | ПараметрыЗадания[1] = Отчет; 16 | ПараметрыЗадания[2] = Проект; 17 | ПараметрыЗадания[3] = ГлобальныеСвойства; 18 | ПараметрыЗадания[4] = ГлобальныеМетоды; 19 | Индекс = 0; 20 | Обработано = 0; 21 | Таймаут = 60; 22 | 23 | Пока Обработано < Всего Цикл 24 | Если СписокЗаданий[Индекс] = Неопределено Или СписокЗаданий[Индекс].Состояние <> СостояниеФоновогоЗадания.Активно Тогда 25 | Партия = Новый Массив; 26 | Для Обработано = Обработано По Мин(Обработано + РазмерПартии, Всего - 1) Цикл 27 | Партия.Добавить(ДанныеМодулей[Обработано]); 28 | КонецЦикла; 29 | ПараметрыЗадания[0] = Партия; 30 | СписокЗаданий[Индекс] = ФоновыеЗадания.Выполнить("Радар_Задания.РазобратьПартиюМодулей", ПараметрыЗадания); 31 | КонецЕсли; 32 | Индекс = Индекс + 1; 33 | Если Индекс = МаксимумЗаданий Тогда 34 | СписокЗаданий = ФоновыеЗадания.ОжидатьЗавершенияВыполнения(СписокЗаданий, Таймаут); 35 | Индекс = 0; 36 | КонецЕсли; 37 | КонецЦикла; 38 | 39 | Для Каждого Задание Из СписокЗаданий Цикл 40 | Если Задание <> Неопределено Тогда 41 | Пока Задание.Состояние = СостояниеФоновогоЗадания.Активно Цикл 42 | Задание = Задание.ОжидатьЗавершенияВыполнения(Таймаут); 43 | КонецЦикла; 44 | КонецЕсли; 45 | КонецЦикла; 46 | 47 | КонецПроцедуры 48 | 49 | Процедура РазобратьПартиюМодулей(Партия, Отчет, Проект, ГлобальныеСвойства, ГлобальныеМетоды) Экспорт 50 | 51 | Парсер = Обработки.Радар_ПарсерВстроенногоЯзыка.Создать(); 52 | Парсер.СтрогийРежим = Истина; 53 | КонструкторГлобальногоОкружения = Обработки.Радар_КонструкторГлобальногоОкружения.Создать(); 54 | ГлобальноеОкружение = КонструкторГлобальногоОкружения.Создать(Парсер); 55 | КонструкторГлобальногоОкружения = Неопределено; 56 | 57 | Плагины = Радар_Кэш.Плагины(Проект); 58 | 59 | Проверки = РегистрыСведений.Радар_Проверки.СоздатьНаборЗаписей(); 60 | Проверки.Отбор.Регистратор.Установить(Отчет); 61 | 62 | ЗаписиОбОшибках = РегистрыСведений.Радар_Ошибки.СоздатьНаборЗаписей(); 63 | ЗаписиОбОшибках.Отбор.Регистратор.Установить(Отчет); 64 | 65 | Для Каждого ДанныеМодуля Из Партия Цикл 66 | 67 | ЧтениеТекста = Новый ЧтениеТекста; 68 | ЧтениеТекста.Открыть(ДанныеМодуля.Путь, КодировкаТекста.UTF8); 69 | Исходник = ЧтениеТекста.Прочитать(); 70 | ЧтениеТекста.Закрыть(); 71 | 72 | #Область ВнешнееОкружение 73 | 74 | Узлы = Парсер.Узлы(); 75 | ВнешнееОкружение = Парсер.Окружение(ГлобальноеОкружение); 76 | Переменные = ВнешнееОкружение.Переменные; 77 | Методы = ВнешнееОкружение.Методы; 78 | 79 | Для Каждого Имя Из ГлобальныеСвойства Цикл 80 | Элемент = Узлы.ЭлементОкружения.Добавить(); 81 | Элемент.Имя = Имя; 82 | Переменные.Вставить(Имя, Элемент); 83 | КонецЦикла; 84 | 85 | Для Каждого Имя Из ГлобальныеМетоды Цикл 86 | Элемент = Узлы.ЭлементОкружения.Добавить(); 87 | Элемент.Имя = Имя; 88 | Методы.Вставить(Имя, Элемент); 89 | КонецЦикла; 90 | 91 | Если ДанныеМодуля.Свойства <> Неопределено Тогда 92 | Для Каждого Имя Из ДанныеМодуля.Свойства Цикл 93 | Элемент = Узлы.ЭлементОкружения.Добавить(); 94 | Элемент.Имя = Имя; 95 | Переменные.Вставить(Имя, Элемент); 96 | КонецЦикла; 97 | КонецЕсли; 98 | 99 | Если ДанныеМодуля.Окружение <> Неопределено Тогда 100 | 101 | Окружение = Вычислить(СтрШаблон("Радар_Кэш.%1()", ДанныеМодуля.Окружение)); 102 | 103 | Для Каждого Переменная Из Окружение.Переменные Цикл 104 | Элемент = Узлы.ЭлементОкружения.Добавить(); 105 | Элемент.Имя = Переменная.Имя; 106 | Переменные.Вставить(Переменная.Имя, Элемент); 107 | КонецЦикла; 108 | 109 | Для Каждого Метод Из Окружение.Методы Цикл 110 | Элемент = Узлы.ЭлементОкружения.Добавить(); 111 | Элемент.Имя = Метод.Имя; 112 | Методы.Вставить(Метод.Имя, Элемент); 113 | КонецЦикла; 114 | 115 | КонецЕсли; 116 | 117 | #КонецОбласти 118 | 119 | Проверка = Проверки.Добавить(); 120 | 121 | Проверка.Регистратор = Отчет; 122 | Проверка.Проект = Проект; 123 | Проверка.Модуль = ДанныеМодуля.Ссылка; 124 | Проверка.Путь = ДанныеМодуля.Путь; 125 | Проверка.Хэш = ДанныеМодуля.Хэш; 126 | 127 | Старт = ТекущаяУниверсальнаяДатаВМиллисекундах(); 128 | Попытка 129 | Модуль = Парсер.Разобрать(Исходник, ВнешнееОкружение); 130 | Парсер.Подключить(Плагины); 131 | Парсер.Посетить(Модуль); 132 | Проверка.Длительность = (ТекущаяУниверсальнаяДатаВМиллисекундах() - Старт) / 1000; 133 | ТаблицаТокенов = Парсер.ТаблицаТокенов(); 134 | Проверка.КоличествоСтрок = ТаблицаТокенов[ТаблицаТокенов.Количество() - 1].НомерСтроки; 135 | Исключение 136 | Проверка.Длительность = (ТекущаяУниверсальнаяДатаВМиллисекундах() - Старт) / 1000; 137 | Проверка.ВозниклоИсключение = Истина; 138 | Проверка.ТекстИсключения = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); 139 | КонецПопытки; 140 | 141 | ТаблицаОшибок = Парсер.ТаблицаОшибок(); 142 | 143 | Проверка.КоличествоОшибок = ТаблицаОшибок.Количество(); 144 | 145 | Для Каждого Ошибка Из ТаблицаОшибок Цикл 146 | ЗаписьОбОшибке = ЗаписиОбОшибках.Добавить(); 147 | ЗаполнитьЗначенияСвойств(ЗаписьОбОшибке, Ошибка); 148 | ЗаписьОбОшибке.Регистратор = Отчет; 149 | ЗаписьОбОшибке.Проект = Проект; 150 | ЗаписьОбОшибке.Модуль = ДанныеМодуля.Ссылка; 151 | ЗаписьОбОшибке.Ссылка = Новый УникальныйИдентификатор; 152 | КонецЦикла; 153 | 154 | Парсер.Очистить(); 155 | 156 | Проверка.Период = ТекущаяДатаСеанса(); 157 | 158 | КонецЦикла; 159 | 160 | Проверки.Записать(Ложь); 161 | ЗаписиОбОшибках.Записать(Ложь); 162 | 163 | КонецПроцедуры 164 | -------------------------------------------------------------------------------- /src/Documents/Радар_Отчет/Forms/ФормаСписка/Ext/Form.xml: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 | 5 | 6 | 7 | <v8:item> 8 | <v8:lang>ru</v8:lang> 9 | <v8:content>Группа пользовательских настроек</v8:content> 10 | </v8:item> 11 | 12 | false 13 | Vertical 14 | false 15 | 16 | 17 | 18 | List 19 | None 20 | true 21 | true 22 | ExpandTopLevel 23 | true 24 | Список 25 | Список.DefaultPicture 26 | false 27 | 60 28 | 29 | Custom 30 | 0001-01-01T00:00:00 31 | 0001-01-01T00:00:00 32 | 33 | Items 34 | false 35 | 36 | true 37 | false 38 | Auto 39 | СписокКомпоновщикНастроекПользовательскиеНастройки 40 | 41 | 42 | false 43 | 44 | 45 | 46 | 47 | Список 48 | SearchStringRepresentation 49 | 50 | 51 | 52 | 53 | 54 | 55 | Список 56 | ViewStatusRepresentation 57 | 58 | 59 | 60 | 61 | 62 | 63 | Список 64 | SearchControl 65 | 66 | 67 | 68 | 69 | 70 | 71 | Список.Date 72 | true 73 | 74 | 75 | 76 | 77 | Список.Number 78 | 79 | 80 | 81 | 82 | Список.Проект 83 | 84 | 85 | 86 | 87 |
88 |
89 | 90 | 91 | 92 | cfg:DynamicList 93 | 94 | true 95 | 96 | false 97 | true 98 | Document.Радар_Отчет 99 | 100 | 101 | Normal 102 | dfcece9d-5077-440b-b6b3-45a5cb4538eb 103 | 104 | 105 | Normal 106 | 88619765-ccb3-46c6-ac52-38e9c992ebd4 107 | 108 | 109 | Normal 110 | b75fecce-942b-4aed-abc9-e6a02e460fb3 111 | 112 | Normal 113 | 911b6018-f537-43e8-a417-da56b22f9aec 114 | 115 | 116 | 117 | 118 | -------------------------------------------------------------------------------- /src/Documents/Радар_Отчет.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | b4f0ddb4-3124-49f2-abe0-3f191c4f0675 7 | 8e700502-d315-48bc-b9d2-cc584b7721c5 8 | 9 | 10 | 37756ee5-276e-4c1f-a626-414d10ab8763 11 | cfa03224-c6d6-462e-83db-186f746b0bed 12 | 13 | 14 | a88f5b10-4579-4e8d-a08b-797962fef72f 15 | 00c9644f-ec04-4136-9b35-f7e97ee895d4 16 | 17 | 18 | 794da208-df70-4812-ba5d-6963b216a1bc 19 | acbee57f-b1dc-453e-a522-ef18e5429a88 20 | 21 | 22 | 14548e2a-4bd9-46a4-b560-a7116c232e4c 23 | a1e6d278-9ae0-4fc5-8dc0-a9eed115ed46 24 | 25 | 26 | 27 | Радар_Отчет 28 | 29 | 30 | ru 31 | Отчет 32 | 33 | 34 | 35 | true 36 | 37 | String 38 | 9 39 | Variable 40 | Nonperiodical 41 | true 42 | true 43 | 44 | 45 | 46 | Document.Радар_Отчет.StandardAttribute.Number 47 | 48 | Use 49 | Begin 50 | DontUse 51 | Directly 52 | Document.Радар_Отчет.Form.ФормаДокумента 53 | Document.Радар_Отчет.Form.ФормаСписка 54 | 55 | 56 | 57 | 58 | Deny 59 | Allow 60 | AutoDeleteOnUnpost 61 | WriteSelected 62 | AutoFill 63 | 64 | InformationRegister.Радар_Проверки 65 | InformationRegister.Радар_Ошибки 66 | AccumulationRegister.Радар_Тренд 67 | 68 | true 69 | true 70 | false 71 | 72 | Managed 73 | Use 74 | 75 | 76 | 77 | 78 | ru 79 | Отчеты 80 | 81 | 82 | 83 | 84 | Auto 85 | DontUse 86 | 87 | 88 | 89 | 90 | Проект 91 | 92 | 93 | ru 94 | Проект 95 | 96 | 97 | 98 | 99 | cfg:CatalogRef.Радар_Проекты 100 | 101 | false 102 | 103 | 104 | 105 | false 106 | 107 | false 108 | false 109 | 110 | 111 | false 112 | 113 | DontCheck 114 | Items 115 | 116 | 117 | Auto 118 | Auto 119 | 120 | 121 | Auto 122 | DontIndex 123 | Use 124 | Use 125 | 126 | 127 |
ФормаДокумента
128 |
ФормаСписка
129 |
130 |
131 |
-------------------------------------------------------------------------------- /src/Catalogs/Радар_Плагины.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | d97826d3-53bb-4b95-a6b8-efab7d0707b0 7 | ed386ea4-6eef-45ef-b46d-7522513ef4bb 8 | 9 | 10 | 66d58b4c-d5bd-4f96-b801-e7c3453b113d 11 | f17fb531-5520-4d83-b01d-cba5660e069e 12 | 13 | 14 | 497aa119-865e-4c82-a83d-2ecb548d3167 15 | 23481791-4ce9-4438-a81c-34a91970ad1f 16 | 17 | 18 | 17ddfb12-44d5-4c4a-8e91-54e7fe4729e8 19 | 26acf9ea-78d2-434b-b703-6f4cec21b287 20 | 21 | 22 | be9f97ec-cdd6-4557-a58a-d4cbb1284cac 23 | 2f07cd04-e148-49e6-9695-46f151b3c86c 24 | 25 | 26 | 27 | Радар_Плагины 28 | 29 | 30 | ru 31 | Плагины 32 | 33 | 34 | 35 | false 36 | HierarchyFoldersAndItems 37 | false 38 | 2 39 | true 40 | true 41 | 42 | Catalog.Радар_Проекты 43 | 44 | ToItems 45 | 9 46 | 150 47 | String 48 | Variable 49 | WholeCatalog 50 | true 51 | true 52 | AsDescription 53 | 54 | Auto 55 | InDialog 56 | false 57 | BothWays 58 | 59 | Catalog.Радар_Плагины.StandardAttribute.Description 60 | Catalog.Радар_Плагины.StandardAttribute.Code 61 | 62 | Begin 63 | DontUse 64 | Directly 65 | Catalog.Радар_Плагины.Form.ФормаЭлемента 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | false 76 | 77 | 78 | Managed 79 | Use 80 | 81 | 82 | 83 | 84 | 85 | Use 86 | Auto 87 | DontUse 88 | 89 | 90 | 91 | 92 | Путь 93 | 94 | 95 | ru 96 | Путь 97 | 98 | 99 | 100 | 101 | xs:string 102 | 103 | 0 104 | Variable 105 | 106 | 107 | false 108 | 109 | 110 | 111 | false 112 | 113 | false 114 | false 115 | 116 | 117 | false 118 | 119 | DontCheck 120 | Items 121 | 122 | 123 | Auto 124 | Auto 125 | 126 | 127 | Auto 128 | ForItem 129 | DontIndex 130 | Use 131 | Use 132 | 133 | 134 |
ФормаЭлемента
135 |
136 |
137 |
-------------------------------------------------------------------------------- /src/Catalogs/Радар_Проекты/Forms/ФормаСписка/Ext/Form.xml: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 | 5 | 6 | 7 | <v8:item> 8 | <v8:lang>ru</v8:lang> 9 | <v8:content>Группа пользовательских настроек</v8:content> 10 | </v8:item> 11 | 12 | false 13 | Vertical 14 | false 15 | 16 | 17 | 18 | List 19 | None 20 | true 21 | true 22 | ExpandTopLevel 23 | true 24 | Список 25 | Список.DefaultPicture 26 | false 27 | 60 28 | 29 | Custom 30 | 0001-01-01T00:00:00 31 | 0001-01-01T00:00:00 32 | 33 | Items 34 | false 35 | 36 | true 37 | false 38 | Auto 39 | СписокКомпоновщикНастроекПользовательскиеНастройки 40 | 41 | 42 | false 43 | 44 | 45 | 46 | 47 | Список 48 | SearchStringRepresentation 49 | 50 | 51 | 52 | 53 | 54 | 55 | Список 56 | ViewStatusRepresentation 57 | 58 | 59 | 60 | 61 | 62 | 63 | Список 64 | SearchControl 65 | 66 | 67 | 68 | 69 | 70 | 71 | Список.Description 72 | true 73 | 74 | 75 | 76 | 77 | Список.Code 78 | 79 | 80 | 81 | 82 |
83 |
84 | 85 | 86 | 87 | cfg:DynamicList 88 | 89 | true 90 | 91 | false 92 | true 93 | Catalog.Радар_Проекты 94 | 95 | 96 | Normal 97 | dfcece9d-5077-440b-b6b3-45a5cb4538eb 98 | 99 | 100 | Normal 101 | 88619765-ccb3-46c6-ac52-38e9c992ebd4 102 | 103 | 104 | Normal 105 | b75fecce-942b-4aed-abc9-e6a02e460fb3 106 | 107 | Normal 108 | 911b6018-f537-43e8-a417-da56b22f9aec 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | Catalog.Радар_Проекты.Command.ВыполнитьАнализ 117 | Auto 118 | FormCommandBarImportant 119 | 120 | false 121 | 122 | 123 | 124 | 0:3812776e-4504-4fc3-9b85-2c929420f4b8 125 | Auto 126 | FormCommandBarImportant 127 | 1 128 | 129 | false 130 | 131 | 132 | 133 | Catalog.Радар_Проекты.Command.ВыгрузитьОшибкиВСонар 134 | Auto 135 | FormCommandBarImportant 136 | 2 137 | 138 | false 139 | 140 | 141 | 142 | 143 | -------------------------------------------------------------------------------- /plugins/НеиспользуемаяПеременная/src/НеиспользуемаяПеременная/Ext/ObjectModule.bsl: -------------------------------------------------------------------------------- 1 | 2 | // Плагин для проверки использования переменных и параметров. 3 | // Отслеживаются следующие ситуации: 4 | // - значение переменной не читается после присваивания (объявление тоже считается присваиванием) 5 | // - значение параметра-значения не читается после присваивания 6 | // - к параметру-ссылке нет обращений (сейчас отключено) 7 | 8 | Перем Типы; 9 | Перем Счетчики; 10 | Перем ТаблицаОшибок; 11 | Перем ТаблицаТокенов; 12 | 13 | Перем Переменные; 14 | Перем Параметры; 15 | Перем ЛевыйОперандПрисваивания; 16 | Перем Места; 17 | 18 | Процедура Открыть(Парсер, Параметры) Экспорт 19 | 20 | Типы = Парсер.Типы(); 21 | Счетчики = Парсер.Счетчики(); 22 | ТаблицаОшибок = Парсер.ТаблицаОшибок(); 23 | ТаблицаТокенов = Парсер.ТаблицаТокенов(); 24 | 25 | Переменные = Новый Соответствие; 26 | Параметры = Новый Соответствие; 27 | Места = Новый Соответствие; 28 | 29 | КонецПроцедуры // Открыть() 30 | 31 | Функция Закрыть() Экспорт 32 | 33 | Переменные = Неопределено; 34 | Параметры = Неопределено; 35 | Места = Неопределено; 36 | 37 | Возврат Неопределено; 38 | 39 | КонецФункции // Закрыть() 40 | 41 | Функция Подписки() Экспорт 42 | Перем Подписки; 43 | Подписки = Новый Массив; 44 | Подписки.Добавить("ПосетитьОператорПрисваивания"); 45 | Подписки.Добавить("ПокинутьОператорПрисваивания"); 46 | Подписки.Добавить("ПосетитьВыражениеИдентификатор"); 47 | Подписки.Добавить("ПосетитьОбъявлениеМетода"); 48 | Подписки.Добавить("ПокинутьОбъявлениеМетода"); 49 | Возврат Подписки; 50 | КонецФункции // Подписки() 51 | 52 | Процедура ПосетитьОператорПрисваивания(ОператорПрисваивания) Экспорт 53 | ЛевыйОперандПрисваивания = ОператорПрисваивания.ЛевыйОперанд; 54 | КонецПроцедуры // ПосетитьОператорПрисваивания() 55 | 56 | Процедура ПокинутьОператорПрисваивания(ОператорПрисваивания) Экспорт 57 | Перем Объявление, Операция; 58 | Если ОператорПрисваивания.ЛевыйОперанд.Аргументы <> Неопределено Или ОператорПрисваивания.ЛевыйОперанд.Хвост.Count() > 0 Тогда 59 | Возврат ; 60 | КонецЕсли; 61 | Объявление = ОператорПрисваивания.ЛевыйОперанд.Голова.Объявление; 62 | Места[Объявление] = ОператорПрисваивания.Начало; 63 | ЛевыйОперандПрисваивания = Неопределено; 64 | Операция = Переменные[Объявление]; 65 | Если Операция <> Неопределено Тогда 66 | Если Операция <> "ЧтениеВЦикле" Или УровеньЦикла(Счетчики) = 0 Тогда 67 | Если Операция = "Чтение" 68 | И ОператорПрисваивания.ПравыйОперанд.Тип = Типы.ВыражениеЛитерал 69 | И ОператорПрисваивания.ПравыйОперанд.Значение = Неопределено Тогда 70 | // неопределено после чтения скорее всего присваивалось в целях очистки 71 | // можно считать что использование переменной 72 | Переменные[Объявление] = "Чтение"; 73 | Иначе 74 | Переменные[Объявление] = "Изменение"; 75 | КонецЕсли; 76 | КонецЕсли; 77 | Иначе 78 | Операция = Параметры[Объявление]; 79 | Если Операция <> Неопределено Тогда 80 | Если Операция <> "ЧтениеВЦикле" Или УровеньЦикла(Счетчики) = 0 Тогда 81 | Если Операция = "Чтение" 82 | И ОператорПрисваивания.ПравыйОперанд.Тип = Типы.ВыражениеЛитерал 83 | И ОператорПрисваивания.ПравыйОперанд.Значение = Неопределено Тогда 84 | // неопределено после чтения скорее всего присваивалось в целях очистки 85 | // можно считать что использование переменной 86 | Параметры[Объявление] = "Чтение"; 87 | Иначе 88 | Параметры[Объявление] = "Изменение"; 89 | КонецЕсли; 90 | КонецЕсли; 91 | КонецЕсли; 92 | КонецЕсли; 93 | КонецПроцедуры // ПокинутьОператорПрисваивания() 94 | 95 | Процедура ПосетитьВыражениеИдентификатор(ВыражениеИдентификатор) Экспорт 96 | Перем Объявление, Операция; 97 | Если ВыражениеИдентификатор.Хвост.Количество() = 0 98 | И ВыражениеИдентификатор = ЛевыйОперандПрисваивания Тогда 99 | Возврат ; 100 | КонецЕсли; 101 | Объявление = ВыражениеИдентификатор.Голова.Объявление; 102 | Если УровеньЦикла(Счетчики) > 0 Тогда 103 | Операция = "ЧтениеВЦикле"; 104 | Иначе 105 | Операция = "Чтение"; 106 | КонецЕсли; 107 | Если Переменные[Объявление] <> Неопределено Тогда 108 | Переменные[Объявление] = Операция; 109 | ИначеЕсли Параметры[Объявление] <> Неопределено Тогда 110 | Параметры[Объявление] = Операция; 111 | КонецЕсли; 112 | КонецПроцедуры // ПосетитьВыражениеИдентификатор() 113 | 114 | Процедура ПосетитьОбъявлениеМетода(ОбъявлениеМетода) Экспорт 115 | Переменные = Новый Соответствие; 116 | Параметры = Новый Соответствие; 117 | Для Каждого Параметр Из ОбъявлениеМетода.Сигнатура.Параметры Цикл 118 | Параметры[Параметр] = "Изменение"; 119 | //Параметры[Параметр] = "Неопределено"; <- чтобы проверять ссылочные параметры (в формах адъ) 120 | Если Параметр.ПоЗначению Тогда 121 | Места[Параметр] = ТаблицаТокенов[Параметр.Начало.Индекс + 1]; 122 | Иначе 123 | Места[Параметр] = Параметр.Начало; 124 | КонецЕсли; 125 | КонецЦикла; 126 | Для Каждого ОбъявлениеПеременной Из ОбъявлениеМетода.Переменные Цикл 127 | Переменные[ОбъявлениеПеременной] = "Изменение"; 128 | Места[ОбъявлениеПеременной] = ОбъявлениеПеременной.Начало; 129 | КонецЦикла; 130 | КонецПроцедуры // ПосетитьОбъявлениеМетода() 131 | 132 | Процедура ПокинутьОбъявлениеМетода(ОбъявлениеМетода) Экспорт 133 | Перем Метод, Текст; 134 | Если ОбъявлениеМетода.Сигнатура.Тип = Типы.ОбъявлениеСигнатурыФункции Тогда 135 | Метод = "Функция"; 136 | Иначе 137 | Метод = "Процедура"; 138 | КонецЕсли; 139 | Для Каждого Элемент Из Переменные Цикл 140 | Если Не СтрНачинаетсяС(Элемент.Значение, "Чтение") Тогда 141 | Ошибка("Неиспользуемая переменная", Места[Элемент.Ключ]); 142 | КонецЕсли; 143 | КонецЦикла; 144 | Для Каждого Элемент Из Параметры Цикл 145 | Если Элемент.Значение = "Неопределено" Или Элемент.Значение = "Изменение" И Элемент.Ключ.ПоЗначению Тогда 146 | Ошибка("Неиспользуемый параметр", Места[Элемент.Ключ]); 147 | КонецЕсли; 148 | КонецЦикла; 149 | КонецПроцедуры 150 | 151 | Функция УровеньЦикла(Счетчики) 152 | Возврат Счетчики[Типы.ОператорПока] + Счетчики[Типы.ОператорДляКаждого] + Счетчики[Типы.ОператорДля]; 153 | КонецФункции 154 | 155 | Процедура Ошибка(Текст, Начало, Конец = Неопределено, ЕстьЗамена = Ложь) 156 | 157 | Ошибка = ТаблицаОшибок.Добавить(); 158 | Ошибка.Источник = Метаданные().Имя; 159 | Ошибка.Текст = Текст; 160 | 161 | Ошибка.МинутНаИсправление = 5; 162 | Ошибка.Серьезность = "INFO"; 163 | Ошибка.Приоритет = 0; 164 | Ошибка.Правило = Метаданные().Синоним; 165 | Ошибка.Тип = "CODE_SMELL"; 166 | 167 | Ошибка.ПозицияНачала = Начало.Позиция; 168 | Ошибка.НомерСтрокиНачала = Начало.НомерСтроки; 169 | Ошибка.НомерКолонкиНачала = Начало.НомерКолонки; 170 | Если Конец = Неопределено Или Конец = Начало Тогда 171 | Ошибка.ПозицияКонца = Начало.Позиция + Начало.Длина; 172 | Ошибка.НомерСтрокиКонца = Начало.НомерСтроки; 173 | Ошибка.НомерКолонкиКонца = Начало.НомерКолонки + Начало.Длина; 174 | Иначе 175 | Ошибка.ПозицияКонца = Конец.Позиция + Конец.Длина; 176 | Ошибка.НомерСтрокиКонца = Конец.НомерСтроки; 177 | Ошибка.НомерКолонкиКонца = Конец.НомерКолонки + Конец.Длина; 178 | КонецЕсли; 179 | 180 | Ошибка.ЕстьЗамена = ЕстьЗамена; 181 | 182 | КонецПроцедуры 183 | 184 | -------------------------------------------------------------------------------- /src/InformationRegisters/Радар_ХешСуммы.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | b1b091c1-ddbb-40f1-9724-282450ce2e59 7 | 486d73ac-9468-4f6b-8485-5a7203a147b6 8 | 9 | 10 | 4022fda1-6834-417f-b705-d21716050047 11 | 195603c5-7019-4d73-837e-48eef7f47189 12 | 13 | 14 | c740682e-3c8e-4f3b-924b-8d318d2c0719 15 | 0528806d-c282-43b1-addf-d8a5e558274e 16 | 17 | 18 | 378b2b1e-78e8-4c72-b03c-91ba2d78fb17 19 | bbe29d2f-f1f4-4d79-aaea-d51ec53c64d5 20 | 21 | 22 | 94c4b9c7-0b78-40b9-ac04-8763df1e3f4f 23 | 2a8c8678-28fc-4fd7-8d32-7f7282b71673 24 | 25 | 26 | 27ffa763-7296-4d43-8715-59d38ece0ddb 27 | 741c4dee-9ed2-4314-ab3a-9644e2f4dc59 28 | 29 | 30 | d288bd28-acf4-4ecd-abf5-f0880619c272 31 | 5df3c37d-68cc-48d3-a0e5-ec9f230a5f36 32 | 33 | 34 | 35 | Радар_ХешСуммы 36 | 37 | 38 | ru 39 | Хеш суммы 40 | 41 | 42 | 43 | true 44 | InDialog 45 | 46 | 47 | 48 | 49 | Nonperiodical 50 | Independent 51 | false 52 | false 53 | Managed 54 | DontUse 55 | false 56 | false 57 | 58 | 59 | 60 | 61 | 62 | DontUse 63 | 64 | 65 | 66 | 67 | ХешСумма 68 | 69 | 70 | ru 71 | Хеш сумма 72 | 73 | 74 | en 75 | Хеш сумма 76 | 77 | 78 | 79 | 80 | xs:string 81 | 82 | 40 83 | Fixed 84 | 85 | 86 | false 87 | 88 | 89 | 90 | false 91 | 92 | false 93 | false 94 | 95 | 96 | false 97 | 98 | DontCheck 99 | Items 100 | 101 | 102 | Auto 103 | Auto 104 | 105 | 106 | Auto 107 | Index 108 | Use 109 | Use 110 | 111 | 112 | 113 | 114 | Проект 115 | 116 | 117 | ru 118 | Проект 119 | 120 | 121 | 122 | 123 | cfg:CatalogRef.Радар_Проекты 124 | 125 | false 126 | 127 | 128 | 129 | false 130 | 131 | false 132 | false 133 | 134 | 135 | true 136 | 137 | DontCheck 138 | Items 139 | 140 | 141 | Auto 142 | Auto 143 | 144 | 145 | Auto 146 | true 147 | true 148 | true 149 | DontIndex 150 | Use 151 | Use 152 | 153 | 154 | 155 | 156 | -------------------------------------------------------------------------------- /src/AccumulationRegisters/Радар_Тренд.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | e5c630d5-a6d3-4705-973c-96635113af62 7 | ac354b98-8b40-47e4-b774-66caeab3ab01 8 | 9 | 10 | 0f09c53c-7e89-4f88-a54e-04f8e9b8efa4 11 | b9f5fc02-98b1-4fb0-8afd-f6a7619ab2f9 12 | 13 | 14 | 4dadb601-b46d-4745-87db-7dada5ae8472 15 | 666856b4-0ac5-4a50-8a4c-64f7232f65a1 16 | 17 | 18 | ccb57878-7a18-4cc9-9f35-3716171e0698 19 | 3fb4be3a-9eab-4c65-9b1b-61cf269fe3da 20 | 21 | 22 | c0c900ee-0537-4fed-bbb7-413a1d1fd616 23 | 7678dd44-917d-4873-882a-dbb03af601ad 24 | 25 | 26 | f3d6411e-9a33-4c99-8dab-68320249c844 27 | d2ef4c60-a030-43fd-a299-2fdedf868b9e 28 | 29 | 30 | 31 | Радар_Тренд 32 | 33 | 34 | ru 35 | Тренд 36 | 37 | 38 | 39 | true 40 | 41 | 42 | Balance 43 | false 44 | Managed 45 | DontUse 46 | true 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | КоличествоОшибок 55 | 56 | 57 | ru 58 | Количество ошибок 59 | 60 | 61 | 62 | 63 | xs:decimal 64 | 65 | 10 66 | 0 67 | Any 68 | 69 | 70 | false 71 | 72 | 73 | 74 | false 75 | 76 | false 77 | false 78 | 79 | 80 | DontCheck 81 | Items 82 | 83 | 84 | Auto 85 | Auto 86 | 87 | 88 | Auto 89 | Use 90 | 91 | 92 | 93 | 94 | Проект 95 | 96 | 97 | ru 98 | Проект 99 | 100 | 101 | 102 | 103 | cfg:CatalogRef.Радар_Проекты 104 | 105 | false 106 | 107 | 108 | 109 | false 110 | 111 | false 112 | false 113 | 114 | 115 | DontCheck 116 | Items 117 | 118 | 119 | Auto 120 | Auto 121 | 122 | 123 | Auto 124 | true 125 | DontIndex 126 | Use 127 | true 128 | 129 | 130 | 131 | 132 | Модуль 133 | 134 | 135 | ru 136 | Модуль 137 | 138 | 139 | 140 | 141 | cfg:CatalogRef.Радар_Модули 142 | 143 | false 144 | 145 | 146 | 147 | false 148 | 149 | false 150 | false 151 | 152 | 153 | DontCheck 154 | Items 155 | 156 | 157 | Auto 158 | Auto 159 | 160 | 161 | Auto 162 | true 163 | DontIndex 164 | Use 165 | true 166 | 167 | 168 | 169 | 170 | -------------------------------------------------------------------------------- /src/Catalogs/Радар_Проекты/Forms/ФормаЭлемента/Ext/Form.xml: -------------------------------------------------------------------------------- 1 | 2 |
3 | Items 4 | 5 | 6 | ПриСозданииНаСервере 7 | 8 | 9 | 10 | Объект.Code 11 | EnterOnInput 12 | 13 | 14 | 15 | 16 | Объект.Description 17 | EnterOnInput 18 | 19 | 20 | 21 | 22 | Объект.ФорматВыгрузки 23 | 24 | 25 | 26 | 27 | Объект.ПутьВыгрузки 28 | true 29 | 30 | 31 | 32 | ПутьВыгрузкиНачалоВыбора 33 | 34 | 35 | 36 | Объект.ВнешняяКонфигурация 37 | Button 38 | Auto 39 | 40 | 41 | 42 | <v8:item> 43 | <v8:lang>ru</v8:lang> 44 | <v8:content>Если Радар установлен не на анализируемой конфигурации, то этот переключатель должен быть включен. Дополнительно потребуется указать путь к файлу конфигурации.</v8:content> 45 | </v8:item> 46 | 47 | 48 | 49 | ВнешняяКонфигурацияПриИзменении 50 | 51 | 52 | 53 | Объект.ПутьКонфигурации 54 | Button 55 | true 56 | 57 | 58 | 59 | <v8:item> 60 | <v8:lang>ru</v8:lang> 61 | <v8:content>Путь к файлу *.cf или *.cfe при анализе внешней конфигурации. 62 | Метаданные будут анализироваться по данным этого файла.</v8:content> 63 | </v8:item> 64 | 65 | 66 | 67 | ПутьКонфигурацииНачалоВыбора 68 | 69 | 70 | 71 | Объект.ИспользоватьМногопоточность 72 | Button 73 | Auto 74 | 75 | 76 | 77 | <v8:item> 78 | <v8:lang>ru</v8:lang> 79 | <v8:content>Многопоточный анализ выполняется с помощью фоновых заданий. Доступен только в клиент-серверном варианте.</v8:content> 80 | </v8:item> 81 | 82 | 83 | 84 | ИспользоватьМногопоточностьПриИзменении 85 | 86 | 87 | 88 | 89 | <v8:item> 90 | <v8:lang>ru</v8:lang> 91 | <v8:content>Настройки многопоточного анализа</v8:content> 92 | </v8:item> 93 | 94 | 95 | 96 | ru 97 | Группа настройки многопоточного анализа 98 | 99 | 100 | 101 | 102 | 103 | Объект.МаксимумПотоков 104 | Button 105 | 106 | 107 | 108 | <v8:item> 109 | <v8:lang>ru</v8:lang> 110 | <v8:content>Число, которое ограничивает количество фоновых заданий, выполняющихся одновременно. Рекомендуется ставить не больше общего количества ядер процессоров сервера.</v8:content> 111 | </v8:item> 112 | 113 | 114 | 115 | 116 | Объект.РазмерПартии 117 | Button 118 | 119 | 120 | 121 | <v8:item> 122 | <v8:lang>ru</v8:lang> 123 | <v8:content>Количество модулей, которое берет одно фоновое задание. Деление на партии необходимо по двум причинам: 124 | 1. Если общее количество модулей поделить на количество потоков, то в результате время анализа может сильно увеличиться, т.к. работа по потокам будет распределена неравномерно. Это происходит потому что неизвестно заранее сколько ресурсов потребует разбор каждого модуля. 125 | 2. Если на каждый модуль создавать фоновое задание, то слишком много ресурсов будет уходить на создание и уничтожение самих фоновых заданий.</v8:content> 126 | </v8:item> 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | cfg:CatalogObject.Радар_Проекты 137 | 138 | true 139 | true 140 | 141 | 142 | 143 | <v8:item> 144 | <v8:lang>ru</v8:lang> 145 | <v8:content>Это файловая база</v8:content> 146 | </v8:item> 147 | 148 | 149 | xs:boolean 150 | 151 | 152 | 153 | 154 | 155 | 156 | InformationRegister.Радар_Ошибки.StandardCommand.OpenByValue.Проект 157 | Auto 158 | false 159 | 160 | false 161 | 162 | 163 | 164 | InformationRegister.Радар_Проверки.StandardCommand.OpenByValue.Проект 165 | Auto 166 | false 167 | 168 | false 169 | 170 | 171 | 172 | 173 | 174 | 0:3812776e-4504-4fc3-9b85-2c929420f4b8 175 | Auto 176 | FormCommandBarImportant 177 | 1 178 | 179 | false 180 | 181 | 182 | 183 | Catalog.Радар_Проекты.Command.ВыгрузитьОшибкиВСонар 184 | Auto 185 | FormCommandBarImportant 186 | 3 187 | 188 | false 189 | 190 | 191 | 192 | Catalog.Радар_Проекты.Command.ВыполнитьАнализ 193 | Auto 194 | FormCommandBarImportant 195 | 2 196 | 197 | false 198 | 199 | 200 | 201 | 202 | -------------------------------------------------------------------------------- /plugins/ЗапросВЦикле/src/ЗапросВЦикле/Ext/ObjectModule.bsl: -------------------------------------------------------------------------------- 1 | 2 | // Поиск запросов в циклах. 3 | // Отслеживаются следующие случаи: 4 | // 1. Выполнение запроса, пакета запросов или построителя и выборка в цикле. 5 | // 2. Выполнение запроса, пакета запросов или построителя и выгрузка в цикле. 6 | // 3. Выполнение в цикле метода, который выполняет запрос (в рамках одного модуля). 7 | 8 | // Если внутри цикла не происходит выборки или выгрузки, то это считается корректной ситуацией, 9 | // так как такое обычно делается в итерационных алгоритмах на временных таблицах. 10 | 11 | Перем Типы; 12 | Перем ТаблицаОшибок; 13 | Перем Стек; 14 | Перем Счетчики; 15 | Перем Исходник; 16 | 17 | Перем ИменаМетодовВыполнения; 18 | Перем ИменаМетодовВыборки; 19 | Перем ИменаРезультатовПостроителя; 20 | Перем ПодозрительныеПеременные; 21 | Перем ТекущийМетод; 22 | Перем МетодыВыполняющиеЗапросы; 23 | Перем СоответствиеВложенныхВызовов; 24 | Перем ВложенныеВызовы; 25 | Перем ВызовыВЦикле; 26 | 27 | Процедура Открыть(Парсер, Параметры) Экспорт 28 | 29 | Типы = Парсер.Типы(); 30 | ТаблицаОшибок = Парсер.ТаблицаОшибок(); 31 | Стек = Парсер.Стек(); 32 | Счетчики = Парсер.Счетчики(); 33 | Исходник = Парсер.Исходник(); 34 | 35 | ИменаМетодовВыполнения = Новый Структура; 36 | ИменаМетодовВыполнения.Вставить("Выполнить"); 37 | ИменаМетодовВыполнения.Вставить("Execute"); 38 | ИменаМетодовВыполнения.Вставить("ВыполнитьПакет"); 39 | ИменаМетодовВыполнения.Вставить("ExecuteBatch"); 40 | ИменаМетодовВыполнения.Вставить("ВыполнитьПакетСПромежуточнымиДанными"); 41 | ИменаМетодовВыполнения.Вставить("ExecuteBatchWithIntermediateData"); 42 | 43 | ИменаМетодовВыборки = Новый Структура; 44 | ИменаМетодовВыборки.Вставить("Выбрать"); 45 | ИменаМетодовВыборки.Вставить("Select"); 46 | ИменаМетодовВыборки.Вставить("Выгрузить"); 47 | ИменаМетодовВыборки.Вставить("Unload"); 48 | ИменаМетодовВыборки.Вставить("Пустой"); 49 | ИменаМетодовВыборки.Вставить("IsEmpty"); 50 | 51 | ИменаРезультатовПостроителя = Новый Структура; 52 | ИменаРезультатовПостроителя.Вставить("Результат"); 53 | ИменаРезультатовПостроителя.Вставить("Result"); 54 | 55 | ПодозрительныеПеременные = Новый Соответствие; 56 | МетодыВыполняющиеЗапросы = Новый Соответствие; 57 | СоответствиеВложенныхВызовов = Новый Соответствие; 58 | ВызовыВЦикле = Новый Массив; 59 | 60 | КонецПроцедуры 61 | 62 | Функция Закрыть() Экспорт 63 | 64 | Глубина = 0; 65 | 66 | Для Каждого ВыражениеИдентификатор Из ВызовыВЦикле Цикл 67 | Объявление = ВыражениеИдентификатор.Голова.Объявление; 68 | Если МетодыВыполняющиеЗапросы[Объявление] <> Неопределено 69 | Или ВложенныеВызовыВыполняютЗапросы(ВыражениеИдентификатор, Объявление, Глубина) Тогда 70 | Ошибка("Выполнение метода с запросом в цикле", ВыражениеИдентификатор.Начало, ВыражениеИдентификатор.Конец); 71 | КонецЕсли; 72 | КонецЦикла; 73 | 74 | ПодозрительныеПеременные = Неопределено; 75 | МетодыВыполняющиеЗапросы = Неопределено; 76 | СоответствиеВложенныхВызовов = Неопределено; 77 | ВложенныеВызовы = Неопределено; 78 | ВызовыВЦикле = Неопределено; 79 | ТекущийМетод = Неопределено; 80 | 81 | Возврат Неопределено; 82 | 83 | КонецФункции 84 | 85 | Функция ВложенныеВызовыВыполняютЗапросы(ВыражениеИдентификатор, РодительскоеОбъявление, Глубина) 86 | Результат = Ложь; 87 | Если Глубина < 3 Тогда 88 | ВложенныеВызовы = СоответствиеВложенныхВызовов[РодительскоеОбъявление]; 89 | Если ВложенныеВызовы <> Неопределено Тогда 90 | Для Каждого Объявление Из ВложенныеВызовы Цикл 91 | Если МетодыВыполняющиеЗапросы[Объявление] <> Неопределено Тогда 92 | Результат = Истина; 93 | Иначе 94 | Результат = ВложенныеВызовыВыполняютЗапросы(ВыражениеИдентификатор, Объявление, Глубина + 1); 95 | КонецЕсли; 96 | КонецЦикла; 97 | КонецЕсли; 98 | КонецЕсли; 99 | Возврат Результат; 100 | КонецФункции 101 | 102 | Функция Подписки() Экспорт 103 | Перем Подписки; 104 | Подписки = Новый Массив; 105 | Подписки.Добавить("ПосетитьОбъявлениеМетода"); 106 | Подписки.Добавить("ПокинутьОбъявлениеМетода"); 107 | Подписки.Добавить("ПосетитьВыражениеИдентификатор"); 108 | Возврат Подписки; 109 | КонецФункции 110 | 111 | #Область РеализацияПодписок 112 | 113 | Процедура ПосетитьОбъявлениеМетода(ОбъявлениеМетода) Экспорт 114 | ТекущийМетод = ОбъявлениеМетода.Сигнатура; 115 | ВложенныеВызовы = Новый Массив; 116 | КонецПроцедуры 117 | 118 | Процедура ПокинутьОбъявлениеМетода(ОбъявлениеМетода) Экспорт 119 | СоответствиеВложенныхВызовов[ТекущийМетод] = ВложенныеВызовы; 120 | КонецПроцедуры 121 | 122 | Процедура ПосетитьВыражениеИдентификатор(ВыражениеИдентификатор) Экспорт 123 | УровеньЦикла = УровеньЦикла(); 124 | Голова = ВыражениеИдентификатор.Голова; 125 | Хвост = ВыражениеИдентификатор.Хвост; 126 | Родитель = Стек[Стек.ВГраница()]; 127 | Если ВыражениеИдентификатор.Аргументы <> Неопределено Тогда 128 | Если УровеньЦикла > 0 Тогда 129 | Если УровеньЦикла > 1 Или Родитель.Тип <> Типы.ОператорДляКаждого Тогда 130 | ВызовыВЦикле.Добавить(ВыражениеИдентификатор); 131 | КонецЕсли; 132 | КонецЕсли; 133 | ВложенныеВызовы.Добавить(Голова.Объявление); 134 | КонецЕсли; 135 | Если Хвост.Количество() = 0 Тогда 136 | Возврат; 137 | КонецЕсли; 138 | ИндексВыборки = 1; 139 | ЭлементХвоста = Хвост[0]; 140 | Если ЭлементХвоста.Тип = Типы.ВыражениеИндекс И Хвост.Количество() > 1 Тогда 141 | ИндексВыборки = 2; 142 | ЭлементХвоста = Хвост[1]; 143 | КонецЕсли; 144 | Если ЭлементХвоста.Тип <> Типы.ВыражениеПоле Тогда 145 | Возврат; 146 | КонецЕсли; 147 | Если ЭлементХвоста.Аргументы <> Неопределено Тогда 148 | Если ИменаМетодовВыполнения.Свойство(ЭлементХвоста.Имя) Тогда 149 | Если Родитель.Тип = Типы.ОператорДляКаждого И УровеньЦикла = 1 Тогда 150 | // пример: 151 | // Для Каждого Строка Из Запрос.Выполнить().Выгрузить() Цикл 152 | УровеньЦикла = 0; 153 | КонецЕсли; 154 | Если ИндексВыборки < Хвост.Количество() Тогда 155 | СледующийЭлементХвоста = Хвост[ИндексВыборки]; 156 | Если СледующийЭлементХвоста.Тип = Типы.ВыражениеПоле 157 | И СледующийЭлементХвоста.Аргументы <> Неопределено 158 | И ИменаМетодовВыборки.Свойство(СледующийЭлементХвоста.Имя) Тогда 159 | // пример: 160 | // Выборка = Запрос.Выполнить().Выбрать(); 161 | Если УровеньЦикла > 0 Тогда 162 | Ошибка("Выполнение запроса в цикле", ВыражениеИдентификатор.Начало, ВыражениеИдентификатор.Конец); 163 | КонецЕсли; 164 | МетодыВыполняющиеЗапросы[ТекущийМетод] = Истина; 165 | КонецЕсли; 166 | Иначе 167 | Если Родитель.Тип = Типы.ОператорПрисваивания 168 | И Родитель.ЛевыйОперанд.Хвост.Количество() = 0 Тогда 169 | ПодозрительныеПеременные[Родитель.ЛевыйОперанд.Голова] = УровеньЦикла; 170 | Иначе 171 | ПодозрительныеПеременные[Голова] = УровеньЦикла; 172 | КонецЕсли; 173 | КонецЕсли; 174 | ИначеЕсли ИменаМетодовВыборки.Свойство(ЭлементХвоста.Имя) Тогда 175 | УровеньЦиклаПриВыполненииЗапроса = ПодозрительныеПеременные[Голова]; 176 | Если УровеньЦиклаПриВыполненииЗапроса <> Неопределено Тогда 177 | // пример 1: 178 | // Результат = Запрос.Выполнить(); 179 | // ... 180 | // Результат.Выбрать(); 181 | // пример 2: 182 | // Результаты = Запрос.ВыполнитьПакет(); 183 | // ... 184 | // Выборка = Результаты[0].Выбрать(); 185 | Если УровеньЦикла > 0 И УровеньЦиклаПриВыполненииЗапроса <> 0 Тогда 186 | Ошибка("Выполнение запроса в цикле", ВыражениеИдентификатор.Начало, ВыражениеИдентификатор.Конец); 187 | КонецЕсли; 188 | МетодыВыполняющиеЗапросы[ТекущийМетод] = Истина; 189 | КонецЕсли; 190 | КонецЕсли; 191 | ИначеЕсли ИменаРезультатовПостроителя.Свойство(ЭлементХвоста.Имя) Тогда 192 | УровеньЦиклаПриВыполненииЗапроса = ПодозрительныеПеременные[Голова]; 193 | Если УровеньЦиклаПриВыполненииЗапроса <> Неопределено Тогда 194 | Если Хвост.Количество() > 1 Тогда 195 | СледующийЭлементХвоста = Хвост[1]; 196 | Если СледующийЭлементХвоста.Тип = Типы.ВыражениеПоле 197 | И СледующийЭлементХвоста.Аргументы <> Неопределено 198 | И ИменаМетодовВыборки.Свойство(СледующийЭлементХвоста.Имя) Тогда 199 | // пример: 200 | // Построитель.Выполнить(); 201 | // ... 202 | // Построитель.Результат.Выбрать(); 203 | Если УровеньЦикла > 0 И УровеньЦиклаПриВыполненииЗапроса <> 0 Тогда 204 | Ошибка("Выполнение запроса в цикле", ВыражениеИдентификатор.Начало, ВыражениеИдентификатор.Конец); 205 | КонецЕсли; 206 | МетодыВыполняющиеЗапросы[ТекущийМетод] = Истина; 207 | КонецЕсли; 208 | КонецЕсли; 209 | КонецЕсли; 210 | КонецЕсли; 211 | КонецПроцедуры 212 | 213 | #КонецОбласти 214 | 215 | Функция УровеньЦикла() 216 | Возврат Счетчики[Типы.ОператорПока] + Счетчики[Типы.ОператорДляКаждого] + Счетчики[Типы.ОператорДля]; 217 | КонецФункции 218 | 219 | Процедура Ошибка(Текст, Начало, Конец = Неопределено, ЕстьЗамена = Ложь) 220 | 221 | Ошибка = ТаблицаОшибок.Добавить(); 222 | Ошибка.Источник = Метаданные().Имя; 223 | Ошибка.Текст = Текст; 224 | 225 | Ошибка.МинутНаИсправление = 5; 226 | Ошибка.Серьезность = "INFO"; 227 | Ошибка.Приоритет = 0; 228 | Ошибка.Правило = Метаданные().Синоним; 229 | Ошибка.Тип = "CODE_SMELL"; 230 | 231 | Ошибка.ПозицияНачала = Начало.Позиция; 232 | Ошибка.НомерСтрокиНачала = Начало.НомерСтроки; 233 | Ошибка.НомерКолонкиНачала = Начало.НомерКолонки; 234 | Если Конец = Неопределено Или Конец = Начало Тогда 235 | Ошибка.ПозицияКонца = Начало.Позиция + Начало.Длина; 236 | Ошибка.НомерСтрокиКонца = Начало.НомерСтроки; 237 | Ошибка.НомерКолонкиКонца = Начало.НомерКолонки + Начало.Длина; 238 | Иначе 239 | Ошибка.ПозицияКонца = Конец.Позиция + Конец.Длина; 240 | Ошибка.НомерСтрокиКонца = Конец.НомерСтроки; 241 | Ошибка.НомерКолонкиКонца = Конец.НомерКолонки + Конец.Длина; 242 | КонецЕсли; 243 | 244 | Ошибка.ЕстьЗамена = ЕстьЗамена; 245 | 246 | КонецПроцедуры --------------------------------------------------------------------------------