Имя: Пароль:
1C
1С v8
Как из справочника перенести значения в документ
0 Novis616
 
21.12.23
15:00
Добрый день! Суть в том, что есть иерархический справочник с заполненными строками. Можно ли как-то перенести эти записи из группы справочника в табличную часть документа пачкой, а не по 1 записи в ручную?
1 Donkey_hot
 
21.12.23
15:03
(0) Выберите запросом, выгрузите в таблицу значений, у табличной части вызовите метод Загрузить()
2 Novis616
 
21.12.23
15:04
(1) Можете подсказать, как это сделать? Только начал изучать 1с, поэтому мало что понимаю
3 yurikmellon2
 
21.12.23
15:14
(2) на

&НаСервере
Процедура ЗаполнитьТаблицуПодразделений()
    Запрос = Новый запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |    Подразделения.Ссылка КАК Подразделение
                   |ИЗ
                   |    Справочник.Подразделения КАК Подразделения";
    РезультатЗапроса = Запрос.Выполнить();
    ВремТабл = РезультатЗапроса.Выгрузить();
    Объект.Подразделения.Загрузить(ВремТабл);
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
    ЗаполнитьТаблицуПодразделений();
КонецПроцедуры


запрос вытаскивает данные из справочника Подразделения и записывает в таблицу значений ВремТабл

Объект.Подразделения - это табличная часть документа
Загрузить(ВремТабл) - загружает из ТЗ в ТЧ документа

названия колонок должны совпадать
4 Novis616
 
21.12.23
15:15
(3) Так, а код просто нужно вставить в модуль формы документа?
5 Новый1сник2
 
21.12.23
15:16
(3) условия на группу не хватает
6 Novis616
 
21.12.23
15:20
(3) Подставив все значения у меня получилось вот:
&НаСервере
Процедура ЗаполнитьСписокУчеников()
    Запрос = Новый запрос("ВЫБРАТЬ
    |    Ученики.Ссылка
    |ИЗ
    |    Справочник.Ученики КАК Ученики");
    РезультатЗапроса =  Запрос.Выполнить();
    ВременнаяТаблица = РезультатЗапроса.Выгрузить();     
    Объект.Ученики.Загрузить(ВременнаяТаблица);
КонецПроцедуры

&НаКлиенте
Процедура ПослеОткрытия(Элемент)
    ЗаполнитьСписокУчеников();
КонецПроцедуры    

Вопрос в том, а как теперь это реализовать, чтобы заполнялись ученики? + как написали выше, надо условию на группу ещё как-то добавить. Ученики по классам в разных группах + у учеников есть ещё реквизит "Класс", в который дублируется название группы просто
7 yurikmellon2
 
21.12.23
15:33
(6) условие на группу

    Запрос = Новый запрос("ВЫБРАТЬ
    |    Ученики.Ссылка КАК Ученики,
    |    Ученики.Класс КАК Класс
    |ИЗ
    |    Справочник.Ученики КАК Ученики
    |ГДЕ
    |    Ученики.ЭтоГруппа = ЛОЖЬ");
8 Новый1сник2
 
21.12.23
15:28
(7) условие нужно на вхождение в определенную группу
9 yurikmellon2
 
21.12.23
15:31
(8) думаешь? ТС пишет, что есть реквизит "Класс". Я так понимаю, что в ТЧ документа есть колонки Ученики и Класс и их надо заполнить данными из запроса
10 Novis616
 
21.12.23
15:32
(7) Спасибо, но не понимаю, почему не работает( Переделал, чтобы заполнение срабатывало по кнопке, но строки он почему-то не заполняет, ошибок как в синтаксисе, так и при исполнении нет
11 Новый1сник2
 
21.12.23
15:32
примерно так

ВЫБРАТЬ
    Номенклатура.Ссылка КАК Ссылка
ИЗ
    Справочник.Номенклатура КАК Номенклатура
ГДЕ
    Номенклатура.Родитель В ИЕРАРХИИ(&Группа)
    И Номенклатура.ЭтоГруппа = ЛОЖЬ
12 Новый1сник2
 
21.12.23
15:36
(9) "Ученики по классам в разных группах + у учеников есть ещё реквизит "Класс""
13 yurikmellon2
 
21.12.23
15:37
(12) щас он спросит что такое &Группа
14 yurikmellon2
 
21.12.23
15:40
(10) как ты определил что не работает? Форму то документа на клиенте обновить надо после заполнения ТЧ
15 Novis616
 
21.12.23
15:49
(13) Да спросил, точнее: "Не задано значение параметра "Группа"" А как пофиксить?
16 Novis616
 
21.12.23
15:49
(14) Это я дурак, извиняюсь, процедура с кнопкой не связалась
17 Новый1сник2
 
21.12.23
15:53
(15) так нужно задать значение параметра, например
Группа = Справочники.Номенклатура.НайтиПоКоду("КодТвоейГруппы")
Запрос.УстановитьПараметр("Группа", Группа);

пс вместо номенклатуры, твой справочник
18 yurikmellon2
 
21.12.23
15:52
(15) &Группа это параметр запроса, который надо указать.
Новый1сник2 имеет ввиду, что если тебе нужен отбор по ученикам в какой то определённой Группе(Папке), то этот параметр нужно явно указать и запрос вытащит в ТЗ только этих учеников
19 Novis616
 
21.12.23
15:54
+/- понял. Два вопроса: 1) Код с выбором группы надо писать до запроса/в запросе/после запроса? 2) Можно как-нибудь реализовать, чтобы пользователь сам выбирал группу?
20 hypotonics
 
21.12.23
15:56
https://ibb.co/xhz2sVR
Подскажите, пожалуйста, почему заполняет пустыми строками
21 Novis616
 
21.12.23
15:59
(17) Группа = Справочники.Ученики.НайтиПоКоду("А");
    Запрос.УстановитьПараметр("А", Группа);
получилось как-то так
22 Новый1сник2
 
21.12.23
16:01
(19) 1- установку параметра лучше после запроса, можно и в начале 2) можно добавить реквизит с выбором группы на форму
и тогда устанавливать параметр по этому реквизиту
23 Novis616
 
