|
Удалить проводки в ТЧ по условию... | ☑ | ||
---|---|---|---|---|
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
|
но, ИМХО, проблема не в этой процедуре. Строки в какой момент исчезают то из ТЧ? Сразу после отработки процедуры или при записи документа?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |