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

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


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

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

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


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


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

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

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

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

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

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

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

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

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

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

Разработчик 1С
Москва
зарплата от 150 000 руб. до 250 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Программист 1С
Екатеринбург
зарплата от 130 000 руб. до 170 000 руб.
Полный день

Программист 1C
Санкт-Петербург
зарплата от 140 000 руб. до 200 000 руб.
Полный день