это универсальные функции для удаления строк из таблицы значений
функции работают
// Шкедов Д.Ю. - Начало блока.
Процедура ГЛмояУдалитьКонкретныеЗначенияИзТЗ(тз,яКолонка,яУдаляемоеЗначение,Условие=0) Экспорт
//универсальная процедура удаления значений из ТаблицыЗначений
//удаляет из таблицы значений "тз" из колонки "яКолонка" все значения "яУдаляемоеЗначение"
//если указано условие тогда можно удалить диапазон чисел
//условие можно указать так: "<=" ">=" ">" "<" "<>"
//например: яУдаляемоеЗначение=5 Условие= "<=" Тогда из тз будут удалены все значения которые меньше или равны 5
Если Условие=0 Тогда
Если ТипЗначенияСтр(яУдаляемоеЗначение)="Строка" Тогда
Для Индекс=1 По тз.КоличествоСтрок() Цикл
Если Индекс>тз.КоличествоСтрок() Тогда
Прервать;
КонецЕсли;
Если СокрЛП(тз.ПолучитьЗначение(Индекс,яКолонка))=СокрЛП(яУдаляемоеЗначение) Тогда
тз.УдалитьСтроку(Индекс);
Индекс=Индекс-1;
КонецЕсли;
КонецЦикла;
Иначе
Для Индекс=1 По тз.КоличествоСтрок() Цикл
Если Индекс>тз.КоличествоСтрок() Тогда
Прервать;
КонецЕсли;
Если тз.ПолучитьЗначение(Индекс,яКолонка)=яУдаляемоеЗначение Тогда
тз.УдалитьСтроку(Индекс);
Индекс=Индекс-1;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Иначе
Для Индекс=1 По тз.КоличествоСтрок() Цикл
Если Индекс>тз.КоличествоСтрок() Тогда
Прервать;
КонецЕсли;
Стр=Шаблон("[?(тз.ПолучитьЗначение(Индекс,яКолонка)"+Условие+"яУдаляемоеЗначение,1,0)]");
Если Стр="1" Тогда
тз.УдалитьСтроку(Индекс);
Индекс=Индекс-1;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
// Шкедов Д.Ю. - Конец блока.
//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
// Шкедов Д.Ю. - Начало блока.
Процедура мояУдалитьИзТЗ_1ВсеЗначенияТЗ_2(тз1,Колонка1,тз2,Колонка2)
//удаляет из таблицы значений тз1 все значения которые находятся в тз2
Если ТипЗначенияСтр(тз1.ПолучитьЗначение(1,Колонка1))="Строка" Тогда
Для индекс1=1 По тз1.КоличествоСтрок() Цикл
Для индекс2=1 По тз2.КоличествоСтрок() Цикл
Если (Индекс1>тз1.КоличествоСтрок()) или (Индекс1<1) Тогда
Прервать;
КонецЕсли;
Если СокрЛП(тз1.ПолучитьЗначение(индекс1,Колонка1))=СокрЛП(тз2.ПолучитьЗначение(индекс2,Колонка2)) Тогда
тз1.УдалитьСтроку(индекс1);
индекс1=индекс1-1;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Сообщить ("строка");
Иначе //для остальных типов
Для индекс1=1 По тз1.КоличествоСтрок() Цикл
Для индекс2=1 По тз2.КоличествоСтрок() Цикл
Если (Индекс1>тз1.КоличествоСтрок()) или (Индекс1<1) Тогда
Прервать;
КонецЕсли;
Если тз1.ПолучитьЗначение(индекс1,Колонка1)=тз2.ПолучитьЗначение(индекс2,Колонка2) Тогда
тз1.УдалитьСтроку(индекс1);
индекс1=индекс1-1;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
// Шкедов Д.Ю. - Конец блока.
//* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
// Шкедов Д.Ю. - Начало блока.
Процедура мояУдалитьИзТЗ_1ВсеЗначенияКромеТехКоторыеВТЗ_2(тз1,Колонка1,тз2,Колонка2)
// удалим из ТЗ1 все значения кроме тех которые в тз2
// 1шаг: тмечаем которые нам нужны
тз1.НоваяКолонка("мойУникальныйНамНужен","Число",1);
КС1=тз1.КоличествоСтрок();
КС2=тз2.КоличествоСтрок();
Если ТипЗначенияСтр(тз1.ПолучитьЗначение(1,Колонка1))="Строка" Тогда
Для Индекс1=1 По КС1 Цикл
Для Индекс2=1 По КС2 Цикл
Если СокрЛП(тз1.ПолучитьЗначение(Индекс1,Колонка1))=СокрЛП(тз2.ПолучитьЗначение(Индекс2,Колонка2)) Тогда
тз1.УстановитьЗначение(Индекс1,"мойУникальныйНамНужен",1);
Прервать;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Иначе
Для Индекс1=1 По КС1 Цикл
Для Индекс2=1 По КС2 Цикл
Если тз1.ПолучитьЗначение(Индекс1,Колонка1)=тз2.ПолучитьЗначение(Индекс2,Колонка2) Тогда
тз1.УстановитьЗначение(Индекс1,"мойУникальныйНамНужен",1);
Прервать;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЕсли;
// 2 шаг: удаляем которые не нужны
ГЛмояУдалитьКонкретныеЗначенияИзТЗ(тз1,"мойУникальныйНамНужен",0);
тз1.УдалитьКолонку("мойУникальныйНамНужен");
КонецПроцедуры
// Шкедов Д.Ю. - Конец блока.
|