diff --git a/README.md b/README.md index 724865e2..8f1e1927 100644 --- a/README.md +++ b/README.md @@ -14,9 +14,9 @@ Реализованные на данный момент подсистемы: -1. Предопределенные значения -2. Соответствия объектов ИБ -3. Программная модификация форм +1. [Предопределенные значения](docs/ПредопределенныеЗначения.md) +2. [Соответствия объектов ИБ](docs/СоответствиеОбъектовИнформационнойБазы.md) +3. [Программная модификация форм](docs/РаботаСФормами.md) 4. Подписки на события 5. Управление интеграциями 6. Пользовательские функции diff --git "a/docs/\320\237\320\265\321\200\320\265\320\276\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\270\320\265\320\234\320\265\321\202\320\276\320\264\320\276\320\262\320\221\320\241\320\237.md" "b/docs/\320\237\320\265\321\200\320\265\320\276\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\270\320\265\320\234\320\265\321\202\320\276\320\264\320\276\320\262\320\221\320\241\320\237.md" new file mode 100644 index 00000000..e34ddcc0 --- /dev/null +++ "b/docs/\320\237\320\265\321\200\320\265\320\276\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\270\320\265\320\234\320\265\321\202\320\276\320\264\320\276\320\262\320\221\320\241\320\237.md" @@ -0,0 +1,71 @@ +# Подисистема аналог библиотеки стандартных подсистем, для переопределения методов БСП + + ## 1. Использование общих модулей для переадресации методов + Для переадресации методов используются общие модули-аналоги в названии которых содержится "Служебный", пример: "__ОбщегоНазначенияСлужебный". В случае отсутствия библиотеки стандартных подсистем(БСП), используются аналоги модулей и методов БСП. + + Пример вызова серверной процедуры: + + ```1C (BSL) + &НаСервере + Процедура СохранитьКаталогИсходногоКодаКонфигурации(Каталог) + __ОбщегоНазначенияСлужебный.ХранилищеОбщихНастроекСохранить( + КлючОбъекта(), + "__ПользовательскиеФункции_КаталогИсходногоКода", + Каталог); + КонецПроцедуры + ``` + + ```1C (BSL) + Процедура ОчиститьИсториюИнтеграции() Экспорт + Попытка + // Попытка удаления элементов справочника + Исключение + ИмяСобытия = НСтр("ru = 'Очистка истории интеграции'"); + ТекстОшибки = СтрШаблон("Не удалось удалить запись истории интеграции %1", ВыборкаДетальныеЗаписи.Ссылка); + + __ЖурналРегистрацииСлужебный.ДобавитьСообщениеДляЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Ошибка,,, ТекстОшибки); + КонецПопытки; + КонецПроцедуры + ``` + + ## 2. Добавление новых методов-аналогов БСП + ### 2.1 Поиск или создание внутренних модулей, аналогичных модулям БСП + Найти внутренний модуль, с аналогичным названием и свойствами в БСП, если модуль отсутствует необходимо добавить новый, в имени должно содержатся "Служебный" (согласно общей концепции переопределения методов БСП). + + Пример: "__ОбщегоНазначенияСлужебный", "__ЖурналРегистрацииСлужебный". + + Методы располагаются в области "ПереадресацияМетодов", в описание метода указать см. __ИмяМодуля.ИмяМетода. + + ```1C (BSL) + #Область ПереадресацияМетодов + + // См. __ОбщегоНазначенияСервер.ВыполнитьМетодКонфигурации. + Процедура ВыполнитьМетодКонфигурации(Знач ИмяМетода, Знач Параметры = Неопределено) Экспорт + Модуль = ПолучитьМодуль(); + Модуль.ВыполнитьМетодКонфигурации(ИмяМетода, Параметры); + КонецПроцедуры + + #КонецОбласти + ``` + + Если модуль-аналог новый добавить функцию в области "СлужебныеПроцедурыИФункции", где __ИмяМодуля для серверных модулей "__ОбщегоНазначенияПовтИсп.", для клиентских "__ОбщегоНазначенияКлиент" + + ```1C (BSL) + Функция ПолучитьМодуль() + Возврат __ИмяМодуля.ОбщийМодуль(ИмяМодуляБСП, ИмяМодуляАналогаБСП); + КонецФункции + ``` + ### 2.2 Создание методов в модуле-аналоге + Пример: "__ОбщегоНазначения". Методы располагаются в области "МетодыАналогиБСП", описание метода начинать с "Аналог метода БСП." + + ```1C (BSL) + #Область МетодыАналогиБСП + + // Аналог метода БСП. Описание + // + Процедура ВыполнитьМетодКонфигурации(Знач ИмяМетода, Знач Параметры = Неопределено) Экспорт + // ... + КонецПроцедуры + + #КонецОбласти + ``` diff --git "a/docs/\320\237\321\200\320\265\320\264\320\276\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\275\321\213\320\265\320\227\320\275\320\260\321\207\320\265\320\275\320\270\321\217.md" "b/docs/\320\237\321\200\320\265\320\264\320\276\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\275\321\213\320\265\320\227\320\275\320\260\321\207\320\265\320\275\320\270\321\217.md" new file mode 100644 index 00000000..edfd24a1 --- /dev/null +++ "b/docs/\320\237\321\200\320\265\320\264\320\276\320\277\321\200\320\265\320\264\320\265\320\273\320\265\320\275\320\275\321\213\320\265\320\227\320\275\320\260\321\207\320\265\320\275\320\270\321\217.md" @@ -0,0 +1,54 @@ +# Подсистема предопределенных значений + +Пример добавления нового элемента в модуле __ПредопределенныеЗначенияПереопределяемый + +```1C (BSL) +Функция ПредопределенныеЗначения() Экспорт + + Результат = ТаблицаПредопределенных(); + + // Добавление + НоваяНастройка = Результат.Добавить(); + НоваяНастройка.Наименование = "Пароль доступа на ИТС"; + НоваяНастройка.ИдентификаторНастройки = "ПарольДоступаНаИТС"; + НоваяНастройка.Пароль = Истина; + НоваяНастройка.СписокЗначений = Ложь; + НоваяНастройка.ТипЗначения = Новый ОписаниеТипов("Строка",,,, Новый КвалификаторыСтроки(150)); + // КонецДобавления + + Возврат Результат; + +КонецФункции +``` + +Пример получения множественного результата, второй параметр указывает если Истина, то результат оборачивается в соответствие, где Ключ - Имя предопределенного элемента, Значение - значение предопределенного элемента + +```1C (BSL) +Функция ПолучитьДанныеАвторизации() + + ДанныеАвторизации = Новый Структура("Логин, Пароль"); + Результат = __ОбщегоНазначенияСервер.ПолучитьПредопределенныеЗначения("Логин_ИТС, Пароль_ИТС", Истина, Истина); + + Для Каждого Пара Из Результат Цикл + Сообщить("Ключ: " Пара.Ключ); + Сообщить("Значение: "+ Пара.Значение); + ДанныеАвторизации[Пара.Ключ] = Пара.Значение; + КонецЦикла; + + Возврат ДанныеАвторизации; + +КонецФункции +``` + +Пример получения единичного результата + +```1C (BSL) +Функция ЗаписыватьДанныеСтандартнымСпособом(ПроверяемаяДата) + + Результат = __ОбщегоНазначенияСервер.ПолучитьПредопределенныеЗначения("ДатаНачалаЗаписиВРегистры", Истина, Истина); + + Возврат ПроверяемаяДата = Результат; + +КонецФункции +``` + diff --git "a/docs/\320\240\320\260\320\261\320\276\321\202\320\260\320\241\320\244\320\276\321\200\320\274\320\260\320\274\320\270.md" "b/docs/\320\240\320\260\320\261\320\276\321\202\320\260\320\241\320\244\320\276\321\200\320\274\320\260\320\274\320\270.md" new file mode 100644 index 00000000..44c361c6 --- /dev/null +++ "b/docs/\320\240\320\260\320\261\320\276\321\202\320\260\320\241\320\244\320\276\321\200\320\274\320\260\320\274\320\270.md" @@ -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); + +#КонецОбласти + +#КонецОбласти +``` diff --git "a/docs/\320\241\320\276\320\276\321\202\320\262\320\265\321\202\321\201\321\202\320\262\320\270\320\265\320\236\320\261\321\212\320\265\320\272\321\202\320\276\320\262\320\230\320\275\321\204\320\276\321\200\320\274\320\260\321\206\320\270\320\276\320\275\320\275\320\276\320\271\320\221\320\260\320\267\321\213.md" "b/docs/\320\241\320\276\320\276\321\202\320\262\320\265\321\202\321\201\321\202\320\262\320\270\320\265\320\236\320\261\321\212\320\265\320\272\321\202\320\276\320\262\320\230\320\275\321\204\320\276\321\200\320\274\320\260\321\206\320\270\320\276\320\275\320\275\320\276\320\271\320\221\320\260\320\267\321\213.md" new file mode 100644 index 00000000..e3db903d --- /dev/null +++ "b/docs/\320\241\320\276\320\276\321\202\320\262\320\265\321\202\321\201\321\202\320\262\320\270\320\265\320\236\320\261\321\212\320\265\320\272\321\202\320\276\320\262\320\230\320\275\321\204\320\276\321\200\320\274\320\260\321\206\320\270\320\276\320\275\320\275\320\276\320\271\320\221\320\260\320\267\321\213.md" @@ -0,0 +1,38 @@ +# Соответствие объектов информационной базы через регистр сведений + +1. ПолучитьСоответствиеОбъектовИБ - Позволяет фильтровать результаты по трем объектам. + +```1C (BSL) +Процедура Тест() + // Вызов метода с заданными параметрами + МассивСоответствий = __ОбщегоНазначенияСервер.ПолучитьСоответствиеОбъектовИБ(ТипСоответствия, Объект1, Объект2, , Истина); + + // Пример обработки полученного массива структур + Для Каждого Соответствие Из МассивСоответствий Цикл + Сообщить("Тип соответствия: " + Соответствие.ТипСоответствия); + Сообщить("Объект 1: " + Соответствие.Объект1); + Сообщить("Объект 2: " + Соответствие.Объект2); + Сообщить("Объект 3: " + Соответствие.Объект3); + КонецЦикла; +КонецПроцедуры +``` +2. ПолучитьЗначенияОбъектаСоответствияПоКлючу + +```1C (BSL) +Процедура Тест() + ИмяКлюча = "Объект1"; + ЗначениеКлюча = Склад; + ИмяОбъекта = "Объект3"; + // Вызов метода с заданными параметрами + Значения = __ОбщегоНазначенияСервер.ПолучитьЗначенияОбъектаСоответствияПоКлючу(ТипСоответствия, ИмяКлюча, ЗначениеКлюча, ИмяОбъекта); + + // Пример использования полученного массива значений + Если ЗначениеЗаполнено(Значения) Тогда + Для Каждого Значение Из Значения Цикл + Сообщить("Значение объекта: " + Значение); + КонецЦикла; + Иначе + Сообщить("По заданному ключу объекты не найдены."); + КонецЕсли; +КонецПроцедуры +```