Чем заменить простой пребор проводок?

Новая тема
"Подскажите, как быстрее отобрать и исключить из цикла документы, в которых был зачтен аванс?

Док = СоздатьОбъект("Документ.ПоступлениеТоваров");
Док.ВыбратьПоЗначению(,ДатаДок,"Договор",Субконто2);
Пока Док.ПолучитьДокумент()=1 Цикл          
   ТекДок = Док.ТекущийДокумент();
   ****
   ТекДок.Операция.ВыбратьПроводки();
       Пока ТекДок.Операция.ПолучитьПроводку()=1 Цикл
           Если (ТекДок.Операция.Дебет.Счет = СчетПоКоду("60.6")) И
               (ТекДок.Операция.Дебет.Счет = СчетПоКоду("60.7")) И
               (СокрЛП(ТекДок.Операция.Содержание) = "Зачтен аванс") Тогда
                  Прервать;
           КонецЕсли;
       КонецЦикла;
  ***
КонецЦикла;
"
> Подскажите, как быстрее отобрать и исключить из цикла документы, в которых был зачтен аванс?
>

подробнее задачу : для чего всё это !?


мне нужно в текущем документе определить, был ли зачет аванса
Запросом не пробовали? %)
вот пытаюсь его грамотно составить...
Я бы помогла, но я в семерке ландух :)
"Во первых, в приведенном алгоритме ошибка. Такое условие:
Если (ТекДок.Операция.Дебет.Счет = СчетПоКоду("60.6")) И (ТекДок.Операция.Дебет.Счет = СчетПоКоду("60.7"))
не будет выполнено никогда. Счет дебета не может одновременно быть равен и 60.6 и 60.7.
Во вторых, я не знаю что это за счета, но предполагаю, что это какой то аналог 60.1 и 60.2, которые используются в типовой конфигурации. Поэтому, для определенности пусть:
60.6 - долги перед поставщиком
60.7 - авансы, выплаченные поставщику
Предложенный вами алгоритм можно чуть оптимизировать, избавив систему от необходимости при каждом проходе производить поиск по плану счетов счетов с нужными кодами, кроме того, система 1С (7.7, по крайней мере)при проверке комбинированного условия вычисляет все его составляющие. То есть, при каждой операции сравнения у вас проверяется и (ТекДок.Операция.Дебет.Счет = СчетПоКоду("60.6"))
и
(ТекДок.Операция.Дебет.Счет = СчетПоКоду("60.7"))
и
(СокрЛП(ТекДок.Операция.Содержание) = "Зачтен аванс")
одновременно каждый раз вне зависимости от того были ли успешны проверки первых условий.
Кроме того, в вашем алгоритме не проверяется наличие операции для анализируемого документа, а ее может и не быть если документ не проведен и в конфигураторе указано, что операцию нужно порождать только при проведении.
В связи со сказанным, модифицируем ваш алгоритм и получаем вот что:

Сч60_6=СчетПоКоду("60.6");
Сч60_7=СчетПоКоду("60.7");
СодержаниеДляПроверки="Зачтен аванс";
Опер=СоздатьОбъект("Операция");
Док = СоздатьОбъект("Документ.ПоступлениеТоваров");
Док.ВыбратьПоЗначению(,ДатаДок,"Договор",Субконто2);
Пока Док.ПолучитьДокумент()=1 Цикл          
    ВДокументеЕстьЗачетАванса=0;
    Если Опер.НайтиОперацию(Док.ТекущийДокумент())=1 Тогда
         Опер.ВыбратьПроводки();
         Пока Опер.ПолучитьПроводку()=1 Цикл
              Если Опер.Дебет.Счет=Сч60_6 Тогда
                   Если Опер.Кредит.Счет=Сч60_7 Тогда
                        Если СокрЛП(Опер.Содержание)=СодержаниеДляПроверки Тогда
                             ВДокументеЕстьЗачетАванса=1;
                             Прервать;
                        КонецЕсли;
                   КонецЕсли;
              КонецЕсли;
         КонецЦикла;
    КонецЕсли;
    Если ВДокументеЕстьЗачетАванса=1 Тогда
         ...
    Иначе
         ...
    КонецЕсли;
КонецЦикла;"
СПасибо!!!!!!!
Читают тему
(гостей: 1)

Быстрый переход