Перенос данных одной табличной части в другую (Одного и того же справочника)

1. VKuser305150364 10.05.24 16:55 Сейчас в теме
Прошу прощения за оффтоп,т.к я уже создавал обращение по этому вопросу,но сейчас я чуть более складно сформулировал свою проблему,чтобы снова ее опубликовать

У меня имеется справочник "Классы",вне табличной части которого есть реквизиты "КлассУчеников","СтаростаКласса","КлассныйРуководитель" (Связан с другим справочником "СписокУчителей") и реквизиты табличной части: "ФИО"(Связан с другим справочником "СписокУчеников") и ДатаРождения.Вот сама задача: Сделать так,чтобы школьники после наступления в календаре 1-го сентября,автоматически перемещались на класс повыше,т.е,к примеру изначально они находились в 1А,а затем уже переносились во 2А и т.д
Прикрепленные файлы:
По теме из базы знаний
Найденные решения
6. scarl1n 14.05.24 13:55 Сейчас в теме
Тут проблема в том, что задача не очень корректная. Так как по задаче класс - ссылка, то переход учеников в другой класс должен фиксироваться документом, а не регламентным заданием, иначе не понятно как разрешать ситуации по типу отчисления ученика, совмещения двух классов в один (часто 2-3 9ых класса объединяют в один 10) и др.
Ну, какое задание, такое и решение:
Процедура ПереводУчениковВСледующийКласс() Экспорт
	Запрос = Новый Запрос("ВЫБРАТЬ
	                      |	КлассыУчеников.Ученик КАК Ученик,
	                      |	КлассыУчеников.Класс КАК ТекущийКласс,
	                      |	Классы.Ссылка КАК СледующийКласс
	                      |ИЗ
	                      |	РегистрСведений.КлассыУчеников КАК КлассыУчеников
	                      |		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Классы КАК Классы
	                      |		ПО (КлассыУчеников.Класс.Номер + 1 = Классы.Номер)
	                      |			И КлассыУчеников.Класс.Буква = Классы.Буква");
	
	Выборка = Запрос.Выполнить().Выбрать();
	
	НаборЗаписей = РегистрыСведений.КлассыУчеников.СоздатьНаборЗаписей();
	Пока Выборка.Следующий() Цикл
		Запись = НаборЗаписей.Добавить();
		Запись.Ученик = Выборка.Ученик;
		Запись.Класс = Выборка.СледующийКласс;
	КонецЦикла;
	НаборЗаписей.Записать();
КонецПроцедуры
Показать


Структура следующая:
Регистр сведений с измерением "Ученик" и ресурсом "Класс"
Справочник "Ученики"
Справочник "Классы" с реквизитами: "Номер", "Буква"

При помощи данного обработчика получаем все текущие записи регистра (это значит, что при первом использовании в регистр необходимо загрузить "остатки" (текущее положение учеников в классах)), присоединяем следующий класс с такой же буквой (это значит, что все классы также нужно занести заранее),а затем циклом формируем новый набор записей, где у учеников изменен класс. Дополнительно можно в цикле добавить условие на то, что "СледующийКласс" не заполнен и запись не добавлять. В таком случае ученики не будут переведены в 12-ый несуществующий класс.
Прикрепленные файлы:
1Cv8.dt
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. FUXEARA 10.05.24 17:10 Сейчас в теме
Возможно лучше классы учеников учитывать в регистре сведений, где измерением будут классы , а ресурсами ученики(на счёт ресурсов и измерений можно подумать еще)? А в справочник подтягивать информацию из этого регистра. А для переноса на след год, сделать обработку(общую форму или общий модуль), которая будет их добавлять в регистр сведений, а обработку(общ форму/модуль) запускать по регламентному заданию или в ручную ! Информацию хранить в табличных частях объекта, не совсем корректно, надо табличную часть на форме элемента сделать и удалить из объекта.
3. VKuser305150364 10.05.24 17:32 Сейчас в теме
(2)Буду пробовать,спасибо за совет!
4. scarl1n 13.05.24 15:55 Сейчас в теме
(2)По заданию это будто бы должно происходить автоматически. Я бы добавил регламентное задание, которое по расписанию будет получать записи из регистра и менять ученикам класс.
5. VKuser305150364 14.05.24 11:36 Сейчас в теме
(4)Вот только у меня огромные проблемы возникают,когда дело касается кода 1С.Мне столько всяких хороших решений советовали,но все в любом случае сводится к коду
6. scarl1n 14.05.24 13:55 Сейчас в теме
Тут проблема в том, что задача не очень корректная. Так как по задаче класс - ссылка, то переход учеников в другой класс должен фиксироваться документом, а не регламентным заданием, иначе не понятно как разрешать ситуации по типу отчисления ученика, совмещения двух классов в один (часто 2-3 9ых класса объединяют в один 10) и др.
Ну, какое задание, такое и решение:
Процедура ПереводУчениковВСледующийКласс() Экспорт
	Запрос = Новый Запрос("ВЫБРАТЬ
	                      |	КлассыУчеников.Ученик КАК Ученик,
	                      |	КлассыУчеников.Класс КАК ТекущийКласс,
	                      |	Классы.Ссылка КАК СледующийКласс
	                      |ИЗ
	                      |	РегистрСведений.КлассыУчеников КАК КлассыУчеников
	                      |		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Классы КАК Классы
	                      |		ПО (КлассыУчеников.Класс.Номер + 1 = Классы.Номер)
	                      |			И КлассыУчеников.Класс.Буква = Классы.Буква");
	
	Выборка = Запрос.Выполнить().Выбрать();
	
	НаборЗаписей = РегистрыСведений.КлассыУчеников.СоздатьНаборЗаписей();
	Пока Выборка.Следующий() Цикл
		Запись = НаборЗаписей.Добавить();
		Запись.Ученик = Выборка.Ученик;
		Запись.Класс = Выборка.СледующийКласс;
	КонецЦикла;
	НаборЗаписей.Записать();
КонецПроцедуры
Показать


Структура следующая:
Регистр сведений с измерением "Ученик" и ресурсом "Класс"
Справочник "Ученики"
Справочник "Классы" с реквизитами: "Номер", "Буква"

При помощи данного обработчика получаем все текущие записи регистра (это значит, что при первом использовании в регистр необходимо загрузить "остатки" (текущее положение учеников в классах)), присоединяем следующий класс с такой же буквой (это значит, что все классы также нужно занести заранее),а затем циклом формируем новый набор записей, где у учеников изменен класс. Дополнительно можно в цикле добавить условие на то, что "СледующийКласс" не заполнен и запись не добавлять. В таком случае ученики не будут переведены в 12-ый несуществующий класс.
Прикрепленные файлы:
1Cv8.dt
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот