Имя: Пароль:
1C
1С v8
Отбор в управляемой форме по реквизиту
0 AZLK-TEAM
 
21.11.13
08:08
Привет всем! Возник вопрос по отбору в управляемой форме.
Имеется реквизит. Тип реквизита ПеречислениеСсылка.СтатусыЧековККМ. Нужно чтобы при открытии формыв табличной части не было строк со статусом архивный. Как это сделать? Посоветуйте что нибудь пожалуйста!)
1 Wobland
 
21.11.13
08:10
2 banco
 
21.11.13
08:15
Расширение таблицы формы для табличных частей.ОтборСтрок (Form table extension for tabular sections.RowFilter)
Расширение таблицы формы для табличных частей (Form table extension for tabular sections)
ОтборСтрок (RowFilter)
Использование:

Чтение и запись.
Описание:

Тип: Неопределено; ФиксированнаяСтруктура.
Позволяет установить отбор по значению колонки.
В качестве ключа используется имя реквизита табличной части, а в качестве значения - значение, по которому осуществляется отбор.
Чтобы снять отбор нужно присвоить свойству либо значение Неопределено, либо пустую ФиксированнаяСтруктура.

Доступность:

Тонкий клиент, веб-клиент, сервер, толстый клиент.
Изменение свойства на клиенте требует обращения к серверу.

Примечание:

При программном изменении табличной части отбор нужно переустанавливать, чтобы для измененных строк отбор отработал.
3 AZLK-TEAM
 
21.11.13
08:26
&НаКлиенте
Процедура Команда1(Команда)
    ЭО=Документы.ЧекККМ.Форма.ФормаСписка.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭО.ВидСравнения=ВидСравненияКомпоновкиДанных.Равно;
    ЭО.ЛевоеЗначение=Новый ПолеКомпоновкиДанных("Архивный");
    ЭО.ПравоеЗначение=Объект.Организация;
    ЭО.Использование=Истина;
    
    
    ПараметрыФормы = Новый Структура("ДатаНач",    НачалоДня(ТекущаяДата()));
    ОткрытьФормуМодально("Документ.ЧекККМ.Форма.ФормаСписка",ПараметрыФормы);    
    ОбновитьФорму();

КонецПроцедуры


У меня выдает ошибку. Жалуется на документы, т. к. процедура проходит на клиенте, а к документам то можно обращаться на сервере. А форма у меня находится в документах. Что делать?
4 Wobland
 
21.11.13
08:29
(3) немного сравнить с (0) из (1)
5 AZLK-TEAM
 
21.11.13
08:33
(4) не понимаю(
6 Wobland
 
21.11.13
08:37
вот это: ЭО=Форма.Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
сравнить с этим: ЭО=Документы.ЧекККМ.Форма.ФормаСписка.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
7 AZLK-TEAM
 
21.11.13
08:58
Сравнил. У меня форма то в Документах находится. А в первом случае - сразу форма пишется. В остальном тоже самое.
8 Wobland
 
21.11.13
09:00
(7) v8: Открытие формыСписка, пост 11
двоечник
9 AZLK-TEAM
 
21.11.13
09:03
Ну я знаю что Документы клиент не знает, поэтому и ошибк пишет. А что делать то? Причем тут открыть формумодально? Открываю то я её позже. Или её сначала открыть надо?
10 Wobland
 
21.11.13
09:04
можно получить, наколдовать отбор, открыть. или тебе в (1) это не видно?
11 AZLK-TEAM
 
21.11.13
09:08
&НаКлиенте
Процедура Команда1(Команда)
    Форма=ПолучитьФорму("Документ.ЧекККМ.Форма.ФормаСписка");
    ЭО=Форма.Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭО.ВидСравнения=ВидСравненияКомпоновкиДанных.Равно;
    ЭО.ЛевоеЗначение=Новый ПолеКомпоновкиДанных("Архивный");
    ЭО.ПравоеЗначение=Объект.Организация;
    ЭО.Использование=Истина;
    
    
    ПараметрыФормы = Новый Структура("ДатаНач",    НачалоДня(ТекущаяДата()));
    ОткрытьФормуМодально("Документ.ЧекККМ.Форма.ФормаСписка",ПараметрыФормы);    
    ОбновитьФорму();

КонецПроцедуры
Запускается без ошибок, но отбор не идет. Строки с реквизитом архивный, в табличной части сё равно присутствуют, а их не должно быть.
12 Wobland
 
21.11.13
09:14
а как ты так архивный с организацией сравниваешь?
13 AZLK-TEAM
 
21.11.13
09:21
&НаКлиенте
Процедура Команда1(Команда)
    Форма=ПолучитьФорму("Документ.ЧекККМ.Форма.ФормаСписка");
    ЭО=Форма.Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭО.ВидСравнения=ВидСравненияКомпоновкиДанных.Равно;
    ЭО.ЛевоеЗначение=Новый ПолеКомпоновкиДанных("Архивный");
    ЭО.ПравоеЗначение=Объект.СтатусЧекаККМ;
    ЭО.Использование=Истина;
    
    
    ПараметрыФормы = Новый Структура("ДатаНач",    НачалоДня(ТекущаяДата()));
    ОткрытьФормуМодально("Документ.ЧекККМ.Форма.ФормаСписка",ПараметрыФормы);    
    ОбновитьФорму();

КонецПроцедуры

Вот так надо?
14 Wobland
 
21.11.13
09:23
хм.. в прошлый подход хоть запустил проверить..
15 AZLK-TEAM
 
21.11.13
09:28
Выдает ошибку поле объекта не обнаружено (СтатусЧекаККМ)
Нажимаю подробно пишет вот что

{Обработка.РМКУправляемыйРежим.Форма.Форма.Форма(7715)}: Поле объекта не обнаружено (СтатусЧекаККМ)
    ЭО.ПравоеЗначение=Объект.СтатусЧекаККМ;

Почему так?
16 AZLK-TEAM
 
21.11.13
09:36
&НаКлиенте
Процедура Команда1(Команда)
    Форма=ПолучитьФорму("Документ.ЧекККМ.Форма.ФормаСписка");
    ЭО=Форма.Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭО.ВидСравнения=ВидСравненияКомпоновкиДанных.Равно;
    ЭО.ЛевоеЗначение=Перечисления.СтатусыЧековККМ.Архивный;
    ЭО.ПравоеЗначение=Перечисления.СтатусыЧековККМ.Архивный;
    ЭО.Использование=Истина;
    
    
    ПараметрыФормы = Новый Структура("ДатаНач",    НачалоДня(ТекущаяДата()));
    ОткрытьФормуМодально("Документ.ЧекККМ.Форма.ФормаСписка",ПараметрыФормы);    
    ОбновитьФорму();

КонецПроцедуры
Вот! Но теперь ругается на перечисления
17 Wobland
 
21.11.13
09:38
а прикольно А с А сравнивать?
ПредопределенноеЗначение в помощь
18 AZLK-TEAM
 
21.11.13
09:44
&НаСервере
функция перечислил()
Возврат(Перечисления.СтатусыЧековККМ.Архивный);    
    
конецфункции

&НаКлиенте
Процедура Команда1(Команда)
    Форма=ПолучитьФорму("Документ.ЧекККМ.Форма.ФормаСписка");
    ЭО=Форма.Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    Архивный=Перечислил();
    ЭО.ВидСравнения=ВидСравненияКомпоновкиДанных.Равно;
    ЭО.ЛевоеЗначение=Архивный;
    ЭО.ПравоеЗначение=Архивный;
    ЭО.Использование=Истина;

    
    ПараметрыФормы = Новый Структура("ДатаНач",    НачалоДня(ТекущаяДата()));
    ОткрытьФормуМодально("Документ.ЧекККМ.Форма.ФормаСписка",ПараметрыФормы);    
    ОбновитьФорму();

КонецПроцедуры

Что не правильно щас?
19 Wobland
 
21.11.13
09:45
да всё нормально. отбор настроен на всегда истину
20 AZLK-TEAM
 
21.11.13
09:47
Мне надо чтобы Архивный НЕВЫВОДИЛОСЬ. А оно всё равно выводится. Что не правильно?

   ЭО.ЛевоеЗначение=Архивный;
    ЭО.ПравоеЗначение=Архивный;

Это не правильно?
21 Wobland
 
21.11.13
09:48
2=2 всегда?
22 Wobland
 
21.11.13
09:49
Архивный=Ложь
правильно?
23 AZLK-TEAM
 
21.11.13
09:51
Не понимаю. Объясни поконкретнее пожалуйста.
24 AZLK-TEAM
 
21.11.13
10:17
ЭО.ВидСравнения=ВидСравненияКомпоновкиДанных.Равно;
    ЭО.ЛевоеЗначение=Архивный;
    ЭО.ПравоеЗначение=Архивный;
    ЭО.Использование=Истина;

Что обозначают эти четыре строчки?
особенно вот эти две?
    ЭО.ЛевоеЗначение=Архивный;
    ЭО.ПравоеЗначение=Архивный;
Это интервал какой то или что? Я не могу понять...в хелпе про это не написано. В интернете тоже инфы нету. помогите разобраться плиз.
25 Trucker
 
21.11.13
10:35
(24) Ты сам то, что с чем хочешь сравнить, что бы получился нужный тебе результат?
26 Wobland
 
21.11.13
10:35
сравнение - это бинарная операция. операнды как-то традиционно называют левый и правый. у тебя оба операнда одинаковы. следовательно сравнение всегда даёт истинный результат
27 Wobland
 
21.11.13
10:36
(26) *бинарная функция
28 AZLK-TEAM
 
21.11.13
10:36
Мне надо чтобы не весь список выходил в табличной части, а только те, у которых Статус не равен Архивный. Что с чем сравнить надо для этого?
29 AZLK-TEAM
 
21.11.13
10:37
То есть там где статус Архивный - их выводить не надо вообще. Я не могу понять что с чем сранить надо...
30 Trucker
 
21.11.13
10:39
(28) > у которых Статус не равен Архивный.
Вот это напиши в виде равенства, прям здесь словами.
31 Wobland
 
21.11.13
10:40
разрешаю подглядеть в (22)
32 AZLK-TEAM
 
21.11.13
10:40
Скажу словами. Надо сравнить Статус и Статус.Архивный

То есть если грубо говоря СТатус=Статус.Архивный - не выводить. Правильно мысли идут?
33 Wobland
 
21.11.13
10:41
(32) выводить только те, у которых статус<>архивный
34 olegves
 
21.11.13
10:45
(0) если это всегда так, то лучше не отбором, а произвольным запросом ДС решить, только подзапрос к ТЧ надо будет свернуть до 1 строки, иначе ДС с ума сойдет
35 Trucker
 
21.11.13
10:46
(34) Иш какой шустрый. Погоди, мы тут еще с видами сравнения не разобрались.
36 AZLK-TEAM
 
21.11.13
10:48
&НаСервере
функция перечислил()
Возврат(Перечисления.СтатусыЧековККМ.Архивный);    
    
конецфункции
  &НаСервере
функция перечислил2()
Возврат(Перечисления.СтатусыЧековККМ);    
    
конецфункции

&НаКлиенте
Процедура Команда1(Команда)
    Форма=ПолучитьФорму("Документ.ЧекККМ.Форма.ФормаСписка");
    ЭО=Форма.Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    Архивный=Перечислил();
    Архивный2=перечислил2();
    ЭО.ВидСравнения=ВидСравненияКомпоновкиДанных.НеРавно;
    ЭО.ЛевоеЗначение=Архивный;
    ЭО.ПравоеЗначение=Архивный;
    ЭО.Использование=Истина;

    
    ПараметрыФормы = Новый Структура("ДатаНач",    НачалоДня(ТекущаяДата()));
    ОткрытьФормуМодально("Документ.ЧекККМ.Форма.ФормаСписка",ПараметрыФормы);    
    ОбновитьФорму();

КонецПроцедуры
Так ведь надо? Запускается без ошибок, но когда нажимаю кнопку открытия формы - выдает ошибку

Обработка.РМКУправляемыйРежим.Форма.Форма.Форма(7722)}: Ошибка при вызове метода контекста (перечислил2)
    Архивный2=перечислил2();
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства 'ret':
    форма: Элемент
    имя: {http://v8.1c.ru/8.2/managed-application/modules}ret
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа 'ПеречислениеМенеджер.СтатусыЧековККМ'

Что не так опять?
37 Wobland
 
21.11.13
10:50
передаёшь с сервера какую-то хню
38 Wobland
 
21.11.13
10:51
сейчас ты спросишь, как надо, а я буду мерзко хихикать и ждать, когда ты сам найдёшь ответ в этой ветке ;)
39 AZLK-TEAM
 
21.11.13
10:54
ЭО.ПравоеЗначение=Перечисления.СтатусыЧековККМ;

Ну так тоже нельзя. Перечисления на клиенте не работают же. Я попробовал на сервере, тоже не получилось.
40 Wobland
 
21.11.13
10:58
какое следующее простое число после 13? вот там и читай
41 Trucker
 
21.11.13
10:59
(39) ЭО.ПравоеЗначение=Перечисления.СтатусыЧековККМ
и какое значение будет содержать ПравоеЗначение?
Выше уже подсказали как обращаться к перечислению на клиенте.
42 AZLK-TEAM
 
21.11.13
11:01
Какой пост? 17?
ПредопределенноеЗначение в помощь

Это?
43 AZLK-TEAM
 
21.11.13
11:05
&НаКлиенте
Процедура Команда1(Команда)
    Форма=ПолучитьФорму("Документ.ЧекККМ.Форма.ФормаСписка");
    ЭО=Форма.Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    Архивный=Перечислил();
    ЭО.ВидСравнения=ВидСравненияКомпоновкиДанных.НеРавно;
    ЭО.ЛевоеЗначение=Архивный;
    ЭО.ПравоеЗначение=ПредопределенноеЗначение("Перечисления.СтатусыЧековККМ");
    ЭО.Использование=Истина;

    
    ПараметрыФормы = Новый Структура("ДатаНач",    НачалоДня(ТекущаяДата()));
    ОткрытьФормуМодально("Документ.ЧекККМ.Форма.ФормаСписка",ПараметрыФормы);    
    ОбновитьФорму();

КонецПроцедуры
44 AZLK-TEAM
 
21.11.13
11:05
Так? Ну тоже ошибку выдает. Не работает

орма.Форма.Форма(7719)}: Ошибка при вызове метода контекста (ПредопределенноеЗначение)
    ЭО.ПравоеЗначение=ПредопределенноеЗначение("Перечисления.СтатусыЧековККМ");
по причине:
Предопределенное значение "Перечисления.СтатусыЧековККМ" не найдено.
45 Wobland
 
21.11.13
11:06
(44) надо боьше читать. там в единственном числе
46 Trucker
 
21.11.13
11:12
(44) Что вас заставило открыть конфигуратор?
47 AZLK-TEAM
 
21.11.13
11:14
{Обработка.РМКУправляемыйРежим.Форма.Форма.Форма(7719)}: Ошибка при вызове метода контекста (ПредопределенноеЗначение)
    ЭО.ПравоеЗначение=ПредопределенноеЗначение("Перечисление.СтатусыЧековККМ");
по причине:
Предопределенное значение "Перечисление.СтатусыЧековККМ" не найдено.
Предопределенное значение "Перечисление.СтатусыЧековККМ" не найдено.

Написал в единственном - тоже самое.
48 Wobland
 
21.11.13
11:16
а дай скрин из пофигуратора с таким перечислением
49 Wobland
 
21.11.13
11:16
тьху, плин. какой статус имеется в виду?
50 AZLK-TEAM
 
21.11.13
11:16
&НаКлиенте
Процедура Команда1(Команда)
    Форма=ПолучитьФорму("Документ.ЧекККМ.Форма.ФормаСписка");
    ЭО=Форма.Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    Архивный=Перечислил();
    ЭО.ВидСравнения=ВидСравненияКомпоновкиДанных.НеРавно;
    ЭО.ЛевоеЗначение=Архивный;
    ЭО.ПравоеЗначение=ПредопределенноеЗначение("Перечисление.СтатусыЧековККМ");
    ЭО.Использование=Истина;

    
    ПараметрыФормы = Новый Структура("ДатаНач",    НачалоДня(ТекущаяДата()));
    ОткрытьФормуМодально("Документ.ЧекККМ.Форма.ФормаСписка",ПараметрыФормы);    
    ОбновитьФорму();

КонецПроцедуры
51 AZLK-TEAM
 
21.11.13
11:17
Не работает этот код. Хотя ПеречислениЕ написал. В ед. значении
52 AZLK-TEAM
 
