Удалить строки из ТЧ документа по условию

1. user1720531 14.02.22 23:28 Сейчас в теме
Здраствуйте! Учусь программировать в 1с. Подскажите пожалуйста, мне нужно удалить строки из документа УстановкаКурсаВалют те строки, где нет предопределенных валют. Я сделал выборку этих строк, осталось только удалить. Код привожу ниже
Процедура УдалитьСтрокиНаСервере()
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
|	УстановкаКурсаВалют.Ссылка КАК Ссылка1,
|	УстановкаКурсаВалют.ПометкаУдаления КАК ПометкаУдаления1,
|	УстановкаКурсаВалют.Номер КАК Номер,
|	УстановкаКурсаВалют.Дата КАК Дата,
|	УстановкаКурсаВалют.Проведен КАК Проведен,
|	УстановкаКурсаВалют.Курсы.(
|		Ссылка КАК СсылкаТЧ,
|		НомерСтроки КАК НомерСтрокиТЧ,
|		Валюта КАК ВалютаТЧ,
|		Курс КАК КурсТЧ,
|		Символ КАК Символ) КАК Курсы
|ИЗ
|	Документ.УстановкаКурсаВалют КАК УстановкаКурсаВалют";


ВыборкаДокумент = Запрос.Выполнить().Выбрать();

УдалитьТП=Новый Массив;

Пока ВыборкаДокумент.Следующий() Цикл ;
ВыборкаНоменклатурныйСостав = ВыборкаДокумент.Курсы.Выбрать();


	Пока ВыборкаНоменклатурныйСостав.Следующий() Цикл
         ИмяПредопрЭлемента = Справочники.Валюты.ПолучитьИмяПредопределенного(ВыборкаНоменклатурныйСостав.ВалютаТЧ);
		 Строка = ВыборкаНоменклатурныйСостав.ВалютаТЧ.Наименование;
		 СсылкаСтроки = ВыборкаНоменклатурныйСостав.ВалютаТЧ.Ссылка;
		 Если СокрЛП(ВРег(ИмяПредопрЭлемента)) <> СокрЛП(ВРег(Строка)) Или СсылкаСтроки.Пустая()  Тогда
			
			УдалитьТП.Добавить(Строка); // Тут в массив пишу строки для удаления;
		Иначе
			
		КонецЕсли;
		
	КонецЦикла;  
КонецЦикла;


КонецПроцедуры
Показать
По теме из базы знаний
Найденные решения
2. nomad_irk 76 14.02.22 23:48 Сейчас в теме
(1)Почувствуйте разницу, таксскать:

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
|    УстановкаКурсаВалют.Ссылка КАК Ссылка
|    УстановкаКурсаВалют.НомерСтроки КАК НомерСтроки
|ИЗ
|    Документ.УстановкаКурсаВалют.Курсы КАК УстановкаКурсаВалют
|ГДЕ
|    НЕ УстановкаКурсаВалют.Валюта.Предопределенный
|ИТОГИ ПО
|     Ccылка";

ВыборкаДокумент = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаДокумент.Следующий() Цикл ;
    ДокОбъект = ВыборкаДокумент.Ссылка.ПолучитьОбъект();
    ТЗ = ДокументОбъект.Курсы.Выгрузить();
    ТЗ.Индексы.Добавить("НомерСтроки");
    ВыборкаНоменклатурныйСостав = ВыборкаДокумент.Выбрать();
    Пока ВыборкаНоменклатурныйСостав.Следующий() Цикл
           Строка = ТЗ.Найти(ВыборкаНоменклатурныйСостав.НомерСтроки, "НомерСтроки");
           ТЗ.Удалить(Строка);
    КонецЦикла;  
    ДокОбъект.Загрузить(ТЗ);
    ДокОбъект.Записать(?(ДокОбъект.Проведен, РежимЗаписиДокумента.Проведение, РежимЗаписиДокумента.Запись));
КонецЦикла;
Показать
Aleksey3A; user1720531; +2 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. nomad_irk 76 14.02.22 23:48 Сейчас в теме
(1)Почувствуйте разницу, таксскать:

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
|    УстановкаКурсаВалют.Ссылка КАК Ссылка
|    УстановкаКурсаВалют.НомерСтроки КАК НомерСтроки
|ИЗ
|    Документ.УстановкаКурсаВалют.Курсы КАК УстановкаКурсаВалют
|ГДЕ
|    НЕ УстановкаКурсаВалют.Валюта.Предопределенный
|ИТОГИ ПО
|     Ccылка";

