|
Нужно определить, какие строки ТЗ отсутствуют в ТЧ справочника | ☑ | ||
---|---|---|---|---|
0
ADV
30.09.24
✎
15:45
|
В БСП есть метод КоллекцииИдентичны, но он возвращает Булево. Как написать самому вроде понятно, но может имеется типовой метод?
|
|||
1
Волшебник
30.09.24
✎
15:46
|
Запросом с условием
ГДЕ поле НЕ В (ВЫБРАТЬ поле ИЗ &тз) |
|||
2
ADV
30.09.24
✎
16:29
|
(1) в ТЗ и ТЧ справочника 3 поля
|
|||
3
Волшебник
30.09.24
✎
16:30
|
(2) сверните в одно составное
|
|||
4
mastodont
30.09.24
✎
16:32
|
(3) где (поле1, поле2, поле3) НЕ в (выбрать поле1, поле2, поле3 из....)
|
|||
5
DiMel_77
30.09.24
✎
16:58
|
(2) А какая разница? Все равно запросом.
Как то так: ВЫБРАТЬ ТЗ.Поле1 КАК Поле1, ТЗ.Поле2 КАК Поле2, ТЗ.Поле3 КАК Поле3 ПОМЕСТИТЬ ВТ_ТЗ ИЗ &ТаблицаЗначений КАК ТЗ ; ВЫБРАТЬ ТЗ.Поле1 КАК Поле1, ТЗ.Поле2 КАК Поле2, ТЗ.Поле3 КАК Поле3 ИЗ ВТ_ТЗ КАК ТЗ ЛЕВОЕ СОЕДИНЕНИЕ <ТвойОбъект>.<ИмяТЧ> КАК ТЧ ПО ТЗ.Поле1 = ТЧ.Поле1 И ТЗ.Поле2 = ТЧ.Поле2 И ТЗ.Поле3 = ТЧ.Поле3 ГДЕ ТЧ.Ссылка = &Ссылка И ТЧ.НомерСтроки ЕСТЬ NULL |
|||
6
Волшебник
30.09.24
✎
17:12
|
Решение от ChatGPT 4o:
Функция НайтиОтсутствующиеСтроки(ТаблицаЗначений, СсылкаНаЭлементСправочника) // Создаем запрос для получения строк из справочника Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ТабличнаяЧасть.Поле1, | ТабличнаяЧасть.Поле2, | ТабличнаяЧасть.Поле3 |ИЗ | Справочник.Спр.ТЧ КАК ТабличнаяЧасть |ГДЕ | ТабличнаяЧасть.Ссылка = &Ссылка"; // Устанавливаем параметр Ссылка Запрос.УстановитьПараметр("Ссылка", СсылкаНаЭлементСправочника); // Выполняем запрос и получаем результат в виде таблицы значений РезультатЗапроса = Запрос.Выполнить().Выгрузить(); // Подготовим таблицу для хранения отсутствующих строк ОтсутствующиеСтроки = Новый ТаблицаЗначений; ОтсутствующиеСтроки.Колонки.Добавить("Поле1"); ОтсутствующиеСтроки.Колонки.Добавить("Поле2"); ОтсутствующиеСтроки.Колонки.Добавить("Поле3"); // Перебираем строки в таблице значений Для Каждого СтрокаИзТЗ Из ТаблицаЗначений Цикл // Проверяем, есть ли такая строка в таблице результата запроса СтрокиНайденные = РезультатЗапроса.НайтиСтроки( Новый Структура("Поле1, Поле2, Поле3", СтрокаИзТЗ.Поле1, СтрокаИзТЗ.Поле2, СтрокаИзТЗ.Поле3)); // Если строка не найдена, добавляем ее в список отсутствующих Если СтрокиНайденные.Количество() = 0 Тогда НоваяСтрока = ОтсутствующиеСтроки.Добавить(); НоваяСтрока.Поле1 = СтрокаИзТЗ.Поле1; НоваяСтрока.Поле2 = СтрокаИзТЗ.Поле2; НоваяСтрока.Поле3 = СтрокаИзТЗ.Поле3; КонецЕсли; КонецЦикла; // Возвращаем таблицу отсутствующих строк Возврат ОтсутствующиеСтроки; КонецФункции |
|||
7
ADV
30.09.24
✎
17:13
|
(3) (4) (5) - спасибо!
|
|||
8
PR
30.09.24
✎
17:21
|
(0) Если в ТЧ одна строка, а в ТЗ две такие же идентичные строки, то это вторая отсутствует или нет?
|
|||
9
Волшебник
30.09.24
✎
17:27
|
А не проще ли так:
ТЧ.Очистить(); ТЧ.Загрузить(ТЗ); |
|||
10
ADV
30.09.24
✎
17:30
|
(9) нет, имеющиеся в ТЧ строки удалять нельзя
|
|||
11
PR
30.09.24
✎
17:30
|
(9) А зачем предварительно очищать?
|
|||
12
Волшебник
30.09.24
✎
17:31
|
(10) Вам видней
(11) Для надёжности |
|||
13
PR
30.09.24
✎
17:31
|
(10) То есть нужны только новые?
Ну так выбирай запросом из ТЗ, где поля не в выбрать поля из ТЧ справочника |
|||
14
ADV
30.09.24
✎
17:31
|
(8) я предварительно сворачиваю ТЗ
|
|||
15
ADV
30.09.24
✎
17:34
|
(13) я так и сделал, но коллеги продолжают предлагать варианты, за что им (вам) еще раз спасибо
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |