8.х Сравниваем ТЗ и удаляем не похожее (УТ 8.1)

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

  1. TopicStarter Overlay
    Сергей Ленский
    Offline

    Сергей Ленский Опытный в 1С

    Регистрация:
    17 окт 2017
    Сообщения:
    51
    Симпатии:
    0
    Баллы:
    26
    Всем привет!

    Друзья, вошел в полный ступор.
    Есть 2 идентичных ТЗ (Т и Т1). Как я хочу что бы работало. Берем 1 таблицу (она основная) и каждую запись из Т (только документ ДогрузкаКонтрагенту) сравниваем с Т1 (РеализацияТоваровУслуг) . Делаем полный проход по Т1 и если в Т1 нет документа РеализацияТоваровУслуг с таким же контрагентом как в ДогрузкаКонтрагенту, то удаляем его.
    Что не так. Подскажите, помогите кодом...
    Код:
    УдалитьДок = Новый Массив;
        Для Каждого Стр1 из Т Цикл
            Догр = "ДокументСсылка.ДогрузкаКонтрагенту";
            КА1 = Стр1.Контрагент;
            ТД1 = Стр1.Док;
           
            Если ТипЗнч(ТД1) = Тип(Догр) Тогда
           
            Для Каждого Стр2 из Т1 Цикл
                Реал = "ДокументСсылка.РеализацияТоваровУслуг";
              
                КА2 = Стр2.Контрагент;
                ТД2 = Стр2.Док;
                 
                    Если ТипЗнч(ТД2) = Тип(Реал) Тогда  
                        Если КА1 = КА2 Тогда          
                                Прервать;            
                            Иначе                       
                                УдалитьДок.Добавить(Стр1); 
                                Прервать;                  
                        КонецЕсли;
                    Иначе                                  
                        УдалитьДок.Добавить(Стр1);        
                        Прервать;                         
                    КонецЕсли;
            КонецЦикла;
            КонецЕсли;
        КонецЦикла;
       
        Если УдалитьДок.Количество() > 0 тогда
            Для Каждого Стр12 из УдалитьДок Цикл
                Т.Удалить(Стр12);
            КонецЦикла;
        КонецЕсли;
    Заранее спасибо...
  2. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.126
    Симпатии:
    953
    Баллы:
    204
    все не так. запросом делается все.
  3. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.543
    Симпатии:
    343
    Баллы:
    104
    Написанный код не будет выполнять того, что описано в задании. Оценивается только первый документ из второй таблицы.

    Чтобы заработало необходимо переписать код. НАПРИМЕР так (вариантов решения больше одного). Существующее условие внутри второго цикла убрать. Добавить перед вторым циклом переменную, скажем "КонтрагентНайден". Не забыть инициализировать ее. Внутри второго цикла написать условие, о том, что если тип документа нужный нам и при этом контрагент также соответствует контрагенту из строки первой таблицы, то присвоить созданной переменной "КонтрагентНайден" значение Истина (также на этом этапе можно прервать выполнение этого цикла). Поле окончания второго цикла (но все еще внутри первого) оценить состояние переменной КонтрагентНайден и принять решение нужно ли удалять строки с данным контрагентом. Если да, то каким либо образом запомнить данного контрагента (например добавив его в список или массив).
    После завершения внешнего (первого) цикла, необходимо будет еще раз пройтись по всем строкам первой таблицы, и если контрагент присутствует в созданном списке, то удалить соответствующую строку.

    Замечания:
    1) В этом повторном цикле обход первой таблицы делать от конца к началу.
    2) Буквы бесплатные, не ленись дать переменным осмысленные имена. Кроме того первый цикл: Стр1 из Т, второй цикл Стр2 из Т1. Ну где логика, как в коде в этой куче ориентироваться? какая стр из какой таблицы? Ну назови однотипно, чтобы было Стр1 из Т1 и Стр2 из Т2. И сразу будет понятно со строками какой ТЗ идет работа.
    3) Не плоди без необходимости лишние переменные. Которые к тому же только ухудшают читаемость кода. Догр = "ДокументСсылка.ДогрузкаКонтрагенту", КА1 = Стр1.Контрагент, ТД1 = Стр1.Док и т.д. - к чему это все?
    Сергей Ленский нравится это.

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