Имя: Пароль:
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
но, ИМХО, проблема не в этой процедуре. Строки в какой момент исчезают то из ТЧ? Сразу после отработки процедуры или при записи документа?
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn