Имя: Пароль:
1C
1С v8
Удалить проводки в ТЧ по условию...
0 листопад
 
14.09.12
12:04
БП 2.0
Подскажите, почему не срабатывает условие: надо в ТЧ док-та удалить все проводки Дт20-Кт70, у которых СуммаБУ=0, СуммаНУ - непустая, СуммаВР - непустая.
Пишу:


Процедура УдалитьДт26Кт70(Кнопка)
   
   Счет26 = ПланыСчетов.Хозрасчетный.ОбщехозяйственныеРасходы;
   Счет70 = ПланыСчетов.Хозрасчетный.РасчетыСПерсоналомПоОплатеТруда;
   
   МассивСтрок=Новый Массив;
   ТабЧасть = ДокументОбъект.ОтражениеВУчете;
   
   Для каждого Строка Из ТабЧасть Цикл
       
       Если Строка.СчетДт=Счет26 И Строка.СчетКт=Счет70 И Строка.Сумма=0 И Строка.СуммаНУ<>0 И Строка.СуммаВР<>0 Тогда
           МассивСтрок.Добавить(Строка);
       КонецЕсли;
       
   КонецЦикла;
   
   ном = 0;
   Если МассивСтрок.Количество()=0 Тогда
       Предупреждение("Нет строк Дт26-Кт70(НУ,ВР)!!!");
   Иначе
       Для каждого Строка Из МассивСтрок Цикл
           ТабЧасть.Удалить(Строка);
           ном = ном +1;
       КонецЦикла;
       Сообщить ("Удалено " + ном + " строк, имеющих проводку Дт26-Кт70(НУ,ВР)!!!");
   КонецЕсли;
   
КонецПроцедуры


Удаляет все Дт20-Кт70
1 mikecool
 
14.09.12
12:05
используй НайтиСтроки
2 vmv
 
14.09.12
12:06
(0) не читал твой г-код, но дам совет

по условию собирают строки в мУдалемыеСтроки

потом оходят этот массив, а не коллекцию строк и удаляют вшивых из коллекции
3 mikecool
 
14.09.12
12:08
(2) это и делает НайтиСтроки, только одной строкой )
4 vmv
 
14.09.12
12:09
+ если отбор не реален в случае получения выборки запросом и кривой типизацией, то используй в переборе в условиях ЗначениеЗаполнено() и будет счастье.

да я не видел, шо он технологию блюл
5 Aprobator
 
14.09.12
12:09
(1) не взлетит
6 Aprobator
 
14.09.12
12:09
есть условие не на равенство.
7 листопад
 
14.09.12
12:09
Ничего не поняла (((
8 vmv
 
14.09.12
12:10
(3) да тема вообще дурацкая, я не буду спорить о тривиальных вещах, предполагаю, что тс просто пьян и озвучил чуш
9 mikecool
 
14.09.12
12:10
(5) варум?
10 Reset
 
14.09.12
12:10
"СуммаНУ - непустая, СуммаВР - непустая"
НайтиСтроки - без танцев с бубнами не взлетит. А танцы нафиг не нужны, поэтому просто цикл
11 Aprobator
 
14.09.12
12:10
(7) проблемы пока не видим.
12 mikecool
 
14.09.12
12:11
+9 а, блин, все не читал, как всегда )))
13 Eugene_life
 
14.09.12
12:11
(7) Перебирай Таб часть с конца и сразу удаляй в ней строки по условию. не собирай в массив вообще :)
14 salvator
 
14.09.12
12:12
(0) Удаляются именно 20/70?
15 vmv
 
14.09.12
12:12
автор похож и на Варум и на кавказскую пленицу - надо позвать товарища Сааахова для решения ее насущных проблем
16 Aprobator
 
14.09.12
12:13
сдается мне, что проблема нефига не в этой функции. Отладчик в помощь.
17 salvator
 
14.09.12
12:14
И почему опять ДокументОбъект? ЭтотОбъект надо писать, если кнопка на форме!!!
18 vmv
 
14.09.12
12:15
Если Строка.СчетДт=Счет26 И Строка.СчетКт=Счет70
И Строка.Сумма=0 И Строка.СуммаНУ<>0 И Строка.СуммаВР<>0 Тогда
           МассивСтрок.Добавить(Строка);
       КонецЕсли;


я убегаю курить когда вижу такие перлы
19 Eugene_life
 
