Имя: Пароль:
1C
 
Непонятное поведение запроса
0 LivingStar
 
01.11.19
05:50
Запрос выбирает записи по снилс и фио, но в передаваемой таблице есть запись конец таблицы
и каким то образом эта запись выбирается в связке с некоторыми фио. Каким образом это и почему происходит?

    Запрос.Текст = "
        |ВЫБРАТЬ
        |    Таблица.Колонка1  КАК ФИОФизЛица,
        |    Таблица.Колонка2  КАК Рост,
        |    Таблица.Колонка3  КАК РазмерОдежды,
        |    Таблица.Колонка4  КАК РазмерОбуви,
        |    Таблица.Колонка5  КАК РазмерГоловногоУбора,
        |    Таблица.Колонка6  КАК РазмерПротивогаза,
        |    Таблица.Колонка7  КАК РазмерРеспиратора,
        |    Таблица.Колонка8  КАК РазмерПерчаток,
        |    Таблица.Колонка9  КАК РазмерРукавиц,
        |    Таблица.Колонка10 КАК СНИЛС
        |ПОМЕСТИТЬ ВТ_АнтропометрическиеСведения
        |ИЗ
        |    &Таблица КАК Таблица
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    ФизическиеЛица.Ссылка                                КАК ФизическоеЛицоСсылка,
        |    ФизическиеЛица.Фамилия                                КАК Фамилия,
        |    ФизическиеЛица.Имя                                    КАК Имя,
        |    ФизическиеЛица.Отчество                            КАК Отчество,
        |    ФизическиеЛица.ФИО                                    КАК ФИО,
        |    ФизическиеЛица.СтраховойНомерПФР                   КАК СтраховойНомерПФР,
        |    ВТ_АнтропометрическиеСведения.ФИОФизЛица            КАК ФИОФизЛица,
        |    ВТ_АнтропометрическиеСведения.Рост                    КАК Рост,
        |    ВТ_АнтропометрическиеСведения.РазмерОдежды            КАК РазмерОдежды,
        |    ВТ_АнтропометрическиеСведения.РазмерОбуви            КАК РазмерОбуви,
        |    ВТ_АнтропометрическиеСведения.РазмерГоловногоУбора КАК РазмерГоловногоУбора,
        |    ВТ_АнтропометрическиеСведения.РазмерПротивогаза    КАК РазмерПротивогаза,
        |    ВТ_АнтропометрическиеСведения.РазмерРеспиратора    КАК РазмерРеспиратора,
        |    ВТ_АнтропометрическиеСведения.РазмерПерчаток       КАК РазмерПерчаток,
        |    ВТ_АнтропометрическиеСведения.РазмерРукавиц        КАК РазмерРукавиц,
        |    ВТ_АнтропометрическиеСведения.СНИЛС                КАК СНИЛС
        |ИЗ
        |    ВТ_АнтропометрическиеСведения КАК ВТ_АнтропометрическиеСведения
        |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ФизическиеЛица КАК ФизическиеЛица
        |        ПО (ФизическиеЛица.СтраховойНомерПФР = ВТ_АнтропометрическиеСведения.СНИЛС
        |            ИЛИ ВТ_АнтропометрическиеСведения.ФИОФизЛица = ФизическиеЛица.ФИО)";
    Запрос.УстановитьПараметр("Таблица", ТаблицаРезультат);
1 LivingStar
 
01.11.19
05:59
Если удалить эту запись, вроде как нормально идет все. Но что это за коллизия из за этой записи?

    ТаблицаРезультат.Удалить(ТаблицаРезультат.Найти("Конец таблицы", "Колонка1"));
    //
    Запрос       = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |    Таблица.Колонка1 КАК ФИОФизЛица,
                   |    Таблица.Колонка2 КАК Рост,
                   |    Таблица.Колонка3 КАК РазмерОдежды,
                   |    Таблица.Колонка4 КАК РазмерОбуви,
                   |    Таблица.Колонка5 КАК РазмерГоловногоУбора,
                   |    Таблица.Колонка6 КАК РазмерПротивогаза,
                   |    Таблица.Колонка7 КАК РазмерРеспиратора,
                   |    Таблица.Колонка8 КАК РазмерПерчаток,
                   |    Таблица.Колонка9 КАК РазмерРукавиц,
                   |    Таблица.Колонка10 КАК СНИЛС
                   |ПОМЕСТИТЬ ВТ_АнтропометрическиеСведения
                   |ИЗ
                   |    &Таблица КАК Таблица
                   |;
                   |
                   |////////////////////////////////////////////////////////////////////////////////
                   |ВЫБРАТЬ
                   |    ФизическиеЛица.Ссылка КАК ФизическоеЛицоСсылка,
                   |    ФизическиеЛица.Фамилия КАК Фамилия,
                   |    ФизическиеЛица.Имя КАК Имя,
                   |    ФизическиеЛица.Отчество КАК Отчество,
                   |    ФизическиеЛица.ФИО КАК ФИО,
                   |    ФизическиеЛица.СтраховойНомерПФР КАК СтраховойНомерПФР,
                   |    ВТ_АнтропометрическиеСведения.ФИОФизЛица КАК ФИОФизЛица,
                   |    ВТ_АнтропометрическиеСведения.Рост КАК Рост,
                   |    ВТ_АнтропометрическиеСведения.РазмерОдежды КАК РазмерОдежды,
                   |    ВТ_АнтропометрическиеСведения.РазмерОбуви КАК РазмерОбуви,
                   |    ВТ_АнтропометрическиеСведения.РазмерГоловногоУбора КАК РазмерГоловногоУбора,
                   |    ВТ_АнтропометрическиеСведения.РазмерПротивогаза КАК РазмерПротивогаза,
                   |    ВТ_АнтропометрическиеСведения.РазмерРеспиратора КАК РазмерРеспиратора,
                   |    ВТ_АнтропометрическиеСведения.РазмерПерчаток КАК РазмерПерчаток,
                   |    ВТ_АнтропометрическиеСведения.РазмерРукавиц КАК РазмерРукавиц,
                   |    ВТ_АнтропометрическиеСведения.СНИЛС КАК СНИЛС
                   |ИЗ
                   |    ВТ_АнтропометрическиеСведения КАК ВТ_АнтропометрическиеСведения
                   |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ФизическиеЛица КАК ФизическиеЛица
                   |        ПО (ФизическиеЛица.СтраховойНомерПФР = ВТ_АнтропометрическиеСведения.СНИЛС
                   |                ИЛИ ВТ_АнтропометрическиеСведения.ФИОФизЛица = ФизическиеЛица.ФИО)";
    Запрос.УстановитьПараметр("Таблица", ТаблицаРезультат);
2 DrZombi
 
гуру
01.11.19
06:05
(0) Ошибка в:
        1. ВТ_АнтропометрическиеСведения - Содержат дубли
        2. ФизическиеЛица - содержать дубли.

...Всегда пожалуйста :)
3 DrZombi
 
гуру
01.11.19
06:06
+ Дубли, в плане связок "СНИЛС" - "СтраховойНомерПФР"
                        "ФИО" - "ФИОФизЛица"
4 DrZombi
 
гуру
01.11.19
06:07
+ Ты пойми, не у всех может быть указан снилс, фио.
5 DrZombi
 
гуру
01.11.19
06:07
Как вариант, удалить последнюю строку.
6 LivingStar
 
01.11.19
06:11
(5) Строку удалил. Дублей нет. Но вот так почему то криво выбиралось (
7 DrZombi
 
гуру
01.11.19
06:17
(6) Да у вас там условие "или"

ФизическиеЛица.СтраховойНомерПФР = ВТ_АнтропометрическиеСведения.СНИЛС
        |            ИЛИ ВТ_АнтропометрическиеСведения.ФИОФизЛица = ФизическиеЛица.ФИО

...
Если результат странный, значит у вас там есть такой набор данных, который удовлетворяет связи.
По пустому полю тоже связывает ;)
8 DrZombi
 
