Имя: Пароль:
1C
 
Работа с флажками в ТЗ на форме
0 alikgam_3
 
29.03.11
10:21
На форме лежит ТЗ ТаблНакл. Первая колонка флажок. Вторая расходные накладные. Хочу при нажатии флажка подсчитывать суммы уже отмеченных расходных накладных. А у меня ТаблНакл[к][0] всегда ложь.
Помогите, пожалуйста, разобраться, что я не так делаю.

Процедура ТаблНаклПриИзмененииФлажка(Элемент, Колонка)
   сумма=0;    
   Для к=0 По ТаблНакл.Количество()-1 Цикл  
       если ТаблНакл[к][0]=истина тогда
           сумма=сумма+ТаблНакл.расхнакл.сумма;
       конецЕсли;    
   КонецЦикла;
КонецПроцедуры
1 dimoff
 
29.03.11
10:22
Какая религия мешает обраттиться к колонкке по имени?
2 Defender aka LINN
 
29.03.11
10:26
(0) Страшно представить, какими нетривиальными способами автор способен принимать пищу...
3 vicof
 
29.03.11
10:27
если ТаблНакл[к][0]=истина - нельзя так писать, нужно
если ТаблНакл[к][0] тогда
4 vicof
 
29.03.11
10:28
"сумма=сумма+ТаблНакл.расхнакл.сумма;"
и вот это что такое?
5 alikgam_3
 
29.03.11
10:29
Это так?
Тоже не выходит

Процедура ТаблНаклПриИзмененииФлажка(Элемент, Колонка)
   сумма=0;    
   Для к=0 По ТаблНакл.Количество()-1 Цикл  
       если ТаблНакл[к].флаг=истина тогда
           сумма=сумма+ТаблНакл[к].расхнакл.сумма;
       конецЕсли;    
   КонецЦикла;
КонецПроцедуры
6 dimoff
 
29.03.11
10:30
(3) Какая религия запрещает писать ТаблНакл[к][0]=истина?
7 alikgam_3
 
29.03.11
10:30
(2) начинающего каждый обидеть может ;)
8 dimoff
 
29.03.11
10:31
А что в колонке "Флаг" табличного поля указано в свойстве "Данные"?
9 kosts
 
29.03.11
10:31
Процедура ТаблНаклПриИзмененииФлажка(Элемент, Колонка)
   сумма=0;    
   Для каждого т По ТаблНакл Цикл  
       если т.Флажек1 тогда
           сумма=сумма + т.расхнакл.сумма;
       конецЕсли;    
   КонецЦикла;
КонецПроцедуры
10 Defender aka LINN
 
29.03.11
10:32
(3) Кто запретил?
11 dimoff
 
29.03.11
10:32
И проверь чтобы флажок имел двва состояния а не три, в противном случае его тип будет число а не булево
12 alikgam_3
 
29.03.11
10:33
(8) флаг
13 Ненавижу 1С
 
гуру
29.03.11
10:33
отлядчик что говорит?
14 alikgam_3
 
29.03.11
10:33
(9) сейчас попробую
15 Ненавижу 1С
 
гуру
29.03.11
10:34
(12) а ничего должно быть, должны быть данные флажка
16 dimoff
 
29.03.11
10:35
(12) Посмотри ТЗ отладчике, будут ли проставлены в нем флажки, потому как ничего неправильного в твоем коде не вижу9кроме того что он неоптимальный, но это не суть)
17 dimoff
 
29.03.11
10:35
(15) Точно
18 dimoff
 
29.03.11
10:36
Данные должны быть пустыми, Флаг должно быть написано в поле Данные флажка
19 vicof
 
29.03.11
10:40
(6) и (10), погорячился. Не то, чтобы нельзя, но ТаблНакл[к].флаг уже содержит Истина. Зачем сравнивать Истину и Истину, когда можно обойтись одним действием? По глазам режет.
20 Ненавижу 1С
 
гуру
29.03.11
10:48
(19) да ладно, вот это режет:

