Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
18 сен 2021, 02:39

Помощь в коде

Автор Резеда, 24 ноя 2019, 18:24

0 Пользователей и 1 гость просматривают эту тему.

Резеда

Здравствуйте, изучаю 1с по книге Радченко. Создаю свою подсистему, чтобы лучше понять. Столкнулась с таким вопросом. (Подскажите правильно или нет выполняю код)
Есть документ "Пары" хочу чтобы при выборе преподавателя, забивались (подтягивались) все остальные и заполняли таблицу.

&НаКлиенте
Процедура ДисциплиныВидЗанятияПриИзменении(Элемент)
   ТекДанные=Элементы.ВидЗанятия.текущиеданные;
   ТекДанные.Преподаватель=ПолучитьЗначение(ТекДанные.Дисциплина);
   ДисциплиныВидЗанятияПриИзмененииНаСервере();
КонецПроцедуры
&НаСервере
Функция ПолучитьЗначение(Предмет)
Возврат Предмет.Преподаватель;
конецФункции

alexandr_ll

Цитата: Резеда от 24 ноя 2019, 18:24
Здравствуйте, изучаю 1с по книге Радченко. Создаю свою подсистему, чтобы лучше понять. Столкнулась с таким вопросом. (Подскажите правильно или нет выполняю код)
Есть документ "Пары" хочу чтобы при выборе преподавателя, забивались (подтягивались) все остальные и заполняли таблицу.

&НаКлиенте
Процедура ДисциплиныВидЗанятияПриИзменении(Элемент)
   ТекДанные=Элементы.ВидЗанятия.текущиеданные;
   ТекДанные.Преподаватель=ПолучитьЗначение(ТекДанные.Дисциплина);
   ДисциплиныВидЗанятияПриИзмененииНаСервере();
КонецПроцедуры
&НаСервере
Функция ПолучитьЗначение(Предмет)
Возврат Предмет.Преподаватель;
конецФункции
Как связаны преподаватель, дисциплина, вид занятий и семестр?
Это реквизиты одного справочника или разные справочники, или может регистры сведений?

Резеда

Цитата: alexandr_ll от 25 ноя 2019, 05:34Это реквизиты одного справочника или разные справочники, или может регистры сведений?
Справочник "Преподаватели с реквизитами: Дисциплина, КоличествоЧасов,ВидКонтроля, Реквизиты табличной части:КоличествоЧасов, ВидКонтроля
Справочник "Дисциплины" с реквизитами: преподаватель, ВидКонтроля,КоличествоЧасов табл. части: КоличествоЧасов, ВидКонтроля.
Документ "Пары" с реквизитами:Дисциплина, Преподаватель,ВидЗанятия,Семестр, рекв. табл. части: Преподаватель, ВидЗанятия,КоличествоЧасов, ВидОценивания,Баллы,ДомашняяРабота,ОстатокЧасов.
Перечисления: ВидОценивания,Семестр,ВидЗанятия


Пересвет

Цитата: Резеда от 24 ноя 2019, 18:24забивались (подтягивались) все остальные и заполняли таблицу.
В пределах строки?

alexandr_ll

Цитата: Резеда от 26 ноя 2019, 18:12
Цитата: alexandr_ll от 25 ноя 2019, 05:34Это реквизиты одного справочника или разные справочники, или может регистры сведений?
Справочник "Преподаватели с реквизитами: Дисциплина, КоличествоЧасов,ВидКонтроля, Реквизиты табличной части:КоличествоЧасов, ВидКонтроля
Справочник "Дисциплины" с реквизитами: преподаватель, ВидКонтроля,КоличествоЧасов табл. части: КоличествоЧасов, ВидКонтроля.
Документ "Пары" с реквизитами:Дисциплина, Преподаватель,ВидЗанятия,Семестр, рекв. табл. части: Преподаватель, ВидЗанятия,КоличествоЧасов, ВидОценивания,Баллы,ДомашняяРабота,ОстатокЧасов.
Перечисления: ВидОценивания,Семестр,ВидЗанятия
В справочнике "Преподаватели" не нужны реквизиты Дисциплина, КоличествоЧасов,ВидКонтроля, поскольку у одного преподавателя может быть несколько дисциплин и количество часов в разных семестрах разное. Эти сведения должны храниться в периодическом регистре сведений.

Резеда

Цитата: Пересвет от 26 ноя 2019, 22:33
Цитата: Резеда от 24 ноя 2019, 18:24забивались (подтягивались) все остальные и заполняли таблицу.
В пределах строки?
Да да в пределе строки

Пересвет

Можно и на справочниках построить, как это у Радченко. Там у него всё в пределах визуального конструирования, код и не нужен. Можно более гибко , как и сказано выше  на регистре сведений.
Потом запросом выбрать по условию данные строки регистра и залить ее в строку табличной части документа. Единственное, ещё накладывается ограничение в таком случае, что один преподаватель может вести только один предмет, ну или как то это фильтровать при отборе.

//Часть обработки

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПреподавателиКурса.Преподаватель,
| ПреподавателиКурса.ВидЗанятия,
| ПреподавателиКурса.КоличесвоЧасов,
| ПреподавателиКурса.Дисциплина
|ИЗ
| РегистрСведений.ПреподавателиКурса КАК ПреподавателиКурса
|ГДЕ
| ПреподавателиКурса.Преподаватель = &Преподаватель";