ВыборкаДокумент = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаДокумент.Следующий() Цикл ;
    ДокОбъект = ВыборкаДокумент.Ссылка.ПолучитьОбъект();
    ТЗ = ДокументОбъект.Курсы.Выгрузить();
    ТЗ.Индексы.Добавить("НомерСтроки");
    ВыборкаНоменклатурныйСостав = ВыборкаДокумент.Выбрать();
    Пока ВыборкаНоменклатурныйСостав.Следующий() Цикл
           Строка = ТЗ.Найти(ВыборкаНоменклатурныйСостав.НомерСтроки, "НомерСтроки");
           ТЗ.Удалить(Строка);
    КонецЦикла;  
    ДокОбъект.Загрузить(ТЗ);
    ДокОбъект.Записать(?(ДокОбъект.Проведен, РежимЗаписиДокумента.Проведение, РежимЗаписиДокумента.Запись));
КонецЦикла;
Показать
Aleksey3A; user1720531; +2 Ответить
10. user1720531 15.02.22 22:38 Сейчас в теме
(2) Спасибо! Работает!

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
|    УстановкаКурсаВалют.Ссылка КАК Ссылка,
|    УстановкаКурсаВалют.НомерСтроки КАК НомерСтроки
|ИЗ
|    Документ.УстановкаКурсаВалют.Курсы КАК УстановкаКурсаВалют
|ГДЕ
|    НЕ УстановкаКурсаВалют.Валюта.Предопределенный
|ИТОГИ ПО
|     УстановкаКурсаВалют.Ссылка";

ВыборкаДокумент = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаДокумент.Следующий() Цикл ;
    ДокОбъект = ВыборкаДокумент.Ссылка.ПолучитьОбъект();
	ТЗ = ДокОбъект.Курсы.Выгрузить();
	ТЗ.Индексы.Добавить("НомерСтроки");
	ВыборкаНоменклатурныйСостав = ВыборкаДокумент.Выбрать();
	Пока ВыборкаНоменклатурныйСостав.Следующий() Цикл
	       Строка = ТЗ.Найти(ВыборкаНоменклатурныйСостав.НомерСтроки, "НомерСтроки");
	       ТЗ.Удалить(Строка);
	   КонецЦикла;  
	ДокОбъект.Курсы.Загрузить(ТЗ);
	ДокОбъект.Записать(?(ДокОбъект.Проведен, РежимЗаписиДокумента.Проведение, РежимЗаписиДокумента.Запись));
КонецЦикла;
Показать
3. Alexei_Siva 183 15.02.22 07:38 Сейчас в теме
Можно сделать тупо выборку документов и по формуле
КолСтрок = ДокументОбъект.Курсы.Количество();
	Для Счетчик = 1 По КолСтрок Цикл	
		ТекСтрока = Поступление.Курсы[КолСтрок-1];
		Если не ТекСтрока.Номенклатура.Предопределенный Тогда	
			ДокументОбъект.Курсы.Удалить(ТекСтрока);	
		КонецЕсли;	
	КонецЦикла;

очистить документы от непредопределенных элементов
4. Denis_CFO 48 15.02.22 07:42 Сейчас в теме
(3)
ДокументОбъект

Количество строк может изменится и все сломается :)
Лучше, всё ж, в массив загнать нужные строки и по массиву уже обходить.
Swetlana; +1 Ответить
5. Swetlana 25 15.02.22 07:47 Сейчас в теме
(4) соглашусь, это и проще и надежнее
6. Alexei_Siva 183 15.02.22 10:02 Сейчас в теме
(4)Не совсем понял как оно может измениться в документ-объекте помимо самого удаления строк)
Начинаем перебирать с конца, удаляем ненужные строки. Если б с начала начали перебор, то тогда, соглашусь, сломалось бы.
7. Denis_CFO 48 15.02.22 10:44 Сейчас в теме
(6) Ну да, вот на эту конструкцию внимания не обратил: "КолСтрок-1". Посмотрел только на "Счетчик = 1".

Согласен, Ваш код рабочий.
8. t.v.s. 111 15.02.22 11:10 Сейчас в теме
(6) (7) Должно быть КолСтрок-Счетчик, иначе всегда будет удаляться последняя строка
9. Alexei_Siva 183 15.02.22 11:44 Сейчас в теме
Оставьте свое сообщение

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