8.х Таблица значений: индексация

Тема в разделе "Отчеты и обработки для "1С:Предприятие 8"", создана пользователем MyNameNoName, 19 июл 2013.

  1. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    в запросе через полное соединение
  2. TopicStarter Overlay
    MyNameNoName
    Offline

    MyNameNoName Опытный в 1С

    Регистрация:
    17 май 2013
    Сообщения:
    931
    Симпатии:
    0
    Баллы:
    26
    Я не могу включить в запрос, у меня два отдельных запроса и объединить их в один запрос не представляется возможным. Вопрос именно про работу с этой таблицей.
  3. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    кто вам мешает ваши таблицы передать в запрос и там их сравнить, получив на выходе результирующую таблицу?

    можно конечно и в циклах полные переборы устроить, но думаю дольше будет
  4. nickpugachev
    Offline

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

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

    Например, Таблица1.НайтиСтроки(Новый Структура("К1,К2,К3", 1, 2, 4))
    вернет массив, в котором будут строки таблицы Таблица1, в которых в колонке К1 будет 1, в колонке К2 - 2, в колонке К3 - 4

    если соответствующих строк в таблице нет, то вернется пустой массив.

    у вас получится
    Если Таблица1.НайтиСтроки(Новый Структура("К1,К2,К3", СтрокаТаблицы2.К1, СтрокаТаблицы2.К2, СтрокаТаблицы2.К3)).Количество()=0 Тогда
    // добавляем строку таблицы2 в таблицу1
    КонецЕсли;
  5. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    ага, а если надо сравнить 20 колонок, то замучаешься структуру составлять ;) по мне так проще запросом
  6. nickpugachev
    Offline

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

    Регистрация:
    28 май 2012
    Сообщения:
    3.266
    Симпатии:
    131
    Баллы:
    104
    судя по предыдущим сообщениям - их там 5
    а так - проще изначально все запросом сделать :)
  7. TopicStarter Overlay
    MyNameNoName
    Offline

    MyNameNoName Опытный в 1С

    Регистрация:
    17 май 2013
    Сообщения:
    931
    Симпатии:
    0
    Баллы:
    26
    А как таблицу в запрос передавать?

    Код полностью переписал, 2 запроса.
  8. nickpugachev
    Offline

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

    Регистрация:
    28 май 2012
    Сообщения:
    3.266
    Симпатии:
    131
    Баллы:
    104
    в виде параметра, а в запросе делать временную таблицу
    Код:
    ВЫБРАТЬ
    таб.Колонка1,
    таб.Колонка2,
    ...
    ПОМЕСТИТЬ ТаблицаДанных
    ИЗ
    &ТаблицаПараметр КАК таб
    ;
    
    есть только ограничение - типизация колонок таблицы значений - нельзя пользоваться колонками, которым не был назначен тип
  9. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    про 5 колонок это я видела, просто надо показать все варианты, а то в другой раз ТС будет делать через цикл, а так куча колонок, а так он теперь знает как таблицу передать в запрос и обработать уже в запросе все
  10. TopicStarter Overlay
    MyNameNoName
    Offline

    MyNameNoName Опытный в 1С

    Регистрация:
    17 май 2013
    Сообщения:
    931
    Симпатии:
    0
    Баллы:
    26
    А где в самом конструкторе запроса(в каком разделе) можно внешнюю таблицу добавить?
  11. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    над центральной колонкой вторая кнопка - Создать описание внешней таблицы
  12. TopicStarter Overlay
    MyNameNoName
    Offline

    MyNameNoName Опытный в 1С

    Регистрация:
    17 май 2013
    Сообщения:
    931
    Симпатии:
    0
    Баллы:
    26
    Там нужно прописать все имена полей, а как узнать тип значения поля? Выбирать Хранилище значения?
    Еще раз спасибо!

    Или выбирать число или строка в зависимости от значения?
  13. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    вы же знаете какого типа у вас поля в ТЗ?
  14. TopicStarter Overlay
    MyNameNoName
    Offline

    MyNameNoName Опытный в 1С

    Регистрация:
    17 май 2013
    Сообщения:
    931
    Симпатии:
    0
    Баллы:
    26
    Не знаю наверняка. Предполагаю что количество - число, Наименование и Артикул - строка, код - наверное число. Ссылка - понятия не имею. А беру значения из другого запроса, где посмотреть их тип не знаю.
  15. TopicStarter Overlay
    MyNameNoName
    Offline

    MyNameNoName Опытный в 1С

    Регистрация:
    17 май 2013
    Сообщения:
    931
    Симпатии:
    0
    Баллы:
    26
    Получается нет автоопределения значения?
  16. TopicStarter Overlay
    MyNameNoName
    Offline

    MyNameNoName Опытный в 1С

    Регистрация:
    17 май 2013
    Сообщения:
    931
    Симпатии:
    0
    Баллы:
    26
    Код:
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    тЗапрос3.ЗаказНоменклатураНаименование,
    |    тЗапрос3.ЗаказНоменклатураАртикул,
    |    тЗапрос3.ЗаказНоменклатураКоличество,
    |    тЗапрос3.ЗаказНоменклатураКод,
    |    тЗапрос3.АналогНаименование,
    |    тЗапрос3.АналогАртикул,
    |    тЗапрос3.АналогКод,
    |    тЗапрос3.СписанныеТоварыКоличество,
    |    Таблица2.ЗаказНоменклатураНаименование КАК ЗаказНоменклатураНаименование1,
    |    Таблица2.ЗаказНоменклатураАртикул КАК ЗаказНоменклатураАртикул1,
    |    Таблица2.ЗаказНоменклатураКоличество КАК ЗаказНоменклатураКоличество1,
    |    Таблица2.ЗаказНоменклатураКод КАК ЗаказНоменклатураКод1,
    |    Таблица2.ЗаказНоменклатураСсылка,
    |    Таблица2.СписанныеТоварыКоличество КАК СписанныеТоварыКоличество1,
    |    тЗапрос3.ЗаказНоменклатураСсылка КАК ЗаказНоменклатураСсылка1
    |ИЗ
    |    тЗапрос3 КАК тЗапрос3
    |        ПОЛНОЕ СОЕДИНЕНИЕ Таблица2 КАК Таблица2
    |        ПО тЗапрос3.ЗаказНоменклатураСсылка = Таблица2.ЗаказНоменклатураСсылка";
    
    Запрос.УстановитьПараметр("Закупка", Перечисления.ВидыВоспроизводстваНоменклатуры.Закупка);
    Запрос.УстановитьПараметр("Таблица2",Таблица2);
    Таблица = Запрос.Выполнить().Выгрузить();
    
    {Форма.ФормаОтчета.Форма(154)}: Ошибка при вызове метода контекста (Выполнить)
    Таблица = Запрос.Выполнить().Выгрузить();
    по причине:
    {(85, 21)}: Таблица не найдена "Таблица2"
    ПОЛНОЕ СОЕДИНЕНИЕ <<?>>Таблица2 КАК Таблица2

    Таблица2 расположена выше по коду
    Код:
    Таблица2 = Запрос2.Выполнить().Выгрузить();
  17. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    это весь запрос? Таблица 2 передается в запрос как параметр, опредляется как временная и далее используется, вот как-то так
    Код:
    
    |Выбрать
    |Таб2.ЗаказНоменклатураНаименование,
    |    Таб2.ЗаказНоменклатураАртикул,
    |    Таб2.ЗаказНоменклатураКоличество,
    |    Таб2.ЗаказНоменклатураКод,
    |	Таб2.ЗаказНоменклатураСсылка,
    |    Таб2.СписанныеТоварыКоличество
    |Поместить Таблица2
    |ИЗ &ТЗ КАК Таб2
    |;
    |///////////////////////////////////////////
    |ВЫБРАТЬ
    |	тЗапрос3.ЗаказНоменклатураНаименование,
    |	тЗапрос3.ЗаказНоменклатураАртикул,
    |	тЗапрос3.ЗаказНоменклатураКоличество,
    |	тЗапрос3.ЗаказНоменклатураКод,
    |	тЗапрос3.АналогНаименование,
    |	тЗапрос3.АналогАртикул,
    |	тЗапрос3.АналогКод,
    |	тЗапрос3.СписанныеТоварыКоличество,
    |	Таблица2.ЗаказНоменклатураНаименование КАК ЗаказНоменклатураНаименование1,
    |	Таблица2.ЗаказНоменклатураАртикул КАК ЗаказНоменклатураАртикул1,
    |	Таблица2.ЗаказНоменклатураКоличество КАК ЗаказНоменклатураКоличество1,
    |	Таблица2.ЗаказНоменклатураКод КАК ЗаказНоменклатураКод1,
    |	Таблица2.ЗаказНоменклатураСсылка,
    |	Таблица2.СписанныеТоварыКоличество КАК СписанныеТоварыКоличество1,
    |	тЗапрос3.ЗаказНоменклатураСсылка КАК ЗаказНоменклатураСсылка1
    |ИЗ
    |	тЗапрос3 КАК тЗапрос3
    |		ПОЛНОЕ СОЕДИНЕНИЕ Таблица2 КАК Таблица2
    |		ПО тЗапрос3.ЗаказНоменклатураСсылка = Таблица2.ЗаказНоменклатураСсылка";
    Запрос.УстановитьПараметр("ТЗ", тут ваша тз);
  18. TopicStarter Overlay
    MyNameNoName
    Offline

    MyNameNoName Опытный в 1С

    Регистрация:
    17 май 2013
    Сообщения:
    931
    Симпатии:
    0
    Баллы:
    26
    Плохо что опять раздвоение полей пошло...
  19. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    ну так конструкцию Выбор когда ... никто не отменял
  20. TopicStarter Overlay
    MyNameNoName
    Offline

    MyNameNoName Опытный в 1С

    Регистрация:
    17 май 2013
    Сообщения:
    931
    Симпатии:
    0
    Баллы:
    26
    Понял нужно &Таблица2

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