8.х Сравнение двух ТЗ

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

  1. TopicStarter Overlay
    Люсёк
    Offline

    Люсёк

    Регистрация:
    20 дек 2010
    Сообщения:
    34
    Симпатии:
    0
    Баллы:
    1
    Очень нужна помощь в написании алгоритма обхода строк двух таблиц значений. Сам алгоритм следующий: есть две таблицы значений (ТЗ1 и ТЗ2).Нужно сравнить первую строку ТЗ1 с первой строкой ТЗ2,если они равны,то вывести строку и перейти в каждой из ТЗ на следующие строки и снова сравнить.Если не равны,то сравнить эту же строку ТЗ1 со следующей строкой в ТЗ2. И так до тех пор пока не найдется совпадение. Т.е нужно одновременно идти по строкам двух ТЗ. Надеюсь описала понятна) Буду рада любому примеру и уточняющим вопросам)
  2. Dmitrij
    Offline

    Dmitrij Опытный в 1С

    Регистрация:
    6 май 2008
    Сообщения:
    844
    Симпатии:
    1
    Баллы:
    26
    В чем проблема
    Код:
    Для каждого стрТЗ1 Из ТЗ1 Цикл
    ДанныеСтрТЗ1=СтрТЗ1.Данные;
    Для Каждого СтрТЗ2 Из ТЗ2 Цикл
    ДанныеСтрТЗ2=СтрТЗ2.Данные;
    Если ДанныеСтрТЗ1=ДанныеСтрТЗ2 Тогда
    Действие с данными
    Иначе
    КонецЕсли;
    КонецЦикла;
    КонецЦикла;
    
    
  3. TopicStarter Overlay
    Люсёк
    Offline

    Люсёк

    Регистрация:
    20 дек 2010
    Сообщения:
    34
    Симпатии:
    0
    Баллы:
    1
  4. has
    Offline

    has Опытный в 1С

    Регистрация:
    18 июн 2009
    Сообщения:
    708
    Симпатии:
    0
    Баллы:
    26
    Используй индексы строк тогда. Если индекс таблицы 2 не равен индексу таблицы 1 тогда продолжить. Кстати количество строк в обоих таблицах одинакого?
  5. has
    Offline

    has Опытный в 1С

    Регистрация:
    18 июн 2009
    Сообщения:
    708
    Симпатии:
    0
    Баллы:
    26
    Опечатался, звиняйте. Индексы строк конечно.
  6. TopicStarter Overlay
    Люсёк
    Offline

    Люсёк

    Регистрация:
    20 дек 2010
    Сообщения:
    34
    Симпатии:
    0
    Баллы:
    1
    количество строк в таблицах разное.
  7. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.782
    Симпатии:
    509
    Баллы:
    204
    :)))) Если количество разное, у вас ничего не получится:). Нужно организовывать два цикла, как описано выше.
  8. UnNone
    Offline

    UnNone Опытный в 1С

    Регистрация:
    21 мар 2007
    Сообщения:
    148
    Симпатии:
    0
    Баллы:
    26
    Как-то так:
    Код:
    для каждого стрТЗ1 из ТЗ1 цикл
    Для перцикла = ТЗ1.индекс(стрТЗ1) по ТЗ2.количество()-1 цикл
    <тут сравниваем данные строк: стрТЗ1 и ТЗ2[перцикла]>
    Конеццикла;
    КонецЦикла;
    
    
    
    
    
    Этот вариант работает с учетом, что в ТЗ2 больше строк. Можно в начале делать сравнения в какой таблице строк больше и ту делать второстепенной.
  9. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.782
    Симпатии:
    509
    Баллы:
    204
    А как же тогда на сравнение оставшихся строк?
  10. has
    Offline

    has Опытный в 1С

    Регистрация:
    18 июн 2009
    Сообщения:
    708
    Симпатии:
    0
    Баллы:
    26
    Вопрос автору, зачем вобще это сравнение? Может можно другими способами обойтись.
  11. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    В ТЗ есть повторяющиеся значения? Т.е. сравниваем первые строки ТЗ, допустим они равны, переходим ко 2-м. Сравнение 2-й строки ТЗ1, надо начинать с 1-й строки ТЗ2 или со 2-й?
  12. UnNone
    Offline

    UnNone Опытный в 1С

    Регистрация:
    21 мар 2007
    Сообщения:
    148
    Симпатии:
    0
    Баллы:
    26
    Учитывая это замечание:
    надо начинать со второй.
  13. TopicStarter Overlay
    Люсёк
    Offline

    Люсёк

    Регистрация:
    20 дек 2010
    Сообщения:
    34
    Симпатии:
    0
    Баллы:
    1
    В ТЗ1 есть повторы, в ТЗ2 нет. Сравнение 2-й строки ТЗ1надо начинать со второй строки ТЗ2.
  14. UnNone
    Offline

    UnNone Опытный в 1С

    Регистрация:
    21 мар 2007
    Сообщения:
    148
    Симпатии:
    0
    Баллы:
    26
    А цель какая? Избавится от повторов в ТЗ1? Зачем тогда ее сравнивать с ТЗ2? Или необходимо вывести все строки из ТЗ1, которые есть и в ТЗ2 исключив повторы из ТЗ1? Если так, то мой пример вам так и сделает.
  15. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.782
    Симпатии:
    509
    Баллы:
    204
    Можно тогда свернуть ТЗ1, чтоб избежать повторов, и уменьшить итерации цикла. И вообще не понятно, для каких целей это делается? Может вам подскажут более тривиальный вариант?
  16. TopicStarter Overlay
    Люсёк
    Offline

    Люсёк

    Регистрация:
    20 дек 2010
    Сообщения:
    34
    Симпатии:
    0
    Баллы:
    1

    в ТЗ1 строк больше, чем в ТЗ2. Надо все строки ТЗ1 обойти один раз, а по строкам ТЗ2 можно проходить несколько раз, главное найти совпадение.
  17. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.782
    Симпатии:
    509
    Баллы:
    204
    Тогда сворачивайте ТЗ1, и делайте два цикла, это намного правильнее будет, чем сравнивать одни и те же строки.
  18. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    Не совсем понял вот это вместе:
    Допустим ТЗ1:
    1
    1
    2

    ТЗ2:
    1
    2

    Если не сравнивать ТЗ2, начиная с первой строки, то соответствия мы не найдем.
    Поясните.
  19. Itsys
    Offline

    Itsys Опытный в 1С

    Регистрация:
    3 янв 2010
    Сообщения:
    1.394
    Симпатии:
    0
    Баллы:
    26
    Дайте пример таблиц для сравнения. Может можно запросом сравнить...
  20. TopicStarter Overlay
    Люсёк
    Offline

    Люсёк

    Регистрация:
    20 дек 2010
    Сообщения:
    34
    Симпатии:
    0
    Баллы:
    1
    мне нужно вывести в отчет все начисления определенного человека за определенный период. Отчет выводится в табличный документ, в шапке которого перечислены все начисления (это ТЗ2,она такаяже как ТЗ1 только со свернутыми строками,чтобы в шапке не было повторов). Теперь под каждым начислением нужно вывести соответствующую ему сумму. В этом и заключается проблема.

    В ТЗ2 хранятся все начисления в том порядке как они идут а шапке отчета. В ТЗ1 вообще все начисления за выбранный период (если отчет за несколько месяцев,то может быть такое начисление, которое встречается во всех месяцах) Проходя по начислениям ТЗ1 и находя такое же начисление в ТЗ2 я бы находила место куда выводить сумму начисления.Если не нахожу то вывожу пустую ячейку. Вообщем по идее должно получится как в прикрепленном файле.

    Вложения:

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