Например, при передаче данных в запрос в качестве таблицы с одной строкой.
// Преобразовать Структуру в Таблицу значений (одну строку)
// Каждое значение станет колонкой в таблице значений,
// тип значения в колонке будет определён по содержащемуся в по...
Эта команда адаптера открывает в приложении ИР список измененных модулей кэша по отношению к папке Гита. Двойной клик на изменном модуле открывает его сравнение с версией Гита в окне "Сравнение текстов", откуда можно открыть VS Code для выборочного отката ...
Синтакс-помощник БСП - cправочник по библиотеке стандартных подсистем. В состав справочника входит описание экспортных процедур и функций, размещенных в областях кода ПрограммныйИнтерфейс БСП. В справчоник добавлены ассистенты на базе нейросетевых моделей ИИ.
Функция для проверки, есть ли документы с тем же интервалом дат, что и заданный.
//Истина - есть пересечения
//Ложь - пересечений нет.
Функция ЕстьПересечениеДат(НачалоПериода, КонецПериода)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВашДокумент.Ссылка
|ИЗ
| Документ.ВашДокумент КАК ВашДокумент
|ГДЕ
| ПлановыйГрафикРаботы.Проведен
| И &НачалоПериода < ВашДокумент.КонецПериода
| И &КонецПериода > ВашДокумент.НачалоПериода";
Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода);
Запрос.УстановитьПараметр("КонецПериода", КонецПериода);
РезультатЗапроса = Запрос.Выполнить();
Возврат Не РезультатЗапроса.Пустой();
КонецФункции
//Истина - есть пересечения
//Ложь - пересечений нет.
Функция ЕстьПересечениеДат(НачалоПериода, КонецПериода)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВашДокумент.Ссылка
|ИЗ
| Документ.ВашДокумент КАК ВашДокумент
|ГДЕ
| ПлановыйГрафикРаботы.Проведен
| И &НачалоПериода < ВашДокумент.КонецПериода
| И &КонецПериода > ВашДокумент.НачалоПериода";
Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода);
Запрос.УстановитьПараметр("КонецПериода", КонецПериода);
РезультатЗапроса = Запрос.Выполнить();
Возврат Не РезультатЗапроса.Пустой();
КонецФункции
Формирует строку типа: "1 год", "2 года", "5 лет", "14 лет", "21 год" и т.д.
Функция ПросклонятьЧислоЛет(Знач ЧислоЛет)
а = ПолучитьСклоненияСтрокиПоЧислу("год", ЧислоЛет, "", "ЧС=Количественное", "ПД=Именительный")[0];
Возврат СтрЗаменить(а,"годов","лет");
КонецФункции
Функция ПросклонятьЧислоЛет(Знач ЧислоЛет)
а = ПолучитьСклоненияСтрокиПоЧислу("год", ЧислоЛет, "", "ЧС=Количественное", "ПД=Именительный")[0];
Возврат СтрЗаменить(а,"годов","лет");
КонецФункции
Например, в обработку можно добавлять макеты СКД, и в обработке использовать их для заполнения Дерева или Таблицы значений
НаСервере
Процедура ОбновитьДанныеТаблицы(Вариант = СворачиваниеНулевыхОстатков)
ОбъектОбработки = РеквизитФормыВЗначение(Объек...
Эта кнопка адаптера позволяет ловить изменение значения объектного выражения автоматической пошаговой отладкой. При ее нажатии сначала будет очищено табло. Далее адаптер будет с большой скоростью шагать отладчиком и проверять после каждого шага, изменилос...
Функция вычисляет максимальную глубину (уровень вложенности) дерева значений.
Функция ПолучитьМаксГлубинуДерева(ДеревоЗначений) Экспорт
МаксГлубина = 0;
Для Каждого Строка Из ДеревоЗначений.Строки Цикл
МаксГлубина = Макс(МаксГлубина, РекурсивныйОбходДерева(Строка, 1));
КонецЦикла;
Возврат МаксГлубина;
КонецФункции
Функция РекурсивныйОбходДерева(Строка, ТекущаяГлубина)
МаксГлубина = ТекущаяГлубина;
Для Каждого ПодчиненнаяСтрока Из Строка.Строки Цикл
МаксГлубина = Макс(МаксГлубина, РекурсивныйОбходДерева(ПодчиненнаяСтрока, ТекущаяГлубина + 1));
КонецЦикла;
Возврат МаксГлубина;
КонецФункции
// МаксГлубинаДерева = ПолучитьМаксГлубинуДерева(ДеревоЗначений);
Функция ПолучитьМаксГлубинуДерева(ДеревоЗначений) Экспорт
МаксГлубина = 0;
Для Каждого Строка Из ДеревоЗначений.Строки Цикл
МаксГлубина = Макс(МаксГлубина, РекурсивныйОбходДерева(Строка, 1));
КонецЦикла;
Возврат МаксГлубина;
КонецФункции
Функция РекурсивныйОбходДерева(Строка, ТекущаяГлубина)
МаксГлубина = ТекущаяГлубина;
Для Каждого ПодчиненнаяСтрока Из Строка.Строки Цикл
МаксГлубина = Макс(МаксГлубина, РекурсивныйОбходДерева(ПодчиненнаяСтрока, ТекущаяГлубина + 1));
КонецЦикла;
Возврат МаксГлубина;
КонецФункции
// МаксГлубинаДерева = ПолучитьМаксГлубинуДерева(ДеревоЗначений);
Эта кнопка адаптера формирует стандартный текстовый отчет об изменениях в окне сравнения конфигураций, разбивает его на левую и правую части и показывает их сравнение. Таким образом значительно упрощается восприятие различий, т.к. быстрее видно, что где до...
Имитация события от сканера штрихкода для отладки.
// Команда формы для вызова
&НаКлиенте
Процедура ИзобразитьСканерШК(Команда)
ИзобразитьСканерШКДанныеВОсновных("68331545384715610814882357176103939876");
КонецПроцедуры
&НаКлиенте
Процедура ИзобразитьСканерШКДанныеВОсновных(Данные)
ИмяСобытия = "ScanData";
Источник = "ПодключаемоеОборудование";
Параметр = Новый Массив;
Параметр.Добавить(Данные);
Параметр.Добавить(Неопределено);
глПодключаемоеОборудованиеСобытиеОбработано = Ложь;
Оповестить(ИмяСобытия, Параметр, Источник);
КонецПроцедуры
// Команда формы для вызова
&НаКлиенте
Процедура ИзобразитьСканерШК(Команда)
ИзобразитьСканерШКДанныеВОсновных("68331545384715610814882357176103939876");
КонецПроцедуры
&НаКлиенте
Процедура ИзобразитьСканерШКДанныеВОсновных(Данные)
ИмяСобытия = "ScanData";
Источник = "ПодключаемоеОборудование";
Параметр = Новый Массив;
Параметр.Добавить(Данные);
Параметр.Добавить(Неопределено);
глПодключаемоеОборудованиеСобытиеОбработано = Ложь;
Оповестить(ИмяСобытия, Параметр, Источник);
КонецПроцедуры
Эта команда адаптера сначала делает переход к определению слова (метода или переменной) и затем вызывает штатную команду "Найти использование (ALT+F12)" на его определении.
Пример работы команды на вызове метода
Эта кнопка адаптера добавляет в очередь добавления в табло путь к текущему свойству.
После закрытия окна в табло автоматически добавляются все выражения накопленные в очереди и выводится уведомление с их списком.
Адаптер автоматически запоминает и помнит между сеансами последние методы, где
выполнялось редактирование
вызывались команды адаптера
выполнялся переход в метод через список закладок, список методов Турбоконфа, список методов конфигуратора
Команда "Перейти...
Эта команда адаптера вызывает штатную команду "Найти следующий (F3)" или "Найти следующий выделенный (CTRL+F3)" конфигуратора и дополнительно выводит уведомление о достижении конца документа.
//Создание команды
НоваяКоманда = ЭтаФорма.Команды.Добавить("ОбщаяКоманда");
НоваяКоманда.Заголовок = "Общая команда";
НоваяКоманда.Действие = "ОбщееДействие"; //указываем имя процедуры
//Создание команды
НоваяКоманда = ЭтаФорма.Команды.Добавить("ОбщаяКоманда");
НоваяКоманда.Заголовок = "Общая команда";
НоваяКоманда.Действие = "ОбщееДействие"; //указываем имя процедуры
НовыйЭлемент = ЭтаФорма.Элементы.Добавить("КартинкаТовара", Тип("ДекорацияФормы"),СтраницаТовары);
НовыйЭлемент.Вид = ВидДекорацииФормы.Картинка;
НовыйЭлемент.Картинка = БиблиотекаКартинок.ГеографическаяСхема;
НовыйЭлемент.РазмерКартинки = РазмерКартинки.Растянуть;
НовыйЭлемент.Ширина = 20;
НовыйЭлемент.Высота = 8;
НовыйЭлемент = ЭтаФорма.Элементы.Добавить("КартинкаТовара", Тип("ДекорацияФормы"),СтраницаТовары);
НовыйЭлемент.Вид = ВидДекорацииФормы.Картинка;
НовыйЭлемент.Картинка = БиблиотекаКартинок.ГеографическаяСхема;
НовыйЭлемент.РазмерКартинки = РазмерКартинки.Растянуть;
НовыйЭлемент.Ширина = 20;
НовыйЭлемент.Высота = 8;
НовыйЭлемент = ЭтаФорма.Элементы.Добавить("ИмяДекорации", Тип("ДекорацияФормы"),СтраницаТовары);
НовыйЭлемент.Вид = ВидДекорацииФормы.Надпись;
НовыйЭлемент.Заголовок = "ЗаголовокДляОтображения";
НовыйЭлемент = ЭтаФорма.Элементы.Добавить("ИмяДекорации", Тип("ДекорацияФормы"),СтраницаТовары);
НовыйЭлемент.Вид = ВидДекорацииФормы.Надпись;
НовыйЭлемент.Заголовок = "ЗаголовокДляОтображения";
Создание различных групп формы
//Группы
//Пример создания обычной группы без отображения
ГруппаДатаНомер = ЭтаФорма.Элементы.Добавить("ГруппаОбычная", Тип("ГруппаФормы"),ЭтаФорма);
ГруппаДатаНомер.Вид = ВидГруппыФормы.ОбычнаяГруппа;
ГруппаДатаНомер.Отображение = ОтображениеОбычнойГруппы.Нет;
ГруппаДатаНомер.ОтображатьЗаголовок = ЛОЖЬ;
ГруппаДатаНомер.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда;
//Пример создания обычной группы
ГруппаШапка = ЭтаФорма.Элементы.Добавить("ГруппаШапка", Тип("ГруппаФормы"),ЭтаФорма);
ГруппаШапка.Вид = ВидГруппыФормы.ОбычнаяГруппа;
ГруппаШапка.Заголовок = "Основные реквизиты";
ГруппаШапка.Отображение = ОтображениеОбычнойГруппы.ОбычноеВыделение;
ГруппаШапка.ОтображатьЗаголовок = ИСТИНА;
ГруппаШапка.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная;
ГруппаШапка.РастягиватьПоГоризонтали = ИСТИНА;
//Пример создания группы страниц
ГруппаСтраниц = ЭтаФорма.Элементы.Добавить("ГруппаСтраницы", Тип("ГруппаФормы"),ЭтаФорма);
ГруппаСтраниц.Вид = ВидГруппыФормы.Страницы;
ГруппаСтраниц.ОтображениеСтраниц = ОтображениеСтраницФормы.ЗакладкиСверху;
ГруппаСтраниц.РастягиватьПоГоризонтали = ИСТИНА;
//Пример создания страниц
СтраницаТовары = ЭтаФорма.Элементы.Добавить("СтраницаТовары", Тип("ГруппаФормы"),ГруппаСтраниц);
СтраницаТовары.Вид = ВидГруппыФормы.Страница;
СтраницаТовары.Заголовок = "Товары";
СтраницаДополнительно = ЭтаФорма.Элементы.Добавить("СтраницаДополнительно", Тип("ГруппаФормы"),ГруппаСтраниц);
СтраницаДополнительно.Вид = ВидГруппыФормы.Страница;
СтраницаДополнительно.Заголовок = "Дополнительно";
//Группы
//Пример создания обычной группы без отображения
ГруппаДатаНомер = ЭтаФорма.Элементы.Добавить("ГруппаОбычная", Тип("ГруппаФормы"),ЭтаФорма);
ГруппаДатаНомер.Вид = ВидГруппыФормы.ОбычнаяГруппа;
ГруппаДатаНомер.Отображение = ОтображениеОбычнойГруппы.Нет;
ГруппаДатаНомер.ОтображатьЗаголовок = ЛОЖЬ;
ГруппаДатаНомер.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда;
//Пример создания обычной группы
ГруппаШапка = ЭтаФорма.Элементы.Добавить("ГруппаШапка", Тип("ГруппаФормы"),ЭтаФорма);
ГруппаШапка.Вид = ВидГруппыФормы.ОбычнаяГруппа;
ГруппаШапка.Заголовок = "Основные реквизиты";
ГруппаШапка.Отображение = ОтображениеОбычнойГруппы.ОбычноеВыделение;
ГруппаШапка.ОтображатьЗаголовок = ИСТИНА;
ГруппаШапка.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная;
ГруппаШапка.РастягиватьПоГоризонтали = ИСТИНА;
//Пример создания группы страниц
ГруппаСтраниц = ЭтаФорма.Элементы.Добавить("ГруппаСтраницы", Тип("ГруппаФормы"),ЭтаФорма);
ГруппаСтраниц.Вид = ВидГруппыФормы.Страницы;
ГруппаСтраниц.ОтображениеСтраниц = ОтображениеСтраницФормы.ЗакладкиСверху;
ГруппаСтраниц.РастягиватьПоГоризонтали = ИСТИНА;
//Пример создания страниц
СтраницаТовары = ЭтаФорма.Элементы.Добавить("СтраницаТовары", Тип("ГруппаФормы"),ГруппаСтраниц);
СтраницаТовары.Вид = ВидГруппыФормы.Страница;
СтраницаТовары.Заголовок = "Товары";
СтраницаДополнительно = ЭтаФорма.Элементы.Добавить("СтраницаДополнительно", Тип("ГруппаФормы"),ГруппаСтраниц);
СтраницаДополнительно.Вид = ВидГруппыФормы.Страница;
СтраницаДополнительно.Заголовок = "Дополнительно";
Создание нового реквизита программно
ДобавляемыеРеквизиты = Новый Массив; //Определяем массив добавляемых реквизитов
РеквизитКомментарий = Новый РеквизитФормы("Комментарий",Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(500)));
ДобавляемыеРеквизиты.Добавить(РеквизитКомментарий );
НомерРеквизит = Новый РеквизитФормы("Номер",Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(10,0)));
ДобавляемыеРеквизиты.Добавить(НомерРеквизит);
ДатаРеквизит = Новый РеквизитФормы("Дата",Новый ОписаниеТипов("Дата",,,Новый КвалификаторыДаты(ЧастиДаты.ДатаВремя)));
ДобавляемыеРеквизиты.Добавить(ДатаРеквизит);
НаименованиеРеквизит = Новый РеквизитФормы("Наименование",Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(150)));
ДобавляемыеРеквизиты.Добавить(НаименованиеРеквизит);
ЭтаФорма.ИзменитьРеквизиты(ДобавляемыеРеквизиты); //Применяем реквизиты
ДобавляемыеРеквизиты = Новый Массив; //Определяем массив добавляемых реквизитов
РеквизитКомментарий = Новый РеквизитФормы("Комментарий",Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(500)));
ДобавляемыеРеквизиты.Добавить(РеквизитКомментарий );
НомерРеквизит = Новый РеквизитФормы("Номер",Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(10,0)));
ДобавляемыеРеквизиты.Добавить(НомерРеквизит);
ДатаРеквизит = Новый РеквизитФормы("Дата",Новый ОписаниеТипов("Дата",,,Новый КвалификаторыДаты(ЧастиДаты.ДатаВремя)));
ДобавляемыеРеквизиты.Добавить(ДатаРеквизит);
НаименованиеРеквизит = Новый РеквизитФормы("Наименование",Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(150)));
ДобавляемыеРеквизиты.Добавить(НаименованиеРеквизит);
ЭтаФорма.ИзменитьРеквизиты(ДобавляемыеРеквизиты); //Применяем реквизиты
Показываем пользователю табличный документ. Туда он может скопипастить данные откуда пожелает. Дальше следующие 3 строчки кода позволяют загрузить эти данные в таблицу значений
Построитель = Новый ПостроительЗапроса;
Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТабДок.Область());
ТабДанные = Построитель.Результат.Выгрузить();
Построитель = Новый ПостроительЗапроса;
Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТабДок.Область());
ТабДанные = Построитель.Результат.Выгрузить();
Пример кода открытия УФ с установкой Выбора Групп и элементов
Процедура ОсновнаяТЗГруппаЦенНачалоВыбора(Элемент, ДанныеВыбора, ВыборДобавлением, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("РежимВыбора",Истина);
ПараметрыФормы.Вставить("МножественныйВыбор",Ложь);
ПараметрыФормы.Вставить("ЗакрыватьПриВыборе",Истина);
ПараметрыФормы.Вставить("ВыборГруппИЭлементов",ИспользованиеГруппИЭлементов.Группы);
ОО = Новый ОписаниеОповещения("ПослеВыбораГруппыСкидок",ЭтаФорма);
ОткрытьФорму("Справочник.СкидкиНаценки.ФормаВыбораГруппы",ПараметрыФормы,ЭтаФорма,,,,ОО);
КонецПроцедуры
Процедура ОсновнаяТЗГруппаЦенНачалоВыбора(Элемент, ДанныеВыбора, ВыборДобавлением, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("РежимВыбора",Истина);
ПараметрыФормы.Вставить("МножественныйВыбор",Ложь);
ПараметрыФормы.Вставить("ЗакрыватьПриВыборе",Истина);
ПараметрыФормы.Вставить("ВыборГруппИЭлементов",ИспользованиеГруппИЭлементов.Группы);
ОО = Новый ОписаниеОповещения("ПослеВыбораГруппыСкидок",ЭтаФорма);
ОткрытьФорму("Справочник.СкидкиНаценки.ФормаВыбораГруппы",ПараметрыФормы,ЭтаФорма,,,,ОО);
КонецПроцедуры