diff --git "a/docs/\320\234\320\276\320\264\320\270\321\204\320\270\320\272\320\260\321\206\320\270\321\217\320\244\320\276\321\200\320\274.md" "b/docs/\320\234\320\276\320\264\320\270\321\204\320\270\320\272\320\260\321\206\320\270\321\217\320\244\320\276\321\200\320\274.md"
index d6f0e154..a4eab975 100644
--- "a/docs/\320\234\320\276\320\264\320\270\321\204\320\270\320\272\320\260\321\206\320\270\321\217\320\244\320\276\321\200\320\274.md"
+++ "b/docs/\320\234\320\276\320\264\320\270\321\204\320\270\320\272\320\260\321\206\320\270\321\217\320\244\320\276\321\200\320\274.md"
@@ -1,5 +1,8 @@
# Подсистема "модификация форм"
+## Описание
+
+Предназначена для динамического формирования интерфейса. Также используется в случае изменения типовых форм.
Предназначена для динамического формирования интерфейса. Также использовать в случае изменения типовых форма.
- Общий модуль **__МодификацияКонфигурацииПереопределяемый** используется для маршрутизации из серверных процедур (напр. **ПриСозданииНаСервере**) по дополнительным модулям разбитым по объектам (напр. **__МодификацияКонфигурацииПереопределяемыйДокумент**). В сам модуль **__МодификацияКонфигурацииПереопределяемый** могут добавляться обработчики событий которых нет изначально.
@@ -10,6 +13,71 @@
- Использовать функции и процедуры общего модуля **__РаботаСФормами** для уменьшения объема текста при добавлении элементов (напр. **__РаботаСФормами.СоздатьПоле(Форма, "_ДемоДата", ГруппаНомерДата, "от", 1, "_ДемоДата")**)
- В случае если для нужного типа объекта ещё не был создан общий модуль, создать его и добавить в подсистему **__МодификацияФорм**
+## Расширение модификации формы
+
+Проверка сущетсвует ли обработчик события в форме из которой была вызвана функция.
+
+Порядок действий:
+- Если в общем модуле **__МодификацияКонфигурации<директива>Переопределяемый** нет функции **СуществуетОбработчикСобытия**, необходимо добавить согласно примеру ниже
+
+```1C (BSL)
+Функция СуществуетОбработчикСобытия(ИмяФормы, Обработчик = "")
+
+ Если Обработчик = <ИмяПроверяемогоОбработчика> Тогда
+ Список = __МодификацияКонфигурации<директива>ПовтИсп.СписокФорм<ИмяПроверяемогоОбработчика>();
+ КонецЕсли;
+
+ Возврат Список.Получить(ИмяФормы) <> Неопределено;
+
+КонецФункции
+```
+
+- Создать в общем модуле **__МодификацияКонфигурации<директива>ПовтИсп** функцию с именем **СписокФорм<ИмяПроверяемогоОбработчика>**. Дополнить соответствие строковым представлением формы (Форма.ИмяФормы) в области // Добавление
+
+```1C (BSL)
+Функция СписокФорм<ИмяОбработчика>() Экспорт
+
+ СписокФорм = Новый Соответствие;
+
+ // Добавление
+ СписокФорм.Вставить("Документ.ДемоРаботаСФормами.Форма.ФормаДокумента", Истина);
+ СписокФорм.Вставить("ПланВидовХарактеристик.__ПредопределенныеЗначения.Форма.ФормаСписка", Истина);
+ // КонецДобавления
+
+ Возврат Новый ФиксированноеСоответствие(СписокФорм);
+
+КонецФункции
+```
+
+Пример вызова проверки из типового модуля конфигурации **МодификацияКонфигурацииПереопределяемый**:
+
+```1C (BSL)
+Процедура ПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка) Экспорт
+ Если __МодификацияКонфигурацииПереопределяемый.СуществуетОбработчикСобытия(Форма.ИмяФормы, "ПриСозданииНаСервере") = Ложь Тогда
+ Возврат;
+ КонецЕсли;
+ __МодификацияКонфигурацииПереопределяемый.ПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка);
+КонецПроцедуры
+```
+
+Пример вызова проверки в расширении, когда в типовой форме отсутствует вызов типового модуля **МодификацияКонфигурацииПереопределяемый**:
+
+```1C (BSL)
+&После("ПриСозданииНаСервере")
+Процедура __ПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка)
+
+ Если Отказ Тогда
+ Возврат;
+ КонецЕсли;
+
+ //Проверяем необходимо ли модифицировать данную форму
+ Если __МодификацияКонфигурацииПереопределяемый.СуществуетОбработчикСобытия(Форма.ИмяФормы, "ПриСозданииНаСервере") Тогда
+ __МодификацияКонфигурацииПереопределяемый.ПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка);
+ КонецЕсли;
+
+КонецПроцедуры
+```
+
Демо-пример использования методов общего модуля
```1C (BSL)
diff --git "a/src/cf/CommonModules/__\320\234\320\276\320\264\320\270\321\204\320\270\320\272\320\260\321\206\320\270\321\217\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\232\320\273\320\270\320\265\320\275\321\202\320\237\320\265\321\200\320\265\320\276\320\277\321\200\320\265\320\264\320\265\320\273\321\217\320\265\320\274\321\213\320\271/Ext/Module.bsl" "b/src/cf/CommonModules/__\320\234\320\276\320\264\320\270\321\204\320\270\320\272\320\260\321\206\320\270\321\217\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\232\320\273\320\270\320\265\320\275\321\202\320\237\320\265\321\200\320\265\320\276\320\277\321\200\320\265\320\264\320\265\320\273\321\217\320\265\320\274\321\213\320\271/Ext/Module.bsl"
index d152a495..7c1c4d54 100644
--- "a/src/cf/CommonModules/__\320\234\320\276\320\264\320\270\321\204\320\270\320\272\320\260\321\206\320\270\321\217\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\232\320\273\320\270\320\265\320\275\321\202\320\237\320\265\321\200\320\265\320\276\320\277\321\200\320\265\320\264\320\265\320\273\321\217\320\265\320\274\321\213\320\271/Ext/Module.bsl"
+++ "b/src/cf/CommonModules/__\320\234\320\276\320\264\320\270\321\204\320\270\320\272\320\260\321\206\320\270\321\217\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\232\320\273\320\270\320\265\320\275\321\202\320\237\320\265\321\200\320\265\320\276\320\277\321\200\320\265\320\264\320\265\320\273\321\217\320\265\320\274\321\213\320\271/Ext/Module.bsl"
@@ -52,4 +52,29 @@
КонецПроцедуры
+// Функция - Существует обработчик события
+//
+// Параметры:
+// ИмяФормы - Строка - Форма.ИмяФормы
+// Обработчик - Строка - Имя проверяемого обработчика
+//
+// Возвращаемое значение:
+// Булево - Возвращает истину, если в списке форм найдена форма
+//
+Функция СуществуетОбработчикСобытия(ИмяФормы, Обработчик = "") Экспорт
+
+ Если Обработчик = "ПриОткрытии" Тогда
+ Список = __МодификацияКонфигурацииКлиентПовтИсп.СписокФормПриОткрытии();
+ ИначеЕсли Обработчик = "ПередЗаписью" Тогда
+ Список = __МодификацияКонфигурацииКлиентПовтИсп.СписокФормПередЗаписью();
+ ИначеЕсли Обработчик = "ПослеЗаписи" Тогда
+ Список = __МодификацияКонфигурацииКлиентПовтИсп.СписокФормПослеЗаписи();
+ Иначе
+ Возврат Ложь;
+ КонецЕсли;
+
+ Возврат Список.Получить(ИмяФормы) <> Неопределено;
+
+КонецФункции
+
#КонецОбласти // ПрограммныйИнтерфейс
\ No newline at end of file
diff --git "a/src/cf/CommonModules/__\320\234\320\276\320\264\320\270\321\204\320\270\320\272\320\260\321\206\320\270\321\217\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\232\320\273\320\270\320\265\320\275\321\202\320\237\320\276\320\262\321\202\320\230\321\201\320\277.xml" "b/src/cf/CommonModules/__\320\234\320\276\320\264\320\270\321\204\320\270\320\272\320\260\321\206\320\270\321\217\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\232\320\273\320\270\320\265\320\275\321\202\320\237\320\276\320\262\321\202\320\230\321\201\320\277.xml"
new file mode 100644
index 00000000..9cd4556a
--- /dev/null
+++ "b/src/cf/CommonModules/__\320\234\320\276\320\264\320\270\321\204\320\270\320\272\320\260\321\206\320\270\321\217\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\232\320\273\320\270\320\265\320\275\321\202\320\237\320\276\320\262\321\202\320\230\321\201\320\277.xml"
@@ -0,0 +1,23 @@
+
+
+
+
+ __МодификацияКонфигурацииКлиентПовтИсп
+
+
+ ru
+ Модификация конфигурации клиент повт исп
+
+
+
+ false
+ true
+ false
+ false
+ false
+ false
+ false
+ DuringSession
+
+
+
\ No newline at end of file
diff --git "a/src/cf/CommonModules/__\320\234\320\276\320\264\320\270\321\204\320\270\320\272\320\260\321\206\320\270\321\217\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\232\320\273\320\270\320\265\320\275\321\202\320\237\320\276\320\262\321\202\320\230\321\201\320\277/Ext/Module.bsl" "b/src/cf/CommonModules/__\320\234\320\276\320\264\320\270\321\204\320\270\320\272\320\260\321\206\320\270\321\217\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\232\320\273\320\270\320\265\320\275\321\202\320\237\320\276\320\262\321\202\320\230\321\201\320\277/Ext/Module.bsl"
new file mode 100644
index 00000000..91d9d0e1
--- /dev/null
+++ "b/src/cf/CommonModules/__\320\234\320\276\320\264\320\270\321\204\320\270\320\272\320\260\321\206\320\270\321\217\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\232\320\273\320\270\320\265\320\275\321\202\320\237\320\276\320\262\321\202\320\230\321\201\320\277/Ext/Module.bsl"
@@ -0,0 +1,59 @@
+// Библиотека проектных подсистем для упрощения разработки архитектуры на 1С: Предприятие 8,
+// включая доработку типовых конфигураций.
+//
+// Copyright First BIT 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.
+//
+// URL: https://github.com/firstBitSportivnaya/PSSL/
+//
+
+#Область СлужебныйПрограммныйИнтерфейс
+
+Функция СписокФормПриОткрытии() Экспорт
+
+ СписокФорм = Новый Соответствие;
+
+ // Добавление
+
+ // КонецДобавления
+
+ Возврат Новый ФиксированноеСоответствие(СписокФорм);
+
+КонецФункции
+
+Функция СписокФормПередЗаписью() Экспорт
+
+ СписокФорм = Новый Соответствие;
+
+ // Добавление
+
+ // КонецДобавления
+
+ Возврат Новый ФиксированноеСоответствие(СписокФорм);
+
+КонецФункции
+
+Функция СписокФормПослеЗаписи() Экспорт
+
+ СписокФорм = Новый Соответствие;
+
+ // Добавление
+
+ // КонецДобавления
+
+ Возврат Новый ФиксированноеСоответствие(СписокФорм);
+
+КонецФункции
+
+#КонецОбласти
diff --git "a/src/cf/CommonModules/__\320\234\320\276\320\264\320\270\321\204\320\270\320\272\320\260\321\206\320\270\321\217\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\237\320\265\321\200\320\265\320\276\320\277\321\200\320\265\320\264\320\265\320\273\321\217\320\265\320\274\321\213\320\271/Ext/Module.bsl" "b/src/cf/CommonModules/__\320\234\320\276\320\264\320\270\321\204\320\270\320\272\320\260\321\206\320\270\321\217\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\237\320\265\321\200\320\265\320\276\320\277\321\200\320\265\320\264\320\265\320\273\321\217\320\265\320\274\321\213\320\271/Ext/Module.bsl"
index 7a6ea3e3..6fed9ffd 100644
--- "a/src/cf/CommonModules/__\320\234\320\276\320\264\320\270\321\204\320\270\320\272\320\260\321\206\320\270\321\217\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\237\320\265\321\200\320\265\320\276\320\277\321\200\320\265\320\264\320\265\320\273\321\217\320\265\320\274\321\213\320\271/Ext/Module.bsl"
+++ "b/src/cf/CommonModules/__\320\234\320\276\320\264\320\270\321\204\320\270\320\272\320\260\321\206\320\270\321\217\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\237\320\265\321\200\320\265\320\276\320\277\321\200\320\265\320\264\320\265\320\273\321\217\320\265\320\274\321\213\320\271/Ext/Module.bsl"
@@ -528,6 +528,35 @@
#КонецОбласти // ПроцедурыИФункцииРаботыСУсловнымОформлением
+// Функция - Существует обработчик события
+//
+// Параметры:
+// ИмяФормы - Строка - Форма.ИмяФормы
+// Обработчик - Строка - Имя проверяемого обработчика
+//
+// Возвращаемое значение:
+// Булево - Возвращает истину, если в списке форм найдена форма
+//
+Функция СуществуетОбработчикСобытия(ИмяФормы, Обработчик = "") Экспорт
+
+ // Добавление
+ Если Обработчик = "ПриЧтенииНаСервере" Тогда
+ Список = __МодификацияКонфигурацииПовтИсп.СписокФормПриЧтенииНаСервере();
+ ИначеЕсли Обработчик = "ПриСозданииНаСервере" Тогда
+ Список = __МодификацияКонфигурацииПовтИсп.СписокФормПриСозданииНаСервере();
+ ИначеЕсли Обработчик = "ПередЗаписьюНаСервере" Тогда
+ Список = __МодификацияКонфигурацииПовтИсп.СписокФормПередЗаписьюНаСервере();
+ ИначеЕсли Обработчик = "ПослеЗаписиНаСервере" Тогда
+ Список = __МодификацияКонфигурацииПовтИсп.СписокФормПослеЗаписиНаСервере();
+ Иначе
+ Возврат Ложь;
+ КонецЕсли;
+ // КонецДобавления
+
+ Возврат Список.Получить(ИмяФормы) <> Неопределено;
+
+КонецФункции
+
#КонецОбласти // ПрограммныйИнтерфейс
#Область СлужебныеПроцедурыИФункции
diff --git "a/src/cf/CommonModules/__\320\234\320\276\320\264\320\270\321\204\320\270\320\272\320\260\321\206\320\270\321\217\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\237\320\276\320\262\321\202\320\230\321\201\320\277.xml" "b/src/cf/CommonModules/__\320\234\320\276\320\264\320\270\321\204\320\270\320\272\320\260\321\206\320\270\321\217\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\237\320\276\320\262\321\202\320\230\321\201\320\277.xml"
new file mode 100644
index 00000000..385912b2
--- /dev/null
+++ "b/src/cf/CommonModules/__\320\234\320\276\320\264\320\270\321\204\320\270\320\272\320\260\321\206\320\270\321\217\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\237\320\276\320\262\321\202\320\230\321\201\320\277.xml"
@@ -0,0 +1,23 @@
+
+
+
+
+ __МодификацияКонфигурацииПовтИсп
+
+
+ ru
+ Модификация конфигурации повт исп
+
+
+
+ false
+ false
+ true
+ true
+ false
+ false
+ false
+ DuringSession
+
+
+
\ No newline at end of file
diff --git "a/src/cf/CommonModules/__\320\234\320\276\320\264\320\270\321\204\320\270\320\272\320\260\321\206\320\270\321\217\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\237\320\276\320\262\321\202\320\230\321\201\320\277/Ext/Module.bsl" "b/src/cf/CommonModules/__\320\234\320\276\320\264\320\270\321\204\320\270\320\272\320\260\321\206\320\270\321\217\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\237\320\276\320\262\321\202\320\230\321\201\320\277/Ext/Module.bsl"
new file mode 100644
index 00000000..9daa0e11
--- /dev/null
+++ "b/src/cf/CommonModules/__\320\234\320\276\320\264\320\270\321\204\320\270\320\272\320\260\321\206\320\270\321\217\320\232\320\276\320\275\321\204\320\270\320\263\321\203\321\200\320\260\321\206\320\270\320\270\320\237\320\276\320\262\321\202\320\230\321\201\320\277/Ext/Module.bsl"
@@ -0,0 +1,72 @@
+// Библиотека проектных подсистем для упрощения разработки архитектуры на 1С: Предприятие 8,
+// включая доработку типовых конфигураций.
+//
+// Copyright First BIT 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.
+//
+// URL: https://github.com/firstBitSportivnaya/PSSL/
+//
+
+#Область СлужебныйПрограммныйИнтерфейс
+
+Функция СписокФормПриЧтенииНаСервере() Экспорт
+
+ СписокФорм = Новый Соответствие;
+
+ // Добавление
+
+ // КонецДобавления
+
+ Возврат Новый ФиксированноеСоответствие(СписокФорм);
+
+КонецФункции
+
+Функция СписокФормПриСозданииНаСервере() Экспорт
+
+ СписокФорм = Новый Соответствие;
+
+ // Добавление
+ СписокФорм.Вставить("Документ.ДемоРаботаСФормами.Форма.ФормаДокумента", Истина);
+ СписокФорм.Вставить("ПланВидовХарактеристик.__ПредопределенныеЗначения.Форма.ФормаСписка", Истина);
+ // КонецДобавления
+
+ Возврат Новый ФиксированноеСоответствие(СписокФорм);
+
+КонецФункции
+
+Функция СписокФормПередЗаписьюНаСервере() Экспорт
+
+ СписокФорм = Новый Соответствие;
+
+ // Добавление
+
+ // КонецДобавления
+
+ Возврат Новый ФиксированноеСоответствие(СписокФорм);
+
+КонецФункции
+
+Функция СписокФормПослеЗаписиНаСервере() Экспорт
+
+ СписокФорм = Новый Соответствие;
+
+ // Добавление
+
+ // КонецДобавления
+
+ Возврат Новый ФиксированноеСоответствие(СписокФорм);
+
+КонецФункции
+
+#КонецОбласти
diff --git a/src/cf/Configuration.xml b/src/cf/Configuration.xml
index ed6a8524..8b3ef14f 100644
--- a/src/cf/Configuration.xml
+++ b/src/cf/Configuration.xml
@@ -280,10 +280,12 @@
__КоннекторHTTP
__МетодыРегламентныхЗаданийСервер
__МодификацияКонфигурацииКлиентПереопределяемый
+ __МодификацияКонфигурацииКлиентПовтИсп
__МодификацияКонфигурацииКлиентСерверПереопределяемый
__МодификацияКонфигурацииПереопределяемый
__МодификацияКонфигурацииПереопределяемыйДокумент
__МодификацияКонфигурацииПереопределяемыйПланВидовХарактеристик
+ __МодификацияКонфигурацииПовтИсп
__ОбновлениеИнформационнойБазыПБП
__ОбщегоНазначенияВызовСервера
__ОбщегоНазначенияКлиент