├── 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 |
7 | 10
8 |
9 | true
10 |
11 |
12 |
13 |
14 | -
15 |
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 |
4 |
5 | ОсновнаяСхемаКомпоновкиДанных
6 |
7 |
8 | ru
9 | Основная схема компоновки данных
10 |
11 |
12 |
13 | DataCompositionSchema
14 |
15 |
16 |
--------------------------------------------------------------------------------
/src/Catalogs/Радар_Проекты/Forms/ФормаСписка.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
21 |
--------------------------------------------------------------------------------
/src/Documents/Радар_Отчет/Forms/ФормаСписка.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
21 |
--------------------------------------------------------------------------------
/src/Catalogs/Радар_Модули/Forms/ФормаЭлемента.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
21 |
--------------------------------------------------------------------------------
/src/Catalogs/Радар_Плагины/Forms/ФормаЭлемента.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
21 |
--------------------------------------------------------------------------------
/src/Catalogs/Радар_Проекты/Forms/ФормаЭлемента.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
21 |
--------------------------------------------------------------------------------
/src/Documents/Радар_Отчет/Forms/ФормаДокумента.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
21 |
--------------------------------------------------------------------------------
/src/InformationRegisters/Радар_Ошибки/Forms/ФормаСписка.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
21 |
--------------------------------------------------------------------------------
/src/InformationRegisters/Радар_Проверки/Forms/ФормаСписка.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
21 |
--------------------------------------------------------------------------------
/src/DataProcessors/Радар_Консоль/Forms/Форма.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
22 |
--------------------------------------------------------------------------------
/src/DataProcessors/Радар_Навигатор/Forms/Форма.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
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 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/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 |
129 | DontIndex
130 | Use
131 | Use
132 |
133 |
134 |
135 |
136 |
137 |
--------------------------------------------------------------------------------
/src/Catalogs/Радар_Проекты/Forms/ФормаСписка/Ext/Form.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/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 | КонецПроцедуры
--------------------------------------------------------------------------------