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