21.11.13
11:18
Ну Помогите пожалуйста, что не так?((((
53 Wobland
 
21.11.13
11:20
(52) какой статус?
54 AZLK-TEAM
 
21.11.13
11:23
Статус - реквизит  в табличной части.
Имеется реквизит. Тип реквизита ПеречислениеСсылка.СтатусыЧековККМ.

Вот какой статус.
55 Wobland
 
21.11.13
11:28
(54) который из статусов?
56 AZLK-TEAM
 
21.11.13
11:31
Я не понимаю вашего вопроса. Можете задать полный вопрос.
я же объяснил:
Статус - реквизит  в табличной части.
Имеется реквизит. Тип реквизита ПеречислениеСсылка.СтатусыЧековККМ.
Статус одни он может быть : архивный, пробитый, отложенный анулированный.
Мне нужно чтобы там где архивный - не выводилось в табличную часть, а выводилось только робитый, отложенный анулированный.
57 Trucker
 
21.11.13
11:35
(56) У ПеречислениеСсылка.СтатусыЧековККМ есть несколько значений, архивный, пробитый, отложенный анулированный.
Какое значение перечисления хранится в  ЭО.ПравоеЗначение= ?
58 AZLK-TEAM
 
21.11.13
11:37
никакого. Там в общем идет. Мы же должны сравнить архивный, со всеми статусами, поэтому я не указал значение. Не правильно что ли?
59 bazvan
 
21.11.13
11:38
Выбрать ВСЕ кроме архивный
60 Trucker
 
21.11.13
11:40
(58) Ну раз никакого, то и результат никакой.
61 Wobland
 
21.11.13
11:41
(58) ты должен сравнить поле в своём списке с каким-то конкретным значением
62 AZLK-TEAM
 
21.11.13
11:54
Я понял. Но как выбрать всё кроме архивный?
Перечисление.СтатусыЧековККМ.ВыбратьВсеКромеАрхивный
Так что ли?
63 Wobland
 
21.11.13
12:01
(62) не равные архивному штоль?
64 olegves
 
21.11.13
12:04
(62) тебе лучше другое занятие подискать - пофигуратор, похоже, не твое
65 George Wheels
 
21.11.13
12:10
Господа, ну хоть по кусочкам подскажите ему.

В (3) ЛевоеЗначение правильное.
66 AZLK-TEAM
 
21.11.13
12:12
&НаСервере
функция перечислил()
Возврат(Перечисления.СтатусыЧековККМ.Архивный);    
    
конецфункции

&НаКлиенте
Процедура Команда1(Команда)
    Форма=ПолучитьФорму("Документ.ЧекККМ.Форма.ФормаСписка");
    ЭО=Форма.Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    Архивный=Перечислил();
    ЭО.ВидСравнения=ВидСравненияКомпоновкиДанных.НеРавно;
    ЭО.ЛевоеЗначение=Новый ПолеКомпоновкиДанных("СтатусЧекаККМ");
    ЭО.ПравоеЗначение=Архивный;
    ЭО.Использование=Истина;

    
    ПараметрыФормы = Новый Структура("ДатаНач",    НачалоДня(ТекущаяДата()));
    ОткрытьФормуМодально("Документ.ЧекККМ.Форма.ФормаСписка",ПараметрыФормы);    
    ОбновитьФорму();

КонецПроцедуры


Вот так сделал. Работает без ошибок, но не отбирает(((
67 Wobland
 
21.11.13
12:16
это всё потому, что отбор ставишь на одной форме, а открываешь другую
68 George Wheels
 
21.11.13
12:16
(66) Подумай, какую форму открываешь? И где же у неё отбор?
69 George Wheels
 
21.11.13
12:24
СП -> Интерфейс (управляемый) -> Управляемая форма -> УправляемаяФорма
70 AZLK-TEAM
 
21.11.13
12:39
&НаСервере
функция перечислил()
Возврат(Перечисления.СтатусыЧековККМ.Архивный);    
    
конецфункции
функция перечислил1()
Возврат(НачалоДня(ТекущаяДата()));    
    
конецфункции


&НаКлиенте
Процедура Команда1(Команда)
    Форма=ПолучитьФорму("Документ.ЧекККМ.Форма.ФормаСписка");
    ЭО=Форма.Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    Архивный=Перечислил();
    ЭО.ВидСравнения=ВидСравненияКомпоновкиДанных.НеРавно;
    ЭО.ЛевоеЗначение=Новый ПолеКомпоновкиДанных("СтатусЧекаККМ");
    ЭО.ПравоеЗначение=Архивный;
    ЭО.Использование=Истина;
    
    Дата=перечислил1();
    ЭО.ВидСравнения=ВидСравненияКомпоновкиДанных.БольшеИлиРавно;
    ЭО.ЛевоеЗначение=Новый ПолеКомпоновкиДанных("Дата");
    ЭО.ПравоеЗначение=Дата;
    ЭО.Использование=Истина;
    Форма.ОткрытьМодально();

    
    //ПараметрыФормы = Новый Структура("ДатаНач",    НачалоДня(ТекущаяДата()));
    ////ОткрытьФормуМодально("Документ.ЧекККМ.Форма.ФормаСписка",ПараметрыФормы);    
    ////ОбновитьФорму();

КонецПроцедуры


Вот как должно быть! Вот так работает. А вы мне голову морочите!)))

Но всё равно спасибо! Без вас бы не справился.
71 Wobland
 
21.11.13
15:28
воспитание а-ля Шао-Линь работает всё-таки..