8.х Сравнение двух файлов *.dbf

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем st88, 9 ноя 2015.

  1. TopicStarter Overlay
    st88
    Offline

    st88 Профессионал в 1С Команда форума

    Регистрация:
    18 окт 2012
    Сообщения:
    1.726
    Симпатии:
    28
    Баллы:
    54
    Собственно стоит задача сравнить два файла дбф, имеющих одинаковую структуру, по неск. значениям.

    Структура файла такая:

    Колонка1 / Колонка2 / колонка3 / колонка4/ колонка5
    Код / населенный пункт / улица / дом/ соответствие

    Надо по очереди брать значение: нп, улицы и дома из первого файла и искать во втором, если нашли, то записывать значение кода из первого файла в поле соответствие второго файла. и т.д.
    --- Объединение сообщений, 9 ноя 2015 ---
    вопрос, через что быстрее и оптимальней сделать. Через ТЗ и поиск по ней, через ТЧ и отборы к ней, через выгрузку в ТЗ и запросы к ней...?
  2. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.581
    Симпатии:
    717
    Баллы:
    204
    создай 2 ТЗ из файлов, запросом объедини эти две таблицы и сверни по ключевым полям с суммированием значений в колонках.
    Результат обрабатывай в зависимости от значения суммы в колонке или сразу выводи соответствие.
  3. TopicStarter Overlay
    st88
    Offline

    st88 Профессионал в 1С Команда форума

    Регистрация:
    18 окт 2012
    Сообщения:
    1.726
    Симпатии:
    28
    Баллы:
    54
    Зачем делать 2 ТЗ, если можно в одну выгрузить по очереди 2 файла. ТЗ не свернется, ибо коды разные...
  4. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    через что умеешь. через то и делаешь.
    Быстро будет если сделаешь 2 ТЗ их передашь в запрос в качестве параметров, если большие то можно проиндексировать и тогда уже объеденять
  5. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.581
    Симпатии:
    717
    Баллы:
    204
    Сворачивать нужно, чтобы получить уникальные комбинации без кодов, а потом уже выбирать коды соединениями с таблицами, чтобы получить соответствие.
  6. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    Вообщем быстрее будет через запрос и если большие таблицы то индексация в ВТ
  7. nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.990
    Симпатии:
    399
    Баллы:
    104
    Вот кусок моей загрузки из dbf.
    Код:
    // Функция загружает из файла dbf данные и записывает их в таблицу значений "ТабЗагрузки".
    //..............................................
    Функция ЗагрузитьИзФайла() Экспорт
       
        Отказ = Ложь;
        ДБФ = Новый XBase;  
        ДБФ.Кодировка = КодировкаXBase.OEM;
        ДБФ.ОткрытьФайл(Файл);
       
        Если НЕ ДБФ.Открыта() Тогда
            Сообщить("Ошибка открытия файла " + Файл);
            Отказ = Истина;
        КонецЕсли;
       
        Если не Отказ Тогда
            ТабЗагрузки.Очистить();
           
                Если НЕ ДБФ.поля.Найти("FAM") = Неопределено Тогда
                    Для ВсегоСтрок = 1 по ДБФ.КоличествоЗаписей() Цикл
                        ДБФ.Перейти(ВсегоСтрок);
                        НовСтр = ТабЗагрузки.Добавить();
                        НовСтр.ТН = ДБФ.TN;
                        НовСтр.ФИО = ДБФ.FAM;
                        // Создание новых колонок в ТабЗагрузки для разбиения ФИО на Фамилию, Имя, Отчество.
                        ф1 = СокрЛП(НовСтр.ФИО);
                        Фам = ОбщегоНазначения.ВыделитьСлово(ф1);
                        Им  = ОбщегоНазначения.ВыделитьСлово(ф1);
                        Отч = ОбщегоНазначения.ВыделитьСлово(ф1);
                        НовСтр.ФамилияСДБФ = Фам;
                        НовСтр.ИмяСДБФ = Им;
                        НовСтр.ОтчествоСДБФ = Отч;
                        НовСтр.Дата = ДБФ.DATR;
                        НовСтр.ИНН = ДБФ.INN;
                        НовСтр.ПФР = ДБФ.PFR;
                        НовСтр.Пол = ДБФ.POL;
                        НовСтр.СерияПас = ДБФ.PASS;
                        НовСтр.НомерПас = ДБФ.PASN;
                        НовСтр.КемВыданПас = ДБФ.PASKEM;
                        НовСтр.ДатаВыдачиПас = ДБФ.PASDV;
                        НовСтр.КодПодразделенияОрганизации = ДБФ.K_POD;
                        НовСтр.КодПодразделенияПас = ДБФ.PASKPOD;
                        НовСтр.ДатаРегистрацииПоМестуЖительстваПас = ДБФ.PASDREG;
                    КонецЦикла;
                        ФормаИндикацииХодаЗагрузки = ПолучитьОбщуюФорму("ХодВыполненияОбработкиДанных");
                        ФормаИндикацииХодаЗагрузки.Открыть();
                        ФормаИндикацииХодаЗагрузки.НаименованиеОбработкиДанных = "Загрузка справочника физлиц";
                        ФормаИндикацииХодаЗагрузки.Активизировать();
                        ФормаИндикацииХодаЗагрузки.КомментарийЗначения = "Загружается справочник физлиц из файла " + Файл;
                        ФормаИндикацииХодаЗагрузки.КомментарийОбработкиДанных = "Загрузка справочника физлиц ";
                        ФормаИндикацииХодаЗагрузки.КомментарийЗначения = "Обработано данных";
                        ФормаИндикацииХодаЗагрузки.МаксимальноеЗначение = ДБФ.КоличествоЗаписей() ;
                        ФормаИндикацииХодаЗагрузки.Значение = 0;                   
                        ДБФ.Первая();
                        СравнениеФайлаДБФИСправочника();
                        ФормаИндикацииХодаЗагрузки.Значение = ФормаИндикацииХодаЗагрузки.Значение + 1;
                    Иначе
                    Сообщить("Ошибка обработки файла!", СтатусСообщения.Внимание);
                    Отказ = Истина;
                КонецЕсли;
            КонецЕсли;
        ДБФ.ЗакрытьФайл();
        ФормаИндикацииХодаЗагрузки.Закрыть();
        Возврат Отказ;
       
    КонецФункции
    Код:
        // Создается МенеджерВременныхТаблиц для возможности использования временных таблиц в нескольких запросах.
        МенеджерВремТаблиц = Новый МенеджерВременныхТаблиц;
        Запрос = Новый Запрос;
        Запрос.МенеджерВременныхТаблиц = МенеджерВремТаблиц;
       
        // В виртуальную таблицу Загружено помещаются данные из файла dbf. Для дальнейших манипуляций с запросами. 
        Запрос.Текст = "ВЫБРАТЬ
                       |    Загружено.ТН,
                       |    Загружено.ФИО,
                       |    Загружено.ФамилияСДБФ,
                       |    Загружено.ИмяСДБФ,
                       |    Загружено.ОтчествоСДБФ,
                       |    Загружено.Дата,
                       |    Загружено.ИНН,
                       |    Загружено.ПФР,
                       |    Загружено.Пол,
                       |    Загружено.СерияПас,
                       |    Загружено.НомерПас,
                       |    Загружено.КемВыданПас,
                       |    Загружено.ДатаВыдачиПас,
                       |    Загружено.КодПодразделенияОрганизации,
                       |    Загружено.КодПодразделенияПас,
                       |    Загружено.ДатаРегистрацииПоМестуЖительстваПас
                       |ПОМЕСТИТЬ Загружено
                       |ИЗ
                       |    &ЗагруженоТЗ КАК Загружено";
        Запрос.УстановитьПараметр("ЗагруженоТЗ", ТабЗагрузки);
        Запрос.Выполнить();
       
        // Сравниваются 2 таблицы и в результат запроса попадают только те, которых нет в справочнике, но есть в dbf.
        // Это необходимо для того, чтобы заполнить справочник и регистры сведений новыми данными.
        // Т.е. сотрудниками табельные номера которых отсутствуют в справочнике.
        Запрос.Текст = "ВЫБРАТЬ
                       |    Загружено.ТН,
                       |    Загружено.ФИО,
                       |    Загружено.ФамилияСДБФ,
                       |    Загружено.ИмяСДБФ,
                       |    Загружено.ОтчествоСДБФ,
                       |    Загружено.Дата,
                       |    Загружено.ИНН,
                       |    Загружено.ПФР,
                       |    Загружено.Пол,
                       |    Загружено.СерияПас,
                       |    Загружено.НомерПас,
                       |    Загружено.КемВыданПас,
                       |    Загружено.ДатаВыдачиПас,
                       |    Загружено.КодПодразделенияОрганизации,
                       |    Загружено.КодПодразделенияПас,
                       |    Загружено.ДатаРегистрацииПоМестуЖительстваПас,
                       |    ФизическиеЛица.Наименование,
                       |    ФизическиеЛица.ДатаРождения,
                       |    ФизическиеЛица.ИНН КАК ИНН1,
                       |    ФизическиеЛица.СтраховойНомерПФР,
                       |    ФизическиеЛица.Пол КАК Пол1,
                       |    ФизическиеЛица.Код,
                       |    ФизическиеЛица.Ссылка
                       |ИЗ
                       |    Загружено КАК Загружено
                       |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ФизическиеЛица КАК ФизическиеЛица
                       |        ПО (ФизическиеЛица.Код = Загружено.ТН)
                       |ГДЕ
                       |    ФизическиеЛица.Код ЕСТЬ NULL ";
        Результат = Запрос.Выполнить();              
        Выборка = Результат.Выбрать();
    
    И да, Андрей прав. Намного быстрее будет через запрос. Я проверял :)
  8. TODD22
    Offline

    TODD22 Профессионал в 1С Команда форума

    Регистрация:
    23 фев 2009
    Сообщения:
    4.759
    Симпатии:
    147
    Баллы:
    104
    Код:
        КСТариф = Новый КвалификаторыСтроки(50,ДопустимаяДлина.Фиксированная);
        КС = Новый КвалификаторыСтроки(10,ДопустимаяДлина.Фиксированная);
    
        ТЗ = Новый ТаблицаЗначений;
        ТЗ.Колонки.Добавить("Дата", Новый ОписаниеТипов("Дата"));
        ТЗ.Колонки.Добавить("ИНН", Новый ОписаниеТипов("Строка",,,,КС));
        ТЗ.Колонки.Добавить("Договор", Новый ОписаниеТипов("Строка",,,,КС));
        ТЗ.Колонки.Добавить("Сумма", Новый ОписаниеТипов("Число"));
        ТЗ.Колонки.Добавить("НомерСчета", Новый ОписаниеТипов("Строка",,,,КС));
        ТЗ.Колонки.Добавить("Оплачен", Новый ОписаниеТипов("Булево"));
        ТЗ.Колонки.Добавить("ЧасовОтработано", Новый ОписаниеТипов("Число"));
        ТЗ.Колонки.Добавить("Тариф", Новый ОписаниеТипов("Строка",,,,КСТариф));
        ТЗ.Колонки.Добавить("ТарифнаяСтавка", Новый ОписаниеТипов("Число"));
    
  9. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    Из СП
    Код:
    // Создание описателя типов для таблицы значений
    КЧ = Новый КвалификаторыЧисла(12,2);
    КС = Новый КвалификаторыСтроки(20);
    Массив = Новый Массив;
    Массив.Добавить(Тип("Строка"));
    ОписаниеТиповС = Новый ОписаниеТипов(Массив, , КС);
    Массив.Очистить();
    Массив.Добавить(Тип("Число"));
    ОписаниеТиповЧ = Новый ОписаниеТипов(Массив, , ,КЧ);
    
    // Создание таблицы значений
    ТаблицаЗначений = Новый ТаблицаЗначений;
    // добавим в таблицу значений три колонки
    ТаблицаЗначений.Колонки.Добавить("Отдел",ОписаниеТиповС,"Отдел",20);
    ТаблицаЗначений.Колонки.Добавить("Сотрудник",ОписаниеТиповС,
            "Фамилия сотрудника",20);
    ТаблицаЗначений.Колонки.Добавить("Оклад",ОписаниеТиповЧ,"Оклад",10);
    
  10. kisol
    Offline

    kisol Профессионал в 1С

    Регистрация:
    25 июл 2012
    Сообщения:
    395
    Симпатии:
    41
    Баллы:
    54
    Я использую надстройку на ексель. Сравниваю разные диапазоны значений, очень удобно!

    [​IMG]
  11. TopicStarter Overlay
    st88
    Offline

    st88 Профессионал в 1С Команда форума

    Регистрация:
    18 окт 2012
    Сообщения:
    1.726
    Симпатии:
    28
    Баллы:
    54
    думается мне ёксель загнется если в него добавить две таблицы по 170тыс каждая и сравнивать..(
  12. kisol
    Offline

    kisol Профессионал в 1С

    Регистрация:
    25 июл 2012
    Сообщения:
    395
    Симпатии:
    41
    Баллы:
    54
    Екселе нет ограничений на количество записей.
    Попробуй, я сам мучался с дфами писал костыли, а они ненужны.
  13. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.782
    Симпатии:
    509
    Баллы:
    204
    Ограничения есть на количество строк, не нужно дезинформировать.
  14. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.649
    Симпатии:
    948
    Баллы:
    204
    Вот если что то не понятно поясню. Пример чисто пример
    Есть остатки ВзаиморасчетыСКонтрагентамиОстатки мы его в первом запросе соединяем с контрагентами - получаем менеджера - помещаем в вирт табл
    Затем опять эти же остатки берем соединяем с Договорами и отбрасываем те значения что были в первом запроссе

    Затем объеденяем

    Вроде тебе так надо было

    Код:
    ВЫБРАТЬ
        ВзаиморасчетыСКонтрагентамиОстатки.Контрагент,
        ВзаиморасчетыСКонтрагентамиОстатки.СуммаВзаиморасчетовОстаток,
        ВзаиморасчетыСКонтрагентамиОстатки.ДоговорКонтрагента,
        Контрагенты.ОсновнойМенеджерПокупателя
    ПОМЕСТИТЬ ВТВзаиморасчетыИменеджер
    ИЗ
        РегистрНакопления.ВзаиморасчетыСКонтрагентами.Остатки КАК ВзаиморасчетыСКонтрагентамиОстатки
            ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
            ПО ВзаиморасчетыСКонтрагентамиОстатки.Контрагент = Контрагенты.Ссылка
    ;
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
        ВзаиморасчетыСКонтрагентамиОстатки.Контрагент,
        ВзаиморасчетыСКонтрагентамиОстатки.СуммаВзаиморасчетовОстаток,
        ВзаиморасчетыСКонтрагентамиОстатки.ДоговорКонтрагента,
        ДоговорыКонтрагентов.ВалютаВзаиморасчетов
    ПОМЕСТИТЬ ВТсДоговорами
    ИЗ
        РегистрНакопления.ВзаиморасчетыСКонтрагентами.Остатки КАК ВзаиморасчетыСКонтрагентамиОстатки
            ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
            ПО ВзаиморасчетыСКонтрагентамиОстатки.ДоговорКонтрагента = ДоговорыКонтрагентов.Ссылка
    ГДЕ
        НЕ (ВзаиморасчетыСКонтрагентамиОстатки.Контрагент, ВзаиморасчетыСКонтрагентамиОстатки.ДоговорКонтрагента) В
                    (ВЫБРАТЬ
                        ВТВзаиморасчетыИменеджер.Контрагент,
                        ВТВзаиморасчетыИменеджер.ДоговорКонтрагента
                    ИЗ
                        ВТВзаиморасчетыИменеджер КАК ВТВзаиморасчетыИменеджер)
    ;
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
        ВТВзаиморасчетыИменеджер.Контрагент КАК Контрагент,
        ВТВзаиморасчетыИменеджер.СуммаВзаиморасчетовОстаток КАК СуммаВзаиморасчетовОстаток,
        ВТВзаиморасчетыИменеджер.ДоговорКонтрагента КАК ДоговорКонтрагента,
        NULL КАК ВалютаВзаиморасчетов,
        ВТВзаиморасчетыИменеджер.ОсновнойМенеджерПокупателя
    ИЗ
        ВТВзаиморасчетыИменеджер КАК ВТВзаиморасчетыИменеджер
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        ВТсДоговорами.Контрагент,
        ВТсДоговорами.СуммаВзаиморасчетовОстаток,
        ВТсДоговорами.ДоговорКонтрагента,
        ВТсДоговорами.ВалютаВзаиморасчетов,
        NULL
    ИЗ
        ВТсДоговорами КАК ВТсДоговорами
    st88 нравится это.
  15. TopicStarter Overlay
    st88
    Offline

    st88 Профессионал в 1С Команда форума

    Регистрация:
    18 окт 2012
    Сообщения:
    1.726
    Симпатии:
    28
    Баллы:
    54
    Собственно, вот что получилось, а вернее не получилось. Идет сильное задвоение.
    Собственно обработка писана на коленке, для разового применения, так что за имена полей сразу прошу извинить... Сокращал, дабы быстрее написать...
    Вот такой пакетный запрос получился:

    1й пакет - помещаем ТЗ_1 в ВТ (содержит около 24тыс. строк)
    2й пакет - помещаем ТЗ_2 в ВТ (содержит около 22тыс. строк)
    3й пакет - Левым соединением ищем соотв. по всем записям ТЗ_2 в ТЗ_1 (получаем полную ТЗ_2) по полю Код
    4й пакет - Левым соединением ищем соотв. по всем записям ТЗ_2 в ТЗ_1 по Адресу ТУТ получается что одной записи из ТЗ_2 находится от 1 до 3х соотв. записей в ТЗ_1 и начинается задвоение ( на выходе где-то 25 тыс. строк).
    5й пакет - Объединяем результаты пакета 3 и 4 и получаем АХТУНГ таблицу из 46тыс. строк.

    По хорошему на выходе надо бы получить ТЗ_2 из 22тыс. строк с установленными соотв. а не 46тыс...

    Вот запрос:
    Код:
    Запрос = Новый Запрос ("ВЫБРАТЬ
                                   |    ТЗ_РРГ.LS,
                                   |    ТЗ_РРГ.LS_GRO,
                                   |    ТЗ_РРГ.RG,
                                   |    ТЗ_РРГ.NP,
                                   |    ТЗ_РРГ.UL,
                                   |    ТЗ_РРГ.NDOM,
                                   |    ТЗ_РРГ.NKOR,
                                   |    ТЗ_РРГ.NKV,
                                   |    ТЗ_РРГ.PU
                                   |ПОМЕСТИТЬ ТЗ_РРГ
                                   |ИЗ
                                   |    &ТЗ_РРГ КАК ТЗ_РРГ
                                   |;
                                   |
                                   |////////////////////////////////////////////////////////////////////////////////
                                   |ВЫБРАТЬ
                                   |    ТЗ_МРГ.LS_GRO КАК LS_GRO,
                                   |    ТЗ_МРГ.LSA КАК LSA,
                                   |    ТЗ_МРГ.RG КАК RG1,
                                   |    ТЗ_МРГ.NP КАК NP1,
                                   |    ТЗ_МРГ.UL КАК UL1,
                                   |    ТЗ_МРГ.NDOM КАК NDOM1,
                                   |    ТЗ_МРГ.NKOR КАК NKOR1,
                                   |    ТЗ_МРГ.NKV КАК NKV1,
                                   |    ТЗ_МРГ.GS КАК GS
                                   |ПОМЕСТИТЬ ТЗ_МРГ
                                   |ИЗ
                                   |    &ТЗ_МРГ КАК ТЗ_МРГ
                                   |;
                                   |
                                   |////////////////////////////////////////////////////////////////////////////////
                                   |ВЫБРАТЬ
                                   |    ЕСТЬNULL(ТЗ_РРГ.LS, ""Нет соответствия!"") КАК LS,
                                   |    ТЗ_РРГ.RG,
                                   |    ТЗ_РРГ.NP,
                                   |    ТЗ_РРГ.UL,
                                   |    ТЗ_РРГ.NDOM,
                                   |    ТЗ_РРГ.NKOR,
                                   |    ТЗ_РРГ.NKV,
                                   |    ТЗ_РРГ.PU,
                                   |    ТЗ_РРГ.LS_GRO,
                                   |    ТЗ_МРГ.LS_GRO КАК LS_GRO1,
                                   |    ТЗ_МРГ.RG1 КАК RG1,
                                   |    ТЗ_МРГ.NP1 КАК NP1,
                                   |    ТЗ_МРГ.UL1 КАК UL1,
                                   |    ТЗ_МРГ.NDOM1 КАК NDOM1,
                                   |    ТЗ_МРГ.NKOR1 КАК NKOR1,
                                   |    ТЗ_МРГ.NKV1 КАК NKV1,
                                   |    ТЗ_МРГ.GS КАК GS,
                                   |    ТЗ_МРГ.LSA КАК LSA
                                   |ПОМЕСТИТЬ ВТ_Код
                                   |ИЗ
                                   |    ТЗ_МРГ КАК ТЗ_МРГ
                                   |        ЛЕВОЕ СОЕДИНЕНИЕ ТЗ_РРГ КАК ТЗ_РРГ
                                   |        ПО (ТЗ_МРГ.LSA = ТЗ_РРГ.LS_GRO
                                   |                ИЛИ ТЗ_МРГ.LSA = ТЗ_РРГ.LS)
                                   |;
                                   |
                                   |////////////////////////////////////////////////////////////////////////////////
                                   |ВЫБРАТЬ
                                   |    ЕСТЬNULL(ТЗ_РРГ.LS, ""Нет соответствия!"") КАК LS,
                                   |    ТЗ_РРГ.RG,
                                   |    ТЗ_РРГ.NP,
                                   |    ТЗ_РРГ.UL,
                                   |    ТЗ_РРГ.NDOM,
                                   |    ТЗ_РРГ.NKOR,
                                   |    ТЗ_РРГ.NKV,
                                   |    ТЗ_РРГ.PU,
                                   |    ТЗ_РРГ.LS_GRO,
                                   |    ТЗ_МРГ.LS_GRO КАК LS_GRO1,
                                   |    ТЗ_МРГ.RG1 КАК RG1,
                                   |    ТЗ_МРГ.NP1 КАК NP1,
                                   |    ТЗ_МРГ.UL1 КАК UL1,
                                   |    ТЗ_МРГ.NDOM1 КАК NDOM1,
                                   |    ТЗ_МРГ.NKOR1 КАК NKOR1,
                                   |    ТЗ_МРГ.NKV1 КАК NKV1,
                                   |    ТЗ_МРГ.GS КАК GS,
                                   |    ТЗ_МРГ.LSA КАК LSA
                                   |ПОМЕСТИТЬ ВТ_Адрес
                                   |ИЗ
                                   |    ТЗ_МРГ КАК ТЗ_МРГ
                                   |        ЛЕВОЕ СОЕДИНЕНИЕ ТЗ_РРГ КАК ТЗ_РРГ
                                   |        ПО ТЗ_МРГ.RG1 = ТЗ_РРГ.RG
                                   |            И ТЗ_МРГ.NP1 = ТЗ_РРГ.NP
                                   |            И ТЗ_МРГ.UL1 = ТЗ_РРГ.UL
                                   |            И ТЗ_МРГ.NDOM1 = ТЗ_РРГ.NDOM
                                   |            И ТЗ_МРГ.NKOR1 = ТЗ_РРГ.NKOR
                                   |            И ТЗ_МРГ.NKV1 = ТЗ_РРГ.NKV
                                   |ГДЕ
                                   |    ТЗ_МРГ.LS_GRO В
                                   |            (ВЫБРАТЬ
                                   |                ВТ_Код.LS_GRO1
                                   |            ИЗ
                                   |                ВТ_Код КАК ВТ_Код
                                   |            ГДЕ
                                   |                ВТ_Код.LS = ""Нет соответствия!"")
                                   |;
                                   |
                                   |////////////////////////////////////////////////////////////////////////////////
                                   |ВЫБРАТЬ
                                   |    ВТ_Код.LS,
                                   |    ВТ_Код.RG,
                                   |    ВТ_Код.NP,
                                   |    ВТ_Код.UL,
                                   |    ВТ_Код.NDOM,
                                   |    ВТ_Код.NKOR,
                                   |    ВТ_Код.NKV,
                                   |    ВТ_Код.PU,
                                   |    ВТ_Код.LS_GRO,
                                   |    ВТ_Код.LS_GRO1,
                                   |    ВТ_Код.RG1,
                                   |    ВТ_Код.NP1,
                                   |    ВТ_Код.UL1,
                                   |    ВТ_Код.NDOM1,
                                   |    ВТ_Код.NKOR1,
                                   |    ВТ_Код.NKV1,
                                   |    ВТ_Код.GS,
                                   |    ВТ_Код.LSA
                                   |ИЗ
                                   |    ВТ_Код КАК ВТ_Код
                                   |
                                   |ОБЪЕДИНИТЬ ВСЕ
                                   |
                                   |ВЫБРАТЬ
                                   |    ВТ_Адрес.LS,
                                   |    ВТ_Адрес.RG,
                                   |    ВТ_Адрес.NP,
                                   |    ВТ_Адрес.UL,
                                   |    ВТ_Адрес.NDOM,
                                   |    ВТ_Адрес.NKOR,
                                   |    ВТ_Адрес.NKV,
                                   |    ВТ_Адрес.PU,
                                   |    ВТ_Адрес.LS_GRO,
                                   |    ВТ_Адрес.LS_GRO1,
                                   |    ВТ_Адрес.RG1,
                                   |    ВТ_Адрес.NP1,
                                   |    ВТ_Адрес.UL1,
                                   |    ВТ_Адрес.NDOM1,
                                   |    ВТ_Адрес.NKOR1,
                                   |    ВТ_Адрес.NKV1,
                                   |    ВТ_Адрес.GS,
                                   |    ВТ_Адрес.LSA
                                   |ИЗ
                                   |    ВТ_Адрес КАК ВТ_Адрес"
                                           ) ;

    Как уйти от задвоений?
    Последнее редактирование: 13 ноя 2015
  16. TerANik
    Offline

    TerANik Профессионал в 1С

    Регистрация:
    19 ноя 2014
    Сообщения:
    997
    Симпатии:
    70
    Баллы:
    54
    Зачем левые соединения? Сгруппируй ВТ как надо и объедини их , как писал в самом начале Вадим. Добавь в ВТ по полю, в первую 1, во вторую -1 и объедение поместив опять же в ВТ, а из неё выбери по данному полю которое равно нулю и всё.

    Ааа.. сорри в 3 и 4 разные поля.
    Последнее редактирование: 13 ноя 2015
  17. TopicStarter Overlay
    st88
    Offline

    st88 Профессионал в 1С Команда форума

    Регистрация:
    18 окт 2012
    Сообщения:
    1.726
    Симпатии:
    28
    Баллы:
    54
    нее, такой вариант не подходит. нужно именно ВСЕ записи из первой ТЗ и к ним соответствия (сколько подберется) из второй ТЗ!
  18. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    Не понял.


    По моему взаимоисключающие, не? Так что надо то?
  19. TerANik
    Offline

    TerANik Профессионал в 1С

    Регистрация:
    19 ноя 2014
    Сообщения:
    997
    Симпатии:
    70
    Баллы:
    54
    У меня с логикой что то не так?

    Если поля связи одинаковые и одной из записей ТЗ1 соответствует 3 записи в ТЗ 2, то получим 3 записи, при смене соединения с левого на правое, получаем тоже 3 записи? т.е. 2 раза выбираем одно и тоже? или я не прав?
  20. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    э, а откуда взялось здесь "левое" и "правое"? Вы о чем народ?

Поделиться этой страницей