Если ЭлементыФормы.ФлажокДоступностиКонтрагента.ЗначениеФлажка=Истина Тогда
ЭлементыФормы.Конрагент.Доступность = Истина;
Иначе
ЭлементыФормы.Конрагент.Доступность = Ложь;
КонецЕсли;
21 alikgam_3
 
29.03.11
10:50
(18) совет помог, но теперь пока не кликнешь по ячейке с флажком там пусто, а должен быть пустой квадратик, как раньше.
Может надо и в этом коде что поменять
Процедура ТабличноеПоле1ПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
   ОформлениеСтроки.ячейки.флаг.отображатьфлажок=истина;
   ОформлениеСтроки.ячейки.флаг.отображатьтекст=ложь;
КонецПроцедуры
22 Defender aka LINN
 
29.03.11
10:52
(19) А обход таблицы тебе глаза не режет, значит? :)
23 vicof
 
29.03.11
10:56
(22) режет, но меньше)
24 alikgam_3
 
29.03.11
10:57
(22) можно и без обхода. Но тогда у меня возникал вопрос, как понять в какой строке я только что поменял значение флажка
25 Ненавижу 1С
 
гуру
29.03.11
11:00
(24) а зачем?
26 alikgam_3
 
29.03.11
11:05
задача посчитать сумму отмеченных накладных. Или каждый раз при смене состояния любого флажка пробегать по всей таблицу считать отмеченные или при смене состояния флажка добавлять или вычитать к сумме соотв-ю накладную
27 dimoff
 
29.03.11
11:05
(21) Если я правильно понля о чем речь, то в свойствах колонки установить Редактирвоание "Непосредственно", не думаю что надо что-то в ПриВвыводеСтроки делать.
28 dimoff
 
29.03.11
11:06
(24) "Но тогда у меня возникал вопрос, как понять в какой строке я только что поменял значение флажка"

Элемент.ТекущиеДанные

Просто минусуй или плюсуй сумму в зависимости от значения флажка.

Ещё как вариант посмотри методы ТЗ
Скопировать
НайтиСтроки и
Итог

тогда не обязательно знать в какой строке поменял
29 alikgam_3
 
29.03.11
11:07
(27) точно
30 Defender aka LINN
 
29.03.11
11:07
(24) В текущей. Если ты, конечно, не Дэвид Блейн.
31 dimoff
 
29.03.11
11:10
Весь код будет выглядеть так

СуммаОтмеченныхСтрок = ТЗ.Скопировать(
ТЗ.НайтиСтроки(Новый Структура("Флаг", Истина)), "Сумма").Итог("Сумма")
32 kosts
 
29.03.11
12:14
(31) А если таблица большая, зачем создавать тормоза

Перем Сумма;

Процедура ТабличноеПоле1ПриИзмененииФлажка(Элемент, Колонка)
   
   Если Колонка = ЭлементыФормы.ТабличноеПоле1.Колонки.Флажек1 Тогда
       т = ЭлементыФормы.ТабличноеПоле1.ТекущиеДанные;
       Сумма = Сумма + ?(т.Флажек1, т.расхнакл.сумма, - т.расхнакл.сумма);
   КонецЕсли;
   
КонецПроцедуры

Сумма = 0;
33 dimoff
 
29.03.11
12:20
(32) Ну и что ты нового написал? Это описано в 28
34 kosts
 
29.03.11
12:34
(33) Не говорю что новое, говорю, что не нужно как в (31)
Далее просто показал как бы сделал я.
35 dimoff
 
29.03.11
12:34
Ок
36 hhhh
 
29.03.11
12:49
(34) всё-таки это ненадежно. У тебя программист получится как сапер, достаточно чуть-чуть где-нибудь ошибиться и вся сумма слетит к едрени фене. Лучше каждый раз пересчитать, дешево и сердито. Но конечно сумма - это должна быть колонка в таблице, а не лазить каждый раз в расходную накладную. То есть

Сумма = Сумма + т.сумма;
37 Mitriy
 
29.03.11
12:51
до ста постов дотянем?
38 alikgam
 
29.03.11
16:51
Всем спасибо. Думаю, что по данному вопросу непоняток у меня не осталось