гуру
01.11.19
06:17
+ Криво пишешь, криво связывает...
9 LivingStar
 
01.11.19
06:24
(8) А что криво? Если мне нужно проверять по снилс или по физ лицу.
(7) ну так условие не выполняется, почему выборка идет не правильных данных?
10 catena
 
01.11.19
06:25
(9)У тебя твоя таблица - основная, почему он не должен выбирать из нее все, что есть? Это левая таблица присоединяется по условиям связи, правая таблица присутствует в выборке полностью всегда.
11 LivingStar
 
01.11.19
06:27
(10 ) я поменял связь

    ТаблицаРезультат.Удалить(ТаблицаРезультат.Найти("Конец таблицы", "Колонка1"));
    //
    Запрос       = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |    Таблица.Колонка1 КАК ФИОФизЛица,
                   |    Таблица.Колонка2 КАК Рост,
                   |    Таблица.Колонка3 КАК РазмерОдежды,
                   |    Таблица.Колонка4 КАК РазмерОбуви,
                   |    Таблица.Колонка5 КАК РазмерГоловногоУбора,
                   |    Таблица.Колонка6 КАК РазмерПротивогаза,
                   |    Таблица.Колонка7 КАК РазмерРеспиратора,
                   |    Таблица.Колонка8 КАК РазмерПерчаток,
                   |    Таблица.Колонка9 КАК РазмерРукавиц,
                   |    Таблица.Колонка10 КАК СНИЛС
                   |ПОМЕСТИТЬ ВТ_АнтропометрическиеСведения
                   |ИЗ
                   |    &Таблица КАК Таблица
                   |;
                   |
                   |////////////////////////////////////////////////////////////////////////////////
                   |ВЫБРАТЬ
                   |    ФизическиеЛица.Ссылка КАК ФизическоеЛицоСсылка,
                   |    ФизическиеЛица.Фамилия КАК Фамилия,
                   |    ФизическиеЛица.Имя КАК Имя,
                   |    ФизическиеЛица.Отчество КАК Отчество,
                   |    ФизическиеЛица.ФИО КАК ФИО,
                   |    ФизическиеЛица.СтраховойНомерПФР КАК СтраховойНомерПФР,
                   |    ВТ_АнтропометрическиеСведения.ФИОФизЛица КАК ФИОФизЛица,
                   |    ВТ_АнтропометрическиеСведения.Рост КАК Рост,
                   |    ВТ_АнтропометрическиеСведения.РазмерОдежды КАК РазмерОдежды,
                   |    ВТ_АнтропометрическиеСведения.РазмерОбуви КАК РазмерОбуви,
                   |    ВТ_АнтропометрическиеСведения.РазмерГоловногоУбора КАК РазмерГоловногоУбора,
                   |    ВТ_АнтропометрическиеСведения.РазмерПротивогаза КАК РазмерПротивогаза,
                   |    ВТ_АнтропометрическиеСведения.РазмерРеспиратора КАК РазмерРеспиратора,
                   |    ВТ_АнтропометрическиеСведения.РазмерПерчаток КАК РазмерПерчаток,
                   |    ВТ_АнтропометрическиеСведения.РазмерРукавиц КАК РазмерРукавиц,
                   |    ВТ_АнтропометрическиеСведения.СНИЛС КАК СНИЛС
                   |ИЗ
                   |    ВТ_АнтропометрическиеСведения КАК ВТ_АнтропометрическиеСведения
                   |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ФизическиеЛица КАК ФизическиеЛица
                   |        ПО (ФизическиеЛица.СтраховойНомерПФР = ВТ_АнтропометрическиеСведения.СНИЛС
                   |                ИЛИ ВТ_АнтропометрическиеСведения.ФИОФизЛица = ФизическиеЛица.ФИО)";
    Запрос.УстановитьПараметр("Таблица", ТаблицаРезультат);
12 LivingStar
 
01.11.19
06:32
(11) почему этот запрос не выбирает правильно данные?
13 shadow_sw
 
01.11.19
06:40
(12)  ответ в (2)
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.