Запрос.УстановитьПараметр("Преподаватель", Преподаватель);

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

// Далее переносим данные с строку докумета.



Пересвет

Да... Насоветовал я тут... Решил вот сам, как начинающий замутить решение  этой задачки. :D Чёт не получается :D
При таком коде вылетает ошибка.:dfbbdrfb: Видимо из-за того, что я пытаюсь как-то неправильно в параметре передать строку табличной части на Сервер. Вообще возможен такой сценарий реализации?
&НаСервере

Процедура ТабЧастьПреподавательПриИзмененииНаСервере(СтрокаТабличнойЧасти, ДанныеФормы)

Преподаватель = ДанныеФормы;

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПреподавателиКурса.Преподаватель,
| ПреподавателиКурса.ВидЗанятия,
| ПреподавателиКурса.КоличествоЧасов,
| ПреподавателиКурса.Дисциплина
|ИЗ
| РегистрСведений.ПреподавателиКурса КАК ПреподавателиКурса
|ГДЕ
| ПреподавателиКурса.Преподаватель = &Преподаватель";

Запрос.УстановитьПараметр("Преподаватель", Преподаватель);

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

Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
ЗаполнитьЗначенияСвойств(СтрокаТабличнойЧасти,Выборка)
КонецЦикла;

КонецПроцедуры

&НаКлиенте
Процедура ТабЧастьПреподавательПриИзменении(Элемент)

СтрокаТабличнойЧасти = Элементы.ТабЧасть.ТекущиеДанные;

ДанныеФормы = Элемент.ТекстРедактирования;

    ТабЧастьПреподавательПриИзмененииНаСервере(СтрокаТабличнойЧасти, ДанныеФормы);

КонецПроцедуры



Ошибка:
{Документ.РасписаниеНаДень.Форма.ФормаДокумента.Форма(38)}: Ошибка при вызове метода контекста (ТабЧастьПреподавательПриИзмененииНаСервере)
    ТабЧастьПреподавательПриИзмененииНаСервере(СтрокаТабличнойЧасти, ДанныеФормы);
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства 'param':
форма: Элемент
имя: {http://v8.1c.ru/8.2/managed-application/modules}param
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа 'ДанныеФормыЭлементКоллекции'

LexaK

попробуйте так

&НаКлиенте
Процедура ТабЧастьПреподавательПриИзменении(Элемент)
   
    СтрокаТабличнойЧасти = Элементы.ТабЧасть.ТекущиеДанные;
   
    //ДанныеФормы = Элемент.ТекстРедактирования;
   
    лкДанныеФормы = СтрокаТабличнойЧасти.Преподаватель;
    ТабЧастьПреподавательПриИзмененииНаСервере(СтрокаТабличнойЧасти, лкДанныеФормы);

     
КонецПроцедуры

ответ Понравился? (в смысле пригодился?)

Пересвет

Я попробовал применить ваш совет. Не помогло. Собственно, дело не в этой строке. Имя переменной в этой строке случайным образом совпало с текстом сообщения об ошибке.
Отсутствует отображение для типа 'ДанныеФормыЭлементКоллекции'
Дело скорее всего в этом:
СтрокаТабличнойЧасти = Элементы.ТабЧасть.ТекущиеДанные;
Так как при наличии этого кода начинается свистопляска с ошибкой.
Я что пытаюсь сделать? Передать строку табличной части, и что-то делаю неправильно. Возможно формат данных (ТипДанных) не тот. :dfbbdrfb:
Хотелось бы знать вообще: можно ли передать текущую строку ТЧ с Клиента на Сервер и заполнить на Сервере с помощью функции ЗаполнитьЗначенияСвойств или это совсем неправильно?

***************Вторая часть Марлезонского балета*************************
Написал другой код. С выгрузкой ТЗ... Только так тоже наверное неправильно?! И он почти работает ))) Данные автоматом подтягиваются в строку, но... Создаваю следующую строку в этом документе не получается. Данные вставляются и перемещаются на первую строчку, заменяя ранее введённые. Не пинайте сильно, записал как смог с экрана суть происходящего:
https://cloud.mail.ru/public/23dy/4Q1RraQdM
Код:

&НаСервере

Процедура ТабЧастьПреподавательПриИзмененииНаСервере(ДанныеФормы)

Преподаватель = ДанныеФормы;

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПреподавателиКурса.Преподаватель,
| ПреподавателиКурса.ВидЗанятия,
| ПреподавателиКурса.КоличествоЧасов,
| ПреподавателиКурса.Дисциплина
|ИЗ
| РегистрСведений.ПреподавателиКурса КАК ПреподавателиКурса
|ГДЕ
| ПреподавателиКурса.Преподаватель = &Преподаватель";

Запрос.УстановитьПараметр("Преподаватель", Преподаватель);

РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выгрузить();
Объект.ТабЧасть.Загрузить(Выборка);

КонецПроцедуры

&НаКлиенте
Процедура ТабЧастьПреподавательПриИзменении(Элемент)

ДанныеФормы = Элемент.ТекстРедактирования;
 
       ТабЧастьПреподавательПриИзмененииНаСервере(ДанныеФормы);

КонецПроцедуры


Хочется уже до ума довести, раз занялся ...






Теги: код 8.3 помощь 

Похожие темы (5)

Рейтинг@Mail.ru Rambler's Top100

Поиск