Отбор строк в таблице значений по нескольким колонкам.

1. Геннадьевич 18 03.11.23 13:36 Сейчас в теме
Доброго времени суток.
Опишу ситуацию:

Есть таблица на форме. 3 колонки: 1 - Булево, 2 - Ссылка на документ реализация, 3 - Ссылка на документ Корректировка.
Нужно выбрать строки ТЗ где обе колонки с документами заполнены и потом их сравнить заполняя 1ую колонку.

Есть метод "НайтиСтроки(<ПараметрыОтбора>)". Не могу найти пример где отбором можно выбрать строки по условию.
Может есть другой способ выбрать строки с нужным мне условием?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. nomad_irk 76 03.11.23 13:48 Сейчас в теме
(1)Только так.
Отбор = Новый Структура("СсылкаНаРеализацию, СсылкаКорректировку", СсылкаНаРеализацию, СсылкаНаКорректировку);
МассивСтрок = ТЗ.НайтиСтроки(Отбор);
Если ЗначениеЗаполнено(МассивСтрок) Тогда

КонецЕсли;


Либо запросом.
lefthander; +1 Ответить
4. Sashares 34 03.11.23 14:14 Сейчас в теме
(1)
Нужно выбрать строки ТЗ где обе колонки с документами заполнены

Через НайтиСтроки такое условие задать нельзя.
Запросом или циклом, в котором в каждой строке проверять заполненность полей.
9. Геннадьевич 18 03.11.23 15:16 Сейчас в теме
(4) В этом и вопрос. Как сделать отбор который будет быстрее простого перебора строк?
15. Sashares 34 03.11.23 15:46 Сейчас в теме
(9)Зачем?
У вас там миллионы строк что ли, что условие вида
Если ЗначениеЗаполнено(СтрТЧ.ПолеА)
И ЗначениеЗаполнено(СтрТЧ.ПолеБ) Тогда
МассивПодходящихСтрок.Добавить(СтрТЧ);
КонецЕсли;


В цикле выполняется несколько минут?
Геннадьевич; +1 Ответить
16. Геннадьевич 18 03.11.23 21:32 Сейчас в теме
(15) Нет конечно, просто интересно как оптимизировать процесс. Перебор строк это прямолинейный способ и самый медленный. Хочется оптимизировать по максимуму. Так сказать использовать средства языка по максимуму.
18. Sashares 34 03.11.23 23:07 Сейчас в теме
(16)
и самый медленный

Вам кажется.
6. lefthander 03.11.23 14:24 Сейчас в теме
(1)Параметр отбора это структура в которую можно добавить нужные колонки(ключ) и нужные значения.
10. Геннадьевич 18 03.11.23 15:20 Сейчас в теме
(6) Значения не известны. Главное, что поля заполнены.
12. schweigen 03.11.23 15:24 Сейчас в теме
(1)
&НаСервере
Процедура ЗаполнитьТаблицу()
	
	Текст = 
	"ВЫБРАТЬ
	|	ТЗ.Реализация КАК Реализация,
	|	ТЗ.Корректировка КАК Корректировка
	|ПОМЕСТИТЬ втТЗ
	|ИЗ
	|	&ТЗ КАК ТЗ
	|;
	|
	|////////////////////////////////////////////////////////////­////////////////////
	|ВЫБРАТЬ
	|	втТЗ.Реализация <> ЗНАЧЕНИЕ(Документ.Реализация.ПустаяСсылка)
	|		И втТЗ.Корректировка <> ЗНАЧЕНИЕ(Документ.Корректировка.ПустаяСсылка) КАК Заполнено,
	|	втТЗ.Реализация КАК Реализация,
	|	втТЗ.Корректировка КАК Корректировка
	|ИЗ
	|	втТЗ КАК втТЗ";
	
	Запрос = новый Запрос(Текст);
	Запрос.УстановитьПараметр("ТЗ", ТаблицаФормы.Выгрузить());
	ТаблицаФормы.Загрузить( Запрос.Выполнить().Выгрузить() );
	
КонецПроцедуры
Показать
3. Said-We 03.11.23 14:12 Сейчас в теме
(1) На сколько я понял вопрос, то нужны все строки со всеми значениями, где не пустая ссылка в обоих колонках с документами.
Где Док1<>ПустойДокументРеализация И Док2<>ПустойДокументКорректировка.
Фактически два условия через простое И.
5. nomad_irk 76 03.11.23 14:19 Сейчас в теме
(3)можно при формировании таблицы определять нужные строки флажком и потом отбор по этому флажку выполнять
8. Геннадьевич 18 03.11.23 15:15 Сейчас в теме
(5)Имете в виду дополнительные колонки добавить и там отмечать заполнение?
13. nomad_irk 76 03.11.23 15:29 Сейчас в теме
17. Геннадьевич 18 03.11.23 21:34 Сейчас в теме
7. soft_wind 03.11.23 14:35 Сейчас в теме
колонки Реализации и Корректировки
вообще-то это разные документы и они ни как не сравниваются
если имеется ввиду Корректировка какой-то реализации, есть реквизит ДокументОснования = Реализация

в этом случае, самое простое, отправить вашу таблицу в запрос и там уже сравните и найдете все что вам надо
11. Геннадьевич 18 03.11.23 15:23 Сейчас в теме
Пока лучший вариант - запрос. Нужно сравнивать даты документов, а через точку в каждой строке будет дольше перебирать чем запросом.
14. nomad_irk 76 03.11.23 15:30 Сейчас в теме
(11)при формировании ТЗ сразу выполняете проверку и устанавливаете в допколонку значение для отбора. Отбор выполняете по доп. колонке
Геннадьевич; +1 Ответить
19. dehro 5 04.11.23 11:20 Сейчас в теме
Предположу, что повторяющихся реализаций нет.

ВЫБРАТЬ
   ТЗ.Реализация КАК Реализация,
    ТЗ.Корректировка КАК Корректировка
 ПОМЕСТИТЬ втТЗ
 ИЗ &ТЗ КАК ТЗ
    ;
    
    ВЫБРАТЬ
       ТЗ.Реализация КАК Реализация,
       ТЗ.Корректировка КАК Корректировка,
       НЕ Реализации.Ссылка ЕСТЬ NULL И НЕ Корректировки.Ссылка ЕСТЬ NULL КАК Заполнено
   ИЗ
       втТЗ КАК ТЗ
       Левое Соединение Документ.РеализацияТоваровУслуг как Реализации по ТЗ.Реализация=Реализации.Ссылка
       Левое Соединение Документ.КорректировкаРеализации как Корректировки по ТЗ.Корректировка=Корректировки.Ссылка
Показать
20. Sashares 34 04.11.23 13:00 Сейчас в теме
(19)Так себе вариант.
Зачем эти соединения, если достаточно сравнить с пустой ссылкой.
21. dehro 5 06.11.23 20:31 Сейчас в теме
(20)
ВЫБРАТЬ ПЕРВЫЕ 1
	ЗНАЧЕНИЕ(Документ.РеализацияТоваровУслуг.ПустаяСсылка) КАК Ссылка
ПОМЕСТИТЬ ВТДокументы
ИЗ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ НЕОПРЕДЕЛЕНО
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ NULL
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТДокументы.Ссылка КАК Ссылка,
	ВТДокументы.Ссылка = ЗНАЧЕНИЕ(Документ.РеализацияТоваровУслуг.ПустаяСсылка) КАК Флаг
ИЗ
	ВТДокументы КАК ВТДокументы
Показать
Оставьте свое сообщение

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