Нужна помощь, не понимаю, как произвести выборку по реквизитам. Есть справочник (Сотрудники), нужно произвести сортировку по реквизиту, сначала по филиалу, потом по году рождения, в справочнике есть 2 реквизита, 1й это ДатаРождения - тип дата(Отсортировать нужно только по году, без месяца и дня), 2й, это ФилиалРаботы - тип ссылка на справочник филиалы
Нужно отсортировать сначала
ГодРождения - Сотрудник - Филиал, После наоборот
Филиал - Сотрудник - Филиал, всё должно выводиться в табличный документ
не совсем понимаю, как работает сортировка реквизитам в которых указана ссылка, использовать нужно .Выбрать
---
сами же написали, что нужна сортировка по ссылочному типу (филиал), а метод Выбрать, судя по описанию его не поддерживает. Делайте цикл как в 12 посте, только без параметров, заполняйте внутри него таблицу значений, потом сортируйте по условию. Далее заполните по первому условию табличный документ (через "Для каждой стр из Таблицы Цикл"), потом сортируйте таблицу по второму значению и заполняйте табдок по второму условию.
зы: собственно про это еще во втором посте написано.
---
https://forum.infostart.ru/forum9/topic248812/
По теме? Справочник отсортировать нельзя. Можно только либо получить запросом отсортированную таблицу значений, либо делать выборку с сортировкой.
Если вам надо сортировать не по ссылке, а по наименованию ссылочного реквизита (ИмяСправочника.ИмяРеквизита.Наименование) - то у вас остается либо запрос, либо делать выборку и сохранять её в таблицу значений, которую потом сортируете.
---
по ссылке будет сортировать, т.е. по своему внутреннему порядку ссылок. Смысл в этом очень туманный, пользователи редко понимают, почему именно так отсортировано, а не по алфавиту, когда речь идет о справочнике.
Для сортировки по году нужно отдельное поле с годом.
Вообще задача странная. Или это опять тесты какие-то?
---
нет, сортировка нужна не для клиентов, а для личного понимания, что и как делается, только справочники начала изучать недавно и некоторые моменты совсем не понятны и не могу найти что-то похожее
---
https://forum.infostart.ru/forum9/topic248812/
По теме? Справочник отсортировать нельзя. Можно только либо получить запросом отсортированную таблицу значений, либо делать выборку с сортировкой.
Если вам надо сортировать не по ссылке, а по наименованию ссылочного реквизита (ИмяСправочника.ИмяРеквизита.Наименование) - то у вас остается либо запрос, либо делать выборку и сохранять её в таблицу значений, которую потом сортируете.
---
нет, задание не похожее, вообще, основную часть задания я сделала, я для себя сейчас хочу сделать 2 выборки с сортировкой, но не понимаю, как мне сделать первую по филиалу(ФилиалРаботы - Реквизит с типом ссылки на справочник сотрудники), вторая это как я понимаю только создав новый Реквизит с годом
---
Реквизиты сортируются по основному представлению ссылки (обычно наименование). Или уже по гуиду?
---
Это я знаю, но если я укажу .Выбрать(,,,"ФилиалыРаботы"); То у меня выйдет ошибка, (Выборка может быть упорядочена только по реквизитам, имеющими базовый тип и для которых установлен признак индексирования, поэтому я и задаюсь вопросом, как мне произвести выборку с сортировкой именно из реквизита у которого тип СправочникиСсылка.Сотрудники
---
базовый тип - строка, число, Дата, булево. Признак индексировать или индексировать с доп.упорядочиванием в конфигураторе был такой. Чем они отличаются не очень понимаю для базовых типов.
---
так это я знаю) я не могу произвести выборку с сортировкой по филиалу работу, потому что, не понимаю как, вот решила обратиться за вопросом, хочется для себя побольше узнать, в интернете не могу найти пример, именно с моим случаем
---
составной тип данных (когда в реквизит можно включить и склад и контрагент) точно нельзя упорядочить. А вот почему нельзя обычный ссылочный?
По моему можно коды элементов изменить для сортировки по умолчанию.
---
потому что ссылочный не является базовым типов
---
В динамическом списке запрос вместо формы с любым упорядочиванием делается.
В обычном списке нет отбора/сортировки даже по таким реквизитам базовых типов как пометкаудаления и проведен.
---
Вот так не работает

```1c
    Выборка = Справочники.Сотрудники.Выбрать(,,,"ФилиалРаботы");
    Пока Выборка.Следующий() Цикл
    ОбластьПодвал.Заполнить(Выборка);
    ТабДок.Вывести(ОбластьПодвал);
    КонецЦикла;
```

