8.х "ПОДОБНО" в условии связи запроса

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем stanislav.zvr, 11 май 2016.

  1. TopicStarter Overlay
    stanislav.zvr
    Offline

    stanislav.zvr

    Регистрация:
    29 апр 2015
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    1
    Всем привет! Уже второй день не могу разобраться с тем, почему внешняя таблица значений не связываются по условию ПОДОБНО с виртуальной, хотя при аналогичном запросе в консоли всё отрабатывается правильно. Все нужные записи по регистру находятся, если посмотреть через полное соединение, но нет именно самой связи. Прилагаю ниже код. Кто сможет помочь?

    Код:
    Запрос = Новый Запрос;   
    ТЗЗапрос = ТЗДоки.Скопировать();
    Для Каждого СтрокаТЗЗапрос ИЗ ТЗЗапрос Цикл
            СтрокаТЗЗапрос.Сотрудник = "%" + СокрЛП(СтрокаТЗЗапрос.Сотрудник) + "%";
            СтрокаТЗЗапрос.СотрудникКод = "%" + СокрЛП(СтрокаТЗЗапрос.СотрудникКод) + "%";   
    КонецЦикла;
    Запрос.УстановитьПараметр("ДатаК", КонецМесяца(НачПериода));
    Запрос.УстановитьПараметр("ТаблицаЗначений", ТЗЗапрос);
       
        Запрос.Текст = 
        "ВЫБРАТЬ
        |    ВЫРАЗИТЬ(ТЗ.Сотрудник КАК СТРОКА(100)) КАК СотрудникНаименование,
        |    ВЫРАЗИТЬ(ТЗ.СотрудникКод КАК СТРОКА(11)) КАК СотрудникКод,
        |    ТЗ.ОтработаноДней,
        |    ТЗ.ОтработаноЧасов,
        |    ТЗ.ОплаченоДнейЧасов,
        |    ТЗ.НормаДней,
        |    ТЗ.НормаЧасов,
        |    ТЗ.СуммаТП8,
        |    ТЗ.ВидЗарплаты
        |ПОМЕСТИТЬ ВТ_ТЗ
        |ИЗ
        |    &ТаблицаЗначений КАК ТЗ
        |ГДЕ
        |    ТЗ.Загрузить = ИСТИНА
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    ВЫБОР
        |        КОГДА РаботникиОрганизацийСрезПоследних.ПериодЗавершения <= &ДатаК
        |                И РаботникиОрганизацийСрезПоследних.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1)
        |            ТОГДА РаботникиОрганизацийСрезПоследних.ПериодЗавершения
        |        ИНАЧЕ РаботникиОрганизацийСрезПоследних.Период
        |    КОНЕЦ КАК Период,
        |    ВЫБОР
        |        КОГДА РаботникиОрганизацийСрезПоследних.ПериодЗавершения <= &ДатаК
        |                И РаботникиОрганизацийСрезПоследних.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1)
        |            ТОГДА РаботникиОрганизацийСрезПоследних.ДолжностьЗавершения
        |        ИНАЧЕ РаботникиОрганизацийСрезПоследних.Должность
        |    КОНЕЦ КАК Должность,
        |    ВЫБОР
        |        КОГДА РаботникиОрганизацийСрезПоследних.ПериодЗавершения <= &ДатаК
        |                И РаботникиОрганизацийСрезПоследних.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1)
        |            ТОГДА РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизацииЗавершения
        |        ИНАЧЕ РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизации
        |    КОНЕЦ КАК ПодразделениеОрганизации,
        |    ВЫБОР
        |        КОГДА РаботникиОрганизацийСрезПоследних.ПериодЗавершения <= &ДатаК
        |                И РаботникиОрганизацийСрезПоследних.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1)
        |            ТОГДА РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостоянияЗавершения
        |        ИНАЧЕ РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостояния
        |    КОНЕЦ КАК ПричинаИзмененияСостояния,
        |    РаботникиОрганизацийСрезПоследних.Сотрудник.Наименование КАК СотрудникНаименование,
        |    РаботникиОрганизацийСрезПоследних.Сотрудник.Код КАК СотрудникКод,
        |    РаботникиОрганизацийСрезПоследних.Сотрудник
        |ПОМЕСТИТЬ ВТ_РаботникиОрганизации
        |ИЗ
        |    РегистрСведений.РаботникиОрганизаций.СрезПоследних(&ДатаК, ) КАК РаботникиОрганизацийСрезПоследних
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    ВТ_РаботникиОрганизации.Период,
        |    ВТ_РаботникиОрганизации.Должность,
        |    ВТ_РаботникиОрганизации.ПричинаИзмененияСостояния,
        |    ВТ_РаботникиОрганизации.ПодразделениеОрганизации,
        |    ВТ_ТЗ.ОтработаноДней,
        |    ВТ_ТЗ.ОтработаноЧасов,
        |    ВТ_ТЗ.ОплаченоДнейЧасов,
        |    ВТ_ТЗ.НормаДней,
        |    ВТ_ТЗ.НормаЧасов,
        |    ВТ_ТЗ.СуммаТП8 КАК Результат,
        |    ВЫБОР
        |        КОГДА НЕ ВТ_РаботникиОрганизации.Сотрудник ЕСТЬ NULL 
        |            ТОГДА ИСТИНА
        |        ИНАЧЕ ЛОЖЬ
        |    КОНЕЦ КАК СотрудникНайден,
        |    ВТ_ТЗ.ВидЗарплаты,
        |    ЕСТЬNULL(ВТ_РаботникиОрганизации.Сотрудник, ВТ_ТЗ.СотрудникНаименование) КАК Сотрудник
        |ИЗ
        |    ВТ_ТЗ КАК ВТ_ТЗ
        |        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_РаботникиОрганизации КАК ВТ_РаботникиОрганизации
        |        ПО (ВТ_РаботникиОрганизации.СотрудникНаименование ПОДОБНО ВТ_ТЗ.СотрудникНаименование)
        |            И (ВТ_РаботникиОрганизации.СотрудникКод ПОДОБНО ВТ_ТЗ.СотрудникКод)";
       
        ВыборкаСотрудники = Запрос.Выполнить().Выбрать();
    
  2. olegsemenov2005
    Offline

    olegsemenov2005 Новичок в 1С

    Регистрация:
    5 май 2014
    Сообщения:
    48
    Симпатии:
    3
    Баллы:
    4
    Попробуй в ТЗЗапрос создать и определить колонки (ТЗЗапрос.Колонки.Добавить("СотрудникНаименование", Новый ОписаниеТипов("Строка"));), и заполнить не через "ТЗЗапрос = ТЗДоки.Скопировать();
    ", а явно добавлением строк, все равно потом перебираешь.
  3. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    а У Вас у Вашей ТЗДоки колонки типизированные?
    --- Объединение сообщений, 11 май 2016 ---
    Вернее ТЗЗапрос
  4. TopicStarter Overlay
    stanislav.zvr
    Offline

    stanislav.zvr

    Регистрация:
    29 апр 2015
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    1
    эта таблица значений определена на обычной форме и у всех колонок указаны типы и длины строк. Разве может при этом тоже криво отрабатывать?
  5. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Ну тога я бы на твоем месте по другому делал.

    создал отдельную ТЗ с типизироваными колоками. в нее выгрузил уже изи ТЗЗапрос те значенеи у которых выгружать и уже эту ТЗ передавал в запрос без условия ТЗ.Загрузить = ИСТИНА

    Потому как спокойно может типы не воспринимать
  6. TopicStarter Overlay
    stanislav.zvr
    Offline

    stanislav.zvr

    Регистрация:
    29 апр 2015
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    1
    У ТЗДоки -- да. А при использование "Скопировать" ведь все типы тоже должны переноситься. В любом случае я пробовал добавить такой код перед запросом, чтобы обозначить типы колонкам, но ничего не изенилось

    Код:
        ТЗЗапрос.Колонки.Удалить("Сотрудник");
        ТЗЗапрос.Колонки.Удалить("СотрудникКод");
       
        ТЗЗапрос.Колонки.Добавить("Сотрудник", Новый ОписаниеТипов("Строка",,,, Новый КвалификаторыСтроки(100)));
        ТЗЗапрос.Колонки.Добавить("СотрудникКод", Новый ОписаниеТипов("Строка",,,, Новый КвалификаторыСтроки(11)));
       
        Для Каждого СтрокаТЗДоки Из ТЗДоки Цикл
            ТЗЗапрос[ТЗДоки.Индекс(СтрокаТЗДоки)].Сотрудник = "%" + СокрЛП(СтрокаТЗДоки.Сотрудник) + "%";
            ТЗЗапрос[ТЗДоки.Индекс(СтрокаТЗДоки)].СотрудникКод = "%" + СокрЛП(СтрокаТЗДоки.СотрудникКод) + "%";
        КонецЦикла;
    
  7. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    А во втором запросе попробуй то же ВЫРАЗИТь
    РаботникиОрганизацийСрезПоследних.Сотрудник.Наименование КАК СотрудникНаименование,
    | РаботникиОрганизацийСрезПоследних.Сотрудник.Код КАК СотрудникКод,
  8. TopicStarter Overlay
    stanislav.zvr
    Offline

    stanislav.zvr

    Регистрация:
    29 апр 2015
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    1
    с ВЫРАЗИТЬ во втором запросе уже пробовал - не помогло. Да и когда пробовал в консоли, то и без этого работало.
  9. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Ну надо смотреть. Повторюсь я бы делал как
    Создал бы ТЗ с типами колонок и уже потом писал чтото вроде

    Для каждого стр из ТЗЗапрос Цикл

    стрНовая=ТЗ.Добавить();
    СтрНовая.Сотрудник=стр.Сотрудник;

    .....

    КонецЦикла


    А потом уже ТЗ передавал в запрос.Безх всяких копировать выгрузить т т.д
  10. olegsemenov2005
    Offline

    olegsemenov2005 Новичок в 1С

    Регистрация:
    5 май 2014
    Сообщения:
    48
    Симпатии:
    3
    Баллы:
    4
    И потом уже эту ТЗ загрузить в таблицу, что на форме (ТЗЗапрос), если уж так она нужна.
    --- Объединение сообщений, 11 май 2016 ---
    Проблема с типизацией колонок по которым объединяешься.
  11. TopicStarter Overlay
    stanislav.zvr
    Offline

    stanislav.zvr

    Регистрация:
    29 апр 2015
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    1
    Попробую сделать так. Спасибо всем, кто ответил!

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