Осуществляет поиск поля по имени.
Синтаксис
Найти(<Имя>)Полное описание, параметры и ограничения
ПоляНастройки.Найти (CustomFields.Find)
ПоляНастройки (CustomFields)
Найти (Find)
Доступен, начиная с версии 8.0.
Синтаксис:
Найти(<Имя>)
Параметры:
<Имя> (обязательный)
Тип: Строка.
Имя искомого поля.
Возвращаемое значение:
Тип: ПолеНастройки, Неопределено.
Если поле не найдено, то возвращается значение Неопределено.
Описание:
Осуществляет поиск поля по имени.
Доступность:
Сервер, толстый клиент, внешнее соединение, мобильное приложение (сервер), мобильный автономный сервер.
Использование в версии:
Доступен, начиная с версии 8.0.
Методическая информация
Практические примеры
Перенести сортировку только по цене и получить настоящие строки 100/250/300
Два собственных построителя работают с локальными числовыми таблицами. Переносим реальную коллекцию разрешённых полей 2 → 1, используем настоящее имя данных и пользовательскую подпись, выполняем оба построителя и считаем итог 3000 из фактического результата.
Где и как запускать
Полный собственный серверный неглобальный непривилегированный общий модуль ТолькоЦены85. Все ТаблицаЗначений, ОписаниеИсточникаДанных, ПостроительЗапроса, Порядок и результаты создаются и остаются на сервере.
Подготовка
Будущий опыт выполняйте в своей НОВОЙ пустой учебной конфигурации на платформе 8.5.1.1343. Основной режим запуска=Управляемое приложение; Режим совместимости=Не использовать. Открывайте толстым управляемым клиентом. Все три товара и оба построителя создаются заново в памяти, без чтения рабочих справочников или документов.
Конфигуратор → Общие → Общие модули → создать ТолькоЦены85. Сервер=Да; Глобальный, Привилегированный, Вызов сервера, Клиент (управляемое приложение), Клиент (обычное приложение), Внешнее соединение=Нет. Повторное использование возвращаемых значений=Не использовать. Основной блок вставьте ЦЕЛИКОМ в пустой модуль; экспортная функция СформироватьПорядокЦен85 не принимает аргументов.
Общие → Общие формы → создать управляемую ПорядокЦен85. Создайте Протокол85: Строка, длина=0 — неограниченная длина. Выведите многострочным полем с ПутьКДанным=Протокол85 и ТолькоПросмотр=Да.
В свойствах своей формы: АвтоматическоеСохранениеДанныхВНастройках=АвтоматическоеСохранениеДанныхФормыВНастройках.НеИспользовать; СохранениеДанныхВНастройках=СохранениеДанныхФормыВНастройках.НеИспользовать. Это два разных перечисления, не флаги Булево. Полный поддерживающий модуль формы вставьте в пустой модуль этой формы.
В форме создайте команду Проверить85: Действие=Проверить85; выведите её кнопку. Настоящий объект Команда передаёт платформа при нажатии; обработчик вручную не вызывайте. В ПриОткрытии опыт не запускайте.
Общие → Общие команды → создать ОткрытьПорядокЦен85 без параметра; включить в командный интерфейс своей учебной подсистемы. Третий полный блок вставьте в её пустой модуль. &НаКлиенте задаёт выполнение обработчика, а #Если ограничивает вид клиента; оба штатных параметра передаёт платформа.
После будущей проверки синтаксиса сохраните конфигурацию и обновите только свою учебную базу. Откройте ПорядокЦен85 штатной общей командой и нажмите Проверить85. Сервер создаёт таблицы, настройки и результаты; клиент получает только строковый отчёт.
Не нужны новая виртуальная машина, отдельный системный пользователь, полный обход метаданных, COM, Интернет или согласие на запись рабочих данных. Этот опыт не сохраняет настройки и не принимает чужие объекты. Компиляция и реальный запуск в 1С пока не выполнялись.
&НаСервере
Функция СформироватьПорядокЦен85() Экспорт
Товары85 = Новый ТаблицаЗначений();
Квалификаторы85 = Новый КвалификаторыЧисла(9, 0, ДопустимыйЗнак.Неотрицательный);
ТипЧисла85 = Новый ОписаниеТипов("Число", Квалификаторы85);
Товары85.Колонки.Добавить("Цена85", ТипЧисла85);
Товары85.Колонки.Добавить("Количество85", ТипЧисла85);
Строка85 = Товары85.Добавить();
Строка85.Цена85 = 300;
Строка85.Количество85 = 6;
Строка85 = Товары85.Добавить();
Строка85.Цена85 = 100;
Строка85.Количество85 = 2;
Строка85 = Товары85.Добавить();
Строка85.Цена85 = 250;
Строка85.Количество85 = 4;
Цены85 = Товары85.Скопировать(, "Цена85");
ПроверитьИсходные85(Товары85, Цены85);
Эталон85 = СоздатьПостроитель85(Цены85);
Основной85 = СоздатьПостроитель85(Товары85);
Если ТипЗнч(Эталон85.Порядок) <> Тип("Порядок")
Или ТипЗнч(Основной85.Порядок) <> Тип("Порядок") Тогда
ВызватьИсключение "Не получены настоящие порядки собственных построителей";
КонецЕсли;
ПоляЭталона85 = Эталон85.Порядок.ПолучитьДоступныеПоля();
ПоляДо85 = Основной85.Порядок.ПолучитьДоступныеПоля();
Если ТипЗнч(ПоляЭталона85) <> Тип("ПоляНастройки")
Или ТипЗнч(ПоляДо85) <> Тип("ПоляНастройки") Тогда
ВызватьИсключение "Нужны настоящие коллекции разрешённых полей";
КонецЕсли;
РазрешенныхДо85 = ПоляДо85.Количество();
Если ПоляЭталона85.Количество() <> 1 Или РазрешенныхДо85 <> 2 Тогда
ВызватьИсключение "До переноса нужны одно поле эталона и два поля основного порядка";
КонецЕсли;
ПолеЭталона85 = ПоляЭталона85.Найти("Цена85");
ПолеЦеныДо85 = ПоляДо85.Найти("Цена85");
ПолеКоличестваДо85 = ПоляДо85.Найти("Количество85");
Если ТипЗнч(ПолеЭталона85) <> Тип("ПолеНастройки")
Или ТипЗнч(ПолеЦеныДо85) <> Тип("ПолеНастройки")
Или ТипЗнч(ПолеКоличестваДо85) <> Тип("ПолеНастройки") Тогда
ВызватьИсключение "Разрешённые собственные поля не найдены";
КонецЕсли;
Если ПолеЭталона85.Имя <> "Цена85" Или ПолеЦеныДо85.Имя <> "Цена85"
Или ПолеКоличестваДо85.Имя <> "Количество85" Тогда
ВызватьИсключение "Имена реальных разрешённых полей не совпали с собственным набором";
КонецЕсли;
Эталон85.Порядок.Очистить();
Эталон85.Порядок.Добавить("Цена85", "ЭталонЦен85", "Цены эталона", НаправлениеСортировки.Возр);
Если Эталон85.Порядок.Количество() <> 1 Тогда
ВызватьИсключение "Не создана единственная эталонная сортировка";
КонецЕсли;
ЭлементЭталона85 = Эталон85.Порядок.Получить(0);
Если ТипЗнч(ЭлементЭталона85) <> Тип("ЭлементПорядка") Тогда
ВызватьИсключение "Нужен настоящий элемент порядка эталона";
КонецЕсли;
ДанныеЦены85 = ЭлементЭталона85.Данные;
Если ТипЗнч(ДанныеЦены85) <> Тип("Строка") Или ДанныеЦены85 <> "Цена85"
Или ЭлементЭталона85.Направление <> НаправлениеСортировки.Возр Тогда
ВызватьИсключение "Эталон должен действительно упорядочивать собственную цену по возрастанию";
КонецЕсли;
Основной85.Порядок.УстановитьДоступныеПоля(ПоляЭталона85);
ПоляПосле85 = Основной85.Порядок.ПолучитьДоступныеПоля();
Если ТипЗнч(ПоляПосле85) <> Тип("ПоляНастройки") Тогда
ВызватьИсключение "Перенос не подтверждён новой коллекцией полей";
КонецЕсли;
РазрешенныхПосле85 = ПоляПосле85.Количество();
ПолеЦеныПосле85 = ПоляПосле85.Найти(ДанныеЦены85);
Если РазрешенныхПосле85 <> 1 Или ТипЗнч(ПолеЦеныПосле85) <> Тип("ПолеНастройки")
Или ПоляПосле85.Найти("Количество85") <> Неопределено Тогда
ВызватьИсключение "После переноса для сортировки должна остаться только собственная цена";
КонецЕсли;
Если ПолеЦеныПосле85.Имя <> ДанныеЦены85 Тогда
ВызватьИсключение "Фактический ключ эталонной сортировки не разрешён в основном наборе";
КонецЕсли;
Основной85.Порядок.Очистить();
Основной85.Порядок.Добавить(ДанныеЦены85, "СортировкаЦен85", "Цена", НаправлениеСортировки.Возр);
Если Основной85.Порядок.Количество() <> 1 Тогда
ВызватьИсключение "Не создана единственная основная сортировка";
КонецЕсли;
ЭлементОсновного85 = Основной85.Порядок.Получить(0);
Если ТипЗнч(ЭлементОсновного85) <> Тип("ЭлементПорядка") Тогда
ВызватьИсключение "Не получен настоящий элемент основного порядка";
КонецЕсли;
ЭлементОсновного85.Представление = "Цена товара по возрастанию";
Эталон85.Выполнить();
Основной85.Выполнить();
Если ТипЗнч(Эталон85.Результат) <> Тип("РезультатЗапроса")
Или ТипЗнч(Основной85.Результат) <> Тип("РезультатЗапроса") Тогда
ВызватьИсключение "Построители не дали настоящие результаты";
КонецЕсли;
РезультатЦен85 = Эталон85.Результат.Выгрузить();
РезультатТоваров85 = Основной85.Результат.Выгрузить();
Если ТипЗнч(РезультатЦен85) <> Тип("ТаблицаЗначений")
Или ТипЗнч(РезультатТоваров85) <> Тип("ТаблицаЗначений") Тогда
ВызватьИсключение "Оба результата должны быть настоящими таблицами";
КонецЕсли;
Если РезультатЦен85.Количество() <> 3 Или РезультатЦен85.Колонки.Количество() <> 1
Или РезультатЦен85.Колонки.Найти("Цена85") = Неопределено
Или РезультатТоваров85.Количество() <> 3 Или РезультатТоваров85.Колонки.Количество() <> 2
Или РезультатТоваров85.Колонки.Найти("Цена85") = Неопределено
Или РезультатТоваров85.Колонки.Найти("Количество85") = Неопределено Тогда
ВызватьИсключение "Результат не сохранил собственный состав строк и колонок";
КонецЕсли;
Итого85 = 0;
СтрокиОтчета85 = "";
Для Индекс85 = 0 По 2 Цикл
ЦенаЭталона85 = РезультатЦен85.Получить(Индекс85).Цена85;
СтрокаТовара85 = РезультатТоваров85.Получить(Индекс85);
Цена85 = СтрокаТовара85.Цена85;
Количество85 = СтрокаТовара85.Количество85;
Если ТипЗнч(ЦенаЭталона85) <> Тип("Число") Или ТипЗнч(Цена85) <> Тип("Число")
Или ТипЗнч(Количество85) <> Тип("Число") Тогда
ВызватьИсключение "В результатах нужны реальные числовые цены и количества";
КонецЕсли;
Если ЦенаЭталона85 <> Цена85
Или (Индекс85 = 0 И (Цена85 <> 100 Или Количество85 <> 2))
Или (Индекс85 = 1 И (Цена85 <> 250 Или Количество85 <> 4))
Или (Индекс85 = 2 И (Цена85 <> 300 Или Количество85 <> 6)) Тогда
ВызватьИсключение "Фактическая сортировка или связь цены с количеством не подтверждена";
КонецЕсли;
СуммаСтроки85 = Цена85 * Количество85;
Итого85 = Итого85 + СуммаСтроки85;
СтрокиОтчета85 = СтрокиОтчета85 + Строка(Цена85) + " × " + Строка(Количество85)
+ " = " + Строка(СуммаСтроки85) + "; ";
КонецЦикла;
Если ТипЗнч(Итого85) <> Тип("Число") Или Итого85 <> 3000 Тогда
ВызватьИсключение "Настоящий итог товаров не равен 3000";
КонецЕсли;
ПроверитьИсходные85(Товары85, Цены85);
Если Основной85.Порядок.Количество() <> 1 Тогда
ВызватьИсключение "Итоговый порядок неожиданно изменился";
КонецЕсли;
ИтоговыйЭлемент85 = Основной85.Порядок.Получить(0);
Если ТипЗнч(ИтоговыйЭлемент85) <> Тип("ЭлементПорядка") Тогда
ВызватьИсключение "Не подтверждён итоговый элемент порядка";
КонецЕсли;
Если ТипЗнч(ИтоговыйЭлемент85.Данные) <> Тип("Строка")
Или ИтоговыйЭлемент85.Данные <> ДанныеЦены85
Или ТипЗнч(ИтоговыйЭлемент85.Представление) <> Тип("Строка")
Или ИтоговыйЭлемент85.Представление <> "Цена товара по возрастанию"
Или ИтоговыйЭлемент85.Направление <> НаправлениеСортировки.Возр Тогда
ВызватьИсключение "Не подтверждены фактический ключ, подпись и направление сортировки";
КонецЕсли;
Возврат "Разрешённых полей сортировки: " + Строка(РазрешенныхДо85) + " → "
+ Строка(РазрешенныхПосле85) + ". Ключ: " + ИтоговыйЭлемент85.Данные + ". "
+ ИтоговыйЭлемент85.Представление + ": " + СтрокиОтчета85
+ "Итог: " + Строка(Итого85) + ". Оба исходных набора сохранены.";
КонецФункции
&НаСервере
Функция СоздатьПостроитель85(Таблица85)
Если ТипЗнч(Таблица85) <> Тип("ТаблицаЗначений") Тогда
ВызватьИсключение "Внутреннему построителю нужна собственная проверенная таблица";
КонецЕсли;
Описание85 = Новый ОписаниеИсточникаДанных(Таблица85);
Для Каждого Колонка85 Из Описание85.Колонки Цикл
Колонка85.Поле = Истина;
Колонка85.Порядок = Истина;
Колонка85.Измерение = Ложь;
КонецЦикла;
Построитель85 = Новый ПостроительЗапроса();
Построитель85.ИсточникДанных = Описание85;
Построитель85.ДобавлениеПредставлений = ТипДобавленияПредставлений.НеДобавлять;
Построитель85.ВыбранныеПоля.Очистить();
Для Каждого Колонка85 Из Описание85.Колонки Цикл
Построитель85.ВыбранныеПоля.Добавить(Колонка85.Имя);
КонецЦикла;
Возврат Построитель85;
КонецФункции
&НаСервере
Процедура ПроверитьИсходные85(Товары85, Цены85)
Если ТипЗнч(Товары85) <> Тип("ТаблицаЗначений") Или ТипЗнч(Цены85) <> Тип("ТаблицаЗначений") Тогда
ВызватьИсключение "Нужны оба настоящих собственных исходных набора";
КонецЕсли;
Если Товары85.Количество() <> 3 Или Товары85.Колонки.Количество() <> 2
Или Товары85.Колонки.Найти("Цена85") = Неопределено
Или Товары85.Колонки.Найти("Количество85") = Неопределено
Или Цены85.Количество() <> 3 Или Цены85.Колонки.Количество() <> 1
Или Цены85.Колонки.Найти("Цена85") = Неопределено Тогда
ВызватьИсключение "Не совпал полный собственный состав исходных данных";
КонецЕсли;
Для Индекс85 = 0 По 2 Цикл
СтрокаТовара85 = Товары85.Получить(Индекс85);
Цена85 = СтрокаТовара85.Цена85;
Количество85 = СтрокаТовара85.Количество85;
ЦенаЭталона85 = Цены85.Получить(Индекс85).Цена85;
Если ТипЗнч(Цена85) <> Тип("Число") Или ТипЗнч(Количество85) <> Тип("Число")
Или ТипЗнч(ЦенаЭталона85) <> Тип("Число") Тогда
ВызватьИсключение "Исходные значения должны оставаться настоящими числами";
КонецЕсли;
Если ЦенаЭталона85 <> Цена85
Или (Индекс85 = 0 И (Цена85 <> 300 Или Количество85 <> 6))
Или (Индекс85 = 1 И (Цена85 <> 100 Или Количество85 <> 2))
Или (Индекс85 = 2 И (Цена85 <> 250 Или Количество85 <> 4)) Тогда
ВызватьИсключение "Исходные строки изменены либо не подготовлены";
КонецЕсли;
КонецЦикла;
КонецПроцедурыПолный модуль своей формы ПорядокЦен85
Общие → Общие формы → ПорядокЦен85 → пустой модуль формы. Вставить ЦЕЛИКОМ; кнопка связана с командой Проверить85 через Действие.
Настоящий обработчик команды &НаКлиенте и серверная функция этой же формы &НаСервере. Возвращается только строковый отчёт; таблицы и настройки не передаются клиенту.
&НаКлиенте
Процедура Проверить85(Команда)
Протокол85 = "";
Попытка
Если ТипЗнч(Команда) <> Тип("КомандаФормы") Или Команда.Имя <> "Проверить85" Тогда
ВызватьИсключение "Нужна настоящая собственная команда формы";
КонецЕсли;
Получено85 = СформироватьНаСервере85();
Если ТипЗнч(Получено85) <> Тип("Строка") Или Получено85 = "" Тогда
ВызватьИсключение "Не получен полный строковый отчёт";
КонецЕсли;
Протокол85 = Получено85;
Исключение
Протокол85 = "Сортировка НЕ подтверждена. Опыт остановлен.";
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
&НаСервере
Функция СформироватьНаСервере85()
Если ИмяФормы <> "ОбщаяФорма.ПорядокЦен85"
Или АвтоматическоеСохранениеДанныхВНастройках <> АвтоматическоеСохранениеДанныхФормыВНастройках.НеИспользовать
Или СохранениеДанныхВНастройках <> СохранениеДанныхФормыВНастройках.НеИспользовать Тогда
ВызватьИсключение "Нужна собственная форма с отключённым сохранением данных";
КонецЕсли;
Отчет85 = ТолькоЦены85.СформироватьПорядокЦен85();
Если ТипЗнч(Отчет85) <> Тип("Строка") Или Отчет85 = "" Тогда
ВызватьИсключение "Свой серверный модуль не вернул полный отчёт";
КонецЕсли;
Возврат Отчет85;
КонецФункцииПолный модуль своей общей команды ОткрытьПорядокЦен85
Общие → Общие команды → ОткрытьПорядокЦен85 → пустой модуль команды. Вставить ЦЕЛИКОМ; включить без параметра в собственный учебный интерфейс.
&НаКлиенте; толстый управляемый клиент, реальная ОбработкаКоманды с двумя штатными параметрами.
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
#Если ТолстыйКлиентУправляемоеПриложение Тогда
Если ПараметрКоманды <> Неопределено
Или ТипЗнч(ПараметрыВыполненияКоманды) <> Тип("ПараметрыВыполненияКоманды") Тогда
ВызватьИсключение "Откройте свою форму штатной общей командой без параметра";
КонецЕсли;
ОткрытьФорму("ОбщаяФорма.ПорядокЦен85");
#Иначе
ВызватьИсключение "Учебную форму открывайте в толстом управляемом клиенте";
#КонецЕсли
КонецПроцедурыРазбор по шагам
Создаём типизированную таблицу Цена85/Количество85: (300,6), (100,2), (250,4). Для обеих колонок используем одно настоящее описание числа с явными квалификаторами: 9 разрядов, 0 дробных, знак Неотрицательный. Установленный конструктор ОписаниеТипов предупреждает, что без параметра КвалификаторыЧисла числа хранить нельзя. Скопировать(, "Цена85") получает настоящий отдельный эталон с теми же тремя ценами и единственной колонкой: первый необязательный аргумент опущен, поэтому по справке копируются все строки. Проверяем полный состав обеих таблиц, типы и значения.
Каждая таблица получает своё ОписаниеИсточникаДанных и свой ПостроительЗапроса. У собственных колонок разрешаем выбор и упорядочивание; измерения запрещаем. ВыбранныеПоля задаёт колонки результата, а не разрешённые поля сортировки.
ПолучитьДоступныеПоля возвращает настоящие ПоляНастройки. У эталона должна быть только Цена85, у основного порядка — Цена85 и Количество85. Сравниваем количество и поиск точных имён, без предположения о порядке коллекции.
Настраиваем цену эталона по возрастанию. Добавить у Порядок не возвращает элемент: после проверки Количество=1 получаем его через Получить(0). Данные — прочитанное настоящее имя данных; Направление — только для чтения. Проверяем Цена85 и настоящий НаправлениеСортировки.Возр.
УстановитьДоступныеПоля получает именно фактическую коллекцию эталона. Новое чтение основного порядка должно показать одно разрешённое поле Цена85 и отсутствие Количество85. Это перенос списка допустимых ключей сортировки, не удаление колонки товара.
Основная сортировка использует реальное Данные эталонного элемента. У настоящего основного элемента записываем понятное Представление «Цена товара по возрастанию». Эта подпись не переименовывает колонку и не заменяет имя данных.
Выполнить не возвращает таблицу: результат находится в свойстве Результат, доступном только для чтения. Выгрузить() без параметра использует прямой обход и создаёт ТаблицаЗначений. Реально проверяем оба результата: цены 100/250/300; связанные количества 2/4/6.
Из настоящих строк основного результата вычисляем 100×2=200, 250×4=1000, 300×6=1800 и итог 3000. Полное повторное чтение исходных таблиц подтверждает прежний состав и порядок; свежий Получить(0) подтверждает ключ, подпись и направление. Именно эти прочитанные значения и вычисленные суммы попадают в отчёт.
Перед обращением к серверу форма сразу очищает прошлый отчёт. Любая ошибка показывает фиксированное сообщение о незавершённой сортировке; исходное исключение передаётся дальше. Нет подмены чисел, исправления настройки, автоматического повтора или успешного отчёта при отказе.
Как проверить результат
Будущий нормальный запуск: отчёт показывает разрешённые поля 2 → 1, ключ Цена85, подпись «Цена товара по возрастанию», строки 100×2=200; 250×4=1000; 300×6=1800 и настоящий итог 3000.
В своём отладчике перед переносом проверьте тип ПоляНастройки и реальные имена: эталон содержит только Цена85, основной — оба поля. После УстановитьДоступныеПоля повторное чтение содержит только Цена85; поиск Количество85 возвращает Неопределено.
Проверьте, что основной результат всё ещё содержит Количество85. При сортировке количество должно оставаться с собственной ценой: 2 с 100, 4 с 250, 6 с 300. Переставляются строки результата, а не отдельные значения одного столбца.
После обоих выполнений сравните все исходные строки: товары снова (300,6), (100,2), (250,4), эталонные цены снова 300/100/250. У каждой исходной ячейки должен оставаться тип Число.
Только в отдельной своей учебной копии через отладчик измените одну исходную цену либо количество до ПроверитьИсходные85. Ожидается остановка проверки и отсутствие успешного отчёта. Не проверяйте это на рабочих товарах и не чините контрольные значения ради прохождения.
В своей учебной копии измените направление основной сортировки на Убыв, сохранив прежние ожидания. Действительная проверка позиции и связанного количества должна остановить опыт. Другой опыт — неверная итоговая подпись перед свежим Получить(0): проверка подписи тоже должна отказать.
При ошибке поле содержит только «Сортировка НЕ подтверждена. Опыт остановлен», а не предыдущий успешный отчёт или полный текст технической ошибки. Само исключение передаётся платформе; форма не скрывает его как успешный результат.
Повторное обычное нажатие начинает новый самостоятельный расчёт в памяти. Доставка вызова формы на сервер и компиляция ещё требуют ручной проверки; написанный код и сверенная справка не означают уже выполненный опыт.
Ожидаемый результат
Будущий фактический отчёт: разрешённые ключи сортировки 2 → 1, Цена85, «Цена товара по возрастанию», 100×2=200; 250×4=1000; 300×6=1800; общий итог 3000. Количество85 сохраняется в результате, оба исходных набора неизменны. Реальный запуск и компиляция в 1С пока не выполнялись.
На что обратить внимание
Эта семья — старый самостоятельный API ПостроительЗапроса, не СКД и не объект Запрос. Табличный ИсточникДанных — настоящее ОписаниеИсточникаДанных. ПолучитьЗапрос в таком режиме не используем; текст к рабочим таблицам и параметры чужой конфигурации не нужны.
УстановитьДоступныеПоля/ПолучитьДоступныеПоля прямо недоступны у порядка динамических списков СправочникСписок, ДокументСписок и подобных. Не переносите этот пример в их Порядок: здесь оба владельца — собственные отдельные ПостроительЗапроса.
Установка списка сортировки не является RLS, проверкой прав или запретом доступа к данным. Количество85 остаётся выбранным полем результата, но не разрешённым ключом данного собственного порядка.
Пример ПолучитьДоступныеПоля в установленной справке содержит смешанные имена и свойства отбора. Он сохранён как источник, но не скопирован в модуль. Сигнатуры Добавить/Получить и свойства Данные/Представление используются отдельно и точно.
Добавить, УстановитьДоступныеПоля и Выполнить здесь вызываются как операции без получения результата. Не присваивайте их неописанный результат переменной и не выдумывайте возвращаемый ЭлементПорядка. Числовой индекс Получить начинается с 0.
Данные и Направление только для чтения. Данные — имя данных, ПутьКДанным — отдельное свойство. Для одного собственного плоского поля проверяем фактическое Цена85; всеобщего равенства этих двух свойств не обещаем. Направление задаётся документированным аргументом Добавить.
Представление — строка пользовательской подписи, доступная для записи. Оно не меняет ключ, исходную колонку или порядок строк само по себе; поэтому отдельно проверяются реальная сортировка и свежие свойства элемента.
УстановитьДоступныеПоля не обещает глубокую копию или независимость коллекций. После передачи обе коллекции не изменяем и их объектную идентичность не сравниваем. Проверяется новая фактическая разрешённая схема и полезный результат, не сериализация настроек.
Описание колонок разрешает выбор и сортировку, запрещает измерения. Если фактическая версия даёт иной состав разрешённых полей или иной результат, это незавершённая подготовка/ошибка, а не успешный урок с красивыми константами.
Построители, таблицы и результаты остаются на сервере; в клиент передаётся String. Строка(Число) зависит от национальных установок: сравнивайте настоящие значения и смысл, не побайтовое оформление отчёта.
Это только собственные объекты в памяти. Нет записи настройки, рабочей базы, файлов, печати, COM или сети из алгоритма. Открытие формы и обращение клиента к серверу выполняют обычные платформенные вызовы. Совпадение имени формы и отключённого сохранения не является защитой от подделки вызова.
В 1С этот сценарий пока не запускался и не компилировался. Любое исключение/неверное фактическое значение — остановка, не положительная демонстрация заявленных пунктов и не основание исправлять рабочую конфигурацию.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.
Построить результат из собственных трёх товарных строк
ТаблицаЗначений оборачивается в ОписаниеИсточникаДанных; колонки отдельно разрешаются для полей, отбора и порядка.
Где и как запускать
Полный серверный общий модуль собственной учебной базы.
Подготовка
Создайте собственный общий модуль УчебныйПостроительЗапроса в учебной базе 8.5.1.1343. Установите флаг Сервер. Каждый урок — отдельный полный текст модуля с процедурой ВыполнитьПример() Экспорт.
Из серверного обработчика команды своей учебной обработки вызовите УчебныйПостроительЗапроса.ВыполнитьПример(). Не переносите серверные таблицы значений в тонкий клиент.
Данные Книга/Ручка/Коробка создаются самим уроком в памяти. Нет чтения справочников, документов, регистров, внешних сервисов или записи информационной базы.
ПостроительЗапроса — отдельный старый API, не объект Запрос и не конструктор запросов. У него нет Вывести и оформительских свойств ПостроительОтчета.
Проверки рассчитаны на исходные вымышленные значения. После изменения образцов пересчитайте контрольные суммы и количества строк.
Процедура ВыполнитьПример() Экспорт
Данные = Новый ТаблицаЗначений;
Данные.Колонки.Добавить("Категория", Новый ОписаниеТипов("Строка"));
Данные.Колонки.Добавить("Наименование", Новый ОписаниеТипов("Строка"));
Данные.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число"));
Данные.Колонки.Добавить("Цена", Новый ОписаниеТипов("Число"));
Данные.Колонки.Добавить("Сумма", Новый ОписаниеТипов("Число"));
Образцы = Новый Массив;
Образцы.Добавить(Новый Структура("Категория,Наименование,Количество,Цена", "Канцелярия", "Книга", 3, 250));
Образцы.Добавить(Новый Структура("Категория,Наименование,Количество,Цена", "Канцелярия", "Ручка", 1, 50));
Образцы.Добавить(Новый Структура("Категория,Наименование,Количество,Цена", "Упаковка", "Коробка", 2, 30));
Для Каждого Образец Из Образцы Цикл
СтрокаДанных = Данные.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаДанных, Образец);
СтрокаДанных.Сумма = СтрокаДанных.Количество * СтрокаДанных.Цена;
КонецЦикла;
Описание = Новый ОписаниеИсточникаДанных(Данные);
Для Каждого Колонка Из Описание.Колонки Цикл
Колонка.Поле = Истина;
Колонка.Отбор = Истина;
Колонка.Порядок = Истина;
Колонка.Измерение = Колонка.Имя = "Категория";
КонецЦикла;
Построитель = Новый ПостроительЗапроса;
Построитель.ИсточникДанных = Описание;
Построитель.ДобавлениеПредставлений = ТипДобавленияПредставлений.НеДобавлять;
Построитель.ВыбранныеПоля.Очистить();
Построитель.ВыбранныеПоля.Добавить("Категория");
Построитель.ВыбранныеПоля.Добавить("Наименование");
Построитель.ВыбранныеПоля.Добавить("Количество");
Построитель.ВыбранныеПоля.Добавить("Цена");
Построитель.ВыбранныеПоля.Добавить("Сумма");
Сообщить(ТипЗнч(Построитель.ИсточникДанных) = Тип("ОписаниеИсточникаДанных"));
Сообщить(Построитель.ДоступныеПоля.Количество() = 5);
Сообщить(Построитель.ДоступныеПоля.Найти("Сумма") <> Неопределено);
Сообщить(Построитель.ВыбранныеПоля.Количество() = 5);
Сообщить(Построитель.ДобавлениеПредставлений = ТипДобавленияПредставлений.НеДобавлять);
Построитель.Выполнить();
Строки = Построитель.Результат.Выгрузить();
Сообщить(Строки.Количество() = 3);
Сообщить(Строки.Итог("Сумма") = 860);
Сообщить(Данные.Количество() = 3);
Сообщить(Данные.Итог("Сумма") = 860);
Для Каждого СтрокаРезультата Из Строки Цикл
Сообщить(СтрШаблон("%1: %2", СтрокаРезультата.Наименование, СтрокаРезультата.Сумма));
КонецЦикла;
КонецПроцедурыРазбор по шагам
Создаются пять типизированных колонок и три строки: 750, 50, 60; общий итог 860.
ОписаниеИсточникаДанных содержит доступные операции каждой колонки. Это не метаданные и не запрос к базе.
Категория дополнительно разрешена как измерение, остальные колонки — детали.
ВыбранныеПоля определяет состав результата; ДоступныеПоля — разрешённый набор, а не выбранные строки.
Здесь не нужен текст запроса и запрещён ПолучитьЗапрос. Результат выгружается после Выполнить.
Как проверить результат
Девять булевых проверок Истина, затем строки Книга 750, Ручка 50, Коробка 60.
Порядок строк без явного Порядок не используется как условие успешности.
Ожидаемый результат
Получен содержательный результат из локального источника; исходная таблица не изменена.
На что обратить внимание
ДобавлениеПредставлений относится к представлениям данных, не к дизайну отчёта. В этом наборе нет ссылок; разницу режимов на них урок не доказывает.
Не присваивайте ТаблицаЗначений непосредственно ИсточникДанных: используется документированный объект описания.
ПостроительЗапроса не выводит табличный документ сам.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.