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

Объект Документы. "Программирование для начинающих"

Автор Vladimir99, 14 мая 2022, 22:14

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

Vladimir99

Здравствуйте я начинающий в программировании. Оцените пожалуйста моё решение (Базу прилагаю) данной задачи:
Задание 3.49
В каждом документе УчебныйДень удалите последний урок. В каждом учебном
дне должно остаться по 5 уроков.
Для выполнения этого задания создайте новую процедуру в общем модуле Сер-
верный. Перед запуском и проверкой своей программы запишите где-нибудь, ка-
кой урок должен оказаться последним в каждый из дней. Чтобы у вас была
возможность проверить правильность работы.

// Данная часть в модуле приложения
Процедура ПриНачалеРаботыСистемы()

УстановитьКраткийЗаголовокПриложения("Фамилия Имя");     

Серверный.УдалениеЛишнихУроков();

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


// Данная часть в общем модуле Серверный на Сервере
Процедура УдалениеЛишнихУроков() Экспорт
// Гововлюсь к выбору документа
УчебныеДни = Документы.УчебныйДень.Выбрать();

// Начинаю выбирать документы по очереди
Пока УчебныеДни.Следующий() Цикл
   // Получаю  документ
   ДокументОбъект =  УчебныеДни.ПолучитьОбъект();

   // Получаю табличную часть со строками
   ТабличнаяЧасть = ДокументОбъект.Уроки;

   // С помощью метода Получить() возвращаю Тип: Строка табличной части,
   // узнаю сколько всего строк в таблице.
   // ТабличнаяЧасть.Количество() - 1 это Индекс строки
   ПоследнийУрок = ТабличнаяЧасть.Получить(ТабличнаяЧасть.Количество() - 1);

   // Использую Свойство НомерСтроки типа Строка табличной части,
   // вычисляю Индекс последнего урока, возвращаю тип: Число
   ИндексТекСтроки = ПоследнийУрок.НомерСтроки - 1; 
   Пока ИндексТекСтроки  >= 5 Цикл

   // Удаляю уроки которые идут после пятого урока
   ТабличнаяЧасть.Удалить(ИндексТекСтроки);

   ИндексТекСтроки = ИндексТекСтроки - 1;   

   КонецЦикла; 

   ДокументОбъект.Записать();

КонецЦикла;

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

LexaK

Vladimir99, на первый взгляд, вроде нормальный г..код, должен работать, а что не так? что не работает?
вообще не видно, привязки/настройки последнего урока, что за урок, кто его задает, где хранится...?
если помогло нажмите: Спасибо!

nvj84

Запросы уже проходили?
Процедура УдалениеЛишнихУроков(КоличествоУроков = 5) Экспорт
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("КоличествоУроков", КоличествоУроков);
Запрос.Текст =
"ВЫБРАТЬ
| УчебныйДеньУроки.Ссылка КАК Ссылка
|ПОМЕСТИТЬ НужныеДни
|ИЗ
| Документ.УчебныйДень.Уроки КАК УчебныйДеньУроки
|
|СГРУППИРОВАТЬ ПО
| УчебныйДеньУроки.Ссылка
|
|ИМЕЮЩИЕ
| КОЛИЧЕСТВО(УчебныйДеньУроки.Ссылка) > &КоличествоУроков
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| УчебныйДеньУроки.Ссылка КАК Ссылка,
| УчебныйДеньУроки.НомерСтроки - 1 КАК НомерСтроки
|ИЗ
| Документ.УчебныйДень.Уроки КАК УчебныйДеньУроки
|ГДЕ
| УчебныйДеньУроки.Ссылка В
| (ВЫБРАТЬ
| НужныеДни.Ссылка КАК Ссылка
| ИЗ
| НужныеДни КАК НужныеДни)
| И УчебныйДеньУроки.НомерСтроки > &КоличествоУроков
|
|УПОРЯДОЧИТЬ ПО
| НомерСтроки УБЫВ
|ИТОГИ ПО
| Ссылка";
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДни = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаДни.Следующий() Цикл
ДокументОбъект = ВыборкаДни.Ссылка.ПолучитьОбъект();
ТабличнаяЧастьУроки = ДокументОбъект.Уроки;
ВыборкаУроки = ВыборкаДни.Выбрать();
Пока ВыборкаУроки.Следующий() Цикл
ТабличнаяЧастьУроки.Удалить(ВыборкаУроки.НомерСтроки);
КонецЦикла;
ДокументОбъект.Записать();
КонецЦикла;
КонецПроцедуры

Теги:  

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

Рейтинг@Mail.ru

Поиск