Имя: Пароль:
1C
1C 7.7
v7: Отобрать строки тз по счетам
0 famnam
 
13.05.13
09:32
Здравствуйте! С 7 опыта почти нет, но вот надо переноску написать. нужно  в таблице значений оставить только строки со счетам 26 и 91, с учетом иерархии конечно. как правильно написать условие?

//выгрузим табчасть в тз и оставим только строки со счетами 26 и 91
Счет26 = СоздатьОбъект("Счет.Основной");
Счет26.НайтиПоКоду("26");

Счет91 = СоздатьОбъект("Счет.Основной");
Счет91.НайтиПоКоду("91");

ТабличнаяЧасть = СоздатьОбъект("ТаблицаЗначений");

Источник.ВыгрузитьТабличнуюЧасть(ТабличнаяЧасть);

ТабличнаяЧасть.ВыбратьСтроки();
Пока ТабличнаяЧасть.ПолучитьСтроку()=1 Цикл
   
   Пока (ТабличнаяЧасть.КоррСчет.ПринадлежитГруппе(счет26)=0) или (ТабличнаяЧасть.КоррСчет.ПринадлежитГруппе(счет91)=0) и (ТабличнаяЧасть.НомерСтроки<>0) Цикл
       ТабличнаяЧасть.УдалитьСтроку();
   КонецЦикла;
КонецЦикла;


условие ТабличнаяЧасть.КоррСчет.ПринадлежитГруппе(счет26) не срабатывает
1 Ёпрст
 
гуру
13.05.13
09:38
(0)
Счет91 = СчетПоКоду("91");
Счет26 = СчетПоКоду("26");
//ну или в твоём коде:
Счет91 = СоздатьОбъект("Счет.Основной");
Счет91.НайтиПоКоду("91");
Счет91 = Счет91.ТекущийСчет();

Для к = -ТабличнаяЧасть.КоличествоСтрок() по -1 Цикл
  ТабличнаяЧасть.ПолучитьСтрокуПоНомеру(-к);

   Если(ТабличнаяЧасть.КоррСчет.ПринадлежитГруппе(счет26)=0) или (ТабличнаяЧасть.КоррСчет.ПринадлежитГруппе(счет91)=0) и (ТабличнаяЧасть.НомерСтроки<>0) Цикл
       ТабличнаяЧасть.УдалитьСтроку(-к);
   КонецЕсли;
КонецЦикла;
2 Ёпрст
 
гуру
13.05.13
09:39
Если(ТабличнаяЧасть.КоррСчет.ПринадлежитГруппе(счет26)=0) или (ТабличнаяЧасть.КоррСчет.ПринадлежитГруппе(счет91)=0) Тогда
       ТабличнаяЧасть.УдалитьСтроку(-к);
   КонецЕсли;
3 famnam
 
13.05.13
09:51
(1) Вау! Спасибо! очень выручили.
только вопрос по ПринадлежитГруппе. След.выражение не срабатывает для строк с КоррСчет = 26 счету. Получается можно только для аналитических счетов использовать?

       Если(ТабличнаяЧасть.КоррСчет.ПринадлежитГруппе(счет26)=1) Тогда
           Сообщить("26");
       КонецЕсли;
4 Ёпрст
 
гуру
13.05.13
09:53
(3) для любых счетов.. ты оставь в коде только это:
Счет91 = СчетПоКоду("91");
Счет26 = СчетПоКоду("26");
5 Chum
 
13.05.13
09:54
Добавь условие:
и (какой-тосчет = счет26)
6 Ёпрст
 
гуру
13.05.13
09:55
Или через текущийсчет надо делать .. не помню, в общем, пробуй сам
7 Ёпрст
 
гуру
13.05.13
09:56
А ну да, у тебя ошибка в коде:
Если(ТабличнаяЧасть.КоррСчет.ПринадлежитГруппе(счет26)=0) !!!!!И!!!!!!!(ТабличнаяЧасть.КоррСчет.ПринадлежитГруппе(счет91)=0) Тогда
       ТабличнаяЧасть.УдалитьСтроку(-к);
   КонецЕсли;
8 famnam
 
13.05.13
10:36
всем спасибо!
вот результат:


   Счет91 = СчетПоКоду("91");
   Счет26 = СчетПоКоду("26");

   ТабличнаяЧасть = СоздатьОбъект("ТаблицаЗначений");

   ВыбАвансОтчет.ВыгрузитьТабличнуюЧасть(ТабличнаяЧасть);
   
   Для к = -ТабличнаяЧасть.КоличествоСтрок() по -1 Цикл
       ТабличнаяЧасть.ПолучитьСтрокуПоНомеру(-к);
     
       Если  (ТабличнаяЧасть.КоррСчет.ПринадлежитГруппе(Счет26)=1) или (ТабличнаяЧасть.КоррСчет.ПринадлежитГруппе(Счет91)=1) или (ТабличнаяЧасть.КоррСчет = Счет26) или (ТабличнаяЧасть.КоррСчет = Счет91) Тогда
           ТабличнаяЧасть.УдалитьСтроку(-к);
       КонецЕсли;
   КонецЦикла;
9 Ёпрст
 
гуру
13.05.13
10:42
(8)
так ты из ТЗ убираешь все строки, если счет принадлежит 26 или 91, а тебе надо их оставить..
10 famnam
 
13.05.13
10:45
ах да! спасибо)))