Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Запрос для заполнения реквизитов
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование управляемых форм 1С 8.2
alexk
Здравствуйте! У меня в документе есть реквизит "студент" (СправочникСсылка.Студенты), и другие реквизиты, так вот как сделать так, чтобы при выборе студента, остальные реквизиты заполнялись автоматически. Создал запрос, но он не работает.. Может в чем-то ошибка есть?
&НаКлиенте
Процедура СтудентПриИзменении(Элемент)
ЗаполнениеСтрок();
КонецПроцедуры
Процедура ЗаполнениеСтрок()
Запрос = Новый Запрос;
Запрос.Текст =
  "ВЫБРАТЬ
  | Студенты.Наименование как ФИО,
  | Студенты.Группа как Группа,
  | Студенты.Группа.Специальность как Специальность,
  | Студенты.ЛичныеДанные.(
  |  ДатаРождения
  | ) как ГодРождения,
  | Студенты.Группа.Курс как Курс,
  | Студенты.УчебныеДанные.(
  |  ДатаПоступления
  | ) как ГодПоступления
  |ИЗ
  | Справочник.Студенты КАК Студенты
  |ГДЕ
  | Студенты.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", Объект.Студент);
Результат = Запрос.Выполнить();


Простите сообщение забыл в тег вставить......
Vofka
Интересно, а какая вообще строчка кода отвечает за заполнение чего-либо? Вы вообще понимаете смысл букв, которые в коде пишете?
alexk
Да, конечно понимаю, но не сказать, чтобы совсем профессионально, дело в том, что я учусь программировать в 1с.. вот добавил часть кода для заполнения, но тоже, не работает..
Процедура ЗаполнениеСтрок()
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    Студенты.Наименование как ФИО,
        |    Студенты.Группа как Группа,
        |    Студенты.Группа.Специальность как Специальность,
        |    Студенты.ЛичныеДанные.(
        |        ДатаРождения
        |    ) как ГодРождения,
        |    Студенты.Группа.Курс как Курс,
        |    Студенты.УчебныеДанные.(
        |        ДатаПоступления
        |    ) как ГодПоступления
        |ИЗ
        |    Справочник.Студенты КАК Студенты
        |ГДЕ
        |    Студенты.Ссылка = &Ссылка";

    Запрос.УстановитьПараметр("Ссылка", Объект.Студент);

    Результат = Запрос.Выполнить();
    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
        ФИО = Выборка.ФИО;
        Группа = Выборка.Группа;
        Специальность = Выборка.Специальность;
КонецЦикла;
        Результат.Выгрузить();
        
КонецПроцедуры
kivals
Цитата(alexk @ 07.10.12, 16:45) необходимо зарегистрироваться для просмотра ссылки
Да, конечно понимаю, но не сказать, чтобы совсем профессионально, дело в том, что я учусь программировать в 1с.. вот добавил часть кода для заполнения, но тоже, не работает..
Процедура ЗаполнениеСтрок()
    // ...
    Запрос.УстановитьПараметр("Ссылка", Объект.Студент);

    Результат = Запрос.Выполнить();
    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
        ФИО = Выборка.ФИО;
        Группа = Выборка.Группа;
        Специальность = Выборка.Специальность;
КонецЦикла;
        Результат.Выгрузить();
        
КонецПроцедуры


Вот это:
Результат = Запрос.Выполнить();
   Выборка = Запрос.Выполнить().Выбрать();


Должно быть записано по-другому:
Результат = Запрос.Выполнить();
   Выборка = Результат.Выбрать();
   // или
   Выборка = Запрос.Выполнить().Выбрать(); // Поскольку Результат сам по себе Вам дальше не нужен

Иначе Вы заставляете компилятор делать лишнюю работу.

Вот это:
Результат.Выгрузить();

Не нужно вообще, т.к. полученную Таблицу Значений Вы даже не присваиваете никакой переменной.

Ну и самая главная ошибка:
Вы результат запроса присваиваете обычным переменным, а не свойствам реквизита формы Объект (обычно основной реквизит формы называется именно так, хотя это и не обязательно)
    Пока Выборка.Следующий() Цикл
        Объект.ФИО = Выборка.ФИО;
        Объект.Группа = Выборка.Группа;
        Объект.Специальность = Выборка.Специальность;
    КонецЦикла;

Но лучше вот так:
Выборка.Следующий(); // Только первую запись
ЗаполнитьЗначенияСвойств(Объект, Выборка, "ФИО,Группа,Специальность");


В принципе параметр "ФИО,Группа,Специальность" можно просто не указывать - это сделано чтобы создать точную аналогию Вашему коду
logist
Цитата(alexk @ 07.10.12, 15:27) необходимо зарегистрироваться для просмотра ссылки
как сделать так, чтобы при выборе студента, остальные реквизиты заполнялись автоматически.

А что с этими реквизитами будет потом? Если они нужны чисто визуально, то зачем вообще что-то писать, можно же просто отобразить их указывая в свойствах поля - путь к данным.
alexk
Цитата(logist @ 07.10.12, 17:25) необходимо зарегистрироваться для просмотра ссылки
А что с этими реквизитами будет потом? Если они нужны чисто визуально, то зачем вообще что-то писать, можно же просто отобразить их указывая в свойствах поля - путь к данным.


Ну дальше эти данные будут нужны для печати отчета

Скажите пожалуйста, а как-нибудь можно записать в реквизиты документа, те реквизиты справочника, которые были взяты из его ТЧ (То есть это дата поступления, и дата рождения) ??
logist
Цитата(alexk @ 07.10.12, 21:00) необходимо зарегистрироваться для просмотра ссылки
Ну дальше эти данные будут нужны для печати отчета

Ну так зачем тогда их тягать запросом в форму. Отобразите их используя обычные поля указав путь данных через Студента. В запросе для печати получить эти данные уже нет проблемы, отображение их на форме не имеет значение в данном случае.

Цитата(alexk @ 07.10.12, 21:00) необходимо зарегистрироваться для просмотра ссылки
Скажите пожалуйста, а как-нибудь можно записать в реквизиты документа, те реквизиты справочника, которые были взяты из его ТЧ (То есть это дата поступления, и дата рождения) ??

А зачем Вы храните такие реквизиты как дата поступления/дата рождения в ТЧ справочника? А по сути вопроса - можно все.
alexk
Цитата(logist @ 08.10.12, 10:44) необходимо зарегистрироваться для просмотра ссылки
Ну так зачем тогда их тягать запросом в форму. Отобразите их используя обычные поля указав путь данных через Студента. В запросе для печати получить эти данные уже нет проблемы, отображение их на форме не имеет значение в данном случае.


Да но это форма документа, а документ подразумевает собой выдачу справок об обучении, вот проще может это через форму документа делать
logist
Цитата(alexk @ 08.10.12, 17:38) необходимо зарегистрироваться для просмотра ссылки
Да но это форма документа

И что? Если все данные хранятся в справочнике, зачем их дублировать в документ...
Vofka
Цитата(logist @ 08.10.12, 17:42) необходимо зарегистрироваться для просмотра ссылки
Если все данные хранятся в справочнике, зачем их дублировать в документ...

Потому что со временем они в справочнике могут поменяться.
logist
Цитата(Vofka @ 08.10.12, 17:44) необходимо зарегистрироваться для просмотра ссылки
Потому что со временем они в справочнике могут поменяться.

Ну тогда вся логика хранения данных теряется. Зачем использовать документ, если можно использовать регистры сведений. Ведь для ФИО это стандарт.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.