Эта кнопка адаптера формирует стандартный текстовый отчет об изменениях в окне сравнения конфигураций, разбивает его на левую и правую части и показывает их сравнение. Таким образом значительно упрощается восприятие различий, т.к. быстрее видно, что где до...
Имитация события от сканера штрихкода для отладки.
// Команда формы для вызова
&НаКлиенте
Процедура ИзобразитьСканерШК(Команда)
ИзобразитьСканерШКДанныеВОсновных("68331545384715610814882357176103939876");
КонецПроцедуры
&НаКлиенте
Процедура ИзобразитьСканерШКДанныеВОсновных(Данные)
ИмяСобытия = "ScanData";
Источник = "ПодключаемоеОборудование";
Параметр = Новый Массив;
Параметр.Добавить(Данные);
Параметр.Добавить(Неопределено);
глПодключаемоеОборудованиеСобытиеОбработано = Ложь;
Оповестить(ИмяСобытия, Параметр, Источник);
КонецПроцедуры
// Команда формы для вызова
&НаКлиенте
Процедура ИзобразитьСканерШК(Команда)
ИзобразитьСканерШКДанныеВОсновных("68331545384715610814882357176103939876");
КонецПроцедуры
&НаКлиенте
Процедура ИзобразитьСканерШКДанныеВОсновных(Данные)
ИмяСобытия = "ScanData";
Источник = "ПодключаемоеОборудование";
Параметр = Новый Массив;
Параметр.Добавить(Данные);
Параметр.Добавить(Неопределено);
глПодключаемоеОборудованиеСобытиеОбработано = Ложь;
Оповестить(ИмяСобытия, Параметр, Источник);
КонецПроцедуры
Быстрое и надежное обновление файловых и серверных баз, защита от шифровальщиков, автоматическое обновление доработанных конфигураций и расширений, а также многое другое.
Эта команда адаптера сначала делает переход к определению слова (метода или переменной) и затем вызывает штатную команду "Найти использование (ALT+F12)" на его определении.
Пример работы команды на вызове метода
Эта кнопка адаптера добавляет в очередь добавления в табло путь к текущему свойству.
После закрытия окна в табло автоматически добавляются все выражения накопленные в очереди и выводится уведомление с их списком.
Адаптер автоматически запоминает и помнит между сеансами последние методы, где
выполнялось редактирование
вызывались команды адаптера
выполнялся переход в метод через список закладок, список методов Турбоконфа, список методов конфигуратора
Команда "Перейти...
Эта команда адаптера вызывает штатную команду "Найти следующий (F3)" или "Найти следующий выделенный (CTRL+F3)" конфигуратора и дополнительно выводит уведомление о достижении конца документа.
//Создание команды
НоваяКоманда = ЭтаФорма.Команды.Добавить("ОбщаяКоманда");
НоваяКоманда.Заголовок = "Общая команда";
НоваяКоманда.Действие = "ОбщееДействие"; //указываем имя процедуры
//Создание команды
НоваяКоманда = ЭтаФорма.Команды.Добавить("ОбщаяКоманда");
НоваяКоманда.Заголовок = "Общая команда";
НоваяКоманда.Действие = "ОбщееДействие"; //указываем имя процедуры
НовыйЭлемент = ЭтаФорма.Элементы.Добавить("КартинкаТовара", Тип("ДекорацияФормы"),СтраницаТовары);
НовыйЭлемент.Вид = ВидДекорацииФормы.Картинка;
НовыйЭлемент.Картинка = БиблиотекаКартинок.ГеографическаяСхема;
НовыйЭлемент.РазмерКартинки = РазмерКартинки.Растянуть;
НовыйЭлемент.Ширина = 20;
НовыйЭлемент.Высота = 8;
НовыйЭлемент = ЭтаФорма.Элементы.Добавить("КартинкаТовара", Тип("ДекорацияФормы"),СтраницаТовары);
НовыйЭлемент.Вид = ВидДекорацииФормы.Картинка;
НовыйЭлемент.Картинка = БиблиотекаКартинок.ГеографическаяСхема;
НовыйЭлемент.РазмерКартинки = РазмерКартинки.Растянуть;
НовыйЭлемент.Ширина = 20;
НовыйЭлемент.Высота = 8;
НовыйЭлемент = ЭтаФорма.Элементы.Добавить("ИмяДекорации", Тип("ДекорацияФормы"),СтраницаТовары);
НовыйЭлемент.Вид = ВидДекорацииФормы.Надпись;
НовыйЭлемент.Заголовок = "ЗаголовокДляОтображения";
НовыйЭлемент = ЭтаФорма.Элементы.Добавить("ИмяДекорации", Тип("ДекорацияФормы"),СтраницаТовары);
НовыйЭлемент.Вид = ВидДекорацииФормы.Надпись;
НовыйЭлемент.Заголовок = "ЗаголовокДляОтображения";
Создание различных групп формы
//Группы
//Пример создания обычной группы без отображения
ГруппаДатаНомер = ЭтаФорма.Элементы.Добавить("ГруппаОбычная", Тип("ГруппаФормы"),ЭтаФорма);
ГруппаДатаНомер.Вид = ВидГруппыФормы.ОбычнаяГруппа;
ГруппаДатаНомер.Отображение = ОтображениеОбычнойГруппы.Нет;
ГруппаДатаНомер.ОтображатьЗаголовок = ЛОЖЬ;
ГруппаДатаНомер.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда;
//Пример создания обычной группы
ГруппаШапка = ЭтаФорма.Элементы.Добавить("ГруппаШапка", Тип("ГруппаФормы"),ЭтаФорма);
ГруппаШапка.Вид = ВидГруппыФормы.ОбычнаяГруппа;
ГруппаШапка.Заголовок = "Основные реквизиты";
ГруппаШапка.Отображение = ОтображениеОбычнойГруппы.ОбычноеВыделение;
ГруппаШапка.ОтображатьЗаголовок = ИСТИНА;
ГруппаШапка.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная;
ГруппаШапка.РастягиватьПоГоризонтали = ИСТИНА;
//Пример создания группы страниц
ГруппаСтраниц = ЭтаФорма.Элементы.Добавить("ГруппаСтраницы", Тип("ГруппаФормы"),ЭтаФорма);
ГруппаСтраниц.Вид = ВидГруппыФормы.Страницы;
ГруппаСтраниц.ОтображениеСтраниц = ОтображениеСтраницФормы.ЗакладкиСверху;
ГруппаСтраниц.РастягиватьПоГоризонтали = ИСТИНА;
//Пример создания страниц
СтраницаТовары = ЭтаФорма.Элементы.Добавить("СтраницаТовары", Тип("ГруппаФормы"),ГруппаСтраниц);
СтраницаТовары.Вид = ВидГруппыФормы.Страница;
СтраницаТовары.Заголовок = "Товары";
СтраницаДополнительно = ЭтаФорма.Элементы.Добавить("СтраницаДополнительно", Тип("ГруппаФормы"),ГруппаСтраниц);
СтраницаДополнительно.Вид = ВидГруппыФормы.Страница;
СтраницаДополнительно.Заголовок = "Дополнительно";
//Группы
//Пример создания обычной группы без отображения
ГруппаДатаНомер = ЭтаФорма.Элементы.Добавить("ГруппаОбычная", Тип("ГруппаФормы"),ЭтаФорма);
ГруппаДатаНомер.Вид = ВидГруппыФормы.ОбычнаяГруппа;
ГруппаДатаНомер.Отображение = ОтображениеОбычнойГруппы.Нет;
ГруппаДатаНомер.ОтображатьЗаголовок = ЛОЖЬ;
ГруппаДатаНомер.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда;
//Пример создания обычной группы
ГруппаШапка = ЭтаФорма.Элементы.Добавить("ГруппаШапка", Тип("ГруппаФормы"),ЭтаФорма);
ГруппаШапка.Вид = ВидГруппыФормы.ОбычнаяГруппа;
ГруппаШапка.Заголовок = "Основные реквизиты";
ГруппаШапка.Отображение = ОтображениеОбычнойГруппы.ОбычноеВыделение;
ГруппаШапка.ОтображатьЗаголовок = ИСТИНА;
ГруппаШапка.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная;
ГруппаШапка.РастягиватьПоГоризонтали = ИСТИНА;
//Пример создания группы страниц
ГруппаСтраниц = ЭтаФорма.Элементы.Добавить("ГруппаСтраницы", Тип("ГруппаФормы"),ЭтаФорма);
ГруппаСтраниц.Вид = ВидГруппыФормы.Страницы;
ГруппаСтраниц.ОтображениеСтраниц = ОтображениеСтраницФормы.ЗакладкиСверху;
ГруппаСтраниц.РастягиватьПоГоризонтали = ИСТИНА;
//Пример создания страниц
СтраницаТовары = ЭтаФорма.Элементы.Добавить("СтраницаТовары", Тип("ГруппаФормы"),ГруппаСтраниц);
СтраницаТовары.Вид = ВидГруппыФормы.Страница;
СтраницаТовары.Заголовок = "Товары";
СтраницаДополнительно = ЭтаФорма.Элементы.Добавить("СтраницаДополнительно", Тип("ГруппаФормы"),ГруппаСтраниц);
СтраницаДополнительно.Вид = ВидГруппыФормы.Страница;
СтраницаДополнительно.Заголовок = "Дополнительно";
Создание нового реквизита программно
ДобавляемыеРеквизиты = Новый Массив; //Определяем массив добавляемых реквизитов
РеквизитКомментарий = Новый РеквизитФормы("Комментарий",Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(500)));
ДобавляемыеРеквизиты.Добавить(РеквизитКомментарий );
НомерРеквизит = Новый РеквизитФормы("Номер",Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(10,0)));
ДобавляемыеРеквизиты.Добавить(НомерРеквизит);
ДатаРеквизит = Новый РеквизитФормы("Дата",Новый ОписаниеТипов("Дата",,,Новый КвалификаторыДаты(ЧастиДаты.ДатаВремя)));
ДобавляемыеРеквизиты.Добавить(ДатаРеквизит);
НаименованиеРеквизит = Новый РеквизитФормы("Наименование",Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(150)));
ДобавляемыеРеквизиты.Добавить(НаименованиеРеквизит);
ЭтаФорма.ИзменитьРеквизиты(ДобавляемыеРеквизиты); //Применяем реквизиты
ДобавляемыеРеквизиты = Новый Массив; //Определяем массив добавляемых реквизитов
РеквизитКомментарий = Новый РеквизитФормы("Комментарий",Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(500)));
ДобавляемыеРеквизиты.Добавить(РеквизитКомментарий );
НомерРеквизит = Новый РеквизитФормы("Номер",Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(10,0)));
ДобавляемыеРеквизиты.Добавить(НомерРеквизит);
ДатаРеквизит = Новый РеквизитФормы("Дата",Новый ОписаниеТипов("Дата",,,Новый КвалификаторыДаты(ЧастиДаты.ДатаВремя)));
ДобавляемыеРеквизиты.Добавить(ДатаРеквизит);
НаименованиеРеквизит = Новый РеквизитФормы("Наименование",Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(150)));
ДобавляемыеРеквизиты.Добавить(НаименованиеРеквизит);
ЭтаФорма.ИзменитьРеквизиты(ДобавляемыеРеквизиты); //Применяем реквизиты
Показываем пользователю табличный документ. Туда он может скопипастить данные откуда пожелает. Дальше следующие 3 строчки кода позволяют загрузить эти данные в таблицу значений
Построитель = Новый ПостроительЗапроса;
Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТабДок.Область());
ТабДанные = Построитель.Результат.Выгрузить();
Построитель = Новый ПостроительЗапроса;
Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТабДок.Область());
ТабДанные = Построитель.Результат.Выгрузить();
Пример кода открытия УФ с установкой Выбора Групп и элементов
Процедура ОсновнаяТЗГруппаЦенНачалоВыбора(Элемент, ДанныеВыбора, ВыборДобавлением, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("РежимВыбора",Истина);
ПараметрыФормы.Вставить("МножественныйВыбор",Ложь);
ПараметрыФормы.Вставить("ЗакрыватьПриВыборе",Истина);
ПараметрыФормы.Вставить("ВыборГруппИЭлементов",ИспользованиеГруппИЭлементов.Группы);
ОО = Новый ОписаниеОповещения("ПослеВыбораГруппыСкидок",ЭтаФорма);
ОткрытьФорму("Справочник.СкидкиНаценки.ФормаВыбораГруппы",ПараметрыФормы,ЭтаФорма,,,,ОО);
КонецПроцедуры
Процедура ОсновнаяТЗГруппаЦенНачалоВыбора(Элемент, ДанныеВыбора, ВыборДобавлением, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("РежимВыбора",Истина);
ПараметрыФормы.Вставить("МножественныйВыбор",Ложь);
ПараметрыФормы.Вставить("ЗакрыватьПриВыборе",Истина);
ПараметрыФормы.Вставить("ВыборГруппИЭлементов",ИспользованиеГруппИЭлементов.Группы);
ОО = Новый ОписаниеОповещения("ПослеВыбораГруппыСкидок",ЭтаФорма);
ОткрытьФорму("Справочник.СкидкиНаценки.ФормаВыбораГруппы",ПараметрыФормы,ЭтаФорма,,,,ОО);
КонецПроцедуры
Получение данных из буфера
Функция ПолучениеДанныхИзБуфера()
ТекстДанных = “”;
ОбъектВставки = Новый ComОбъект(“HTMLFILE”);
ТекстДанных = ОбъектВставки.ParentWindow.ClipboardData.GetData(“Text”);
Возврат ТекстДанных;
КонецФункции
Функция ПолучениеДанныхИзБуфера()
ТекстДанных = “”;
ОбъектВставки = Новый ComОбъект(“HTMLFILE”);
ТекстДанных = ОбъектВставки.ParentWindow.ClipboardData.GetData(“Text”);
Возврат ТекстДанных;
КонецФункции
Возвращает схему компоновки данных на основе текста запроса и параметров
// Схема компоновки данных из запроса.
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/160
//
// Параметры:
// ТекстЗапроса - Строка
// ПараметрыЗапроса - Структура
//
// Возвращаемое значение:
// СхемаКомпоновкиДанных
//
// Пример:
// СКД = СхемаКомпоновкиДанныхИзЗапроса("ВЫБРАТЬ * ИЗ Справочник.Валюты");
//
Функция СхемаКомпоновкиДанныхИзЗапроса(ТекстЗапроса, ПараметрыЗапроса = Неопределено) Экспорт
СхемаКомпоновкиДанных = Новый СхемаКомпоновкиДанных();
ИсточникДанных = СхемаКомпоновкиДанных.ИсточникиДанных.Добавить();
ИсточникДанных.Имя = "ЛокальнаяБаза";
ИсточникДанных.СтрокаСоединения = "";
ИсточникДанных.ТипИсточникаДанных = "Local";
НаборДанных = СхемаКомпоновкиДанных.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных"));
НаборДанных.АвтоЗаполнениеДоступныхПолей = Истина;
НаборДанных.Запрос = ТекстЗапроса;
НаборДанных.Имя = "Запрос";
НаборДанных.ИсточникДанных = ИсточникДанных.Имя;
Если ЗначениеЗаполнено(ПараметрыЗапроса) Тогда
Для Каждого КлючИЗначение Из ПараметрыЗапроса Цикл
ПараметрЗапроса = СхемаКомпоновкиДанных.Параметры.Добавить();
ПараметрЗапроса.Имя = КлючИЗначение.Ключ;
ПараметрЗапроса.Значение = КлючИЗначение.Значение;
ПараметрЗапроса.ОграничениеИспользования = Истина;
ПараметрЗапроса.Использование = ИспользованиеПараметраКомпоновкиДанных.Всегда;
КонецЦикла;
КонецЕсли;
КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных();
КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
КоллекцияВыбранныхПолей = СхемаКомпоновкиДанных.НастройкиПоУмолчанию.Выбор.Элементы;
Для Каждого ДоступноеПоле Из КомпоновщикНастроек.Настройки.ДоступныеПоляВыбора.Элементы Цикл
Если НЕ ДоступноеПоле.Папка Тогда
ВыбранноеПоле = КоллекцияВыбранныхПолей.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
ЗаполнитьЗначенияСвойств(ВыбранноеПоле, ДоступноеПоле, "Поле,Заголовок");
КонецЕсли;
КонецЦикла;
Для Каждого Параметр Из КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы Цикл
ИмяПараметра = Строка(Параметр.Параметр);
Если СхемаКомпоновкиДанных.Параметры.Найти(ИмяПараметра) = Неопределено Тогда
ПараметрСКД = СхемаКомпоновкиДанных.Параметры.Добавить();
ПараметрСКД.Имя = ИмяПараметра;
ПараметрСКД.Использование = ИспользованиеПараметраКомпоновкиДанных.Авто;
КонецЕсли;
КонецЦикла;
ДетальныеЗаписи = СхемаКомпоновкиДанных.НастройкиПоУмолчанию.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
ДетальныеЗаписи.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
Возврат СхемаКомпоновкиДанных;
КонецФункции
// Схема компоновки данных из запроса.
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/160
//
// Параметры:
// ТекстЗапроса - Строка
// ПараметрыЗапроса - Структура
//
// Возвращаемое значение:
// СхемаКомпоновкиДанных
//
// Пример:
// СКД = СхемаКомпоновкиДанныхИзЗапроса("ВЫБРАТЬ * ИЗ Справочник.Валюты");
//
Функция СхемаКомпоновкиДанныхИзЗапроса(ТекстЗапроса, ПараметрыЗапроса = Неопределено) Экспорт
СхемаКомпоновкиДанных = Новый СхемаКомпоновкиДанных();
ИсточникДанных = СхемаКомпоновкиДанных.ИсточникиДанных.Добавить();
ИсточникДанных.Имя = "ЛокальнаяБаза";
ИсточникДанных.СтрокаСоединения = "";
ИсточникДанных.ТипИсточникаДанных = "Local";
НаборДанных = СхемаКомпоновкиДанных.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных"));
НаборДанных.АвтоЗаполнениеДоступныхПолей = Истина;
НаборДанных.Запрос = ТекстЗапроса;
НаборДанных.Имя = "Запрос";
НаборДанных.ИсточникДанных = ИсточникДанных.Имя;
Если ЗначениеЗаполнено(ПараметрыЗапроса) Тогда
Для Каждого КлючИЗначение Из ПараметрыЗапроса Цикл
ПараметрЗапроса = СхемаКомпоновкиДанных.Параметры.Добавить();
ПараметрЗапроса.Имя = КлючИЗначение.Ключ;
ПараметрЗапроса.Значение = КлючИЗначение.Значение;
ПараметрЗапроса.ОграничениеИспользования = Истина;
ПараметрЗапроса.Использование = ИспользованиеПараметраКомпоновкиДанных.Всегда;
КонецЦикла;
КонецЕсли;
КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных();
КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
КоллекцияВыбранныхПолей = СхемаКомпоновкиДанных.НастройкиПоУмолчанию.Выбор.Элементы;
Для Каждого ДоступноеПоле Из КомпоновщикНастроек.Настройки.ДоступныеПоляВыбора.Элементы Цикл
Если НЕ ДоступноеПоле.Папка Тогда
ВыбранноеПоле = КоллекцияВыбранныхПолей.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
ЗаполнитьЗначенияСвойств(ВыбранноеПоле, ДоступноеПоле, "Поле,Заголовок");
КонецЕсли;
КонецЦикла;
Для Каждого Параметр Из КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы Цикл
ИмяПараметра = Строка(Параметр.Параметр);
Если СхемаКомпоновкиДанных.Параметры.Найти(ИмяПараметра) = Неопределено Тогда
ПараметрСКД = СхемаКомпоновкиДанных.Параметры.Добавить();
ПараметрСКД.Имя = ИмяПараметра;
ПараметрСКД.Использование = ИспользованиеПараметраКомпоновкиДанных.Авто;
КонецЕсли;
КонецЦикла;
ДетальныеЗаписи = СхемаКомпоновкиДанных.НастройкиПоУмолчанию.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
ДетальныеЗаписи.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
Возврат СхемаКомпоновкиДанных;
КонецФункции
Коллеги, много видел тут шаблонов, но мне ни один не подошел. Пришлось писать свой, которым я решил поделиться. Версию БСП можете указывать свою, на версиях ниже не тестировалось. Отличительная особенность в возможности печати по-комплектно. Комментарии в ...
Метод проверяет является ли это ошибкой существования метода
// Это ошибка существования метода.
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/158
//
// Параметры:
// ИнформацияОбОшибке - ИнформацияОбОшибке
// ИмяМетода - Строка
// ПроверятьНаНеобъектныйТип - Булево - Если Истина, то ошибка "Значение не является объектного типа" тоже считается за ошибку отстуствия типа
//
// Возвращаемое значение:
// Булево
//
// Пример:
//
// Попытка
// Объект.НеобязательныйМетод();
// Исключение
// Если НЕ ЭтоОшибкаСуществованияМетода(ИнформацияОбОшибке(), "НеобязательныйМетод") Тогда
// ВызватьИсключение;
// КонецЕсли;
// КонецПопытки;
//
Функция ЭтоОшибкаСуществованияМетода(ИнформацияОбОшибке,
ИмяМетода, ПроверятьНаНеобъектныйТип = Истина) Экспорт
ОписаниеОшибки = ИнформацияОбОшибке.Описание;
ВременныеОбъекты = Новый Массив; //Массив из Неопределено
ВременныеОбъекты.Добавить(Новый Структура);
Если ПроверятьНаНеобъектныйТип Тогда
ВременныеОбъекты.Добавить();
КонецЕсли;
Для Каждого ВременныйОбъект Из ВременныеОбъекты Цикл
Попытка
ВременныйОбъект.СуперПуперМетод(); //@skip-check dynamic-access-method-not-found
Исключение
ВременноеОписание = СтрЗаменить(ИнформацияОбОшибке().Описание, "СуперПуперМетод", ИмяМетода);
Если ОписаниеОшибки = ВременноеОписание Тогда
Возврат Истина;
КонецЕсли;
КонецПопытки;
КонецЦикла;
Возврат Ложь;
КонецФункции
// Это ошибка существования метода.
// Источник: https://github.com/SeiOkami/CollectionMethodsOneS/issues/158
//
// Параметры:
// ИнформацияОбОшибке - ИнформацияОбОшибке
// ИмяМетода - Строка
// ПроверятьНаНеобъектныйТип - Булево - Если Истина, то ошибка "Значение не является объектного типа" тоже считается за ошибку отстуствия типа
//
// Возвращаемое значение:
// Булево
//
// Пример:
//
// Попытка
// Объект.НеобязательныйМетод();
// Исключение
// Если НЕ ЭтоОшибкаСуществованияМетода(ИнформацияОбОшибке(), "НеобязательныйМетод") Тогда
// ВызватьИсключение;
// КонецЕсли;
// КонецПопытки;
//
Функция ЭтоОшибкаСуществованияМетода(ИнформацияОбОшибке,
ИмяМетода, ПроверятьНаНеобъектныйТип = Истина) Экспорт
ОписаниеОшибки = ИнформацияОбОшибке.Описание;
ВременныеОбъекты = Новый Массив; //Массив из Неопределено
ВременныеОбъекты.Добавить(Новый Структура);
Если ПроверятьНаНеобъектныйТип Тогда
ВременныеОбъекты.Добавить();
КонецЕсли;
Для Каждого ВременныйОбъект Из ВременныеОбъекты Цикл
Попытка
ВременныйОбъект.СуперПуперМетод(); //@skip-check dynamic-access-method-not-found
Исключение
ВременноеОписание = СтрЗаменить(ИнформацияОбОшибке().Описание, "СуперПуперМетод", ИмяМетода);
Если ОписаниеОшибки = ВременноеОписание Тогда
Возврат Истина;
КонецЕсли;
КонецПопытки;
КонецЦикла;
Возврат Ложь;
КонецФункции
Часто в Запросе требуется проверить заполнение реквизита типа Справочник, Документ, Перечисление или другого ссылочного типа на заполненность.
// ВидМаркированнойПродукции = Перечисление.ВидыМаркируемойПродукции
// Выбираем элементы справочника Номенклатура
// Где заполнен реквизит "ВидМаркированнойПродукции"
Запрос = Новый Запрос;
ТекстЗапроса = "
|ВЫБРАТЬ
| Спр.Ссылка,
| Спр.ВидМаркированнойПродукции
|ИЗ
| Справочник.Номенклатура КАК Спр
|
|ГДЕ
| НЕ Спр.ВидМаркированнойПродукции.ССылка is NULL
|";
Запрос.Текст = ТекстЗапроса;
Выборка = Запрос.Выполнить().Выбрать();
// ВидМаркированнойПродукции = Перечисление.ВидыМаркируемойПродукции
// Выбираем элементы справочника Номенклатура
// Где заполнен реквизит "ВидМаркированнойПродукции"
Запрос = Новый Запрос;
ТекстЗапроса = "
|ВЫБРАТЬ
| Спр.Ссылка,
| Спр.ВидМаркированнойПродукции
|ИЗ
| Справочник.Номенклатура КАК Спр
|
|ГДЕ
| НЕ Спр.ВидМаркированнойПродукции.ССылка is NULL
|";
Запрос.Текст = ТекстЗапроса;
Выборка = Запрос.Выполнить().Выбрать();
Пример работы с расшифровкой и дополнительной расшифровкой. Выводит меню (контекстное по правой кнопке мыши) для дополнительной расшифровки табличного документа.
Для обработки расшифровки требуется создать два события у табличного документа на форме:
20...
Сворачивает реквизит формы типа "ТаблицаЗначений" на клиенте.
Процедуру можно вставить в клиентский общий модуль и использовать для сворачивания таблицы значений (ДанныеФормыКоллекция) без серверного вызова.
// Сворачивает ДанныеФормыКоллекция по указан...