Но вопрос, как мне тогда сделать выборку по ФилиалРаботы, не могу понять, что нужно указать или наоборот создать?
---
а порядок сортировки? + или - указан?
---
нет, это весь блок кода, который указан именно для выборки и сортировки по филиалам сотрудников, но даже если я укажу + или -, все равно не будет работать, потому что реквизит (ФилиалРаботы) имеет тип ссылка на справочник филиалы, в котором каждый филиал закреплён за сотрудником
---
Допустим взять пример макета из Задания из (2), то каким образом имея справочник Сотрудники, я могу заполнить эти данные в поле табличного документа, где реквизит ФилиалРаботы имеет тип(СправочникиСсылка.Сотрудники), реквизит ДатаРождения тип(дата), и Сотрудник это наименование с справочника?
---
напрямую через выборку заполнить сможете, но без сортировки. Либо заполнять сперва в тз и сортировать её, а потом заново обходить таблицу.
зы: Не используйте метод "выбрать" справочника-менеджера. Отсортируйте запросом и выведите всё в таб.док.
---
я не изучала еще запросы, поэтому и спросила, что и куда, почему нельзя заполнить выборкой по убыв или возр?
---
сами же написали, что нужна сортировка по ссылочному типу (филиал), а метод Выбрать, судя по описанию его не поддерживает. Делайте цикл как в 12 посте, только без параметров, заполняйте внутри него таблицу значений, потом сортируйте по условию. Далее заполните по первому условию табличный документ (через "Для каждой стр из Таблицы Цикл"), потом сортируйте таблицу по второму значению и заполняйте табдок по второму условию.
зы: собственно про это еще во втором посте написано.
---
что-то я не совсем поняла, создаю таблицу, после мне нужно циклом получить данные из таблицы и засунуть их в тз, но как я их получу с справочника, если я не могу обход полный справочника сделать?
---
в чём сложность сделать полный обход справочника ?
```1c
    Выборка = Справочники.Сотрудники.Выбрать();
    Пока Выборка.Следующий() Цикл
```
---
делаю я полный обход, он у меня все данные сольёт в ТЗ, а в том то и дело, что мне нужно только 3 параметра, это филиал, наименование и дата рождения
---
Какие все сольет? Сольет только то, что вы соизволите приказать. А даже если и сольет все в ТЗ - в табдок то потом опять будете вы выводом управлять...

Или вы собрались делать ТЗ для всех реквизитов справочника?
---
предварительно создаете таблицу значений с тремя колонками и внутри цикла добавляете новую строку этой таблицы. Заполняете эти три колонки с помощью выборки. На выходе получаете ТЗ - копию справочника, только с тремя колонками.
---
Добавила значения в 3 разные колонки нужные, теперь как я понимаю, мне просто нужно ТЗ.Сортировать("Филиал,ДатаРождения Возвр") сделать, но только один последний вопрос. как мне сделать так, чтобы у меня в ДатеРождения выводило только год?
---
это можно было сделать при добавлении строк в тз (например через функцию "Год"), либо при выводе в макет с помощью функции "Формат" не меняя самой записи выводить только год (у ячейки таблицы тоже есть Формат, можно не только через код установить его)
---
Хорошо, спасибо за совет, как и что делать, помогло
---
"объектную модель" знать, конечно, тоже нужно, но эту задачу было бы проще сделать запросом.
---
У меня такой последний вопрос остался, я когда использую
Для каждого стр из ТЗ Цикл, и произвожу добавление данных с каждой колонки в нужную строку Табличного документа, то у меня только один сотрудник добавляется по всем колонкам, то-есть если у меня 10 сотрудников в справочнике, то все 10 раз выведется именно тот сотрудник, который будет первый, не подскажите по какой причине?
---
похоже, что параметры области заполняются до цикла, а нужно в нём заполнять и выводить
---
То-есть делать Цикл в цикле?
---
нет, приведите свой код по выводу в табдок
---
```1c
    Для каждого стр из ТБЗ Цикл
    ОбП.Параметры.Филиал = ТБЗ.Филиал;
    ОбП.Параметры.Сотрудник = ТБЗ.Сотрудник;
    ОбП.Параметры.ГодРождения = ТБЗ.ДатаРождения;
    ТабличныйДокумент.Вывести(ОбП);
    КонецЦикла;
```
---
вам нужен не "ТБЗ", а данные из "стр."
---
Упс, забыла, что элемент нужно указывать, а не из чего мы считаем(
Спасибо еще раз
---
есть еще метод ОбП.Параметры.Заполнить(стр); которые сопоставит по имени имеющиеся параметры с тем, что передаётся в него. Не нужно каждую строку так расписывать, только если вы не планируете совершать какие-то действия с конкретными параметрами, например "Формат" с датой.
---
да, про него тоже знаю, но иногда Заполнить не работает, так что тоже пока еще на потом изучение оставила, хорошо, спасибо за совет, учту на будущее
---
Сначала Выборкой заполняется ТЗ (КонецЦикла), Сортировка ТЗ, После Цикл с добавлением в макет и выводом
---
Если наименование колонок тз соответствует реквизитам справочника, то
Заполнитьзначениясвойств(ссылка,строкатз)
---
не совсем получается пользоваться данным способом, пока его не использую, оставила для изучения на потом
---
Если в макете параметр назвать "ДатаРождения" вместо "ГодРождения" или наоборот в таблице значений колонку назвать "ГодРождения" вместо "ДатаРождения" (т.е. надо сделать так, чтобы имена колонок в ТЗ совпадали с именами параметров в строке ТД), тогда вместо
```1c
    Для каждого СтрокаТЗ из ТБЗ Цикл
    ОбП.Параметры.Филиал = СтрокаТЗ .Филиал;
    ОбП.Параметры.Сотрудник = СтрокаТЗ .Сотрудник;
    ОбП.Параметры.ГодРождения = СтрокаТЗ .ДатаРождения;
    ТабличныйДокумент.Вывести(ОбП);
    КонецЦикла;
```
 можно нарисовать
```1c
    Для каждого СтрокаТЗ из ТБЗ Цикл
    ОбП.Параметры.Заполнить(СтрокаТЗ);
    ТабличныйДокумент.Вывести(ОбП);
    КонецЦикла;
```
 или
```1c
    Для каждого СтрокаТЗ из ТБЗ Цикл
    ЗаполнитьЗначенияСвойств(ОбП.Параметры, СтрокаТЗ);
    ТабличныйДокумент.Вывести(ОбП);
    КонецЦикла;
```