8.х Сравнить две табличные части

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

  1. TopicStarter Overlay
    Pavel2009
    Offline

    Pavel2009 Опытный в 1С

    Регистрация:
    11 окт 2010
    Сообщения:
    183
    Симпатии:
    0
    Баллы:
    26
    Приветствую коллеги. Стлакнулся с такой задачей, Запросом отбираются ссылки на документы у которых нет выпуска (20-30 ссылок), затем эти документы, нужно сравнить с табличной частью документа и если документы найденны одна ветка цикла если нет то другая. Мыслю так - программно создать таблицу значений выгрузить в неё результат запроса, и сравнить с табличной частью документа, но не знаю как это лучше сделать:

    Код:
    ТабЗначений = Новый ТаблицаЗначений;
    ТабЗначений.Колонки.Добавить("Ссылка");
    
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ЗаказПокупателяТовары.Ссылка КАК ДокПоКоторомуНеВесьВыпуск,
    | ЗаказПокупателяТовары.Номенклатура,
    | ЗаказПокупателяТовары.Количество
    |ИЗ
    | Документ.ЗаказПокупателя.Товары КАК ЗаказПокупателяТовары
    |  ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ВыпускПродукции.Обороты КАК ВыпускПродукцииОбороты
    |  ПО ЗаказПокупателяТовары.Ссылка = ВыпускПродукцииОбороты.Заказ
    |ГДЕ
    | ЗаказПокупателяТовары.Количество - ЕСТЬNULL(ВыпускПродукцииОбороты.КоличествоОборот, 0) > 0
    | И ЗаказПокупателяТовары.Ссылка.ВидОперации = &ВидОперации";
    Запрос.УстановитьПараметр("ВидОперации",Перечисления.ВидыОперацийЗаказПокупателя.Переработка);
    //Запрос.УстановитьПараметр("Организация",Справочники.Организации.НайтиПоНаименованию("ООО Точинвест цинк"));
    
    
    Результат = Запрос.Выполнить();
    
    Выборка = Результат.Выбрать();
    
    
    Пока Выборка.Следующий() Цикл
    
    ТабЗначений.ЗаполнитьЗначения(Выборка.ДокПоКоторомуНеВесьВыпуск,"Ссылка");
    
    КонецЦикла;
    ТабличнаяЧастьДокумента = Источник.Продукция; // Документ - Отчет производства за смену, Таб часть продукция 
    // далее не знаю как сравнить
    
    
    
  2. Неназываемый
    Offline

    Неназываемый Опытный в 1С Команда форума

    Регистрация:
    2 фев 2007
    Сообщения:
    507
    Симпатии:
    7
    Баллы:
    29
    А задача так и не описана. Какова цель?
  3. TopicStarter Overlay
    Pavel2009
    Offline

    Pavel2009 Опытный в 1С

    Регистрация:
    11 окт 2010
    Сообщения:
    183
    Симпатии:
    0
    Баллы:
    26
    Задача такова, получаем из запроса ссылки на документы заказы покупателй, ищем их в табичной части документа, и если в табличной части документа, найдены совпадения документов из запроса (в табличной части документа уже есть ссылка на документы заказа), тогда уходим на ветку алгоритма который создает Спецификацию 1 для номенклатуры в документе, если совпадений не найденно то создается спецификация 2.
  4. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    что значит сравнить? можно в принципе построить пакетный запрос в котором 1пакет - ваш запрос (результат во временную помещаем), 2 пакет - обЪединяем временую таблицу с табличной частью и смотрим результат (поле какое нибудь отличное сделать в двух таблицах и смотреть, если в строке и поле1 и поле2 заполнены - то полное совпадение, иначе не совпало, вот по этому условию и ветвить алгоритм дальше...
  5. Неназываемый
    Offline

    Неназываемый Опытный в 1С Команда форума

    Регистрация:
    2 фев 2007
    Сообщения:
    507
    Симпатии:
    7
    Баллы:
    29
    Ох...
    Почему люди вместо того что бы сказать что они хотят получить в результате, рассказывают о том как они бы это реализовали :unsure:
    Ну да ладно.

    Начнем с того что запрос кривоват.
    Ваш запрос отберет гораздо больше чем должен по вашей идее. Мало того что вы не сгруппировали по заказу, так еще левое соединение описали только по одному реквизиту, забыв о номенклатуре.

    Идем дальше.
    Допустим мы выбрали те документы по которым нет выпуска. Что нужно сравнивать с чем? Я конечно догадываюсь что у вас УПП, но Ванга во мне умерла уже давно. А так как вы не назвали ваших истинных намерений, ответа у меня нет.
  6. Неназываемый
    Offline

    Неназываемый Опытный в 1С Команда форума

    Регистрация:
    2 фев 2007
    Сообщения:
    507
    Симпатии:
    7
    Баллы:
    29
    Если вопрос только в сравнении двух ТЧ, то вот шаблон от индусских друзей:
    Код:
    Для Каждого СтрТЧ1 из ТЧ1 Цикл
    Для Каждого СтрТЧ2 из ТЧ2 Цикл
    Если СтрТЧ1.ИмяКолонки = СтрТЧ2.ИмяКолонки Тогда
    Сообщить("Ура мы нашли совпадение!");
    КонецЕсли;
    КонецЦикла;
    КонецЦикла;
  7. st88
    Offline

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

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

    Неназываемый Опытный в 1С Команда форума

    Регистрация:
    2 фев 2007
    Сообщения:
    507
    Симпатии:
    7
    Баллы:
    29
    Поэтому и написано "от индусских друзей" B)

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