|
|
|
Нужно определить, какие строки ТЗ отсутствуют в ТЧ справочника | ☑ | ||
|---|---|---|---|---|
|
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) я так и сделал, но коллеги продолжают предлагать варианты, за что им (вам) еще раз спасибо
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |