Имя: Пароль:
1C
 
v8: Как перебрать документы в форме списка
0 vvf
 
06.10.08
10:59
Есть форма списка РеализацияТоваровУслуг. На форме есть колонка с галочками, которые можно произвольно ставить. Необходимо добавить кнопку по очистке этих галочек. Не пойму как
сделать чтобы по кнопке происходил перебор документов, которые сейчас
отображаются в форме списка?
1 ТелепатБот
 
гуру
06.10.08
10:59
2 Альберт_Уфа
 
06.10.08
11:04
(0) может так попробовать:

Для Каждого ТекСтрока из ЭлементыФормы.ТЧ Цикл
ТекСтрока.Флаг = Ложь;
КонецЦикла;
3 vvf
 
06.10.08
13:18
Написал

Для Каждого Стр из ЭлементыФормы.Список Цикл
   Стр.ФлагПечати = Истина;
КонецЦикла;

Ошибка: Итератор для значения не определен, как быть?
4 Salvador Limones
 
06.10.08
13:19
(3) Да, всё верно. Это же динамический список.
5 globalasax
 
06.10.08
13:45
Попробуй
Для Каждого Стр из ЭлементыФормы.Список.Значение Цикл
   Стр.ФлагПечати = Истина;
КонецЦикла;
6 MoneG
 
06.10.08
14:41
Ну вы чего?? Нужно не с элементом формы работать, а с элементом, содержащим коллекцию значений! А именно, с соответствующим реквизитом (реквизитом формы):

Для Каждого Стр из Список Цикл
   Стр.ФлагПечати = Истина;
КонецЦикла;
7 MoneG
 
06.10.08
14:42
поспешил..

Для Каждого Стр из ЭлементыФормы.Список.Значение Цикл
   Стр.Значение.ФлагПечати = Истина;
КонецЦикла;
8 MoneG
 
06.10.08
14:44
тьфу, блин..

Для Каждого ЭлементСписка Из Список Цикл
   ЭлементСписка.Значение.ФлагПечати = Истина;
КонецЦикла;
9 vvf
 
06.10.08
15:13
Не работает, в этом случае ругается на синтаксический контроль.
Переменная не определена (Список)

Для Каждого ЭлементСписка Из Список Цикл
   ЭлементСписка.Значение.ФлагПечати = Истина;
КонецЦикла;

Если пишу ДокументСписок - это название реквизита формы
Для Каждого ЭлементСписка Из ДокументСписок Цикл
.....
ругается опять - Итератор для значения не определен
10 MoneG
 
06.10.08
15:29
"Список" - это реквизит формы (или обработки) с типом "СписокЗначений" и он тогда содержит коллекцию. А "ЭлементыФормы.Список" - это всего лишь элемент управления на форме типа "Список".
11 Krom
 
06.10.08
15:33
(10), ты хочешь сказать, что ЭлементыФормы.Список не содержит коллекцию значений?
12 MoneG
 
06.10.08
15:40
Ну работать нужно не с элементом управления, а со списком значений
13 Дуб
 
06.10.08
15:42
(0) Стаж: 4 г. 6 мес.
Чем занимался всю дорогу?
14 MoneG
 
06.10.08
15:43
создал реквизит формы (обработки), элементу управления "привязал" данные этого реквизита и забыл про элемент управления. Пусть он там себе работает..
15 vvf
 
06.10.08
15:44
В отладчике все просмотрел, нет такого элемента с типом "СписокЗначений"
Конфигурация типовая-УТ, журнал РеализацияТоваровУслуг.
Как мне перебрать этот список?
16 Дуб
 
06.10.08
15:47
(15) запросом перебери. Дался тебе этот список..
17 MoneG
 
06.10.08
15:51
так и скажи, что это журнал вообще. я понял, что ты свою обработку не можешь сделать.. Запрос тебе в помощь
18 fillIn
 
06.10.08
15:55
> перебор документов, которые сейчас отображаются в форме списка
Т.е. только видимые строки?

Флаг - это реквизит документа РеализацияТоваровУслуг или колонка табличного поля Список?
19 vvf
 
06.10.08
15:58
> Флаг - это реквизит документа РеализацияТоваровУслуг или колонка табличного поля Список?

Это колонка табличного поля Список.
Смысл в следующем, есть галочки их надо снять по кнопке.
20 Дуб
 
06.10.08
16:10
(19) ты ещё и читать не умеешь? Запросом делай!
21 fillIn
 
06.10.08
16:18
Если это колонка табличного поля, то PgUp, PgDn - готово. Аналогично должно сработать [ЭтаФорма.]Обновить();
Если не убрались, значит Флаг связан с реквизитом документа, значит (16).
22 fillIn
 
06.10.08
16:20
Для чего Флаг-то предназначен?
23 vvf
 
06.10.08
16:26
> Для чего Флаг-то предназначен?

оператор отмечает галочками в журнале те накладные, которые ему нужно распечатать, формируется по типу реестра.
нужно сделать, чтобы эти галочки сбрасывались по кнопке.
Запросом не знаю как сделать.
24 fillIn
 
06.10.08
16:35
Обновить() не сработало?

Какие события таб.поля обрабатываются? Глянь в его свойствах.

Ради интереса, что написано в свойствах табличного поля Данные и ТипЗначения?
25 vvf
 
06.10.08
16:40
>Какие события таб.поля обрабатываются?
СписокПриВыводеСтроки
СписокПриПолученииДанных
СписокПриИзмененииФлажка

>что написано в свойствах табличного поля Данные и ТипЗначения?
Данные ДокументСписок
ТипЗначения ДокументСписок.ЗаказПокупателя

>Обновить() не сработало?
нет, потом еще нужна будет кнопка и установить все пометки, так что не решает проблему
26 fillIn
 
06.10.08
16:43
Да, главное. С чем Флаг связан? С какой-то таблицей значений, реквизитом документа или что-то еще?
Это должно быть в свойстве колонки Данные. Если там пусто, значит надо в коде обработки событий смотреть.
Доберешься до места, где эти галки хранятся, там уже и разберешься как с ними бороться.
27 fillIn
 
06.10.08
16:44
СписокПриИзмененииФлажка()   в студию
28 fillIn
 
06.10.08
16:44
если код не большой, то и остальные тоже
29 fillIn
 
06.10.08
16:46
> ТипЗначения ДокументСписок.ЗаказПокупателя
А говорил РеализацияТоваровУслуг...
30 vvf
 
06.10.08
16:49
> С чем Флаг связан?
ни с чем, просто Элемент управления Флажок. Данные - пусто.

Процедура СписокПриИзмененииФлажка(Элемент, Колонка)
   Если Колонка.Имя = "ФлагПечати" Тогда
       
       Зн = ТЗ_ДляПечати.Найти(ЭтаФорма.ЭлементыФормы.Список.ТекущаяСтрока, "Документ");
       Если Зн <> Неопределено Тогда
           ТЗ_ДляПечати.Удалить(Зн);
       Иначе
           НовСтрока = ТЗ_ДляПечати.Добавить();
           НовСтрока.Документ = ЭтаФорма.ЭлементыФормы.Список.ТекущаяСтрока;
           НовСтрока.Дата = ЭтаФорма.ЭлементыФормы.Список.ТекущаяСтрока.Дата;
       КонецЕсли;    
   КонецЕсли;
КонецПроцедуры

Процедура СписокПриПолученииДанных(Элемент, ОформленияСтрок)
   Для Каждого Стр Из ОформленияСтрок Цикл
       ЯчИзм = Стр.Ячейки.ФлагПечати;
       ЯчИзм.ОтображатьФлажок = Истина;
   КонецЦикла;
КонецПроцедуры
31 vvf
 
06.10.08
16:50
ТипЗначения ДокументСписок.ЗаказПокупателя
А говорил РеализацияТоваровУслуг...

там тоже он сделан, разницы нет никакой
32 fillIn
 
06.10.08
16:59
Что такое ТЗ_ДляПечати?
В начале модуля есть строка
Перем ТЗ_ДляПечати; ?
Или это реквизит формы? Какой тип?

Попробуй:
ТЗ_ДляПечати.Очистить();
Обновить();  // эта строка может нужна, а может и нет
33 vvf
 
06.10.08
17:07
Что такое ТЗ_ДляПечати?

ТЗ_ДляПечати - ТаблицаЗначений - реквизит на форме списка, куда записываются те документы, которые помечаются галочками, чтобы вывести в реестр

ТЗ_ДляПечати.Очистить();
мы очистим список, но не удалим галочки с формы

Попробуй:
ТЗ_ДляПечати.Очистить();
Обновить();

не помогло
34 fillIn
 
06.10.08
17:17
По идее после очистки ТЗ_ДляПечати галочки с формы должны убраться сами при отработке СписокПриВыводеСтроки()
Кстати, что там?
35 Maloc
 
06.10.08
17:20
Хороший и до конца неразрешенный вопрос.
Пока что придумано только запросом перебирать, но это очень неудобно и подчас медленно.
Никаких идей больше не появлялось?
> СписокПриВыводеСтроки()
> Кстати, что там?
это всё ерунда, отрабатывается только видимая часть списка.
36 fillIn
 
06.10.08
17:23
(35) Сколько постов и насколько внимательно Вы прочли?
Галки хранятся в реквизите формы типа ТаблицаЗначений. Что Вы собираетесь выбирать запросом?
37 Maloc
 
06.10.08
17:29
Если б это была таблица значений, тогда бы никаких проблем не было, вам не кажется?
38 vvf
 
06.10.08
17:29
>СписокПриВыводеСтроки()
>Кстати, что там?

К галочкам там нет ничего, только раскраска строк.

>Галки хранятся в реквизите формы типа ТаблицаЗначений
нет их там, это лишь поле на форме флажок
39 MoneG
 
06.10.08
17:31
Давайте, начнем сначала.. Если ТаблицаЗначений хранит галки, то как эти данные привязаны к элементу управления Список? Если же привязаны, то нужно

Процедура ОбработатьКолонкуФлага(Флаг)
Для Каждого Строка Из ТаблицаЗначений Цикл
   Строка.Флаг = Флаг;
КонецЦикла;
КонецПроцедуры

Если данные связаны, ничего обновлять не нужно. Элемент управления сам все сделает. А если не связаны.. пожалуй, стоит связать
40 Maloc
 
06.10.08
17:32
Уточню у автора - таки речь о стандартном списке документов? Т.е. о динамическом списке?

> К галочкам там нет ничего, только раскраска строк.
обращаться к содержимому списка можно, но опять же, только к видимой части объектов списка.
41 fillIn
 
06.10.08
17:38
(38) Что и ТЗ_ДляПечати никак не анализируется?
42 vvf
 
06.10.08
17:40
Уточню у автора - таки речь о стандартном списке документов? Т.е. о динамическом списке?

Да, именно такой.
43 fillIn
 
06.10.08
17:42
(38) Там должно быть что-то вроде
      Зн = ТЗ_ДляПечати.Найти(ЭтаФорма.ЭлементыФормы.Список.ТекущаяСтрока, "Документ");
       Если Зн <> Неопределено Тогда
           Стр.Ячейки.ФлагПечати = Истина;
       Иначе
           Стр.Ячейки.ФлагПечати = Ложь;
       КонецЕсли;
(Грубо приближенно)
44 ptiz
 
06.10.08
17:43
(42) Колись, какой строкой кода галочку рисуешь.
45 vvf
 
06.10.08
17:45
Что и ТЗ_ДляПечати никак не анализируется?

нет, в нее данные помещаются по галочке, чтобы напечатать реестр документов.
46 fillIn
 
06.10.08
17:45
Колись, не жалей. Дай код СписокПриВыводеСтроки().
47 vvf
 
06.10.08
17:46
>Там должно быть что-то вроде

Процедура СписокПриИзмененииФлажка(Элемент, Колонка)
   Если Колонка.Имя = "ФлагПечати" Тогда
       
       Зн = ТЗ_ДляПечати.Найти(ЭтаФорма.ЭлементыФормы.Список.ТекущаяСтрока, "Документ");
       Если Зн <> Неопределено Тогда
           ТЗ_ДляПечати.Удалить(Зн);
       Иначе
           НовСтрока = ТЗ_ДляПечати.Добавить();
           НовСтрока.Документ = ЭтаФорма.ЭлементыФормы.Список.ТекущаяСтрока;
           НовСтрока.Дата = ЭтаФорма.ЭлементыФормы.Список.ТекущаяСтрока.Дата;
       КонецЕсли;    
   КонецЕсли;
КонецПроцедуры


все верно
48 fillIn
 
06.10.08
17:48
ПриИзмененииФлажка я вижу
Я не вижу как его значение в таб. поле отображается.
Дай, говорю, СписокПриВыводеСтроки() в студию
49 vvf
 
