diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..490de28
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,35 @@
+# модули
+* text=auto
+*.bsl text eol=crlf
+*.cai text eol=crlf
+*.cmi text eol=crlf
+*.dcs text eol=crlf
+*.dcss text eol=crlf
+*.dcssca text eol=crlf
+*.form text eol=crlf
+*.hpwa text eol=crlf
+*.mdo text eol=crlf
+*.mxlx text eol=crlf
+*.pnrs text eol=crlf
+*.rights text eol=crlf
+*.schedule text eol=crlf
+
+# картинки
+
+*.bmp binary diff=exif
+*.gif binary diff=exif
+*.ico binary
+*.jpeg binary diff=exif
+*.jpg binary diff=exif
+*.png binary diff=exif
+*.svg text
+
+# картинки
+
+*.bin binary
+*.1CD binary
+
+# Binary file extensions that should not be modified.
+*.bin binary
+*.axdt binary
+*.addin binary
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..3d605a2
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,35 @@
+*.cfu
+src/.project
+*.cfl
+*.lgd
+*.orig
+
+/src/Configuration/ConfigDumpInfo.xml
+
+/allure-reports
+/autotest-bia
+/ci4onec
+/spec/build/ib
+/tys
+
+autotest.json
+VBParams.json
+
+/allure-report/*
+/buildstatus.log
+
+
+/*_pid*.log
+
+*.*.bak
+
+# IDE
+*/.settings/com._1c.g5.v8.dt.platform.services.core.prefs
+*/.settings/EnvLaunchModeIndex.prefs
+
+# Binary
+*/bin/*
+
+#wsdl
+/fixtures/wsdl
+
diff --git a/sonarlint.json b/sonarlint.json
new file mode 100644
index 0000000..9dddae6
--- /dev/null
+++ b/sonarlint.json
@@ -0,0 +1,4 @@
+{
+ "serverId": "sonar",
+ "projectKey": "yaxunit:develop"
+}
\ No newline at end of file
diff --git a/СтандартныеПодсистемыБеллераж/.project b/src/cf/.project
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/.project
rename to src/cf/.project
diff --git a/СтандартныеПодсистемыБеллераж/.settings/ManagedEnvironments.prefs b/src/cf/.settings/ManagedEnvironments.prefs
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/.settings/ManagedEnvironments.prefs
rename to src/cf/.settings/ManagedEnvironments.prefs
diff --git a/СтандартныеПодсистемыБеллераж/.settings/RuntimePropertyLaunch.prefs b/src/cf/.settings/RuntimePropertyLaunch.prefs
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/.settings/RuntimePropertyLaunch.prefs
rename to src/cf/.settings/RuntimePropertyLaunch.prefs
diff --git a/СтандартныеПодсистемыБеллераж/.settings/com.e1c.v8codestyle.autosort.prefs b/src/cf/.settings/com.e1c.v8codestyle.autosort.prefs
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/.settings/com.e1c.v8codestyle.autosort.prefs
rename to src/cf/.settings/com.e1c.v8codestyle.autosort.prefs
diff --git a/СтандартныеПодсистемыБеллераж/.settings/com.e1c.v8codestyle.bsl.prefs b/src/cf/.settings/com.e1c.v8codestyle.bsl.prefs
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/.settings/com.e1c.v8codestyle.bsl.prefs
rename to src/cf/.settings/com.e1c.v8codestyle.bsl.prefs
diff --git a/СтандартныеПодсистемыБеллераж/.settings/com.e1c.v8codestyle.prefs b/src/cf/.settings/com.e1c.v8codestyle.prefs
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/.settings/com.e1c.v8codestyle.prefs
rename to src/cf/.settings/com.e1c.v8codestyle.prefs
diff --git a/СтандартныеПодсистемыБеллераж/.settings/org.eclipse.core.resources.prefs b/src/cf/.settings/org.eclipse.core.resources.prefs
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/.settings/org.eclipse.core.resources.prefs
rename to src/cf/.settings/org.eclipse.core.resources.prefs
diff --git a/СтандартныеПодсистемыБеллераж/DT-INF/PROJECT.PMF b/src/cf/DT-INF/PROJECT.PMF
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/DT-INF/PROJECT.PMF
rename to src/cf/DT-INF/PROJECT.PMF
diff --git a/СтандартныеПодсистемыБеллераж/src/CommonModules/бф_ВосстановлениеXDTO/Module.bsl b/src/cf/src/CommonModules/бф_ВосстановлениеXDTO/Module.bsl
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/src/CommonModules/бф_ВосстановлениеXDTO/Module.bsl
rename to src/cf/src/CommonModules/бф_ВосстановлениеXDTO/Module.bsl
diff --git a/СтандартныеПодсистемыБеллераж/src/CommonModules/бф_ВосстановлениеXDTO/бф_ВосстановлениеXDTO.mdo b/src/cf/src/CommonModules/бф_ВосстановлениеXDTO/бф_ВосстановлениеXDTO.mdo
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/src/CommonModules/бф_ВосстановлениеXDTO/бф_ВосстановлениеXDTO.mdo
rename to src/cf/src/CommonModules/бф_ВосстановлениеXDTO/бф_ВосстановлениеXDTO.mdo
diff --git a/СтандартныеПодсистемыБеллераж/src/CommonModules/бф_ВосстановлениеXDTOПереопределяемый/Module.bsl b/src/cf/src/CommonModules/бф_ВосстановлениеXDTOПереопределяемый/Module.bsl
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/src/CommonModules/бф_ВосстановлениеXDTOПереопределяемый/Module.bsl
rename to src/cf/src/CommonModules/бф_ВосстановлениеXDTOПереопределяемый/Module.bsl
diff --git a/СтандартныеПодсистемыБеллераж/src/CommonModules/бф_ВосстановлениеXDTOПереопределяемый/бф_ВосстановлениеXDTOПереопределяемый.mdo b/src/cf/src/CommonModules/бф_ВосстановлениеXDTOПереопределяемый/бф_ВосстановлениеXDTOПереопределяемый.mdo
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/src/CommonModules/бф_ВосстановлениеXDTOПереопределяемый/бф_ВосстановлениеXDTOПереопределяемый.mdo
rename to src/cf/src/CommonModules/бф_ВосстановлениеXDTOПереопределяемый/бф_ВосстановлениеXDTOПереопределяемый.mdo
diff --git a/СтандартныеПодсистемыБеллераж/src/CommonModules/бф_Кеширование/Module.bsl b/src/cf/src/CommonModules/бф_Кеширование/Module.bsl
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/src/CommonModules/бф_Кеширование/Module.bsl
rename to src/cf/src/CommonModules/бф_Кеширование/Module.bsl
diff --git a/СтандартныеПодсистемыБеллераж/src/CommonModules/бф_Кеширование/бф_Кеширование.mdo b/src/cf/src/CommonModules/бф_Кеширование/бф_Кеширование.mdo
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/src/CommonModules/бф_Кеширование/бф_Кеширование.mdo
rename to src/cf/src/CommonModules/бф_Кеширование/бф_Кеширование.mdo
diff --git a/СтандартныеПодсистемыБеллераж/src/CommonModules/бф_КоннекторХТТП/Module.bsl b/src/cf/src/CommonModules/бф_КоннекторХТТП/Module.bsl
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/src/CommonModules/бф_КоннекторХТТП/Module.bsl
rename to src/cf/src/CommonModules/бф_КоннекторХТТП/Module.bsl
diff --git a/СтандартныеПодсистемыБеллераж/src/CommonModules/бф_КоннекторХТТП/бф_КоннекторХТТП.mdo b/src/cf/src/CommonModules/бф_КоннекторХТТП/бф_КоннекторХТТП.mdo
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/src/CommonModules/бф_КоннекторХТТП/бф_КоннекторХТТП.mdo
rename to src/cf/src/CommonModules/бф_КоннекторХТТП/бф_КоннекторХТТП.mdo
diff --git a/СтандартныеПодсистемыБеллераж/src/CommonModules/бф_Константы/Module.bsl b/src/cf/src/CommonModules/бф_Константы/Module.bsl
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/src/CommonModules/бф_Константы/Module.bsl
rename to src/cf/src/CommonModules/бф_Константы/Module.bsl
diff --git a/СтандартныеПодсистемыБеллераж/src/CommonModules/бф_Константы/бф_Константы.mdo b/src/cf/src/CommonModules/бф_Константы/бф_Константы.mdo
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/src/CommonModules/бф_Константы/бф_Константы.mdo
rename to src/cf/src/CommonModules/бф_Константы/бф_Константы.mdo
diff --git a/СтандартныеПодсистемыБеллераж/src/CommonModules/бф_КонстантыПовтИсп/Module.bsl b/src/cf/src/CommonModules/бф_КонстантыПовтИсп/Module.bsl
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/src/CommonModules/бф_КонстантыПовтИсп/Module.bsl
rename to src/cf/src/CommonModules/бф_КонстантыПовтИсп/Module.bsl
diff --git a/СтандартныеПодсистемыБеллераж/src/CommonModules/бф_КонстантыПовтИсп/бф_КонстантыПовтИсп.mdo b/src/cf/src/CommonModules/бф_КонстантыПовтИсп/бф_КонстантыПовтИсп.mdo
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/src/CommonModules/бф_КонстантыПовтИсп/бф_КонстантыПовтИсп.mdo
rename to src/cf/src/CommonModules/бф_КонстантыПовтИсп/бф_КонстантыПовтИсп.mdo
diff --git a/СтандартныеПодсистемыБеллераж/src/CommonModules/бф_МодификацияФорм/Module.bsl b/src/cf/src/CommonModules/бф_МодификацияФорм/Module.bsl
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/src/CommonModules/бф_МодификацияФорм/Module.bsl
rename to src/cf/src/CommonModules/бф_МодификацияФорм/Module.bsl
diff --git a/СтандартныеПодсистемыБеллераж/src/CommonModules/бф_МодификацияФорм/бф_МодификацияФорм.mdo b/src/cf/src/CommonModules/бф_МодификацияФорм/бф_МодификацияФорм.mdo
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/src/CommonModules/бф_МодификацияФорм/бф_МодификацияФорм.mdo
rename to src/cf/src/CommonModules/бф_МодификацияФорм/бф_МодификацияФорм.mdo
diff --git a/СтандартныеПодсистемыБеллераж/src/CommonModules/бф_ОбработкаHTTPЗапросов/Module.bsl b/src/cf/src/CommonModules/бф_ОбработкаHTTPЗапросов/Module.bsl
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/src/CommonModules/бф_ОбработкаHTTPЗапросов/Module.bsl
rename to src/cf/src/CommonModules/бф_ОбработкаHTTPЗапросов/Module.bsl
diff --git a/СтандартныеПодсистемыБеллераж/src/CommonModules/бф_ОбработкаHTTPЗапросов/бф_ОбработкаHTTPЗапросов.mdo b/src/cf/src/CommonModules/бф_ОбработкаHTTPЗапросов/бф_ОбработкаHTTPЗапросов.mdo
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/src/CommonModules/бф_ОбработкаHTTPЗапросов/бф_ОбработкаHTTPЗапросов.mdo
rename to src/cf/src/CommonModules/бф_ОбработкаHTTPЗапросов/бф_ОбработкаHTTPЗапросов.mdo
diff --git a/СтандартныеПодсистемыБеллераж/src/CommonModules/бф_ОбработкаЗапросовПереопределяемый/Module.bsl b/src/cf/src/CommonModules/бф_ОбработкаЗапросовПереопределяемый/Module.bsl
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/src/CommonModules/бф_ОбработкаЗапросовПереопределяемый/Module.bsl
rename to src/cf/src/CommonModules/бф_ОбработкаЗапросовПереопределяемый/Module.bsl
diff --git a/СтандартныеПодсистемыБеллераж/src/CommonModules/бф_ОбработкаЗапросовПереопределяемый/бф_ОбработкаЗапросовПереопределяемый.mdo b/src/cf/src/CommonModules/бф_ОбработкаЗапросовПереопределяемый/бф_ОбработкаЗапросовПереопределяемый.mdo
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/src/CommonModules/бф_ОбработкаЗапросовПереопределяемый/бф_ОбработкаЗапросовПереопределяемый.mdo
rename to src/cf/src/CommonModules/бф_ОбработкаЗапросовПереопределяемый/бф_ОбработкаЗапросовПереопределяемый.mdo
diff --git a/СтандартныеПодсистемыБеллераж/src/CommonModules/бф_ОбработкаЗапросовПовтИсп/Module.bsl b/src/cf/src/CommonModules/бф_ОбработкаЗапросовПовтИсп/Module.bsl
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/src/CommonModules/бф_ОбработкаЗапросовПовтИсп/Module.bsl
rename to src/cf/src/CommonModules/бф_ОбработкаЗапросовПовтИсп/Module.bsl
diff --git a/СтандартныеПодсистемыБеллераж/src/CommonModules/бф_ОбработкаЗапросовПовтИсп/бф_ОбработкаЗапросовПовтИсп.mdo b/src/cf/src/CommonModules/бф_ОбработкаЗапросовПовтИсп/бф_ОбработкаЗапросовПовтИсп.mdo
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/src/CommonModules/бф_ОбработкаЗапросовПовтИсп/бф_ОбработкаЗапросовПовтИсп.mdo
rename to src/cf/src/CommonModules/бф_ОбработкаЗапросовПовтИсп/бф_ОбработкаЗапросовПовтИсп.mdo
diff --git a/СтандартныеПодсистемыБеллераж/src/CommonModules/бф_ПроцессорыКоллекций/Module.bsl b/src/cf/src/CommonModules/бф_ПроцессорыКоллекций/Module.bsl
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/src/CommonModules/бф_ПроцессорыКоллекций/Module.bsl
rename to src/cf/src/CommonModules/бф_ПроцессорыКоллекций/Module.bsl
diff --git a/СтандартныеПодсистемыБеллераж/src/CommonModules/бф_ПроцессорыКоллекций/бф_ПроцессорыКоллекций.mdo b/src/cf/src/CommonModules/бф_ПроцессорыКоллекций/бф_ПроцессорыКоллекций.mdo
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/src/CommonModules/бф_ПроцессорыКоллекций/бф_ПроцессорыКоллекций.mdo
rename to src/cf/src/CommonModules/бф_ПроцессорыКоллекций/бф_ПроцессорыКоллекций.mdo
diff --git a/СтандартныеПодсистемыБеллераж/src/CommonModules/бф_ПроцессорыКоллекцийСлужебный/Module.bsl b/src/cf/src/CommonModules/бф_ПроцессорыКоллекцийСлужебный/Module.bsl
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/src/CommonModules/бф_ПроцессорыКоллекцийСлужебный/Module.bsl
rename to src/cf/src/CommonModules/бф_ПроцессорыКоллекцийСлужебный/Module.bsl
diff --git a/СтандартныеПодсистемыБеллераж/src/CommonModules/бф_ПроцессорыКоллекцийСлужебный/бф_ПроцессорыКоллекцийСлужебный.mdo b/src/cf/src/CommonModules/бф_ПроцессорыКоллекцийСлужебный/бф_ПроцессорыКоллекцийСлужебный.mdo
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/src/CommonModules/бф_ПроцессорыКоллекцийСлужебный/бф_ПроцессорыКоллекцийСлужебный.mdo
rename to src/cf/src/CommonModules/бф_ПроцессорыКоллекцийСлужебный/бф_ПроцессорыКоллекцийСлужебный.mdo
diff --git a/СтандартныеПодсистемыБеллераж/src/CommonModules/бф_РегулярныеВыражения/Module.bsl b/src/cf/src/CommonModules/бф_РегулярныеВыражения/Module.bsl
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/src/CommonModules/бф_РегулярныеВыражения/Module.bsl
rename to src/cf/src/CommonModules/бф_РегулярныеВыражения/Module.bsl
diff --git a/СтандартныеПодсистемыБеллераж/src/CommonModules/бф_РегулярныеВыражения/бф_РегулярныеВыражения.mdo b/src/cf/src/CommonModules/бф_РегулярныеВыражения/бф_РегулярныеВыражения.mdo
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/src/CommonModules/бф_РегулярныеВыражения/бф_РегулярныеВыражения.mdo
rename to src/cf/src/CommonModules/бф_РегулярныеВыражения/бф_РегулярныеВыражения.mdo
diff --git a/СтандартныеПодсистемыБеллераж/src/CommonModules/бф_СервисыОбщее/Module.bsl b/src/cf/src/CommonModules/бф_СервисыОбщее/Module.bsl
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/src/CommonModules/бф_СервисыОбщее/Module.bsl
rename to src/cf/src/CommonModules/бф_СервисыОбщее/Module.bsl
diff --git a/СтандартныеПодсистемыБеллераж/src/CommonModules/бф_СервисыОбщее/бф_СервисыОбщее.mdo b/src/cf/src/CommonModules/бф_СервисыОбщее/бф_СервисыОбщее.mdo
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/src/CommonModules/бф_СервисыОбщее/бф_СервисыОбщее.mdo
rename to src/cf/src/CommonModules/бф_СервисыОбщее/бф_СервисыОбщее.mdo
diff --git a/СтандартныеПодсистемыБеллераж/src/CommonModules/бф_СобытияФорм/Module.bsl b/src/cf/src/CommonModules/бф_СобытияФорм/Module.bsl
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/src/CommonModules/бф_СобытияФорм/Module.bsl
rename to src/cf/src/CommonModules/бф_СобытияФорм/Module.bsl
diff --git a/СтандартныеПодсистемыБеллераж/src/CommonModules/бф_СобытияФорм/бф_СобытияФорм.mdo b/src/cf/src/CommonModules/бф_СобытияФорм/бф_СобытияФорм.mdo
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/src/CommonModules/бф_СобытияФорм/бф_СобытияФорм.mdo
rename to src/cf/src/CommonModules/бф_СобытияФорм/бф_СобытияФорм.mdo
diff --git a/СтандартныеПодсистемыБеллераж/src/CommonModules/бф_СобытияФормКлиент/Module.bsl b/src/cf/src/CommonModules/бф_СобытияФормКлиент/Module.bsl
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/src/CommonModules/бф_СобытияФормКлиент/Module.bsl
rename to src/cf/src/CommonModules/бф_СобытияФормКлиент/Module.bsl
diff --git a/СтандартныеПодсистемыБеллераж/src/CommonModules/бф_СобытияФормКлиент/бф_СобытияФормКлиент.mdo b/src/cf/src/CommonModules/бф_СобытияФормКлиент/бф_СобытияФормКлиент.mdo
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/src/CommonModules/бф_СобытияФормКлиент/бф_СобытияФормКлиент.mdo
rename to src/cf/src/CommonModules/бф_СобытияФормКлиент/бф_СобытияФормКлиент.mdo
diff --git a/СтандартныеПодсистемыБеллераж/src/CommonModules/бф_СхемаЗапроса/Module.bsl b/src/cf/src/CommonModules/бф_СхемаЗапроса/Module.bsl
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/src/CommonModules/бф_СхемаЗапроса/Module.bsl
rename to src/cf/src/CommonModules/бф_СхемаЗапроса/Module.bsl
diff --git a/СтандартныеПодсистемыБеллераж/src/CommonModules/бф_СхемаЗапроса/бф_СхемаЗапроса.mdo b/src/cf/src/CommonModules/бф_СхемаЗапроса/бф_СхемаЗапроса.mdo
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/src/CommonModules/бф_СхемаЗапроса/бф_СхемаЗапроса.mdo
rename to src/cf/src/CommonModules/бф_СхемаЗапроса/бф_СхемаЗапроса.mdo
diff --git a/СтандартныеПодсистемыБеллераж/src/CommonModules/бф_СхемаЗапросаСлужебный/Module.bsl b/src/cf/src/CommonModules/бф_СхемаЗапросаСлужебный/Module.bsl
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/src/CommonModules/бф_СхемаЗапросаСлужебный/Module.bsl
rename to src/cf/src/CommonModules/бф_СхемаЗапросаСлужебный/Module.bsl
diff --git a/СтандартныеПодсистемыБеллераж/src/CommonModules/бф_СхемаЗапросаСлужебный/бф_СхемаЗапросаСлужебный.mdo b/src/cf/src/CommonModules/бф_СхемаЗапросаСлужебный/бф_СхемаЗапросаСлужебный.mdo
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/src/CommonModules/бф_СхемаЗапросаСлужебный/бф_СхемаЗапросаСлужебный.mdo
rename to src/cf/src/CommonModules/бф_СхемаЗапросаСлужебный/бф_СхемаЗапросаСлужебный.mdo
diff --git a/СтандартныеПодсистемыБеллераж/src/CommonModules/бф_ХТТПСлужебный/Module.bsl b/src/cf/src/CommonModules/бф_ХТТПСлужебный/Module.bsl
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/src/CommonModules/бф_ХТТПСлужебный/Module.bsl
rename to src/cf/src/CommonModules/бф_ХТТПСлужебный/Module.bsl
diff --git a/СтандартныеПодсистемыБеллераж/src/CommonModules/бф_ХТТПСлужебный/бф_ХТТПСлужебный.mdo b/src/cf/src/CommonModules/бф_ХТТПСлужебный/бф_ХТТПСлужебный.mdo
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/src/CommonModules/бф_ХТТПСлужебный/бф_ХТТПСлужебный.mdo
rename to src/cf/src/CommonModules/бф_ХТТПСлужебный/бф_ХТТПСлужебный.mdo
diff --git a/СтандартныеПодсистемыБеллераж/src/CommonTemplates/бф_RegEx/Template.addin b/src/cf/src/CommonTemplates/бф_RegEx/Template.addin
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/src/CommonTemplates/бф_RegEx/Template.addin
rename to src/cf/src/CommonTemplates/бф_RegEx/Template.addin
diff --git a/СтандартныеПодсистемыБеллераж/src/CommonTemplates/бф_RegEx/бф_RegEx.mdo b/src/cf/src/CommonTemplates/бф_RegEx/бф_RegEx.mdo
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/src/CommonTemplates/бф_RegEx/бф_RegEx.mdo
rename to src/cf/src/CommonTemplates/бф_RegEx/бф_RegEx.mdo
diff --git a/СтандартныеПодсистемыБеллераж/src/Configuration/ClientApplicationInterface.cai b/src/cf/src/Configuration/ClientApplicationInterface.cai
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/src/Configuration/ClientApplicationInterface.cai
rename to src/cf/src/Configuration/ClientApplicationInterface.cai
diff --git a/СтандартныеПодсистемыБеллераж/src/Configuration/CommandInterface.cmi b/src/cf/src/Configuration/CommandInterface.cmi
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/src/Configuration/CommandInterface.cmi
rename to src/cf/src/Configuration/CommandInterface.cmi
diff --git a/СтандартныеПодсистемыБеллераж/src/Configuration/Configuration.mdo b/src/cf/src/Configuration/Configuration.mdo
similarity index 97%
rename from СтандартныеПодсистемыБеллераж/src/Configuration/Configuration.mdo
rename to src/cf/src/Configuration/Configuration.mdo
index fe36550..3c0b398 100644
--- a/СтандартныеПодсистемыБеллераж/src/Configuration/Configuration.mdo
+++ b/src/cf/src/Configuration/Configuration.mdo
@@ -40,7 +40,7 @@
Managed
NotAutoFree
DontUse
- DontUse
+ UseWithWarnings
8.3.20
Русский
diff --git a/СтандартныеПодсистемыБеллераж/src/Configuration/ExternalConnectionModule.bsl b/src/cf/src/Configuration/ExternalConnectionModule.bsl
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/src/Configuration/ExternalConnectionModule.bsl
rename to src/cf/src/Configuration/ExternalConnectionModule.bsl
diff --git a/СтандартныеПодсистемыБеллераж/src/Configuration/MainSectionCommandInterface.cmi b/src/cf/src/Configuration/MainSectionCommandInterface.cmi
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/src/Configuration/MainSectionCommandInterface.cmi
rename to src/cf/src/Configuration/MainSectionCommandInterface.cmi
diff --git a/СтандартныеПодсистемыБеллераж/src/Configuration/ManagedApplicationModule.bsl b/src/cf/src/Configuration/ManagedApplicationModule.bsl
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/src/Configuration/ManagedApplicationModule.bsl
rename to src/cf/src/Configuration/ManagedApplicationModule.bsl
diff --git a/СтандартныеПодсистемыБеллераж/src/Configuration/SessionModule.bsl b/src/cf/src/Configuration/SessionModule.bsl
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/src/Configuration/SessionModule.bsl
rename to src/cf/src/Configuration/SessionModule.bsl
diff --git a/СтандартныеПодсистемыБеллераж/src/DataProcessors/бф_МодельЗапроса/ObjectModule.bsl b/src/cf/src/DataProcessors/бф_МодельЗапроса/ObjectModule.bsl
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/src/DataProcessors/бф_МодельЗапроса/ObjectModule.bsl
rename to src/cf/src/DataProcessors/бф_МодельЗапроса/ObjectModule.bsl
diff --git a/СтандартныеПодсистемыБеллераж/src/DataProcessors/бф_МодельЗапроса/бф_МодельЗапроса.mdo b/src/cf/src/DataProcessors/бф_МодельЗапроса/бф_МодельЗапроса.mdo
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/src/DataProcessors/бф_МодельЗапроса/бф_МодельЗапроса.mdo
rename to src/cf/src/DataProcessors/бф_МодельЗапроса/бф_МодельЗапроса.mdo
diff --git a/СтандартныеПодсистемыБеллераж/src/DataProcessors/бф_ПроцессорКоллекций/ObjectModule.bsl b/src/cf/src/DataProcessors/бф_ПроцессорКоллекций/ObjectModule.bsl
similarity index 99%
rename from СтандартныеПодсистемыБеллераж/src/DataProcessors/бф_ПроцессорКоллекций/ObjectModule.bsl
rename to src/cf/src/DataProcessors/бф_ПроцессорКоллекций/ObjectModule.bsl
index 245c283..9f2215f 100644
--- a/СтандартныеПодсистемыБеллераж/src/DataProcessors/бф_ПроцессорКоллекций/ObjectModule.bsl
+++ b/src/cf/src/DataProcessors/бф_ПроцессорКоллекций/ObjectModule.bsl
@@ -155,7 +155,7 @@
// Конвейерный метод.
//
// Параметры:
-// ФункцияРазворачивания - Строка, бф_ПроцессорыКоллекций.НовыйОписаниеОповещения - функция разворачивания.
+// ФункцияРазворачивания - Строка - бф_ПроцессорыКоллекций.НовыйОписаниеОповещения - функция разворачивания.
// В случае передачи Строки формируется служебное описание оповещения, в контексте которого заданы переменные
// "Результат", "ДополнительныеПараметры", "Элемент".
// В случае передачи ОписанияОповещения обработчик данного описания должен содержать два параметра
diff --git a/СтандартныеПодсистемыБеллераж/src/DataProcessors/бф_ПроцессорКоллекций/бф_ПроцессорКоллекций.mdo b/src/cf/src/DataProcessors/бф_ПроцессорКоллекций/бф_ПроцессорКоллекций.mdo
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/src/DataProcessors/бф_ПроцессорКоллекций/бф_ПроцессорКоллекций.mdo
rename to src/cf/src/DataProcessors/бф_ПроцессорКоллекций/бф_ПроцессорКоллекций.mdo
diff --git a/СтандартныеПодсистемыБеллераж/src/InformationRegisters/бф_ЗначенияКонстант/Forms/ФормаЗаписи/Form.form b/src/cf/src/InformationRegisters/бф_ЗначенияКонстант/Forms/ФормаЗаписи/Form.form
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/src/InformationRegisters/бф_ЗначенияКонстант/Forms/ФормаЗаписи/Form.form
rename to src/cf/src/InformationRegisters/бф_ЗначенияКонстант/Forms/ФормаЗаписи/Form.form
diff --git a/СтандартныеПодсистемыБеллераж/src/InformationRegisters/бф_ЗначенияКонстант/Forms/ФормаЗаписи/Module.bsl b/src/cf/src/InformationRegisters/бф_ЗначенияКонстант/Forms/ФормаЗаписи/Module.bsl
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/src/InformationRegisters/бф_ЗначенияКонстант/Forms/ФормаЗаписи/Module.bsl
rename to src/cf/src/InformationRegisters/бф_ЗначенияКонстант/Forms/ФормаЗаписи/Module.bsl
diff --git a/СтандартныеПодсистемыБеллераж/src/InformationRegisters/бф_ЗначенияКонстант/RecordSetModule.bsl b/src/cf/src/InformationRegisters/бф_ЗначенияКонстант/RecordSetModule.bsl
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/src/InformationRegisters/бф_ЗначенияКонстант/RecordSetModule.bsl
rename to src/cf/src/InformationRegisters/бф_ЗначенияКонстант/RecordSetModule.bsl
diff --git a/СтандартныеПодсистемыБеллераж/src/InformationRegisters/бф_ЗначенияКонстант/бф_ЗначенияКонстант.mdo b/src/cf/src/InformationRegisters/бф_ЗначенияКонстант/бф_ЗначенияКонстант.mdo
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/src/InformationRegisters/бф_ЗначенияКонстант/бф_ЗначенияКонстант.mdo
rename to src/cf/src/InformationRegisters/бф_ЗначенияКонстант/бф_ЗначенияКонстант.mdo
diff --git a/СтандартныеПодсистемыБеллераж/src/Subsystems/бф_СтандартныеПодсистемы/CommandInterface.cmi b/src/cf/src/Subsystems/бф_СтандартныеПодсистемы/CommandInterface.cmi
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/src/Subsystems/бф_СтандартныеПодсистемы/CommandInterface.cmi
rename to src/cf/src/Subsystems/бф_СтандартныеПодсистемы/CommandInterface.cmi
diff --git a/СтандартныеПодсистемыБеллераж/src/Subsystems/бф_СтандартныеПодсистемы/Subsystems/КоннекторХТТП/CommandInterface.cmi b/src/cf/src/Subsystems/бф_СтандартныеПодсистемы/Subsystems/КоннекторХТТП/CommandInterface.cmi
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/src/Subsystems/бф_СтандартныеПодсистемы/Subsystems/КоннекторХТТП/CommandInterface.cmi
rename to src/cf/src/Subsystems/бф_СтандартныеПодсистемы/Subsystems/КоннекторХТТП/CommandInterface.cmi
diff --git a/СтандартныеПодсистемыБеллераж/src/Subsystems/бф_СтандартныеПодсистемы/Subsystems/КоннекторХТТП/КоннекторХТТП.mdo b/src/cf/src/Subsystems/бф_СтандартныеПодсистемы/Subsystems/КоннекторХТТП/КоннекторХТТП.mdo
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/src/Subsystems/бф_СтандартныеПодсистемы/Subsystems/КоннекторХТТП/КоннекторХТТП.mdo
rename to src/cf/src/Subsystems/бф_СтандартныеПодсистемы/Subsystems/КоннекторХТТП/КоннекторХТТП.mdo
diff --git a/СтандартныеПодсистемыБеллераж/src/Subsystems/бф_СтандартныеПодсистемы/Subsystems/КоннекторХТТП/КоннекторХТТП.suppress b/src/cf/src/Subsystems/бф_СтандартныеПодсистемы/Subsystems/КоннекторХТТП/КоннекторХТТП.suppress
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/src/Subsystems/бф_СтандартныеПодсистемы/Subsystems/КоннекторХТТП/КоннекторХТТП.suppress
rename to src/cf/src/Subsystems/бф_СтандартныеПодсистемы/Subsystems/КоннекторХТТП/КоннекторХТТП.suppress
diff --git a/СтандартныеПодсистемыБеллераж/src/Subsystems/бф_СтандартныеПодсистемы/Subsystems/Константы/CommandInterface.cmi b/src/cf/src/Subsystems/бф_СтандартныеПодсистемы/Subsystems/Константы/CommandInterface.cmi
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/src/Subsystems/бф_СтандартныеПодсистемы/Subsystems/Константы/CommandInterface.cmi
rename to src/cf/src/Subsystems/бф_СтандартныеПодсистемы/Subsystems/Константы/CommandInterface.cmi
diff --git a/СтандартныеПодсистемыБеллераж/src/Subsystems/бф_СтандартныеПодсистемы/Subsystems/Константы/Константы.mdo b/src/cf/src/Subsystems/бф_СтандартныеПодсистемы/Subsystems/Константы/Константы.mdo
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/src/Subsystems/бф_СтандартныеПодсистемы/Subsystems/Константы/Константы.mdo
rename to src/cf/src/Subsystems/бф_СтандартныеПодсистемы/Subsystems/Константы/Константы.mdo
diff --git a/СтандартныеПодсистемыБеллераж/src/Subsystems/бф_СтандартныеПодсистемы/Subsystems/МодельЗапроса/МодельЗапроса.mdo b/src/cf/src/Subsystems/бф_СтандартныеПодсистемы/Subsystems/МодельЗапроса/МодельЗапроса.mdo
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/src/Subsystems/бф_СтандартныеПодсистемы/Subsystems/МодельЗапроса/МодельЗапроса.mdo
rename to src/cf/src/Subsystems/бф_СтандартныеПодсистемы/Subsystems/МодельЗапроса/МодельЗапроса.mdo
diff --git a/СтандартныеПодсистемыБеллераж/src/Subsystems/бф_СтандартныеПодсистемы/Subsystems/МодификацияФорм/CommandInterface.cmi b/src/cf/src/Subsystems/бф_СтандартныеПодсистемы/Subsystems/МодификацияФорм/CommandInterface.cmi
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/src/Subsystems/бф_СтандартныеПодсистемы/Subsystems/МодификацияФорм/CommandInterface.cmi
rename to src/cf/src/Subsystems/бф_СтандартныеПодсистемы/Subsystems/МодификацияФорм/CommandInterface.cmi
diff --git a/СтандартныеПодсистемыБеллераж/src/Subsystems/бф_СтандартныеПодсистемы/Subsystems/МодификацияФорм/МодификацияФорм.mdo b/src/cf/src/Subsystems/бф_СтандартныеПодсистемы/Subsystems/МодификацияФорм/МодификацияФорм.mdo
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/src/Subsystems/бф_СтандартныеПодсистемы/Subsystems/МодификацияФорм/МодификацияФорм.mdo
rename to src/cf/src/Subsystems/бф_СтандартныеПодсистемы/Subsystems/МодификацияФорм/МодификацияФорм.mdo
diff --git a/СтандартныеПодсистемыБеллераж/src/Subsystems/бф_СтандартныеПодсистемы/Subsystems/ПроцессорыКоллекций/ПроцессорыКоллекций.mdo b/src/cf/src/Subsystems/бф_СтандартныеПодсистемы/Subsystems/ПроцессорыКоллекций/ПроцессорыКоллекций.mdo
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/src/Subsystems/бф_СтандартныеПодсистемы/Subsystems/ПроцессорыКоллекций/ПроцессорыКоллекций.mdo
rename to src/cf/src/Subsystems/бф_СтандартныеПодсистемы/Subsystems/ПроцессорыКоллекций/ПроцессорыКоллекций.mdo
diff --git a/СтандартныеПодсистемыБеллераж/src/Subsystems/бф_СтандартныеПодсистемы/Subsystems/РегулярныеВыражения/CommandInterface.cmi b/src/cf/src/Subsystems/бф_СтандартныеПодсистемы/Subsystems/РегулярныеВыражения/CommandInterface.cmi
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/src/Subsystems/бф_СтандартныеПодсистемы/Subsystems/РегулярныеВыражения/CommandInterface.cmi
rename to src/cf/src/Subsystems/бф_СтандартныеПодсистемы/Subsystems/РегулярныеВыражения/CommandInterface.cmi
diff --git a/СтандартныеПодсистемыБеллераж/src/Subsystems/бф_СтандартныеПодсистемы/Subsystems/РегулярныеВыражения/РегулярныеВыражения.mdo b/src/cf/src/Subsystems/бф_СтандартныеПодсистемы/Subsystems/РегулярныеВыражения/РегулярныеВыражения.mdo
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/src/Subsystems/бф_СтандартныеПодсистемы/Subsystems/РегулярныеВыражения/РегулярныеВыражения.mdo
rename to src/cf/src/Subsystems/бф_СтандартныеПодсистемы/Subsystems/РегулярныеВыражения/РегулярныеВыражения.mdo
diff --git a/СтандартныеПодсистемыБеллераж/src/Subsystems/бф_СтандартныеПодсистемы/Subsystems/ХТТП/ХТТП.mdo b/src/cf/src/Subsystems/бф_СтандартныеПодсистемы/Subsystems/ХТТП/ХТТП.mdo
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/src/Subsystems/бф_СтандартныеПодсистемы/Subsystems/ХТТП/ХТТП.mdo
rename to src/cf/src/Subsystems/бф_СтандартныеПодсистемы/Subsystems/ХТТП/ХТТП.mdo
diff --git a/СтандартныеПодсистемыБеллераж/src/Subsystems/бф_СтандартныеПодсистемы/бф_СтандартныеПодсистемы.mdo b/src/cf/src/Subsystems/бф_СтандартныеПодсистемы/бф_СтандартныеПодсистемы.mdo
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/src/Subsystems/бф_СтандартныеПодсистемы/бф_СтандартныеПодсистемы.mdo
rename to src/cf/src/Subsystems/бф_СтандартныеПодсистемы/бф_СтандартныеПодсистемы.mdo
diff --git a/СтандартныеПодсистемыБеллераж/src/XDTOPackages/ОбщегоНазначенияХТТП/Package.xdto b/src/cf/src/XDTOPackages/ОбщегоНазначенияХТТП/Package.xdto
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/src/XDTOPackages/ОбщегоНазначенияХТТП/Package.xdto
rename to src/cf/src/XDTOPackages/ОбщегоНазначенияХТТП/Package.xdto
diff --git a/СтандартныеПодсистемыБеллераж/src/XDTOPackages/ОбщегоНазначенияХТТП/ОбщегоНазначенияХТТП.mdo b/src/cf/src/XDTOPackages/ОбщегоНазначенияХТТП/ОбщегоНазначенияХТТП.mdo
similarity index 100%
rename from СтандартныеПодсистемыБеллераж/src/XDTOPackages/ОбщегоНазначенияХТТП/ОбщегоНазначенияХТТП.mdo
rename to src/cf/src/XDTOPackages/ОбщегоНазначенияХТТП/ОбщегоНазначенияХТТП.mdo
diff --git a/src/cfe/yaxunit/.project b/src/cfe/yaxunit/.project
new file mode 100644
index 0000000..a686448
--- /dev/null
+++ b/src/cfe/yaxunit/.project
@@ -0,0 +1,18 @@
+
+
+ yaxunit
+
+
+
+
+
+ org.eclipse.xtext.ui.shared.xtextBuilder
+
+
+
+
+
+ org.eclipse.xtext.ui.shared.xtextNature
+ com._1c.g5.v8.dt.core.V8ExtensionNature
+
+
diff --git a/src/cfe/yaxunit/.settings/Default.cset b/src/cfe/yaxunit/.settings/Default.cset
new file mode 100644
index 0000000..e17003c
--- /dev/null
+++ b/src/cfe/yaxunit/.settings/Default.cset
@@ -0,0 +1,8 @@
+{
+ "version": 1,
+ "settings": {
+ "common-module-type": {
+ "enabled": false
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/cfe/yaxunit/.settings/ManagedEnvironments.prefs b/src/cfe/yaxunit/.settings/ManagedEnvironments.prefs
new file mode 100644
index 0000000..5bcbfaa
--- /dev/null
+++ b/src/cfe/yaxunit/.settings/ManagedEnvironments.prefs
@@ -0,0 +1,11 @@
+CLIENT=false
+EXTERNAL_CONN=false
+MNG_CLIENT=true
+MOBILE_AUTONOMOUS_SERVER=false
+MOBILE_CLIENT=false
+MOBILE_SERVER=false
+MOBILE_THIN_CLIENT=false
+SERVER=true
+THIN_CLIENT=true
+WEB_CLIENT=true
+eclipse.preferences.version=1
diff --git a/src/cfe/yaxunit/.settings/com.e1c.g5.v8.dt.formatter.bsl.prefs b/src/cfe/yaxunit/.settings/com.e1c.g5.v8.dt.formatter.bsl.prefs
new file mode 100644
index 0000000..b50f7cd
--- /dev/null
+++ b/src/cfe/yaxunit/.settings/com.e1c.g5.v8.dt.formatter.bsl.prefs
@@ -0,0 +1,17 @@
+alwaysEndWithSemicolon=true
+autowrapBinary=indent_on_wrap
+autowrapInvocation=alignment_on_wrap
+autowrapMethodParameters=alignment_on_wrap
+creatorEmptyBrackets=never brackets
+defaultValuesInitialized=true
+eclipse.preferences.version=1
+formattingOn=true
+indentMethodInternal=true
+invocationEmptyParamsDelimited=true
+keywordStandard=CamelCase
+noindent_preprocessor=true
+projectSpecificSettingsInited=true
+showWhitespaceCharacters=true
+softFormatassignmentStatement=true
+spacesForTabs=false
+whitespaceMethodParamsDelimited=true
diff --git a/src/cfe/yaxunit/.settings/com.e1c.g5.v8.dt.lcore.ui.templates.prefs b/src/cfe/yaxunit/.settings/com.e1c.g5.v8.dt.lcore.ui.templates.prefs
new file mode 100644
index 0000000..81d79eb
--- /dev/null
+++ b/src/cfe/yaxunit/.settings/com.e1c.g5.v8.dt.lcore.ui.templates.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+yaxunit={"templates"\:[]}
diff --git a/src/cfe/yaxunit/.settings/com.e1c.v8codestyle.autosort.prefs b/src/cfe/yaxunit/.settings/com.e1c.v8codestyle.autosort.prefs
new file mode 100644
index 0000000..37dbed4
--- /dev/null
+++ b/src/cfe/yaxunit/.settings/com.e1c.v8codestyle.autosort.prefs
@@ -0,0 +1,9 @@
+eclipse.preferences.version=1
+subordinate/commands=true
+subordinate/forms=true
+subordinate/methods=true
+subordinate/operations=true
+subordinate/tabularSections=true
+subordinate/templates=true
+subordinate/urlTemplates=true
+topObjects=true
diff --git a/src/cfe/yaxunit/.settings/com.e1c.v8codestyle.bsl.prefs b/src/cfe/yaxunit/.settings/com.e1c.v8codestyle.bsl.prefs
new file mode 100644
index 0000000..c634a6b
--- /dev/null
+++ b/src/cfe/yaxunit/.settings/com.e1c.v8codestyle.bsl.prefs
@@ -0,0 +1,3 @@
+addModuleStrictTypesAnnotation=true
+createModuleStructure=true
+eclipse.preferences.version=1
diff --git a/src/cfe/yaxunit/.settings/com.e1c.v8codestyle.prefs b/src/cfe/yaxunit/.settings/com.e1c.v8codestyle.prefs
new file mode 100644
index 0000000..9e9b57e
--- /dev/null
+++ b/src/cfe/yaxunit/.settings/com.e1c.v8codestyle.prefs
@@ -0,0 +1,3 @@
+commonChecks=true
+eclipse.preferences.version=1
+standardChecks=true
diff --git a/src/cfe/yaxunit/.settings/org.eclipse.core.resources.prefs b/src/cfe/yaxunit/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/src/cfe/yaxunit/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/=UTF-8
diff --git a/src/cfe/yaxunit/.settings/templates/common_module.bsl b/src/cfe/yaxunit/.settings/templates/common_module.bsl
new file mode 100644
index 0000000..bcd4e60
--- /dev/null
+++ b/src/cfe/yaxunit/.settings/templates/common_module.bsl
@@ -0,0 +1,62 @@
+//©///////////////////////////////////////////////////////////////////////////©//
+//
+// Copyright 2021-2022 BIA-Technologies Limited Liability Company
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//©///////////////////////////////////////////////////////////////////////////©//
+
+/////////////////////////////////////////////////////////////////////////////////
+// Экспортные процедуры и функции, предназначенные для использования другими
+// объектами конфигурации или другими программами
+/////////////////////////////////////////////////////////////////////////////////
+#Область СлужебныйПрограммныйИнтерфейс
+
+Процедура ИсполняемыеСценарии() Экспорт
+
+ ЮТТесты
+ .ДобавитьТест("ТестовыйМетод")
+ .ДобавитьТест("ТестовыйМетод").СПараметрами(1, 2, 3);
+ ;
+
+КонецПроцедуры
+
+#Область События
+
+Процедура ПередВсемиТестами() Экспорт
+
+КонецПроцедуры
+
+Процедура ПередКаждымТестом() Экспорт
+
+КонецПроцедуры
+
+Процедура ПослеКаждогоТеста() Экспорт
+
+КонецПроцедуры
+
+Процедура ПослеВсехТестов() Экспорт
+
+КонецПроцедуры
+
+#КонецОбласти
+
+Процедура ТестовыйМетод() Экспорт
+
+КонецПроцедуры
+
+#КонецОбласти
+
+#Область СлужебныеПроцедурыИФункции
+
+#КонецОбласти
diff --git a/src/cfe/yaxunit/DT-INF/PROJECT.PMF b/src/cfe/yaxunit/DT-INF/PROJECT.PMF
new file mode 100644
index 0000000..4f8152e
--- /dev/null
+++ b/src/cfe/yaxunit/DT-INF/PROJECT.PMF
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+Runtime-Version: 8.3.10
+Base-Project: СтандартныеПодсистемыБеллераж
diff --git a/src/cfe/yaxunit/src/CommonModules/Мокито/Module.bsl b/src/cfe/yaxunit/src/CommonModules/Мокито/Module.bsl
new file mode 100644
index 0000000..c8ffb84
--- /dev/null
+++ b/src/cfe/yaxunit/src/CommonModules/Мокито/Module.bsl
@@ -0,0 +1,181 @@
+//©///////////////////////////////////////////////////////////////////////////©//
+//
+// Copyright 2021-2022 BIA-Technologies Limited Liability Company
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//©///////////////////////////////////////////////////////////////////////////©//
+
+///////////////////////////////////////////////////////////////////
+// ПрограммныйИнтерфейс
+// Экспортные процедуры и функции для прикладного использования
+///////////////////////////////////////////////////////////////////
+#Область ПрограммныйИнтерфейс
+
+// Обучение.
+// Начинает обучение мокито для регистрации правил подмены вызовов методов
+//
+// Параметры:
+// Объект - Произвольный - Объект, методы которого хотим подменить
+//
+// Возвращаемое значение:
+// ОбщийМодуль
+// Пример:
+// Для работы Мокито необходимо добавить обрабатываемые методы в расширение по следующей схеме
+//
+// &Вместо("ВыполнитьЗапрос")
+// Функция ЮТВыполнитьЗапрос(ПараметрыПодключения, Ресурс, HTTPМетод, Параметры, ОписаниеТела, Заголовки) Экспорт
+//
+// ПараметрыМетода = Мокито.МассивПараметров(ПараметрыПодключения, Ресурс, HTTPМетод, Параметры, ОписаниеТела, Заголовки);
+//
+// ПрерватьВыполнение = Ложь;
+// Результат = Мокито.АнализВызова(РаботаСHTTP, "ВыполнитьЗапрос", ПараметрыМетода, ПрерватьВыполнение);
+//
+// Если НЕ ПрерватьВыполнение Тогда
+// Возврат ПродолжитьВызов(ПараметрыПодключения, Ресурс, HTTPМетод, Параметры, ОписаниеТела, Заголовки);
+// Иначе
+// Возврат Результат;
+// КонецЕсли;
+//
+// КонецФункции
+Функция Обучение(Объект) Экспорт
+
+ Режимы = МокитоСлужебный.РежимыРаботы();
+ МокитоСлужебный.УстановитьРежим(Режимы.Обучение);
+
+ Возврат МокитоОбучение.Обучение(Объект);
+
+КонецФункции
+
+// Прогон
+// Переводит мокито в режим прогона тестов
+// Вызов этого метода обязателен перед выполнением тестового прогона метода
+Процедура Прогон() Экспорт
+
+ Режимы = МокитоСлужебный.РежимыРаботы();
+ МокитоСлужебный.УстановитьРежим(Режимы.Тестирование);
+
+КонецПроцедуры
+
+// Проверить.
+// Переводит мокито в режим проверки вызовов
+// Параметры:
+// Объект - Произвольный - Устанавливает проверяемый объект, вызовы методов которого будем проверять
+//
+// Возвращаемое значение:
+// ОбщийМодуль
+Функция Проверить(Объект) Экспорт
+
+ Режимы = МокитоСлужебный.РежимыРаботы();
+ МокитоСлужебный.УстановитьРежим(Режимы.Проверка);
+
+ Возврат МокитоПроверки.Проверить(Объект);
+
+КонецФункции
+
+// Сбросить
+// Сбрасывает настройки, переинициализирует мокито
+Процедура Сбросить() Экспорт
+
+ МокитоСлужебный.СброситьПараметры();
+
+КонецПроцедуры
+
+#Область КонструкторыПараметров
+
+// Любой параметр.
+// Возвращает маску параметра. Используется при обучении и проверках для фильтрации входных параметров метода
+// Указывает, что в метод может передаваться любой параметр
+// Возвращаемое значение:
+// см. МокитоСлужебный.ОписаниеМаскиПараметра
+Функция ЛюбойПараметр() Экспорт
+
+ МаскаПараметра = МокитоСлужебный.ОписаниеМаскиПараметра(МокитоСлужебный.ТипыУсловийПараметров().Любой, 0);
+
+ Возврат МаскаПараметра;
+
+КонецФункции
+
+// Числовой параметр.
+// Возвращает маску параметра. Используется при обучении и проверках для фильтрации входных параметров метода
+// Указывает, что в метод может передаваться числовой параметр
+// Возвращаемое значение:
+// см. Мокито.ТипизированныйПараметр
+Функция ЧисловойПараметр() Экспорт
+
+ Возврат ТипизированныйПараметр(Тип("Число"));
+
+КонецФункции
+
+// Строковый параметр.
+// Возвращает маску параметра. Используется при обучении и проверках для фильтрации входных параметров метода
+// Указывает, что в метод может передаваться строковый параметр
+// Возвращаемое значение:
+// см. Мокито.ТипизированныйПараметр
+Функция СтроковыйПараметр() Экспорт
+
+ Возврат ТипизированныйПараметр(Тип("Строка"));
+
+КонецФункции
+
+// Типизированный параметр.
+// Возвращает маску параметра. Используется при обучении и проверках для фильтрации входных параметров метода
+// Указывает, что в метод может передаваться параметр указанного типа
+//
+// Параметры:
+// Тип - Тип - Ограничение типа параметра
+//
+// Возвращаемое значение:
+// см. МокитоСлужебный.ОписаниеМаскиПараметра
+Функция ТипизированныйПараметр(Тип) Экспорт
+
+ МаскаПараметра = МокитоСлужебный.ОписаниеМаскиПараметра(МокитоСлужебный.ТипыУсловийПараметров().Тип, 1);
+ МаскаПараметра.Вставить("Тип", Тип);
+
+ Возврат МаскаПараметра;
+
+КонецФункции
+
+Функция МассивПараметров(Параметр1 = "_!%*",
+ Параметр2 = "_!%*",
+ Параметр3 = "_!%*",
+ Параметр4 = "_!%*",
+ Параметр5 = "_!%*",
+ Параметр6 = "_!%*",
+ Параметр7 = "_!%*",
+ Параметр8 = "_!%*",
+ Параметр9 = "_!%*",
+ Параметр10 = "_!%*") Экспорт
+
+ Возврат ЮТОбщий.ЗначениеВМассиве(Параметр1,
+ Параметр2,
+ Параметр3,
+ Параметр4,
+ Параметр5,
+ Параметр6,
+ Параметр7,
+ Параметр8,
+ Параметр9,
+ Параметр10);
+
+КонецФункции
+
+#КонецОбласти
+
+Функция АнализВызова(Объект, ИмяМетода, ПараметрыМетода, ПрерватьВыполнение) Экспорт
+
+ Возврат МокитоСлужебный.АнализВызова(Объект, ИмяМетода, ПараметрыМетода, ПрерватьВыполнение);
+
+КонецФункции
+
+#КонецОбласти
diff --git a/src/cfe/yaxunit/src/CommonModules/Мокито/Мокито.mdo b/src/cfe/yaxunit/src/CommonModules/Мокито/Мокито.mdo
new file mode 100644
index 0000000..96b905d
--- /dev/null
+++ b/src/cfe/yaxunit/src/CommonModules/Мокито/Мокито.mdo
@@ -0,0 +1,11 @@
+
+
+ Мокито
+
+ ru
+ Мокито
+
+ true
+ true
+ true
+
diff --git a/src/cfe/yaxunit/src/CommonModules/МокитоОбучение/Module.bsl b/src/cfe/yaxunit/src/CommonModules/МокитоОбучение/Module.bsl
new file mode 100644
index 0000000..9f46021
--- /dev/null
+++ b/src/cfe/yaxunit/src/CommonModules/МокитоОбучение/Module.bsl
@@ -0,0 +1,276 @@
+//©///////////////////////////////////////////////////////////////////////////©//
+//
+// Copyright 2021-2022 BIA-Technologies Limited Liability Company
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//©///////////////////////////////////////////////////////////////////////////©//
+
+///////////////////////////////////////////////////////////////////
+// ПрограммныйИнтерфейс
+// Экспортные процедуры и функции для прикладного использования
+///////////////////////////////////////////////////////////////////
+#Область ПрограммныйИнтерфейс
+
+// Обучение.
+// Начинает обучение мокито для регистрации правил подмены вызовов методов
+//
+// Параметры:
+// Объект - Произвольный - Объект, методы которого хотим подменить
+//
+// Возвращаемое значение:
+// ОбщийМодуль
+Функция Обучение(Объект) Экспорт
+
+ УстановитьПараметрыОбучения(Объект);
+
+ Возврат МокитоОбучение;
+
+КонецФункции
+
+// Наблюдать.
+//
+// Параметры:
+// ИмяМетода - Строка - Имя метода обучаемого объекта
+// - Произвольный - Вызов метода обучаемого объекта
+// ПараметрыВызова - Массив из Произвольный - Параметры вызова метода обучаемого объекта
+// Варианты вызова:
+// Мокито.Обучение(Произвольный).Когда(Строка, Массив); // Вызов через указание имени метода и параметров
+// Мокито.Обучение(Произвольный).Когда(Произвольный); // Вызов через явное выполнение наблюдаемого метода
+//
+// Возвращаемое значение:
+// ОбщийМодуль
+// Пример:
+// Мокито.Обучение(ОбщегоНазначения).Наблюдать("ЭтоДопустимоеИмяПеременной", Мокито.МассивПараметров(""));
+// Мокито.Обучение(ОбщегоНазначения).Наблюдать(ОбщегоНазначения.ЭтоДопустимоеИмяПеременной(""));
+Функция Наблюдать(ИмяМетода, ПараметрыВызова = Неопределено) Экспорт
+
+ ЗарегистрироватьПерехватВыражения(ИмяМетода, ПараметрыВызова);
+
+ Возврат МокитоОбучение;
+
+КонецФункции
+
+// Когда.
+//
+// Параметры:
+// ИмяМетода - Строка - Имя метода обучаемого объекта
+// - Произвольный - Вызов метода обучаемого объекта
+// ПараметрыВызова - Массив из Произвольный - Параметры вызова метода обучаемого объекта
+// Варианты вызова:
+// Мокито.Обучение(Произвольный).Когда(Строка, Массив); // Вызов через указание имени метода и параметров
+// Мокито.Обучение(Произвольный).Когда(Произвольный); // Вызов через явное выполнение наблюдаемого метода
+//
+// Возвращаемое значение:
+// ОбщийМодуль
+// Пример:
+// Мокито.Обучение(ОбщегоНазначения).Когда("ЭтоДопустимоеИмяПеременной", Мокито.МассивПараметров(""));
+// Мокито.Обучение(ОбщегоНазначения).Когда(ОбщегоНазначения.ЭтоДопустимоеИмяПеременной(""));
+Функция Когда(ИмяМетода, ПараметрыВызова = Неопределено) Экспорт
+
+ Возврат Наблюдать(ИмяМетода, ПараметрыВызова);
+
+КонецФункции
+
+// Вернуть.
+// Указывает, что при соблюдении условий метод должен вернуть переданное значение
+// Параметры:
+// Результат - Произвольный - Результат, который должен вернуть метод
+//
+// Возвращаемое значение:
+// ОбщийМодуль
+Функция Вернуть(Результат) Экспорт
+
+ ЗарегистрироватьРеакцию(Новый Структура("ТипДействия, Результат", МокитоСлужебный.ТипыДействийРеакций().ВернутьРезультат, Результат));
+
+ Возврат МокитоОбучение;
+
+КонецФункции
+
+// Выбросить исключение.
+// Указывает, что при соблюдении условий метод должен выбросить исключение
+//
+// Параметры:
+// ТекстИсключения - Строка
+//
+// Возвращаемое значение:
+// ОбщийМодуль
+Функция ВыброситьИсключение(ТекстИсключения) Экспорт
+
+ ЗарегистрироватьРеакцию(Новый Структура("ТипДействия, Ошибка", МокитоСлужебный.ТипыДействийРеакций().ВыброситьИсключение, ТекстИсключения));
+
+ Возврат МокитоОбучение;
+
+КонецФункции
+
+// Пропустить.
+// Указывает, что при соблюдении условий метод не должен выполняться, его вызов пропускается
+//
+// Возвращаемое значение:
+// ОбщийМодуль
+Функция Пропустить() Экспорт
+
+ ЗарегистрироватьРеакцию(Новый Структура("ТипДействия", МокитоСлужебный.ТипыДействийРеакций().Пропустить));
+
+ Возврат МокитоОбучение;
+
+КонецФункции
+
+// Выполнить метод.
+// Указывает, что при соблюдении условий метод должен выполняться
+//
+// Возвращаемое значение:
+// ОбщийМодуль
+Функция ВыполнитьМетод() Экспорт
+
+ ЗарегистрироватьРеакцию(Новый Структура("ТипДействия", МокитоСлужебный.ТипыДействийРеакций().ВызватьОсновнойМетод));
+
+ Возврат МокитоОбучение;
+
+КонецФункции
+
+// Прогон
+// Переводит мокито в режим прогона тестов
+// Вызов этого метода обязателен перед выполнением тестового прогона метода
+Процедура Прогон() Экспорт
+
+ Мокито.Прогон();
+
+КонецПроцедуры
+
+#КонецОбласти
+
+/////////////////////////////////////////////////////////////////////////////////
+// Экспортные процедуры и функции для служебного использования внутри подсистемы
+/////////////////////////////////////////////////////////////////////////////////
+#Область СлужебныйПрограммныйИнтерфейс
+
+#КонецОбласти
+
+/////////////////////////////////////////////////////////////////////////////////
+// Процедуры и функции, составляющие внутреннюю реализацию модуля
+/////////////////////////////////////////////////////////////////////////////////
+#Область СлужебныеПроцедурыИФункции
+
+Процедура ЗарегистрироватьПерехватВыражения(ИмяМетода, ПараметрыВызова)
+
+ Объект = ОбучаемыйОбъект();
+ ДанныеПерехвата = МокитоСлужебный.ДанныеПерехвата(Объект);
+
+ Если ДанныеПерехвата = Неопределено Тогда
+ Сообщение = СтрШаблон("Не найдены настройки перехвата для %1. Необходимо предварительно вызвать метод Мокито.Обучение(Объект)", Объект);
+ ВызватьИсключение Сообщение;
+ КонецЕсли;
+
+ Если МокитоСлужебный.ЭтоСтруктураВызоваМетода(ИмяМетода) Тогда
+ СтруктураВызоваМетода = ИмяМетода;
+ Иначе
+ СтруктураВызоваМетода = МокитоСлужебный.СтруктураВызоваМетода(Объект, ИмяМетода, ПараметрыВызова);
+ КонецЕсли;
+
+ Методы = ДанныеПерехвата.Методы;
+
+ Если НЕ Методы.Свойство(СтруктураВызоваМетода.ИмяМетода) Тогда
+ Методы.Вставить(СтруктураВызоваМетода.ИмяМетода, ОписаниеПараметровПерехватаМетода());
+ КонецЕсли;
+
+ Реакция = СоздатьОписаниеУсловнойРеакции(СтруктураВызоваМетода);
+
+ Методы[СтруктураВызоваМетода.ИмяМетода].Реакции.Добавить(Реакция);
+
+ ПараметрыОбучения().РеакцияТекущегоВыражения = Реакция;
+
+КонецПроцедуры
+
+Функция ОписаниеПараметровПерехватаМетода()
+
+ Возврат Новый Структура("Реакции", Новый Массив);
+
+КонецФункции
+
+#Область Реакции
+
+Функция СоздатьОписаниеУсловнойРеакции(СтруктураВызоваМетода)
+
+ Возврат Новый Структура("УсловиеРеакции, Действие", УсловиеРеакции(СтруктураВызоваМетода), Неопределено);
+
+КонецФункции
+
+Функция УсловиеРеакции(СтруктураВызоваМетода)
+
+ Параметры = СтруктураВызоваМетода.Параметры;
+
+ Если Параметры = Неопределено Тогда
+ Возврат Неопределено;
+ КонецЕсли;
+
+ Условия = Новый Массив;
+
+ Для Каждого Параметр Из Параметры Цикл
+
+ Если МокитоСлужебный.ЭтоМаскаПарамера(Параметр) Тогда
+
+ Условия.Добавить(Параметр);
+
+ Иначе
+
+ Условия.Добавить(Новый Структура("Режим, Значение, Приоритет", "Значение", Параметр, 10));
+
+ КонецЕсли;
+
+ КонецЦикла;
+
+ Возврат Условия;
+
+КонецФункции
+
+#КонецОбласти
+
+#Область Параметры
+
+Функция ОбучаемыйОбъект()
+
+ ПараметрыОбучения = ПараметрыОбучения();
+
+ Возврат ПараметрыОбучения.ОбучаемыйОбъект;
+
+КонецФункции
+
+Функция ПараметрыОбучения()
+
+ Параметры = МокитоСлужебный.Настройки().ПараметрыОбучения;
+
+ Возврат Параметры;
+
+КонецФункции
+
+Процедура УстановитьПараметрыОбучения(Объект)
+
+ ПараметрыОбучения = Новый Структура("ОбучаемыйОбъект, РеакцияТекущегоВыражения", Объект, Неопределено);
+
+ МокитоСлужебный.Настройки().ПараметрыОбучения = ПараметрыОбучения;
+ МокитоСлужебный.ЗарегистрироватьПерехватОбъекта(Объект);
+
+КонецПроцедуры
+
+Процедура ЗарегистрироватьРеакцию(Действие)
+
+ Действие.Вставить("Обработано", Ложь);
+
+ ПараметрыОбучения().РеакцияТекущегоВыражения.Действие = Действие;
+
+КонецПроцедуры
+
+#КонецОбласти
+
+#КонецОбласти
diff --git a/src/cfe/yaxunit/src/CommonModules/МокитоОбучение/МокитоОбучение.mdo b/src/cfe/yaxunit/src/CommonModules/МокитоОбучение/МокитоОбучение.mdo
new file mode 100644
index 0000000..bbbbe02
--- /dev/null
+++ b/src/cfe/yaxunit/src/CommonModules/МокитоОбучение/МокитоОбучение.mdo
@@ -0,0 +1,11 @@
+
+
+ МокитоОбучение
+
+ ru
+ Мокито обучение
+
+ true
+ true
+ true
+
diff --git a/src/cfe/yaxunit/src/CommonModules/МокитоПроверки/Module.bsl b/src/cfe/yaxunit/src/CommonModules/МокитоПроверки/Module.bsl
new file mode 100644
index 0000000..1b80928
--- /dev/null
+++ b/src/cfe/yaxunit/src/CommonModules/МокитоПроверки/Module.bsl
@@ -0,0 +1,272 @@
+//©///////////////////////////////////////////////////////////////////////////©//
+//
+// Copyright 2021-2022 BIA-Technologies Limited Liability Company
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//©///////////////////////////////////////////////////////////////////////////©//
+
+///////////////////////////////////////////////////////////////////
+// ПрограммныйИнтерфейс
+// Экспортные процедуры и функции для прикладного использования
+///////////////////////////////////////////////////////////////////
+#Область ПрограммныйИнтерфейс
+
+// Проверить.
+// Переводит мокито в режим проверки вызовов
+// Параметры:
+// Объект - Произвольный - Устанавливает проверяемый объект, вызовы методов которого будем проверять
+//
+// Возвращаемое значение:
+// ОбщийМодуль
+Функция Проверить(Объект) Экспорт
+
+ УстановитьПараметрыПроверки(Объект);
+ Возврат МокитоПроверки;
+
+КонецФункции
+
+// Количество вызовов.
+// Считает вызовы метода по переданным параметрам
+// Параметры:
+// ИмяМетода - Строка - Имя метода проверяемого объекта
+// - Произвольный - Вызов метода проверяемого объекта
+// ПараметрыВызова - Массив из Произвольный - Параметры вызова метода проверяемого объекта, необходим при указании имени метода
+// Возвращаемое значение:
+// ОбщийМодуль
+Функция КоличествоВызовов(ИмяМетода = Неопределено, ПараметрыВызова = Неопределено) Экспорт
+
+ Параметры = ПараметрыПроверки();
+
+ Если МокитоСлужебный.ЭтоСтруктураВызоваМетода(ИмяМетода) Тогда
+ СтруктураВызоваМетода = ИмяМетода;
+ Иначе
+ СтруктураВызоваМетода = МокитоСлужебный.СтруктураВызоваМетода(Параметры.ПроверяемыйОбъект, ИмяМетода, ПараметрыВызова);
+ КонецЕсли;
+
+ Если СтруктураВызоваМетода.Объект <> Параметры.ПроверяемыйОбъект Тогда
+ ВызватьИсключение "Установлен другой проверяемый объект";
+ КонецЕсли;
+
+ Параметры.СтруктураВызоваМетода = СтруктураВызоваМетода;
+
+ Возврат МокитоПроверки;
+
+КонецФункции
+
+// Равно.
+// Проверяет подобранные вызовы. Их количество должно быть равно переданному значение, иначе вызывается исключение
+// Параметры:
+// Количество - Число - Ожидаемое количество вызовов
+// Описание - Строка - Описание проверки, необходимо для идентификации упавшей проверки
+//
+// Возвращаемое значение:
+// ОбщийМодуль
+Функция Равно(Количество, Знач Описание = Неопределено) Экспорт
+
+ Статистика = СтатистикаВызовов();
+ ЮТУтверждения
+ .Что(Статистика, Описание)
+ .ИмеющееПредставление(ОписаниеПроверяемогоОбъекта())
+ .ИмеетДлину(Количество);
+
+ Возврат МокитоПроверки;
+
+КонецФункции
+
+// Больше.
+// Проверяет подобранные вызовы. Их количество должно быть больше переданного значения, иначе вызывается исключение
+// Параметры:
+// Количество - Число
+// Описание - Строка - Описание проверки, необходимо для идентификации упавшей проверки
+//
+// Возвращаемое значение:
+// ОбщийМодуль
+Функция Больше(Количество, Знач Описание = Неопределено) Экспорт
+
+ Статистика = СтатистикаВызовов();
+ ЮТУтверждения
+ .Что(Статистика, Описание)
+ .ИмеющееПредставление(ОписаниеПроверяемогоОбъекта())
+ .ИмеетДлинуБольше(Количество);
+
+ Возврат МокитоПроверки;
+
+КонецФункции
+
+// Меньше.
+// Проверяет подобранные вызовы. Их количество должно быть меньше переданного значения, иначе вызывается исключение
+// Параметры:
+// Количество - Число
+// Описание - Строка - Описание проверки, необходимо для идентификации упавшей проверки
+//
+// Возвращаемое значение:
+// ОбщийМодуль
+Функция Меньше(Количество, Знач Описание = Неопределено) Экспорт
+
+ Статистика = СтатистикаВызовов();
+ ЮТУтверждения
+ .Что(Статистика, Описание)
+ .ИмеющееПредставление(ОписаниеПроверяемогоОбъекта())
+ .ИмеетДлинуМеньше(Количество);
+
+ Возврат МокитоПроверки;
+
+КонецФункции
+
+// Заполнено.
+// Проверяет, что есть вызовы метода, соответствующие условию
+// Параметры:
+// Описание - Строка - Описание проверки, необходимо для идентификации упавшей проверки
+//
+// Возвращаемое значение:
+// ОбщийМодуль
+Функция Заполнено(Знач Описание = Неопределено) Экспорт
+
+ Статистика = СтатистикаВызовов(Истина);
+ ЮТУтверждения
+ .Что(Статистика, Описание)
+ .ИмеющееПредставление(ОписаниеПроверяемогоОбъекта())
+ .Заполнено();
+
+ Возврат МокитоПроверки;
+
+КонецФункции
+
+// Пусто.
+// Проверяет, что нет вызовов метода, соответствующих условию
+// Параметры:
+// Описание - Строка - Описание проверки, необходимо для идентификации упавшей проверки
+//
+// Возвращаемое значение:
+// ОбщийМодуль
+Функция Пусто(Знач Описание = Неопределено) Экспорт
+
+ Статистика = СтатистикаВызовов(Истина);
+ ЮТУтверждения
+ .Что(Статистика, Описание)
+ .ИмеющееПредставление(ОписаниеПроверяемогоОбъекта())
+ .НеЗаполнено();
+
+ Возврат МокитоПроверки;
+
+КонецФункции
+
+#КонецОбласти
+
+/////////////////////////////////////////////////////////////////////////////////
+// Экспортные процедуры и функции для служебного использования внутри подсистемы
+/////////////////////////////////////////////////////////////////////////////////
+#Область СлужебныйПрограммныйИнтерфейс
+
+#КонецОбласти
+
+/////////////////////////////////////////////////////////////////////////////////
+// Процедуры и функции, составляющие внутреннюю реализацию модуля
+/////////////////////////////////////////////////////////////////////////////////
+#Область СлужебныеПроцедурыИФункции
+
+#Область Параметры
+
+// Параметры проверки.
+//
+// Возвращаемое значение:
+// Структура:
+// * ПроверяемыйОбъект - Произвольный
+// * СтруктураВызоваМетода - см. МокитоСлужебный.СтруктураВызоваМетода
+Функция ПараметрыПроверки()
+
+ Параметры = МокитоСлужебный.Настройки().ПараметрыПроверки;
+
+ Возврат Параметры;
+
+КонецФункции
+
+Процедура УстановитьПараметрыПроверки(Объект = Неопределено, СтруктураВызоваМетода = Неопределено)
+
+ ПараметрыОбучения = Новый Структура("ПроверяемыйОбъект, СтруктураВызоваМетода", Объект, СтруктураВызоваМетода);
+
+ МокитоСлужебный.Настройки().ПараметрыПроверки = ПараметрыОбучения;
+
+КонецПроцедуры
+
+#КонецОбласти
+
+Функция СтатистикаВызовов(Первый = Ложь)
+
+ Параметры = ПараметрыПроверки();
+ СтруктураВызоваМетода = Параметры.СтруктураВызоваМетода;
+
+ ВызовыМетода = МокитоСлужебный.СтатистикаВызовов(СтруктураВызоваМетода.Объект, СтруктураВызоваМетода.ИмяМетода);
+
+ Если ВызовыМетода = Неопределено Тогда
+ Возврат Новый Массив();
+ КонецЕсли;
+
+ Если ЗначениеЗаполнено(СтруктураВызоваМетода.Параметры) Тогда
+
+ Результат = Новый Массив();
+
+ Для Каждого ВызовМетода Из ВызовыМетода Цикл
+
+ Если ВызовМетода.Параметры.Количество() < СтруктураВызоваМетода.Параметры.Количество() Тогда
+ ВызватьИсключение "Сигнатура метода содержит меньше параметров";
+ КонецЕсли;
+
+ КоличествоПараметров = СтруктураВызоваМетода.Параметры.Количество();
+ Успешно = Истина;
+
+ Для Инд = 0 По КоличествоПараметров - 1 Цикл
+
+ Параметр = ВызовМетода.Параметры[Инд];
+ Условие = СтруктураВызоваМетода.Параметры[Инд];
+
+ Если МокитоСлужебный.ЭтоМаскаПарамера(Условие) Тогда
+ Успешно = МокитоСлужебный.ПроверитьПараметр(Параметр, Условие);
+ Иначе
+ Успешно = Параметр = Условие;
+ КонецЕсли;
+
+ Если НЕ Успешно Тогда
+ Прервать;
+ КонецЕсли;
+
+ КонецЦикла;
+
+ Если Успешно Тогда
+ Результат.Добавить(ВызовМетода);
+ Если Первый Тогда
+ Прервать;
+ КонецЕсли;
+ КонецЕсли;
+
+ КонецЦикла;
+
+ ВызовыМетода = Результат;
+
+ КонецЕсли;
+
+ Возврат ВызовыМетода;
+
+КонецФункции
+
+Функция ОписаниеПроверяемогоОбъекта()
+
+ СтруктураВызоваМетода = ПараметрыПроверки().СтруктураВызоваМетода;
+ Объект = СтруктураВызоваМетода.Объект;
+ ПредставлениеТипа = ЮТОбщий.ПредставлениеТипа(ТипЗнч(Объект));
+ Возврат СтрШаблон(" - вызовы метода `%1(%2).%3`,", Объект, ПредставлениеТипа, СтруктураВызоваМетода.ИмяМетода);
+
+КонецФункции
+
+#КонецОбласти
diff --git a/src/cfe/yaxunit/src/CommonModules/МокитоПроверки/МокитоПроверки.mdo b/src/cfe/yaxunit/src/CommonModules/МокитоПроверки/МокитоПроверки.mdo
new file mode 100644
index 0000000..cbc12b5
--- /dev/null
+++ b/src/cfe/yaxunit/src/CommonModules/МокитоПроверки/МокитоПроверки.mdo
@@ -0,0 +1,11 @@
+
+
+ МокитоПроверки
+
+ ru
+ Мокито проверки
+
+ true
+ true
+ true
+
diff --git a/src/cfe/yaxunit/src/CommonModules/МокитоСлужебный/Module.bsl b/src/cfe/yaxunit/src/CommonModules/МокитоСлужебный/Module.bsl
new file mode 100644
index 0000000..0f2c290
--- /dev/null
+++ b/src/cfe/yaxunit/src/CommonModules/МокитоСлужебный/Module.bsl
@@ -0,0 +1,512 @@
+//©///////////////////////////////////////////////////////////////////////////©//
+//
+// Copyright 2021-2022 BIA-Technologies Limited Liability Company
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+//©///////////////////////////////////////////////////////////////////////////©//
+
+/////////////////////////////////////////////////////////////////////////////////
+// Экспортные процедуры и функции для служебного использования внутри подсистемы
+/////////////////////////////////////////////////////////////////////////////////
+#Область СлужебныйПрограммныйИнтерфейс
+
+Функция Включен() Экспорт
+
+ Возврат ЮТКонтекст.ДанныеКонтекста() <> Неопределено;
+
+КонецФункции
+
+Процедура УстановитьРежим(Режим) Экспорт
+
+ Контекст = Настройки();
+ Контекст.Режим = Режим;
+ ОчиститьСлужебныеПараметры();
+
+КонецПроцедуры
+
+Функция Настройки() Экспорт
+
+ Настройки = ЮТКонтекст.ЗначениеКонтекста(КлючНастроек());
+
+ Если Настройки = Неопределено Тогда
+ ВызватьИсключение "Что-то пошло не так, настройки Мокито не инициализированы";
+ КонецЕсли;
+
+ Возврат Настройки;
+
+КонецФункции
+
+#Область СтруктурыДанных
+
+Функция РежимыРаботы() Экспорт
+
+ Режимы = Новый Структура();
+ Режимы.Вставить("Обучение", "Обучение");
+ Режимы.Вставить("Тестирование", "Тестирование");
+ Режимы.Вставить("Проверка", "Проверка");
+
+ Возврат Новый ФиксированнаяСтруктура(Режимы);
+
+КонецФункции
+
+Функция ТипыДействийРеакций() Экспорт
+
+ ТипыРеакций = Новый Структура();
+ ТипыРеакций.Вставить("ВернутьРезультат", "ВернутьРезультат");
+ ТипыРеакций.Вставить("ВыброситьИсключение", "ВыброситьИсключение");
+ ТипыРеакций.Вставить("Пропустить", "Пропустить");
+ ТипыРеакций.Вставить("ВызватьОсновнойМетод", "ВызватьОсновнойМетод");
+
+ Возврат Новый ФиксированнаяСтруктура(ТипыРеакций);
+
+КонецФункции
+
+#КонецОбласти
+
+Функция АнализВызова(Объект, ИмяМетода, ПараметрыМетода, ПрерватьВыполнение) Экспорт
+
+ ПрерватьВыполнение = Ложь;
+
+ Если НЕ Включен() Тогда
+ Возврат Неопределено;
+ КонецЕсли;
+
+ Настройки = Настройки();
+
+ ПараметрыПерехвата = ДанныеПерехвата(Объект);
+
+ Если ПараметрыПерехвата = Неопределено Тогда
+ Возврат Неопределено;
+ КонецЕсли;
+
+ РежимыРаботы = РежимыРаботы();
+
+ СтруктураВызоваМетода = СтруктураВызоваМетода(Объект, ИмяМетода, ПараметрыМетода);
+
+ Если Настройки.Режим = РежимыРаботы.Обучение ИЛИ Настройки.Режим = РежимыРаботы.Проверка Тогда
+
+ ПрерватьВыполнение = Истина;
+ Возврат СтруктураВызоваМетода;
+
+ ИначеЕсли Настройки.Режим = РежимыРаботы.Тестирование Тогда
+
+ ЗарегистрироватьВызовМетода(Настройки, ПараметрыПерехвата, СтруктураВызоваМетода);
+ Возврат ПерехватитьВызовМетода(ПараметрыПерехвата, СтруктураВызоваМетода, ПрерватьВыполнение);
+
+ КонецЕсли;
+
+КонецФункции
+
+// Структура вызова метода.
+//
+// Параметры:
+// Объект - Произвольный - Объект, которому принадлежит метод
+// ИмяМетода - Строка - Имя вызванного метода
+// ПараметрыМетода - Массив из Произвольный - Набор параметров, с которыми был вызван метод
+//
+// Возвращаемое значение:
+// Структура - Информация о вызове метода:
+// * Объект - Произвольный - Объект, которому принадлежит метод
+// * ИмяМетода - Строка - Имя вызванного метода
+// * Параметры - Массив из Произвольный - Набор параметров, с которыми был вызван метод
+// * Контекст - Строка - Контекст вызова метода
+Функция СтруктураВызоваМетода(Объект, ИмяМетода, ПараметрыМетода) Экспорт
+
+ Если ЭтоСтруктураВызоваМетода(Объект) Тогда
+ Возврат Объект;
+ КонецЕсли;
+
+ СтруктураВызоваМетода = Новый Структура("Объект, ИмяМетода, Параметры", Объект, ИмяМетода, ПараметрыМетода);
+ СтруктураВызоваМетода.Вставить("Контекст");
+
+ Возврат СтруктураВызоваМетода;
+
+КонецФункции
+
+Функция ЭтоСтруктураВызоваМетода(Объект) Экспорт
+
+ Возврат ТипЗнч(Объект) = Тип("Структура");
+
+КонецФункции
+
+#Область Предикаты
+
+Функция ТипыУсловийПараметров() Экспорт
+
+ Типы = Новый Структура;
+ Типы.Вставить("Любой", "Любой");
+ Типы.Вставить("Значение", "Значение");
+ Типы.Вставить("Тип", "Тип");
+ Типы.Вставить("ОписаниеТипа", "ОписаниеТипа");
+
+ Возврат Новый ФиксированнаяСтруктура(Типы);
+
+КонецФункции
+
+Функция ОписаниеМаскиПараметра(ТипУсловия, Приоритет) Экспорт
+
+ МаскаПараметра = Новый Структура("МаскаСопоставленияПараметров", Истина);
+ МаскаПараметра.Вставить("Режим", ТипУсловия);
+ МаскаПараметра.Вставить("Приоритет", Приоритет);
+
+ Возврат МаскаПараметра;
+
+КонецФункции
+
+Функция ЭтоМаскаПарамера(Параметр) Экспорт
+
+ Возврат ТипЗнч(Параметр) = Тип("Структура") И Параметр.Свойство("МаскаСопоставленияПараметров") И Параметр.МаскаСопоставленияПараметров;
+
+КонецФункции
+
+Функция ПроверитьПараметр(Параметр, Условие) Экспорт
+
+ ТипыУсловий = ТипыУсловийПараметров();
+ Совпадает = Ложь;
+
+ Если Условие.Режим = ТипыУсловий.Любой Тогда
+
+ Совпадает = Истина;
+
+ ИначеЕсли Условие.Режим = ТипыУсловий.Значение Тогда
+
+ Совпадает = Условие.Значение = Параметр;
+
+ ИначеЕсли Условие.Режим = ТипыУсловий.Тип Тогда
+
+ Совпадает = Условие.Тип = ТипЗнч(Параметр);
+
+ ИначеЕсли Условие.Режим = ТипыУсловий.ОписаниеТипа Тогда
+
+ Совпадает = Условие.Тип.СодержитТип(ТипЗнч(Параметр));
+
+ КонецЕсли;
+
+ Возврат Совпадает;
+
+КонецФункции
+
+#КонецОбласти
+
+#Область Перехват
+
+Функция ПараметрыПерехвата() Экспорт
+
+ Возврат Настройки().Перехват;
+
+КонецФункции
+
+// Данные перехвата.
+//
+// Параметры:
+// Объект - Произвольный
+//
+// Возвращаемое значение:
+// см. МокитоСлужебный.ОписаниеПараметровПерехватаОбъекта
+Функция ДанныеПерехвата(Объект) Экспорт
+
+ ПараметрыПерехвата = ПараметрыПерехвата();
+
+ Если ТипЗнч(Объект) = Тип("Структура") Тогда
+ Ключ = Объект.Объект;
+ Иначе
+ Ключ = Объект;
+ КонецЕсли;
+
+ ПараметрыПерехватаОбъекта = ПараметрыПерехвата[Ключ];
+
+ Если ПараметрыПерехватаОбъекта = Неопределено И ЭтоОбъект(Ключ) Тогда
+ ПараметрыПерехватаОбъекта = ПараметрыПерехвата[Ключ.Ссылка];
+
+ Если ПараметрыПерехватаОбъекта = Неопределено Тогда
+
+ ПолноеИмя = СтрРазделить(Ключ.Метаданные().ПолноеИмя(), ".");
+
+ Менеджер = Новый(СтрШаблон("%1Менеджер.%2", ПолноеИмя[0], ПолноеИмя[1]));
+ ПараметрыПерехватаОбъекта = ПараметрыПерехвата[Менеджер];
+
+ КонецЕсли;
+
+ КонецЕсли;
+
+ Возврат ПараметрыПерехватаОбъекта;
+
+КонецФункции
+
+Процедура ЗарегистрироватьПерехватОбъекта(Знач Объект) Экспорт
+
+ Если ЭтоОбъект(Объект) Тогда
+ Объект = Объект.Ссылка;
+ КонецЕсли;
+
+ ПараметрыПерехвата = ПараметрыПерехвата();
+ ПараметрыПерехвата.Вставить(Объект, ОписаниеПараметровПерехватаОбъекта(Объект));
+
+КонецПроцедуры
+
+Функция ОписаниеПараметровПерехватаОбъекта(Объект) Экспорт
+
+ Возврат Новый Структура("Объект, Методы", Объект, Новый Структура);
+
+КонецФункции
+
+#КонецОбласти
+
+Функция СтатистикаВызовов(Знач Объект, ИмяМетода) Экспорт
+
+ Если ЭтоОбъект(Объект) Тогда
+ Объект = Объект.Ссылка;
+ КонецЕсли;
+
+ Статистика = Настройки().Статистика.Вызовы[Объект];
+
+ Если Статистика = Неопределено ИЛИ НЕ Статистика.Свойство(ИмяМетода) Тогда
+ Возврат Неопределено;
+ КонецЕсли;
+
+ Возврат Статистика[ИмяМетода];
+
+КонецФункции
+
+#Область ОбработчикиСобытий
+
+Процедура ПередКаждымТестом(ОписаниеСобытия) Экспорт
+
+ ИнициализироватьНастройки();
+
+КонецПроцедуры
+
+Процедура ПослеКаждогоТеста(ОписаниеСобытия) Экспорт
+
+ ОчиститьНастройки();
+
+КонецПроцедуры
+
+#КонецОбласти
+
+#КонецОбласти
+
+/////////////////////////////////////////////////////////////////////////////////
+// Процедуры и функции, составляющие внутреннюю реализацию модуля
+/////////////////////////////////////////////////////////////////////////////////
+#Область СлужебныеПроцедурыИФункции
+
+#Область ОбработкаВызовов
+
+// Зарегистрировать вызов метода.
+//
+// Параметры:
+// Настройки - см. ИнициализироватьНастройки
+// ПараметрыПерехвата - см. ДанныеПерехвата
+// СтруктураВызоваМетода - см. СтруктураВызоваМетода
+Процедура ЗарегистрироватьВызовМетода(Настройки, ПараметрыПерехвата, СтруктураВызоваМетода)
+
+ Объект = ПараметрыПерехвата.Объект;
+ ИмяМетода = СтруктураВызоваМетода.ИмяМетода;
+ Статистика = Настройки.Статистика.Вызовы[Объект];
+
+ Если Статистика = Неопределено Тогда
+
+ Статистика = Новый Структура;
+ Настройки.Статистика.Вызовы.Вставить(Объект, Статистика);
+
+ КонецЕсли;
+
+ Если НЕ Статистика.Свойство(ИмяМетода) Тогда
+
+ Статистика.Вставить(ИмяМетода, Новый Массив);
+
+ КонецЕсли;
+
+ Статистика[ИмяМетода].Добавить(СтруктураВызоваМетода);
+
+КонецПроцедуры
+
+Функция ПерехватитьВызовМетода(ПараметрыПерехвата, СтруктураВызоваМетода, ПрерватьВыполнение)
+
+ Если НЕ ПараметрыПерехвата.Методы.Свойство(СтруктураВызоваМетода.ИмяМетода) Тогда
+ Возврат Неопределено;
+ КонецЕсли;
+
+ ПараметрыПерехватаМетода = ПараметрыПерехвата.Методы[СтруктураВызоваМетода.ИмяМетода];
+
+ Реакция = НайтиРеакцию(ПараметрыПерехватаМетода, СтруктураВызоваМетода);
+
+ Если Реакция = Неопределено ИЛИ Реакция.Действие = Неопределено Тогда
+ Возврат Неопределено;
+ КонецЕсли;
+
+ ПрерватьВыполнение = Истина;
+
+ ТипыДействий = ТипыДействийРеакций();
+
+ Если Реакция.Действие.ТипДействия = ТипыДействий.ВернутьРезультат Тогда
+
+ Реакция.Действие.Обработано = Истина;
+ Возврат Реакция.Действие.Результат;
+
+ ИначеЕсли Реакция.Действие.ТипДействия = ТипыДействий.ВыброситьИсключение Тогда
+
+ Реакция.Действие.Обработано = Истина;
+ ВызватьИсключение Реакция.Действие.Ошибка;
+
+ ИначеЕсли Реакция.Действие.ТипДействия = ТипыДействий.Пропустить Тогда
+
+ Реакция.Действие.Обработано = Истина;
+ Возврат Неопределено;
+
+ ИначеЕсли Реакция.Действие.ТипДействия = ТипыДействий.ВызватьОсновнойМетод Тогда
+
+ Реакция.Действие.Обработано = Истина;
+ ПрерватьВыполнение = Ложь;
+
+ Иначе
+
+ ВызватьИсключение "Неизвестный тип действия реакции";
+
+ КонецЕсли;
+
+КонецФункции
+
+#КонецОбласти
+
+Функция НайтиРеакцию(ПараметрыПерехватаМетода, СтруктураВызоваМетода)
+
+ Реакция = Неопределено;
+ Приоритет = 0;
+ ПараметрыВызова = СтруктураВызоваМетода.Параметры;
+
+ Для Каждого ВозможнаяРеакция Из ПараметрыПерехватаМетода.Реакции Цикл
+
+ ПриоритетВозможнойРеакции = ПроверитьРеакцию(ВозможнаяРеакция, ПараметрыВызова);
+
+ Если ПриоритетВозможнойРеакции > Приоритет Тогда
+
+ Реакция = ВозможнаяРеакция;
+ Приоритет = ПриоритетВозможнойРеакции;
+
+ КонецЕсли;
+
+ КонецЦикла;
+
+ Возврат Реакция;
+
+КонецФункции
+
+Функция ПроверитьРеакцию(Реакция, ПараметрыМетода)
+
+ Приоритет = 1;
+
+ Если Реакция.УсловиеРеакции = Неопределено Тогда
+ Возврат Приоритет;
+ КонецЕсли;
+
+ Для Инд = 0 По Реакция.УсловиеРеакции.ВГраница() Цикл
+
+ Если НЕ ПроверитьПараметр(ПараметрыМетода[Инд], Реакция.УсловиеРеакции[Инд]) Тогда
+
+ Возврат 0;
+
+ КонецЕсли;
+
+ Приоритет = Приоритет + Реакция.УсловиеРеакции[Инд].Приоритет;
+
+ КонецЦикла;
+
+ Возврат Приоритет;
+
+КонецФункции
+
+#Область Настройки
+
+Процедура ИнициализироватьНастройки() Экспорт
+
+ Настройки = Новый Структура;
+ Настройки.Вставить("Метод");
+ Настройки.Вставить("Реакция");
+ Настройки.Вставить("Настройки");
+ Настройки.Вставить("Перехват", Новый Соответствие);
+ Настройки.Вставить("Режим", "НеУстановлен");
+ Настройки.Вставить("Статистика", Новый Структура("Вызовы", Новый Соответствие));
+
+ Настройки.Вставить("ПараметрыОбучения", Неопределено);
+ Настройки.Вставить("ПараметрыПроверки", Неопределено);
+
+ ЮТКонтекст.УстановитьЗначениеКонтекста(КлючНастроек(), Настройки);
+
+КонецПроцедуры
+
+Процедура ОчиститьНастройки() Экспорт
+
+ ЮТКонтекст.УстановитьЗначениеКонтекста(КлючНастроек(), Неопределено);
+
+КонецПроцедуры
+
+Процедура СброситьПараметры() Экспорт
+
+ ИнициализироватьНастройки();
+
+КонецПроцедуры
+
+Функция КлючНастроек()
+
+ Возврат "Mockito";
+
+КонецФункции
+
+Процедура ОчиститьСлужебныеПараметры()
+
+ Настройки = Настройки();
+
+ Настройки.ПараметрыОбучения = Неопределено;
+ Настройки.ПараметрыПроверки = Неопределено;
+
+КонецПроцедуры
+
+#КонецОбласти
+
+Функция ЭтоСсылка(Значение) Экспорт
+
+ Если Значение <> Неопределено Тогда
+
+ ТипыСсылок = ЮТОбщий.ОписаниеТиповЛюбаяСсылка();
+ Результат = ТипыСсылок.СодержитТип(ТипЗнч(Значение));
+
+ Иначе
+
+ Результат = Ложь;
+
+ КонецЕсли;
+
+ Возврат Результат;
+
+КонецФункции
+
+Функция ЭтоОбъект(Значение) Экспорт
+
+ Если Значение <> Неопределено И ЮТОбщий.ПеременнаяСодержитСвойство(Значение, "Ссылка") Тогда
+
+ Возврат ЭтоСсылка(Значение.Ссылка);
+
+ Иначе
+
+ Результат = Ложь;
+
+ КонецЕсли;
+
+ Возврат Результат;
+
+КонецФункции
+
+#КонецОбласти
diff --git a/src/cfe/yaxunit/src/CommonModules/МокитоСлужебный/МокитоСлужебный.mdo b/src/cfe/yaxunit/src/CommonModules/МокитоСлужебный/МокитоСлужебный.mdo
new file mode 100644
index 0000000..d562e12
--- /dev/null
+++ b/src/cfe/yaxunit/src/CommonModules/МокитоСлужебный/МокитоСлужебный.mdo
@@ -0,0 +1,11 @@
+
+
+ МокитоСлужебный
+
+ ru
+ Мокито служебный
+
+ true
+ true
+ true
+
diff --git a/src/cfe/yaxunit/src/CommonModules/СтроковыеФункцииКлиентСервер/Module.bsl b/src/cfe/yaxunit/src/CommonModules/СтроковыеФункцииКлиентСервер/Module.bsl
new file mode 100644
index 0000000..1d79c08
--- /dev/null
+++ b/src/cfe/yaxunit/src/CommonModules/СтроковыеФункцииКлиентСервер/Module.bsl
@@ -0,0 +1,1547 @@
+///////////////////////////////////////////////////////////////////////////////////////////////////////
+// Copyright (c) 2022, ООО 1С-Софт
+// Все права защищены. Эта программа и сопроводительные материалы предоставляются
+// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
+// Текст лицензии доступен по ссылке:
+// https://creativecommons.org/licenses/by/4.0/legalcode
+///////////////////////////////////////////////////////////////////////////////////////////////////////
+
+#Область ПрограммныйИнтерфейс
+
+// Разбивает строку на несколько строк по указанному разделителю. Разделитель может иметь любую длину.
+// В случаях, когда разделителем является строка из одного символа, и не используется параметр СокращатьНепечатаемыеСимволы,
+// рекомендуется использовать функцию платформы СтрРазделить.
+//
+// Параметры:
+// Значение - Строка - текст с разделителями.
+// Разделитель - Строка - разделитель строк текста, минимум 1 символ.
+// ПропускатьПустыеСтроки - Булево - признак необходимости включения в результат пустых строк.
+// Если параметр не задан, то функция работает в режиме совместимости со своей предыдущей версией:
+// > для разделителя-пробела пустые строки не включаются в результат, для остальных разделителей пустые строки
+// включаются в результат;
+// > если параметр Строка не содержит значащих символов или не содержит ни одного символа (пустая строка), то в
+// случае разделителя-пробела результатом функции будет массив, содержащий одно значение "" (пустая строка), а
+// при других разделителях результатом функции будет пустой массив.
+// СокращатьНепечатаемыеСимволы - Булево - сокращать непечатаемые символы по краям каждой из найденных подстрок.
+//
+// Возвращаемое значение:
+// Массив из Строка
+//
+// Пример:
+// СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(",один,,два,", ",")
+// - возвратит массив из 5 элементов, три из которых - пустые: "", "один", "", "два", "";
+// СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(",один,,два,", ",", Истина)
+// - возвратит массив из двух элементов: "один", "два";
+// СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(" один два ", " ")
+// - возвратит массив из двух элементов: "один", "два";
+// СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок("")
+// - возвратит пустой массив;
+// СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок("",,Ложь)
+// - возвратит массив с одним элементом: ""(пустая строка);
+// СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок("", " ")
+// - возвратит массив с одним элементом: "" (пустая строка).
+//
+Функция РазложитьСтрокуВМассивПодстрок(Знач Значение, Знач Разделитель = ",", Знач ПропускатьПустыеСтроки = Неопределено,
+ СокращатьНепечатаемыеСимволы = Ложь) Экспорт
+
+ Если СтрДлина(Разделитель) = 1
+ И ПропускатьПустыеСтроки = Неопределено
+ И СокращатьНепечатаемыеСимволы Тогда
+
+ Результат = СтрРазделить(Значение, Разделитель, Ложь);
+ Для Индекс = 0 По Результат.ВГраница() Цикл
+ Результат[Индекс] = СокрЛП(Результат[Индекс])
+ КонецЦикла;
+ Возврат Результат;
+
+ КонецЕсли;
+
+ Результат = Новый Массив;
+
+ // Для обеспечения обратной совместимости.
+ Если ПропускатьПустыеСтроки = Неопределено Тогда
+ ПропускатьПустыеСтроки = ?(Разделитель = " ", Истина, Ложь);
+ Если ПустаяСтрока(Значение) Тогда
+ Если Разделитель = " " Тогда
+ Результат.Добавить("");
+ КонецЕсли;
+ Возврат Результат;
+ КонецЕсли;
+ КонецЕсли;
+ //
+
+ Позиция = СтрНайти(Значение, Разделитель);
+ Пока Позиция > 0 Цикл
+ Подстрока = Лев(Значение, Позиция - 1);
+ Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Подстрока) Тогда
+ Если СокращатьНепечатаемыеСимволы Тогда
+ Результат.Добавить(СокрЛП(Подстрока));
+ Иначе
+ Результат.Добавить(Подстрока);
+ КонецЕсли;
+ КонецЕсли;
+ Значение = Сред(Значение, Позиция + СтрДлина(Разделитель));
+ Позиция = СтрНайти(Значение, Разделитель);
+ КонецЦикла;
+
+ Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Значение) Тогда
+ Если СокращатьНепечатаемыеСимволы Тогда
+ Результат.Добавить(СокрЛП(Значение));
+ Иначе
+ Результат.Добавить(Значение);
+ КонецЕсли;
+ КонецЕсли;
+
+ Возврат Результат;
+
+КонецФункции
+
+// Определяет, является ли символ разделителем.
+//
+// Параметры:
+// КодСимвола - Число - код проверяемого символа;
+// РазделителиСлов - Строка - символы разделителей. Если параметр не указан, то
+// разделителем считаются все символы, не являющиеся цифрами,
+// латинскими и кириллическими буквами, а также знаком подчеркивания.
+//
+// Возвращаемое значение:
+// Булево - Истина, если символ с кодом КодСимвола является разделителем.
+//
+Функция ЭтоРазделительСлов(КодСимвола, РазделителиСлов = Неопределено) Экспорт
+
+ Если РазделителиСлов <> Неопределено Тогда
+ Возврат СтрНайти(РазделителиСлов, Символ(КодСимвола)) > 0;
+ КонецЕсли;
+
+ Диапазоны = Новый Массив;
+ Диапазоны.Добавить(Новый Структура("Мин,Макс", 48, 57)); // цифры
+ Диапазоны.Добавить(Новый Структура("Мин,Макс", 65, 90)); // латиница большие
+ Диапазоны.Добавить(Новый Структура("Мин,Макс", 97, 122)); // латиница маленькие
+ Диапазоны.Добавить(Новый Структура("Мин,Макс", 1040, 1103)); // кириллица
+ Диапазоны.Добавить(Новый Структура("Мин,Макс", 1025, 1025)); // символ "Ё"
+ Диапазоны.Добавить(Новый Структура("Мин,Макс", 1105, 1105)); // символ "ё"
+ Диапазоны.Добавить(Новый Структура("Мин,Макс", 95, 95)); // символ "_"
+
+ Для Каждого Диапазон Из Диапазоны Цикл
+ Если КодСимвола >= Диапазон.Мин И КодСимвола <= Диапазон.Макс Тогда
+ Возврат Ложь;
+ КонецЕсли;
+ КонецЦикла;
+
+ Возврат Истина;
+
+КонецФункции
+
+// Разбивает строку на несколько строк, используя заданный набор разделителей.
+// Если параметр РазделителиСлов не задан, то разделителем слов считается любой из символов,
+// не относящихся к символам латиницы, кириллицы, цифры, подчеркивания.
+//
+// Параметры:
+// Значение - Строка - исходная строка, которую необходимо разложить на слова.
+// РазделителиСлов - Строка - перечень символов-разделителей. Например, ".,;".
+//
+// Возвращаемое значение:
+// Массив - список слов.
+//
+// Пример:
+// СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивСлов("один-@#два2_!три") возвратит массив значений: "один",
+// "два2_", "три"; СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивСлов("один-@#два2_!три", "#@!_") возвратит массив
+// значений: "один-", "два2", "три".
+//
+Функция РазложитьСтрокуВМассивСлов(Знач Значение, РазделителиСлов = Неопределено) Экспорт
+
+ Слова = Новый Массив;
+
+ РазмерТекста = СтрДлина(Значение);
+ НачалоСлова = 1;
+ Для Позиция = 1 По РазмерТекста Цикл
+ КодСимвола = КодСимвола(Значение, Позиция);
+ Если ЭтоРазделительСлов(КодСимвола, РазделителиСлов) Тогда
+ Если Позиция <> НачалоСлова Тогда
+ Слова.Добавить(Сред(Значение, НачалоСлова, Позиция - НачалоСлова));
+ КонецЕсли;
+ НачалоСлова = Позиция + 1;
+ КонецЕсли;
+ КонецЦикла;
+
+ Если Позиция <> НачалоСлова Тогда
+ Слова.Добавить(Сред(Значение, НачалоСлова, Позиция - НачалоСлова));
+ КонецЕсли;
+
+ Возврат Слова;
+
+КонецФункции
+
+// Подставляет параметры в строку. Максимально возможное число параметров - 9.
+// Параметры в строке задаются как %<номер параметра>. Нумерация параметров начинается с единицы.
+//
+// Параметры:
+// ШаблонСтроки - Строка - шаблон строки с параметрами (вхождениями вида "%<номер параметра>",
+// например "%1 пошел в %2");
+// Параметр1 - Строка - значение подставляемого параметра.
+// Параметр2 - Строка
+// Параметр3 - Строка
+// Параметр4 - Строка
+// Параметр5 - Строка
+// Параметр6 - Строка
+// Параметр7 - Строка
+// Параметр8 - Строка
+// Параметр9 - Строка
+//
+// Возвращаемое значение:
+// Строка - текстовая строка с подставленными параметрами.
+//
+// Пример:
+// СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='%1 пошел в %2'"), "Вася", "Зоопарк") = "Вася пошел
+// в Зоопарк".
+//
+Функция ПодставитьПараметрыВСтроку(Знач ШаблонСтроки,
+ Знач Параметр1, Знач Параметр2 = Неопределено, Знач Параметр3 = Неопределено,
+ Знач Параметр4 = Неопределено, Знач Параметр5 = Неопределено, Знач Параметр6 = Неопределено,
+ Знач Параметр7 = Неопределено, Знач Параметр8 = Неопределено, Знач Параметр9 = Неопределено) Экспорт
+
+ ЕстьПараметрыСПроцентом = СтрНайти(Параметр1, "%")
+ Или СтрНайти(Параметр2, "%")
+ Или СтрНайти(Параметр3, "%")
+ Или СтрНайти(Параметр4, "%")
+ Или СтрНайти(Параметр5, "%")
+ Или СтрНайти(Параметр6, "%")
+ Или СтрНайти(Параметр7, "%")
+ Или СтрНайти(Параметр8, "%")
+ Или СтрНайти(Параметр9, "%");
+
+ Если ЕстьПараметрыСПроцентом Тогда
+ Возврат ПодставитьПараметрыСПроцентом(ШаблонСтроки, Параметр1,
+ Параметр2, Параметр3, Параметр4, Параметр5, Параметр6, Параметр7, Параметр8, Параметр9);
+ КонецЕсли;
+
+ ШаблонСтроки = СтрЗаменить(ШаблонСтроки, "%1", Параметр1);
+ ШаблонСтроки = СтрЗаменить(ШаблонСтроки, "%2", Параметр2);
+ ШаблонСтроки = СтрЗаменить(ШаблонСтроки, "%3", Параметр3);
+ ШаблонСтроки = СтрЗаменить(ШаблонСтроки, "%4", Параметр4);
+ ШаблонСтроки = СтрЗаменить(ШаблонСтроки, "%5", Параметр5);
+ ШаблонСтроки = СтрЗаменить(ШаблонСтроки, "%6", Параметр6);
+ ШаблонСтроки = СтрЗаменить(ШаблонСтроки, "%7", Параметр7);
+ ШаблонСтроки = СтрЗаменить(ШаблонСтроки, "%8", Параметр8);
+ ШаблонСтроки = СтрЗаменить(ШаблонСтроки, "%9", Параметр9);
+ Возврат ШаблонСтроки;
+
+КонецФункции
+
+// Подставляет параметры в строку. Число параметров в строке не ограничено.
+// Параметры в строке задаются как %<номер параметра>. Нумерация параметров
+// начинается с единицы.
+//
+// Параметры:
+// ШаблонСтроки - Строка - шаблон строки с параметрами (вхождениями вида "%<номер параметра>",
+// например "%1 пошел в %2");
+// Параметры - Массив - значения параметров в строке ШаблонСтроки.
+//
+// Возвращаемое значение:
+// Строка - строка с подставленными значениями параметрами.
+//
+// Пример:
+// ЗначенияПараметров = Новый Массив;
+// ЗначенияПараметров.Добавить("Вася");
+// ЗначенияПараметров.Добавить("Зоопарк");
+// Результат = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтрокуИзМассива(НСтр("ru='%1 пошел в %2'"), ЗначенияПараметров);
+// - вернет строку "Вася пошел в Зоопарк".
+//
+Функция ПодставитьПараметрыВСтрокуИзМассива(Знач ШаблонСтроки, Знач Параметры) Экспорт
+
+ СтрокаРезультата = ШаблонСтроки;
+
+ Индекс = Параметры.Количество();
+ Пока Индекс > 0 Цикл
+ Значение = Параметры[Индекс-1];
+ Если Не ПустаяСтрока(Значение) Тогда
+ СтрокаРезультата = СтрЗаменить(СтрокаРезультата, "%" + Формат(Индекс, "ЧГ="), Значение);
+ КонецЕсли;
+ Индекс = Индекс - 1;
+ КонецЦикла;
+
+ Возврат СтрокаРезультата;
+
+КонецФункции
+
+// Заменяет в шаблоне строки имена параметров на их значения. Параметры в строке выделяются с двух сторон квадратными
+// скобками.
+//
+// Параметры:
+// ШаблонСтроки - Строка - строка, в которую необходимо вставить значения.
+// Параметры - Структура - подставляемые значения параметров, где ключ - имя параметра без спецсимволов,
+// значение - вставляемое значение.
+//
+// Возвращаемое значение:
+// Строка - строка со вставленными значениями.
+//
+// Пример:
+// Значения = Новый Структура("Фамилия,Имя", "Пупкин", "Вася");
+// Результат = СтроковыеФункцииКлиентСервер.ВставитьПараметрыВСтроку("Здравствуй, [Имя] [Фамилия].", Значения);
+// - возвращает: "Здравствуй, Вася Пупкин".
+//
+Функция ВставитьПараметрыВСтроку(Знач ШаблонСтроки, Знач Параметры) Экспорт
+ Результат = ШаблонСтроки;
+ Для Каждого Параметр Из Параметры Цикл
+ Результат = СтрЗаменить(Результат, "[" + Параметр.Ключ + "]", Параметр.Значение);
+ КонецЦикла;
+ Возврат Результат;
+КонецФункции
+
+// Получает значения параметров из строки.
+//
+// Параметры:
+// СтрокаПараметров - Строка - строка, содержащая параметры, каждый из которых представляет собой
+// фрагмент вида <Имя параметра>=<Значение>, где:
+// Имя параметра - имя параметра;
+// Значение - его значение.
+// Фрагменты отделяются друг от друга символами ';'.
+// Если значение содержит пробельные символы, то оно должно быть заключено в двойные
+// кавычки (").
+// Например:
+// "File=""c:\InfoBases\Trade""; Usr=""Director"";"
+// Разделитель - Строка - символ, которым фрагменты отделяются друг от друга.
+//
+// Возвращаемое значение:
+// Структура - значения параметров, где ключ - имя параметра, значение - значение параметра.
+//
+// Пример:
+// Результат = СтроковыеФункцииКлиентСервер.ПараметрыИзСтроки("File=""c:\InfoBases\Trade""; Usr=""Director"";""", ";");
+// - вернет структуру:
+// ключ "File" и значение "c:\InfoBases\Trade"
+// ключ "Usr" и значение "Director".
+//
+Функция ПараметрыИзСтроки(Знач СтрокаПараметров, Знач Разделитель = ";") Экспорт
+ Результат = Новый Структура;
+
+ ОписаниеПараметра = "";
+ НайденоНачалоСтроки = Ложь;
+ НомерПоследнегоСимвола = СтрДлина(СтрокаПараметров);
+ Для НомерСимвола = 1 По НомерПоследнегоСимвола Цикл
+ Символ =Сред(СтрокаПараметров, НомерСимвола, 1);
+ Если Символ = """" Тогда
+ НайденоНачалоСтроки = Не НайденоНачалоСтроки;
+ КонецЕсли;
+ Если Символ <> Разделитель Или НайденоНачалоСтроки Тогда
+ ОписаниеПараметра = ОписаниеПараметра + Символ;
+ КонецЕсли;
+ Если Символ = Разделитель И Не НайденоНачалоСтроки Или НомерСимвола = НомерПоследнегоСимвола Тогда
+ Позиция = СтрНайти(ОписаниеПараметра, "=");
+ Если Позиция > 0 Тогда
+ ИмяПараметра = СокрЛП(Лев(ОписаниеПараметра, Позиция - 1));
+ ЗначениеПараметра = СокрЛП(Сред(ОписаниеПараметра, Позиция + 1));
+ ЗначениеПараметра = СократитьДвойныеКавычки(ЗначениеПараметра);
+ Результат.Вставить(ИмяПараметра, ЗначениеПараметра);
+ КонецЕсли;
+ ОписаниеПараметра = "";
+ КонецЕсли;
+ КонецЦикла;
+
+ Возврат Результат;
+КонецФункции
+
+// Проверяет, содержит ли строка только цифры.
+//
+// Параметры:
+// Значение - Строка - проверяемая строка.
+// Устаревший - Булево - устаревший параметр, не используется.
+// ПробелыЗапрещены - Булево - если Ложь, то в строке допустимо наличие пробелов.
+//
+// Возвращаемое значение:
+// Булево - Истина - строка содержит только цифры или пустая, Ложь - строка содержит иные символы.
+//
+// Пример:
+// Результат = СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке("0123"); // Истина
+// Результат = СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке("0123abc"); // Ложь
+// Результат = СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке("01 2 3",, Ложь); // Истина
+//
+Функция ТолькоЦифрыВСтроке(Знач Значение, Знач Устаревший = Истина, Знач ПробелыЗапрещены = Истина) Экспорт
+
+ Если ТипЗнч(Значение) <> Тип("Строка") Тогда
+ Возврат Ложь;
+ КонецЕсли;
+
+ Если Не ПробелыЗапрещены Тогда
+ Значение = СтрЗаменить(Значение, " ", "");
+ КонецЕсли;
+
+ Если СтрДлина(Значение) = 0 Тогда
+ Возврат Истина;
+ КонецЕсли;
+
+ // Если содержит только цифры, то в результате замен должна быть получена пустая строка.
+ // Проверять при помощи ПустаяСтрока нельзя, так как в исходной строке могут быть пробельные символы.
+ Возврат СтрДлина(
+ СтрЗаменить( СтрЗаменить( СтрЗаменить( СтрЗаменить( СтрЗаменить(
+ СтрЗаменить( СтрЗаменить( СтрЗаменить( СтрЗаменить( СтрЗаменить(
+ Значение, "0", ""), "1", ""), "2", ""), "3", ""), "4", ""), "5", ""), "6", ""), "7", ""), "8", ""), "9", "")) = 0;
+
+КонецФункции
+
+// Проверяет, содержит ли строка только символы латинского алфавита.
+//
+// Параметры:
+// СтрокаПроверки - Строка - проверяемая строка.
+// УчитыватьРазделителиСлов - Булево - учитывать ли разделители слов или они являются исключением.
+// ДопустимыеСимволы - Строка - дополнительные разрешенные символы, кроме латиницы.
+//
+// Возвращаемое значение:
+// Булево - Истина, если строка содержит только латинские (или допустимые) символы;
+// Ложь, если строка содержит иные символы.
+//
+Функция ТолькоЛатиницаВСтроке(Знач СтрокаПроверки, Знач УчитыватьРазделителиСлов = Истина, ДопустимыеСимволы = "") Экспорт
+
+ Если ТипЗнч(СтрокаПроверки) <> Тип("Строка") Тогда
+ Возврат Ложь;
+ КонецЕсли;
+
+ Если НЕ ЗначениеЗаполнено(СтрокаПроверки) Тогда
+ Возврат Истина;
+ КонецЕсли;
+
+ КодыДопустимыхСимволов = Новый Массив;
+
+ Для Индекс = 1 По СтрДлина(ДопустимыеСимволы) Цикл
+ КодыДопустимыхСимволов.Добавить(КодСимвола(Сред(ДопустимыеСимволы, Индекс, 1)));
+ КонецЦикла;
+
+ Для Индекс = 1 По СтрДлина(СтрокаПроверки) Цикл
+ КодСимвола = КодСимвола(Сред(СтрокаПроверки, Индекс, 1));
+ Если ((КодСимвола < 65) Или (КодСимвола > 90 И КодСимвола < 97) Или (КодСимвола > 122))
+ И (КодыДопустимыхСимволов.Найти(КодСимвола) = Неопределено)
+ И Не (Не УчитыватьРазделителиСлов И ЭтоРазделительСлов(КодСимвола)) Тогда
+ Возврат Ложь;
+ КонецЕсли;
+ КонецЦикла;
+
+ Возврат Истина;
+
+КонецФункции
+
+// Удаляет двойные кавычки с начала и конца строки, если они есть.
+//
+// Параметры:
+// Значение - Строка - входная строка.
+//
+// Возвращаемое значение:
+// Строка - строка без двойных кавычек.
+//
+Функция СократитьДвойныеКавычки(Знач Значение) Экспорт
+
+ Пока СтрНачинаетсяС(Значение, """") Цикл
+ Значение = Сред(Значение, 2);
+ КонецЦикла;
+
+ Пока СтрЗаканчиваетсяНа(Значение, """") Цикл
+ Значение = Лев(Значение, СтрДлина(Значение) - 1);
+ КонецЦикла;
+
+ Возврат Значение;
+
+КонецФункции
+
+// Удаляет из строки указанное количество символов справа.
+//
+// Параметры:
+// Текст - Строка - строка, в которой необходимо удалить последние символы;
+// ЧислоСимволов - Число - количество удаляемых символов.
+//
+Процедура УдалитьПоследнийСимволВСтроке(Текст, ЧислоСимволов = 1) Экспорт
+
+ Текст = Лев(Текст, СтрДлина(Текст) - ЧислоСимволов);
+
+КонецПроцедуры
+
+// Проверяет, является ли строка уникальным идентификатором.
+// В качестве уникального идентификатора предполагается строка вида
+// "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", где X = [0..9,a..f].
+//
+// Параметры:
+// Значение - Строка - проверяемая строка.
+//
+// Возвращаемое значение:
+// Булево - Истина, если переданная строка является уникальным идентификатором.
+//
+Функция ЭтоУникальныйИдентификатор(Знач Значение) Экспорт
+
+ Шаблон = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX";
+
+ Если СтрДлина(Шаблон) <> СтрДлина(Значение) Тогда
+ Возврат Ложь;
+ КонецЕсли;
+ Для Позиция = 1 По СтрДлина(Значение) Цикл
+ Если КодСимвола(Шаблон, Позиция) = 88 // X
+ И ((КодСимвола(Значение, Позиция) < 48 Или КодСимвола(Значение, Позиция) > 57) // 0..9
+ И (КодСимвола(Значение, Позиция) < 97 Или КодСимвола(Значение, Позиция) > 102) // a..f
+ И (КодСимвола(Значение, Позиция) < 65 Или КодСимвола(Значение, Позиция) > 70)) // A..F
+ Или КодСимвола(Шаблон, Позиция) = 45 И КодСимвола(Значение, Позиция) <> 45 Тогда // -
+ Возврат Ложь;
+ КонецЕсли;
+ КонецЦикла;
+
+ Возврат Истина;
+
+КонецФункции
+
+// Формирует строку повторяющихся символов заданной длины.
+//
+// Параметры:
+// Символ - Строка - символ, из которого будет формироваться строка.
+// ДлинаСтроки - Число - требуемая длина результирующей строки.
+//
+// Возвращаемое значение:
+// Строка - строка, состоящая из повторяющихся символов.
+//
+Функция СформироватьСтрокуСимволов(Знач Символ, Знач ДлинаСтроки) Экспорт
+
+ Результат = "";
+ Для Счетчик = 1 По ДлинаСтроки Цикл
+ Результат = Результат + Символ;
+ КонецЦикла;
+
+ Возврат Результат;
+
+КонецФункции
+
+// Дополняет строку символами слева или справа до заданной длины и возвращает ее.
+// При этом удаляются незначащие символы слева и справа (подробнее про незначащие символы
+// см. синтакс-помощник к методу платформы СокрЛП).
+// По умолчанию функция дополняет строку символами "0" (ноль) слева.
+//
+// Параметры:
+// Значение - Строка - исходная строка, которую необходимо дополнить символами;
+// ДлинаСтроки - Число - требуемая результирующая длина строки;
+// Символ - Строка - символ, которым необходимо дополнить строку;
+// Режим - Строка - "Слева" или "Справа" - вариант добавления символов к исходной строке.
+//
+// Возвращаемое значение:
+// Строка - строка, дополненная символами.
+//
+// Пример:
+// 1. Результат = СтроковыеФункцииКлиентСервер.ДополнитьСтроку("1234", 10, "0", "Слева");
+// Возвращает: "0000001234".
+//
+// 2. Результат = СтроковыеФункцииКлиентСервер.ДополнитьСтроку(" 1234 ", 10, "#", "Справа");
+// Строка = " 1234 "; ДлинаСтроки = 10; Символ = "#"; Режим = "Справа"
+// Возвращает: "1234######".
+//
+Функция ДополнитьСтроку(Знач Значение, Знач ДлинаСтроки, Знач Символ = "0", Знач Режим = "Слева") Экспорт
+
+ // Длина символа не должна превышать единицы.
+ Символ = Лев(Символ, 1);
+
+ // Удаляем крайние пробелы слева и справа строки.
+ Значение = СокрЛП(Значение);
+ КоличествоСимволовНадоДобавить = ДлинаСтроки - СтрДлина(Значение);
+
+ Если КоличествоСимволовНадоДобавить > 0 Тогда
+
+ СтрокаДляДобавления = СформироватьСтрокуСимволов(Символ, КоличествоСимволовНадоДобавить);
+ Если ВРег(Режим) = "СЛЕВА" Тогда
+ Значение = СтрокаДляДобавления + Значение;
+ ИначеЕсли ВРег(Режим) = "СПРАВА" Тогда
+ Значение = Значение + СтрокаДляДобавления;
+ КонецЕсли;
+
+ КонецЕсли;
+
+ Возврат Значение;
+
+КонецФункции
+
+// Удаляет крайние повторяющиеся символы слева или справа в строке.
+//
+// Параметры:
+// Значение - Строка - исходная строка, из которой необходимо удалить крайние повторяющиеся символы;
+// УдаляемыйСимвол - Строка - искомый символ для удаления;
+// Режим - Строка - "Слева" или "Справа" - режим удаления символов в исходной строке.
+//
+// Возвращаемое значение:
+// Строка - обрезанная строка.
+//
+Функция УдалитьПовторяющиесяСимволы(Знач Значение, Знач УдаляемыйСимвол, Знач Режим = "Слева") Экспорт
+
+ Если ВРег(Режим) = "СЛЕВА" Тогда
+ Пока Лев(Значение, 1) = УдаляемыйСимвол Цикл
+ Значение = Сред(Значение, 2);
+ КонецЦикла;
+ ИначеЕсли ВРег(Режим) = "СПРАВА" Тогда
+ Пока Прав(Значение, 1) = УдаляемыйСимвол Цикл
+ Значение = Лев(Значение, СтрДлина(Значение) - 1);
+ КонецЦикла;
+ КонецЕсли;
+
+ Возврат Значение;
+
+КонецФункции
+
+// Выполняет замену символов в строке.
+// Предназначена для простых случаев - например, для замены латиницы на похожие кириллические символы.
+//
+// Параметры:
+// ЗаменяемыеСимволы - Строка - строка символов, каждый из которых требует замены;
+// Значение - Строка - исходная строка, в которой требуется замена символов;
+// СимволыЗамены - Строка - строка символов, на каждый из которых нужно заменить символы параметра
+// ЗаменяемыеСимволы.
+//
+// Возвращаемое значение:
+// Строка - строка после замены символов.
+//
+Функция ЗаменитьОдниСимволыДругими(ЗаменяемыеСимволы, Значение, СимволыЗамены) Экспорт
+
+ Результат = Значение;
+
+ Для НомерСимвола = 1 По СтрДлина(ЗаменяемыеСимволы) Цикл
+ Результат = СтрЗаменить(Результат, Сред(ЗаменяемыеСимволы, НомерСимвола, 1), Сред(СимволыЗамены, НомерСимвола, 1));
+ КонецЦикла;
+
+ Возврат Результат;
+
+КонецФункции
+
+// Выполняет преобразование арабского числа в римское.
+//
+// Параметры:
+// АрабскоеЧисло - Число - число, целое, от 0 до 999;
+// ИспользоватьКириллицу - Булево - использовать в качестве арабских цифр кириллицу или латиницу.
+//
+// Возвращаемое значение:
+// Строка - число в римской нотации.
+//
+// Пример:
+// СтроковыеФункцииКлиентСервер.ПреобразоватьЧислоВРимскуюНотацию(17) = "ХVII".
+//
+Функция ПреобразоватьЧислоВРимскуюНотацию(АрабскоеЧисло, ИспользоватьКириллицу = Истина) Экспорт
+
+ РимскоеЧисло = "";
+ АрабскоеЧисло = ДополнитьСтроку(АрабскоеЧисло, 3);
+
+ Если ИспользоватьКириллицу Тогда
+ c1 = "1"; c5 = "У"; c10 = "Х"; c50 = "Л"; c100 ="С"; c500 = "Д"; c1000 = "М";
+
+ Иначе
+ c1 = "I"; c5 = "V"; c10 = "X"; c50 = "L"; c100 ="C"; c500 = "D"; c1000 = "M";
+
+ КонецЕсли;
+
+ Единицы = Число(Сред(АрабскоеЧисло, 3, 1));
+ Десятки = Число(Сред(АрабскоеЧисло, 2, 1));
+ Сотни = Число(Сред(АрабскоеЧисло, 1, 1));
+
+ РимскоеЧисло = РимскоеЧисло + ПреобразоватьЦифруВРимскуюНотацию(Сотни, c100, c500, c1000);
+ РимскоеЧисло = РимскоеЧисло + ПреобразоватьЦифруВРимскуюНотацию(Десятки, c10, c50, c100);
+ РимскоеЧисло = РимскоеЧисло + ПреобразоватьЦифруВРимскуюНотацию(Единицы, c1, c5, c10);
+
+ Возврат РимскоеЧисло;
+
+КонецФункции
+
+// Выполняет преобразование римского числа в арабское.
+//
+// Параметры:
+// РимскоеЧисло - Строка - число, записанное римскими цифрами;
+// ИспользоватьКириллицу - Булево - использовать в качестве арабских цифр кириллицу или латиницу.
+//
+// Возвращаемое значение:
+// Число - преобразованное число.
+//
+// Пример:
+// СтроковыеФункцииКлиентСервер.ПреобразоватьЧислоВАрабскуюНотацию("ХVII") = 17.
+//
+Функция ПреобразоватьЧислоВАрабскуюНотацию(РимскоеЧисло, ИспользоватьКириллицу = Истина) Экспорт
+
+ АрабскоеЧисло = 0;
+
+ Если ИспользоватьКириллицу Тогда
+ c1 = "1"; c5 = "У"; c10 = "Х"; c50 = "Л"; c100 ="С"; c500 = "Д"; c1000 = "М";
+ Иначе
+ c1 = "I"; c5 = "V"; c10 = "X"; c50 = "L"; c100 ="C"; c500 = "D"; c1000 = "M";
+ КонецЕсли;
+
+ РимскоеЧисло = СокрЛП(РимскоеЧисло);
+ ЧислоСимволов = СтрДлина(РимскоеЧисло);
+
+ Для Сч = 1 По ЧислоСимволов Цикл
+ Если Сред(РимскоеЧисло,Сч,1) = c1000 Тогда
+ АрабскоеЧисло = АрабскоеЧисло+1000;
+ ИначеЕсли Сред(РимскоеЧисло,Сч,1) = c500 Тогда
+ АрабскоеЧисло = АрабскоеЧисло+500;
+ ИначеЕсли Сред(РимскоеЧисло,Сч,1) = c100 Тогда
+ Если (Сч < ЧислоСимволов) И ((Сред(РимскоеЧисло,Сч+1,1) = c500) Или (Сред(РимскоеЧисло,Сч+1,1) = c1000)) Тогда
+ АрабскоеЧисло = АрабскоеЧисло-100;
+ Иначе
+ АрабскоеЧисло = АрабскоеЧисло+100;
+ КонецЕсли;
+ ИначеЕсли Сред(РимскоеЧисло,Сч,1) = c50 Тогда
+ АрабскоеЧисло = АрабскоеЧисло+50;
+ ИначеЕсли Сред(РимскоеЧисло,Сч,1) = c10 Тогда
+ Если (Сч < ЧислоСимволов) И ((Сред(РимскоеЧисло,Сч+1,1) = c50) Или (Сред(РимскоеЧисло,Сч+1,1) = c100)) Тогда
+ АрабскоеЧисло = АрабскоеЧисло-10;
+ Иначе
+ АрабскоеЧисло = АрабскоеЧисло+10;
+ КонецЕсли;
+ ИначеЕсли Сред(РимскоеЧисло,Сч,1) = c5 Тогда
+ АрабскоеЧисло = АрабскоеЧисло+5;
+ ИначеЕсли Сред(РимскоеЧисло,Сч,1) = c1 Тогда
+ Если (Сч < ЧислоСимволов) И ((Сред(РимскоеЧисло,Сч+1,1) = c5) Или (Сред(РимскоеЧисло,Сч+1,1) = c10)) Тогда
+ АрабскоеЧисло = АрабскоеЧисло-1;
+ Иначе
+ АрабскоеЧисло = АрабскоеЧисло+1;
+ КонецЕсли;
+ КонецЕсли;
+ КонецЦикла;
+
+ Возврат АрабскоеЧисло;
+
+КонецФункции
+
+// Очищает текст в формате HTML от тегов и возвращает неформатированный текст.
+//
+// Параметры:
+// ИсходныйТекст - Строка - текст в формате HTML.
+//
+// Возвращаемое значение:
+// Строка - текст, очищенный от тегов, скриптов и заголовков.
+//
+Функция ИзвлечьТекстИзHTML(Знач ИсходныйТекст) Экспорт
+ Результат = "";
+
+ Текст = НРег(ИсходныйТекст);
+
+ // отрезаем все что не body
+ Позиция = СтрНайти(Текст, " 0 Тогда
+ Текст = Сред(Текст, Позиция + 5);
+ ИсходныйТекст = Сред(ИсходныйТекст, Позиция + 5);
+ Позиция = СтрНайти(Текст, ">");
+ Если Позиция > 0 Тогда
+ Текст = Сред(Текст, Позиция + 1);
+ ИсходныйТекст = Сред(ИсходныйТекст, Позиция + 1);
+ КонецЕсли;
+ КонецЕсли;
+
+ Позиция = СтрНайти(Текст, "");
+ Если Позиция > 0 Тогда
+ Текст = Лев(Текст, Позиция - 1);
+ ИсходныйТекст = Лев(ИсходныйТекст, Позиция - 1);
+ КонецЕсли;
+
+ // вырезаем скрипты
+ Позиция = СтрНайти(Текст, "");
+ Если ПозицияЗакрывающегоТега = 0 Тогда
+ // Не найден закрывающий тег - вырезаем оставшийся текст.
+ ПозицияЗакрывающегоТега = СтрДлина(Текст);
+ КонецЕсли;
+ Текст = Лев(Текст, Позиция - 1) + Сред(Текст, ПозицияЗакрывающегоТега + 9);
+ ИсходныйТекст = Лев(ИсходныйТекст, Позиция - 1) + Сред(ИсходныйТекст, ПозицияЗакрывающегоТега + 9);
+ Позиция = СтрНайти(Текст, "
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+