14.09.12
12:17
(7) Примерно так:
Процедура УдалитьДт26Кт70(Кнопка)
   
   Счет26 = ПланыСчетов.Хозрасчетный.ОбщехозяйственныеРасходы;
   Счет70 = ПланыСчетов.Хозрасчетный.РасчетыСПерсоналомПоОплатеТруда;
   
   ТабЧасть = ДокументОбъект.ОтражениеВУчете;
   НомСтроки = ТабЧасть.Количество()-1;
   Пока НомСтроки >= 0 Цикл
       СтрокаТЧ = ТабЧасть[НомСтроки];
       Если СтрокаТЧ .СчетДт=Счет26 И СтрокаТЧ .СчетКт=Счет70 И СтрокаТЧ .Сумма=0 И СтрокаТЧ .СуммаНУ<>0 И СтрокаТЧ .СуммаВР<>0 Тогда
           ТабЧасть.Удалить(СтрокаТЧ);
       КонецЕсли;
   КонецЦикла;

КонецПроцедуры
20 Eugene_life
 
14.09.12
12:17
(19) + Забыл.. вот так:
НомСтроки = НомСтроки -1;
КонецЦикла;
21 vmv
 
14.09.12
12:18
(19) тебя бы повесить за такой код)
22 Eugene_life
 
14.09.12
12:18
(21) Давай свой вариант
23 Aprobator
 
14.09.12
12:19
маразм крепчал. Процедурка сама откуда вызывается? И что такое документ объект?
Если все происходит в модуле формы документа, то обращание к ТЧ идет тупо п ее миени.
24 Aprobator
 
14.09.12
12:19
обращение к ТЧ по имени.
25 Aprobator
 
14.09.12
12:20
(22) не у всех так быстро вечные циклы получаются.
26 vmv
 
14.09.12
12:21
(22) код чего - банального перебора и банального удаления?

там проблема в источниках и условии - шерифа это не волнует)
27 Eugene_life
 
14.09.12
12:22
(25) Я так давно не писал уже - вот и потерял сноровку :)
28 Aprobator
 
14.09.12
12:23
(26) в условии то где проблема?
29 Eugene_life
 
14.09.12
12:23
(26) Дай девочке образец кода как удалить строки ТЧ по нескольким условиям. Чтобы было красиво, быстро, безупречно.
30 vmv
 
14.09.12
12:24
(29) я считаю глупо забивать девочке голову всякой ерундой
31 Aprobator
 
14.09.12
12:24
код у девочки вполне нормальный, если не считать замечания по обращению к ТЧ через ДокументОбъект. ИМХО, проблема не в коде.
32 Eugene_life
 
14.09.12
12:25
(30) слив защитан
33 salvator
 
14.09.12
12:26
Процедура УдалитьДт26Кт70(Кнопка)
   
   ТабЧасть = ЭтотОбъект.ОтражениеВУчете;
   Счет26 = ПланыСчетов.Хозрасчетный.ОбщехозяйственныеРасходы;
   Счет70 = ПланыСчетов.Хозрасчетный.РасчетыСПерсоналомПоОплатеТруда;
   
  СтаршийИндексКолонок = ТабЧасть.Колонки.Количество() - 1;
Индекс = ТабЧасть.Количество() - 1;
Пока Индекс > = 0 Цикл
   Для Сч = 0 По СтаршийИндексКолонок Цикл
       Если ТабЧасть[Индекс].Сумма) = 0 ..тут добавить другие условия... Тогда
           ТабЧасть.Удалить(Индекс);
           Прервать;
       КонецЕсли;
   КонецЦикла;
   Индекс = Индекс - 1;
КонецЦикла;
   
КонецПроцедуры
34 Aprobator
 
14.09.12
12:28
(0) никогда не понимал использования ЭтотОбъект в модуле формы не для передачи контекста в общие модули. Просвети - нафиг он тут нужен?
35 Aprobator
 
14.09.12
12:29
(34) -> (33) конечно же.
36 листопад
 
14.09.12
12:29
(19) Все равно лишние проводки Дт20-Кт70 удаляются!!!
37 Aprobator
 
14.09.12
12:31
(0)
Вот тут сделай контрольку
.....
       Если Строка.СчетДт=Счет26 И Строка.СчетКт=Счет70 И Строка.Сумма=0 И Строка.СуммаНУ<>0 И Строка.СуммаВР<>0 Тогда
           МассивСтрок.Добавить(Строка);
       Иначе
Сообщить("были не удаляемые строки"); // собственно сама контролькка
       КонецЕсли;