06.10.08
17:49
Процедура СписокПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
   
   Если ЗначениеЗаполнено(ДанныеСтроки.Ссылка.ДатаОтгрузки) Тогда
   ОформлениеСтроки.ЦветФона = WebЦвета.БледноЗолотистый;
   КонецЕсли;    
   
   Если ДанныеСтроки.Ссылка.ПометкаУдаления Тогда
       //не помечаем никак
   ИначеЕсли ДанныеСтроки.Ссылка.ЗаказВыполнен Тогда
       ОформлениеСтроки.ЦветФона = WebЦвета.НейтральноЗеленый;
   ИначеЕсли ДанныеСтроки.Ссылка.ЗаказВыполненЧастично Тогда
       ОформлениеСтроки.ЦветФона = WebЦвета.БледноБирюзовый;
   КонецЕсли;    
   
   
КонецПроцедуры

как и говорил никаких галок тут нет
50 MoneG
 
06.10.08
17:49
Речь идет о ЖурналеДокументов или о самодельной форме со списком документов и колонкой галочек?
51 ptiz
 
06.10.08
17:50
(47) А ответ на (0) простой: ТЗ_ДляПечати.Очистить()
52 vvf
 
06.10.08
17:50
Я не вижу как его значение в таб. поле отображается
вот здесь
Процедура СписокПриПолученииДанных(Элемент, ОформленияСтрок)
   Для Каждого Стр Из ОформленияСтрок Цикл
       ЯчИзм = Стр.Ячейки.ФлагПечати;
       ЯчИзм.ОтображатьФлажок = Истина;
   КонецЦикла;
КонецПроцедуры
53 vvf
 
06.10.08
17:51
>Речь идет о ЖурналеДокументов или о самодельной форме со списком документов и >колонкой галочек?

самодельная форма со списком галочек

>(47) А ответ на (0) простой: ТЗ_ДляПечати.Очистить()
не верно
54 fillIn
 
06.10.08
18:02
(49) Шайтан!
(52) Здесь только говорится "Отобрази флажок в этом поле" (ЯчИзм.ОтображатьФлажок = Истина;), но не говорится какого значения
55 fillIn
 
06.10.08
18:10
Весь код модуля большой? Сколько строк?

У тебя код "ТЗ_ДляПечати.Очистить()" отрабатывает? Проверь в отладчике.

Нажми PgUp, PgDn, Сверни, разверни окно. Галки остались?
Если остались, значит он их как-то читает из ТЗ_ДляПечати.
56 MoneG
 
06.10.08
18:12
Определимся сразу - Список - реквизит Вашей формы (он по умолчанию создается при добавлении элемента управления).
Тогда:

//Поиск документов на печать:
...
СтруктураПоиска = Новый Структура;
СтруктураПоиска.Вставить("НаПечать",Истина);
//СтруктураПоиска.Вставить("ЕщеКакиеТоПоля",_Значение_);
СтрокиНаПечать = Список.НайтиСтроки(СтруктураПоиска);
...

//Сброс/установка флага:
...
ЗначениеФлага = Истина; // (Ложь)
Для Каждого Строка Из Список Цикл
   Строка.Флаг = ЗначениеФлага;
КонецЦикла;

//---------------
//Обработка флажка:
Процедура СписокПриИзмененииФлажка(Элемент, Колонка)
   //Работа со списком как с элементом управления
   ВыделенныеСтроки = ЭлементыФормы.Список.ВыделенныеСтроки;
   Для Каждого ВыделеннаяСтрока Из ВыделенныеСтроки Цикл
       Если ВыделеннаяСтрока = ЭлементыФормы.Список.ТекущаяСтрока Тогда
           Продолжить;
       КонецЕсли;        
       ВыделеннаяСтрока.Флаг = Не ВыделеннаяСтрока.Флаг;
   КонецЦикла;
КонецПроцедуры
57 fillIn
 
06.10.08
18:14
(56) Список - ОСНОВНОЙ реквизит формы, но значение нашего Флага берется не из него, а из неосновного (он там не жирный) реквизита ТЗ_ДляПечати.
58 fillIn
 
06.10.08
18:16
Задача: по кнопке вроде "Выкл. все" выключить все флаги.
59 fillIn
 
