1
0
mirror of https://github.com/firstBitSportivnaya/PSSL.git synced 2024-11-21 17:56:47 +02:00

Documentation on objects and modules (#52)

Добавлена документация по подсистемам:
Предопределенные значения
Соответствия объектов ИБ
Программная модификация форм
This commit is contained in:
DenisUshakov 2024-04-19 16:45:43 +03:00 committed by GitHub
parent b730bf299b
commit 4e6c5a9c64
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 309 additions and 3 deletions

View File

@ -14,9 +14,9 @@
Реализованные на данный момент подсистемы:
1. Предопределенные значения
2. Соответствия объектов ИБ
3. Программная модификация форм
1. [Предопределенные значения](docs/ПредопределенныеЗначения.md)
2. [Соответствия объектов ИБ](docs/СоответствиеОбъектовИнформационнойБазы.md)
3. [Программная модификация форм](docs/РаботаСФормами.md)
4. Подписки на события
5. Управление интеграциями
6. Пользовательские функции

View File

@ -0,0 +1,71 @@
# Подисистема аналог библиотеки стандартных подсистем, для переопределения методов БСП
## 1. Использование общих модулей для переадресации методов
Для переадресации методов используются общие модули-аналоги в названии которых содержится "Служебный", пример: "__ОбщегоНазначенияСлужебный". В случае отсутствия библиотеки стандартных подсистем(БСП), используются аналоги модулей и методов БСП.
Пример вызова серверной процедуры:
```1C (BSL)
&НаСервере
Процедура СохранитьКаталогИсходногоКодаКонфигурации(Каталог)
__ОбщегоНазначенияСлужебный.ХранилищеОбщихНастроекСохранить(
КлючОбъекта(),
"__ПользовательскиеФункции_КаталогИсходногоКода",
Каталог);
КонецПроцедуры
```
```1C (BSL)
Процедура ОчиститьИсториюИнтеграции() Экспорт
Попытка
// Попытка удаления элементов справочника
Исключение
ИмяСобытия = НСтр("ru = 'Очистка истории интеграции'");
ТекстОшибки = СтрШаблон("Не удалось удалить запись истории интеграции %1", ВыборкаДетальныеЗаписи.Ссылка);
__ЖурналРегистрацииСлужебный.ДобавитьСообщениеДляЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Ошибка,,, ТекстОшибки);
КонецПопытки;
КонецПроцедуры
```
## 2. Добавление новых методов-аналогов БСП
### 2.1 Поиск или создание внутренних модулей, аналогичных модулям БСП
Найти внутренний модуль, с аналогичным названием и свойствами в БСП, если модуль отсутствует необходимо добавить новый, в имени должно содержатся "Служебный" (согласно общей концепции переопределения методов БСП).
Пример: "__ОбщегоНазначенияСлужебный", "__ЖурналРегистрацииСлужебный".
Методы располагаются в области "ПереадресацияМетодов", в описание метода указать см. __ИмяМодуля.ИмяМетода.
```1C (BSL)
#Область ПереадресацияМетодов
// См. __ОбщегоНазначенияСервер.ВыполнитьМетодКонфигурации.
Процедура ВыполнитьМетодКонфигурации(Знач ИмяМетода, Знач Параметры = Неопределено) Экспорт
Модуль = ПолучитьМодуль();
Модуль.ВыполнитьМетодКонфигурации(ИмяМетода, Параметры);
КонецПроцедуры
#КонецОбласти
```
Если модуль-аналог новый добавить функцию в области "СлужебныеПроцедурыИФункции", где __ИмяМодуля для серверных модулей "__ОбщегоНазначенияПовтИсп.", для клиентских "__ОбщегоНазначенияКлиент"
```1C (BSL)
Функция ПолучитьМодуль()
Возврат __ИмяМодуля.ОбщийМодуль(ИмяМодуляБСП, ИмяМодуляАналогаБСП);
КонецФункции
```
### 2.2 Создание методов в модуле-аналоге
Пример: "__ОбщегоНазначения". Методы располагаются в области "МетодыАналогиБСП", описание метода начинать с "Аналог метода БСП."
```1C (BSL)
#Область МетодыАналогиБСП
// Аналог метода БСП. Описание
//
Процедура ВыполнитьМетодКонфигурации(Знач ИмяМетода, Знач Параметры = Неопределено) Экспорт
// ...
КонецПроцедуры
#КонецОбласти
```

View File

@ -0,0 +1,54 @@
# Подсистема предопределенных значений
Пример добавления нового элемента в модуле __ПредопределенныеЗначенияПереопределяемый
```1C (BSL)
Функция ПредопределенныеЗначения() Экспорт
Результат = ТаблицаПредопределенных();
// Добавление
НоваяНастройка = Результат.Добавить();
НоваяНастройка.Наименование = "Пароль доступа на ИТС";
НоваяНастройка.ИдентификаторНастройки = "ПарольДоступаНаИТС";
НоваяНастройка.Пароль = Истина;
НоваяНастройка.СписокЗначений = Ложь;
НоваяНастройка.ТипЗначения = Новый ОписаниеТипов("Строка",,,, Новый КвалификаторыСтроки(150));
// КонецДобавления
Возврат Результат;
КонецФункции
```
Пример получения множественного результата, второй параметр указывает если Истина, то результат оборачивается в соответствие, где Ключ - Имя предопределенного элемента, Значение - значение предопределенного элемента
```1C (BSL)
Функция ПолучитьДанныеАвторизации()
ДанныеАвторизации = Новый Структура("Логин, Пароль");
Результат = __ОбщегоНазначенияСервер.ПолучитьПредопределенныеЗначения("Логин_ИТС, Пароль_ИТС", Истина, Истина);
Для Каждого Пара Из Результат Цикл
Сообщить("Ключ: " Пара.Ключ);
Сообщить("Значение: "+ Пара.Значение);
ДанныеАвторизации[Пара.Ключ] = Пара.Значение;
КонецЦикла;
Возврат ДанныеАвторизации;
КонецФункции
```
Пример получения единичного результата
```1C (BSL)
Функция ЗаписыватьДанныеСтандартнымСпособом(ПроверяемаяДата)
Результат = __ОбщегоНазначенияСервер.ПолучитьПредопределенныеЗначения("ДатаНачалаЗаписиВРегистры", Истина, Истина);
Возврат ПроверяемаяДата = Результат;
КонецФункции
```

View File

@ -0,0 +1,143 @@
# Общий модуль __РаботаСФормами - Модуль динамического формирования интерфейса
Демо-пример использования методов общего модуля
```1C (BSL)
#Область ДемоПример
#Область РаботаСРеквизитамиФормы
//
СтруктураРеквизитов = Новый Структура;
СтруктураРеквизитов.Вставить("_ДемоДата", __РаботаСФормами.ОписаниеТипаДатаВремя());
СтруктураРеквизитов.Вставить("_ДемоНомер", __РаботаСФормами.ОписаниеТипаСтрока(11));
СтруктураРеквизитов.Вставить("_ДемоПокупатель", __РаботаСФормами.ОписаниеТипаСправочник("_ДемоКонтрагенты"));
СтруктураРеквизитов.Вставить("_ДемоПлатнаяДоставка", __РаботаСФормами.ОписаниеТипаБулево());
СтруктураРеквизитов.Вставить("_ДемоТолькоБудни", __РаботаСФормами.ОписаниеТипаБулево());
СтруктураРеквизитов.Вставить("_ДемоПолКурьера", __РаботаСФормами.ОписаниеТипаПеречисление("_ДемоПолФизическогоЛица"));
СтруктураРеквизитов.Вставить("_ДемоТовары", __РаботаСФормами.ОписаниеТипаТаблицаЗначений());
СтруктураРеквизитов.Вставить("_ДемоКомментарий", __РаботаСФормами.ОписаниеТипаСтрока(100));
__РаботаСФормами.СоздатьРеквизиты(Форма, СтруктураРеквизитов);
// Реквизит таб. части.
СтруктураРеквизитовТабЧасти = Новый Структура;
СтруктураРеквизитовТабЧасти.Вставить("_ДемоТовар", __РаботаСФормами.ОписаниеТипаСправочник("_ДемоНоменклатура"));
СтруктураРеквизитовТабЧасти.Вставить("_ДемоКоличество", __РаботаСФормами.ОписаниеТипаЧисло(10));
СтруктураРеквизитовТабЧасти.Вставить("_ДемоЦена", __РаботаСФормами.ОписаниеТипаЧисло(10,2));
СтруктураРеквизитовТабЧасти.Вставить("_ДемоУпаковать", __РаботаСФормами.ОписаниеТипаБулево());
СтруктураРеквизитовТабЧасти.Вставить("_ДемоХрупкое", __РаботаСФормами.ОписаниеТипаБулево());
__РаботаСФормами.СоздатьРеквизитыТаблицы(Форма, "_ДемоТовары", СтруктураРеквизитовТабЧасти);
#КонецОбласти
#Область РаботаСГруппамиФормы
//
ГруппаШапка = __РаботаСФормами.СоздатьГруппаОбычнаяБезОтображения(Форма, "_ДемоГруппаШапка", Форма, 3);
ГруппаШапкаЛевая = __РаботаСФормами.СоздатьГруппаОбычнаяБезОтображения(Форма, "_ДемоГруппаШапкаЛевая", ГруппаШапка, 1);
ГруппаНомерДата = __РаботаСФормами.СоздатьГруппаОбычнаяБезОтображения(Форма, "_ДемоГруппаНомерДата", ГруппаШапкаЛевая, 3);
ГруппаШапкаПравая = __РаботаСФормами.СоздатьГруппаОбычнаяБезОтображения(Форма, "_ДемоГруппаШапкаПравая", ГруппаШапка, 1);
ГруппаСтраниц = __РаботаСФормами.СоздатьГруппаСтраниц(Форма, "_ДемоГруппаСтраниц", Форма, 1, 1);
ГруппаТовары = __РаботаСФормами.СоздатьСтраница(Форма, "_ДемоГруппаТовары", ГруппаСтраниц, "Товары",, 1, 1);
ГруппаЗаказы = __РаботаСФормами.СоздатьСтраница(Форма, "_ДемоГруппаЗаказы", ГруппаСтраниц, "Заказы клиента",, 1, 1);
ГруппаПодвал = __РаботаСФормами.СоздатьГруппаОбычнаяБезОтображения(Форма, "_ДемоГруппаПодвал", Форма, 3);
#КонецОбласти
#Область РаботаСЭлементамиФормы
//
НовыйЭлемент = __РаботаСФормами.СоздатьПоле(Форма, "_ДемоНомер", ГруппаНомерДата, "Номер", 1, "_ДемоНомер");
ШиринаПоля = __РаботаСФормами.СтруктураСвойствРасположение(10,,, 10, Ложь,, Ложь);
ОсновныеНастройкиПоля = __РаботаСФормами.СтруктураСвойствОсновные(,,,,,, Истина);
__РаботаСФормами.УстановитьМножествоСтруктурСвойствЭлементу(НовыйЭлемент, ШиринаПоля, ОсновныеНастройкиПоля);
//
__РаботаСФормами.СоздатьПоле(Форма, "_ДемоДата", ГруппаНомерДата, "от", 1, "_ДемоДата");
__РаботаСФормами.СоздатьПоле(Форма, "_ДемоПокупатель", ГруппаШапкаЛевая, "Покупатель", 1, "_ДемоПокупатель");
__РаботаСФормами.СоздатьПоле(Форма, "_ДемоПлатнаяДоставка", ГруппаШапкаЛевая, "Платная доставка", 2, "_ДемоПлатнаяДоставка");
__РаботаСФормами.СоздатьПоле(Форма, "_ДемоПолКурьера", ГруппаШапкаПравая, "Пол курьера",1, "_ДемоПолКурьера");
__РаботаСФормами.СоздатьПоле(Форма, "_ДемоКомментарий", ГруппаПодвал, "Комментарий", 1, "_ДемоКомментарий");
// Флажки
__РаботаСФормами.СоздатьПолеФлажок(Форма, "ТолькоБудни", ГруппаШапкаЛевая, "Только будни", 3, "_ДемоТолькоБудни");
// Декорации
__РаботаСФормами.СоздатьДекорацияКартинка(Форма, "_ДемоКартинкаЛоготип", ГруппаПодвал, "_ДемоРазделБизнесПроцессыИЗадачи");
__РаботаСФормами.СоздатьДекорацияНадпись(Форма, "ИнформационнаяНадпись", ГруппаЗаказы, "Заказы по клиенту с начала года", 1);
НовыйЭлемент = __РаботаСФормами.СоздатьДекорацияКартинка(Форма, "_ДемоBotFather", ГруппаПодвал, "BotFather");
ОсновныеНастройкиПоля = __РаботаСФормами.СтруктураСвойствОсновные(,,,, Ложь);
__РаботаСФормами.УстановитьМножествоСтруктурСвойствЭлементу(НовыйЭлемент, ОсновныеНастройкиПоля);
// Выпадающий список
МассивЗначений = Новый Массив;
МассивЗначений.Добавить("Седан");
МассивЗначений.Добавить("Универсал");
МассивЗначений.Добавить("Грузовик");
МассивЗначений.Добавить("Метро");
__РаботаСФормами.СоздатьВыпадающийСписок(Форма, "ВыборТС", ГруппаШапкаПравая, "Тип ТС", МассивЗначений);
// Переключатель
МассивЗначений = Новый Массив;
МассивЗначений.Добавить("Обычная");
МассивЗначений.Добавить("Срочно");
МассивЗначений.Добавить("Вчера");
__РаботаСФормами.СоздатьПереключатель(Форма, "СрочностьДоставки", ГруппаШапкаПравая, "Срочность", МассивЗначений, 1);
// Таблица формы
СтруктураКолонок = Новый Структура;
СтруктураКолонок.Вставить("_ДемоТовар", "Товар");
СтруктураКолонок.Вставить("_ДемоКоличество", "Количество");
СтруктураКолонок.Вставить("_ДемоЦена", "Цена");
НовыйЭлемент = __РаботаСФормами.СоздатьТаблицаФормы(Форма, "_ДемоТовары", ГруппаТовары, "_ДемоТовары", СтруктураКолонок);
ВысотаТаблицы = __РаботаСФормами.СтруктураСвойствТаблицыФормы(,,,,,,, 4);
__РаботаСФормами.УстановитьСвойстваЭлементу(НовыйЭлемент, ВысотаТаблицы);
// Колонки таблицы формы
ГруппаКолонки = __РаботаСФормами.СоздатьГруппаКолонокТаблицыФормы(Форма, "_ДемоГруппаДополнительно", НовыйЭлемент, 2,,, "Дополнительно");
__РаботаСФормами.СоздатьКолонкаТаблицыФормы(Форма, "_ДемоУпаковать", ГруппаКолонки, 2, "Упаковать", "_ДемоТовары._ДемоУпаковать");
__РаботаСФормами.СоздатьКолонкаТаблицыФормы(Форма, "_ДемоХрупкое", ГруппаКолонки, 2, "Стекло", "_ДемоТовары._ДемоХрупкое");
// Динамический список
ТекстЗапроса = "ВЫБРАТЬ
| _ДемоСчетФактураПолученный.Ссылка КАК Ссылка,
| _ДемоСчетФактураПолученный.Номер КАК _ДемоНомер,
| _ДемоСчетФактураПолученный.Дата КАК _ДемоДата,
| _ДемоСчетФактураПолученный.Контрагент КАК _ДемоКонтрагент,
| _ДемоСчетФактураПолученный.Сумма КАК _ДемоСумма
|ИЗ
| Документ._ДемоСчетФактураПолученный КАК _ДемоСчетФактураПолученный
|ГДЕ
| _ДемоСчетФактураПолученный.Дата > &Дата";
ПараметрыЗапроса = Новый Структура;
ПараметрыЗапроса.Вставить("Дата", НачалоГода(ТекущаяДатаСеанса()));
СтруктураКолонок = Новый Структура;
СтруктураКолонок.Вставить("_ДемоДата", "");
СтруктураКолонок.Вставить("_ДемоНомер", "");
СтруктураКолонок.Вставить("_ДемоКонтрагент","Покупатель");
СтруктураКолонок.Вставить("_ДемоСумма", "");
НовыйЭлемент = __РаботаСФормами.СоздатьДинамическийСписок(Форма, "_ДемоЗаказы", ГруппаЗаказы, ТекстЗапроса,
ПараметрыЗапроса,, СтруктураКолонок,,, Истина);
__РаботаСФормами.УстановитьСвойстваЭлементу(НовыйЭлемент, ВысотаТаблицы);
#КонецОбласти
#Область РаботаСКомандами
//
__РаботаСФормами.СоздатьКоманду(Форма, "КогдаОбед", НСтр("ru='Когда обед?'; en='When is lunch?'"), "ПодсказатьКогдаОбед");
__РаботаСФормами.СоздатьКнопка(Форма, "КогдаОбед", ГруппаПодвал,, "КогдаОбед", 2);
__РаботаСФормами.СоздатьКоманду(Форма, "СкрытьОтца", "Скрыть отца", "СкрытьОтца");
__РаботаСФормами.СоздатьКнопка(Форма, "СкрытьОтца", ГруппаПодвал,, "СкрытьОтца", 1);
__РаботаСФормами.СоздатьКоманду(Форма, "ПоказатьОтца", "Показать отца", "ПоказатьОтца");
__РаботаСФормами.СоздатьКнопка(Форма, "ПоказатьОтца", ГруппаПодвал,, "ПоказатьОтца", 1);
#КонецОбласти
#КонецОбласти
```

View File

@ -0,0 +1,38 @@
# Соответствие объектов информационной базы через регистр сведений
1. ПолучитьСоответствиеОбъектовИБ - Позволяет фильтровать результаты по трем объектам.
```1C (BSL)
Процедура Тест()
// Вызов метода с заданными параметрами
МассивСоответствий = __ОбщегоНазначенияСервер.ПолучитьСоответствиеОбъектовИБ(ТипСоответствия, Объект1, Объект2, , Истина);
// Пример обработки полученного массива структур
Для Каждого Соответствие Из МассивСоответствий Цикл
Сообщить("Тип соответствия: " + Соответствие.ТипСоответствия);
Сообщить("Объект 1: " + Соответствие.Объект1);
Сообщить("Объект 2: " + Соответствие.Объект2);
Сообщить("Объект 3: " + Соответствие.Объект3);
КонецЦикла;
КонецПроцедуры
```
2. ПолучитьЗначенияОбъектаСоответствияПоКлючу
```1C (BSL)
Процедура Тест()
ИмяКлюча = "Объект1";
ЗначениеКлюча = Склад;
ИмяОбъекта = "Объект3";
// Вызов метода с заданными параметрами
Значения = __ОбщегоНазначенияСервер.ПолучитьЗначенияОбъектаСоответствияПоКлючу(ТипСоответствия, ИмяКлюча, ЗначениеКлюча, ИмяОбъекта);
// Пример использования полученного массива значений
Если ЗначениеЗаполнено(Значения) Тогда
Для Каждого Значение Из Значения Цикл
Сообщить("Значение объекта: " + Значение);
КонецЦикла;
Иначе
Сообщить("По заданному ключу объекты не найдены.");
КонецЕсли;
КонецПроцедуры
```