.......
38 salvator
 
14.09.12
12:32
(34) Согласен, если в модуле формы, то тупо по имени ТЧ.
39 Aprobator
 
14.09.12
12:35
(38) Судя по ....(Кнопка) код именно в модуле формы.
40 Aprobator
 
14.09.12
12:35
БП под рукой нет. Строка.Сумма - точно сумма БП, а не какая-нибудь управленческая?
41 Eugene_life
 
14.09.12
12:37
(36) Ищи ошибку в условии. По какому-то из них у тебя всегда срабатывает удаление строки.
42 Aprobator
 
14.09.12
12:38
сейчас счастье придет )
43 листопад
 
14.09.12
12:38
(33) Написала, как Вы, только условие свое добавила:

ТабЧасть = ЭтотОбъект.ОтражениеВУчете;
   Счет26 = ПланыСчетов.Хозрасчетный.ОбщехозяйственныеРасходы;
   Счет70 = ПланыСчетов.Хозрасчетный.РасчетыСПерсоналомПоОплатеТруда;
   
   СтаршийИндексКолонок = ТабЧасть.Колонки.Количество() - 1;
   Индекс = ТабЧасть.Количество() - 1;
   Пока Индекс > = 0 Цикл
       Для Сч = 0 По СтаршийИндексКолонок Цикл
           //    Если ТабЧасть[Индекс].Сумма) = 0 ..тут добавить другие условия... Тогда
           Если ТабЧасть[Индекс].Сумма = 0 И ТабЧасть[Индекс].СуммаНУ <> 0 И ТабЧасть[Индекс].СуммаВР <> 0  Тогда
               
               ТабЧасть.Удалить(Индекс);
               Прервать;
           КонецЕсли;
       КонецЦикла;
       Индекс = Индекс - 1;
   КонецЦикла;


Выдает ошибку:

Документ.ОтражениеЗарплатыВРеглУчете.Форма.ФормаДокумента.Форма(1903,15)}: Ошибка в выражении
   Пока Индекс ><<?>> = 0 Цикл  (Проверка: Толстый клиент (обычное приложение))
44 листопад
 
14.09.12
12:39
(40) Да
45 salvator
 
14.09.12
12:39
Да что ж такое. Пробел убери между > и =
46 Aprobator
 
14.09.12
12:40
укушу счас. Грят те проверь по (37), а есть ли строки не попавшие под удаление то.
47 salvator
 
14.09.12
12:40
И вместо ТабЧасть пиши ОтражениеВУчете. И первую строчку вообще убери.
48 Aprobator
 
14.09.12
12:40
если уж отладчиком вообще лениво пользоваться то.
49 листопад
 
14.09.12
12:40
(41) Условие не меняется:

Если СтрокаТЧ .СчетДт=Счет26 И СтрокаТЧ .СчетКт=Счет70 И СтрокаТЧ .Сумма=0 И СтрокаТЧ .СуммаНУ<>0 И СтрокаТЧ .СуммаВР<>0 Тогда
50 Aprobator
 
14.09.12
12:41
(43) >= в коде пишется слитно. Но роли это не сыграет.
51 листопад
 
14.09.12
12:43
(45) Убрала пробел, теперь пишет ошибку:

Документ.ОтражениеЗарплатыВРеглУчете.Форма.ФормаДокумента.Форма(1901)}: Поле объекта не обнаружено (Колонки)
   СтаршийИндексКолонок = ТабЧасть.Колонки.Количество() - 1;
52 Aprobator
 
14.09.12
12:45
(51) вот млин. По (37) проверила? Есть попадание в Иначе?
53 листопад
 
14.09.12
14:26
(52) Да, пишет:
были не удаляемые строки
54 salvator
 
14.09.12
14:35
(53) В (19) + (20) написан перебор строк и удаление по условию. Только нужно обращаться к ТЧ напрямую по имени как она задана на форме документа.
Проверь условие, пройдись отладчиком и посмотри, что творится.
55 Aprobator
 
14.09.12
14:44
(53) следующий этап. В отладчике ставишь точку останова на КонецПроцедуры. По остановке смотришь отладчиком, что у тебя осталось в ТабЧасть.
56 Aprobator
 
14.09.12
15:07
но, ИМХО, проблема не в этой процедуре. Строки в какой момент исчезают то из ТЧ? Сразу после отработки процедуры или при записи документа?
Программист всегда исправляет последнюю ошибку.