06.10.08
18:17
Листинги всех приведенных событий работают нормально. Проблема не в них
60 vvf
 
06.10.08
18:18
265 строк всего там. могу в почту выслать или аськи давайте
61 fillIn
 
06.10.08
18:22
Давай в аську : Двести шестьдесят пять 228 777
(Это я так от спам-ботов шифруюсь) :)
62 Стрелок
 
06.10.08
18:34
или я чего то не понимаю... или такая простая задача так сложно реализовывается?


вообще я смотрю что то что в 7.7. было сложно в 8  сделано легко. и наоборот
63 ptiz
 
06.10.08
18:36
(62) Автор на славу постарался: это надо суметь так всех запутать в таком вопросе.
64 vvf
 
06.10.08
18:38
это простая задача, так сложно реализуется
65 ptiz
 
06.10.08
18:59
(64) Если это динамический список, то галки должны либо храниться в самом документе, тогда колонка связана с реквизитом документа, либо рисоваться в процедурах ПриВыводеСтроки() или ПриПолученииДанных(). Пока непонятно, рисуются ли они у тебя вообще.
66 MoneG
 
06.10.08
19:01
(63) Действительно, перечитайте исходный вопрос и поймите, о чем сейчас речь...
67 fillIn
 
06.10.08
19:19
Гы!
Подвело незнание матчасти (моё незнание)...

Я-то думал, что колонки таб.поля, не связанные с данными, при каждом ПриПолученииДанных() заполняются значением по умолчанию (если их не заполнить в это событии), а они оказывается живут своей жизнью.

Значит
1. Таки очищаем ТЗ
Процедура ПометитьСписок(Кнопка)
    ТЗ_ДляПечати.Очистить();
    Обновить();
КонецПроцедуры

2.
Процедура СписокПриПолученииДанных(Элемент, ОформленияСтрок)
   Для Каждого Стр Из ОформленияСтрок Цикл
       ЯчИзм = Стр.Ячейки.ФлагПечати;
       ЯчИзм.ОтображатьФлажок = Истина;
       
       // Освежим данные флажка, чтобы он не отрывался от реальности
       Зн = ТЗ_ДляПечати.Найти(Стр.ДанныеСтроки.Ссылка, "Документ");
       ЯчИзм.Флажок = (Зн <> Неопределено);
       
   КонецЦикла;
КонецПроцедуры
68 fillIn
 
06.10.08
19:25
С включением всех флажков будет посложнее, но думаю сам справишься.
Надо просто заполнить ТЗ_ДляПечати документами из ОформленияСтрок или в соответствии с отбром списка.
69 MoneG
 
06.10.08
19:28
(67) поясните, как поможет ПометитьСписок(Кнопка), если Список и ТЗ_ДляПечати никак не связаны?
70 vvf
 
06.10.08
19:28
Спасибо! Заработало!
71 fillIn
 
06.10.08
19:33
(69) Вот в том-то и штука. На первый взгляд как будто и не связаны...
:-)
72 MoneG
 
06.10.08
19:35
так как связь-то "получается" ?
73 fillIn
 
06.10.08
19:38
см. СписокПриИзмененииФлажка
74 MoneG
 
06.10.08
19:42
СписокПриИзмененииФлажка - согласен. Все равно руками тереть как таблицу, так и галки. Зачем Обновить() ?
75 fillIn
 
06.10.08
19:48
(74) Чтобы СписокПриПолученииДанных сработала
76 Михаил Козлов
 
06.10.08
20:26
(0) Тема (как перебрать документы в списке) обсуждалась раз ...дцать.
Например, так:
пост = Новый ПостроительОтчета;
пост.ИсточникДанных = Новый ОписаниеИсточникаДанных(ДокументСписок);
Выборка = пост.Результат.Выбрать();
Пока Выборка.Следующий() Цикл
 ...
КонецЦикла;

ДокументСписок - реквизит формы типа ДокументСписок.
77 fillIn
 
06.10.08
20:36
(76) Ну да... Конечно...
на 75 постов народ мается простым перебором документов в списке
78 Immortal
 
06.10.08
20:40
"Кто ж его посадит, он же памятник"(С)
з.ы. автору читать ЖКК до просветления.
79 vvf
 
07.10.08
08:33
А теперь предстоит обратная задача, нужно пометить галочками даный список. Какие идеи?