21.12.23
16:05
(22) Продолжает жаловаться, что значение "Группа" не установлено. Поставил после запроса
24 Новый1сник2
 
21.12.23
16:08
(21) Запрос.УстановитьПараметр("А", Группа); как то не так
если у тебя условие в запросе В ИЕРАРХИИ(&Группа)
то и параметр должен быть
Запрос.УстановитьПараметр("Группа", Группа);
25 yurikmellon2
 
21.12.23
16:09
(23) код, это код элемента справочника
и, да должно быть Запрос.УстановитьПараметр("Группа", Группа);
26 Donkey_hot
 
21.12.23
16:09
(23) Прочтите книгу "Практическое пособие разработчика" от корки до корки, воспроизводя в чистой базе все то, что там описано. Это займет у Вас недели две в самом худшем случае, при этом снимет примерно 146% от заданных здесь вопросов и им подобных.
27 Novis616
 
21.12.23
16:12
(25) Теперь ошибки нет, поставил код группы, а не наименование, но заполняет пустыми строками(
28 Novis616
 
21.12.23
16:13
(25) Если я правильно понимаю, то надо каким-то образом именно наименование ученика доставать запросом?
29 Novis616
 
21.12.23
16:15
(25) Вся процедура сейчас вот так выглядит:
&НаСервере
Процедура ЗаполнитьСписокУчеников()
    Запрос = Новый запрос("ВЫБРАТЬ Ученики.Ссылка КАК Ссылка ИЗ Справочник.Ученики КАК Ученики ГДЕ Ученики.Родитель В ИЕРАРХИИ(&Группа) И Ученики.ЭтоГруппа = ЛОЖЬ");
    Группа = Справочники.Ученики.НайтиПоКоду("000000031");
    Запрос.УстановитьПараметр("Группа", Группа);
    РезультатЗапроса =  Запрос.Выполнить();
    ВременнаяТаблица = РезультатЗапроса.Выгрузить();     
    Объект.Ученики.Загрузить(ВременнаяТаблица);
КонецПроцедуры
30 Волшебник
 
21.12.23
16:21
Группа = Справочники.Ученики.НайтиПоКоду("000000031"); // плохой программный код
31 Novis616
 
21.12.23
16:26
(30) ?
32 Новый1сник2
 
21.12.23
16:38
(31) документы нужно будет по разным группам заполнять? если да делай отдельным реквизитом в документе и передавай параметром в запрос
33 Novis616
 
21.12.23
16:38
(32) Принято. Но почему всё же заполняет пустыми строками сейчас?
34 Новый1сник2
 
21.12.23
16:46
(33) реквизиты в табличной части документа как называются?
35 Novis616
 
21.12.23
16:41
(34) реквизит в табличной части документа называется "Ученик"
36 Novis616
 
21.12.23
16:41
(34) из справочника "Ученики" Нужно наименование, получается
37 Lazy Stranger
 
21.12.23
16:42
(35) значит и в запросе должен быть учеником: ВЫБРАТЬ Ученики.Ссылка КАК Ученик
38 Новый1сник2
 
21.12.23
16:42
Запрос = Новый запрос("ВЫБРАТЬ Ученики.Ссылка КАК Ссылка ИЗ Справочник.Ученики КАК Ученики

попробуй заменить на

Запрос = Новый запрос("ВЫБРАТЬ Ученики.Ссылка КАК Ссылка ИЗ Справочник.Ученики КАК Ученик
39 Novis616
 
21.12.23
16:45
(38) Поле не найдено "Ученики.Родитель"
40 Novis616
 
21.12.23
16:45
(38) Если будет проще, то вот ссылки на скрины https://ibb.co/df7H9NX
https://ibb.co/Pr59BXp
https://ibb.co/b2dcZND
41 Новый1сник2
 
21.12.23
16:48
(39) ГДЕ Ученик.Родитель В ИЕРАРХИИ(&Группа) И Ученик.ЭтоГруппа = ЛОЖЬ")
42 Novis616
 
21.12.23
16:50
(41) Пожаловался на "Ученики.Ссылка" заменил на "Ученик.Ссылка" но снова пустые строки
43 Donkey_hot
 
21.12.23
16:53
(42) Реквизит ТЧ, в который должет попасть ученик, как называется?
44 Donkey_hot
 
21.12.23
16:55
(43) Вот и пишите в запросе Ученик.Ссылка КАК Ученик
45 Новый1сник2
 
21.12.23
16:55
(42) в 37 правильно
Запрос = Новый запрос("ВЫБРАТЬ Ученики.Ссылка КАК Ученик
46 Novis616
 
21.12.23
16:56
(43) У ТЧ в документе реквизит называется "Ученик". в Справочнике "Ученики" вообще такого реквизита нет, если что. Мне нужно, чтобы он как раз заполнял реквизит "Ученик" реквизитом "Наименование" из справочника "Ученики"
47 Novis616
 
21.12.23
16:57
ЗАПОЛНИЛОООСЬ. Спасибо Вам всем огромное!!!!!!
48 Donkey_hot
 
21.12.23
16:58
А зачем наименованием, если можно ссылкой?
Но если непременно наименованием (тип реквизита ТЧ - строка), то Выбрать Ученики.Наименование КАК Ученик
Но лучше используйте ссылку.
49 Donkey_hot
 
21.12.23
16:58
(47) Обратите все-таки внимание на (26)
50 Novis616
 
21.12.23
16:59
(49) Обязательно, но курсовую надо сдать завтра
51 Новый1сник2
 
21.12.23
17:00
(46) из справочника ты ссылку получаешь и называешь ее "Ученик" из временной таблицы потом по наименованию загружается в документ
52 Novis616
 
21.12.23
17:01
(51) Понял, спасибо Вам ещё раз большое. Может и подскажите тогда, как сделать выбор группы через отдельный реквизит?
53 Новый1сник2
 
21.12.23
17:08
(52) добавь реквизит "Группа" (тип значения твой справочник) в документ, в свойствах укажи выбор групп. вытащи реквизит на форму документа. и передавай его параметром в запрос
54 Novis616
 
21.12.23
17:19
(53) реквизит назвал "Класс", а как его передавать в запрос?
55 Novis616
 
21.12.23
17:21
(54) Сам разобрался
56 Novis616
 
21.12.23
17:21
(53) На этом точно всё, спасибо!