Имя: Пароль:
1C
 
Как сделать Отбор периодических реквизитов справочника?
0 mirvel
 
27.08.10
12:42
Как известно что периодическим реквезитам нельзя использовать командты ВыбратьЭлементыПоРеквезиту или УстановитьОбор (галочки отбор и сортировка не доступны)
Как выйти из ситуации?
МОжет есть какая нибудь хорошая компонента (dll) для работы со справочниками....(вроде в 1cpp, 7plus, таких функций не замечал)
1 ДенисЧ
 
27.08.10
12:43
ТП и нет проблем..
2 mirvel
 
27.08.10
12:45
тП - это что такое? ТЗ, СЗ...меня не устраивают...а ТП??
3 mirvel
 
27.08.10
12:55
Перебирать весь справочник и закидывать в Список, займет больше времени чем стандартная функция ВыбратьЭлементыПоРЕк..... поэтому не хочеться использоватьСписокЭлементов
4 mirvel
 
27.08.10
12:56
Какие есть другие варианты?
5 mirvel
 
27.08.10
13:02
+
6 Тьма
 
27.08.10
13:04
Пиши прямой запрос к 1SCONST
7 ДенисЧ
 
27.08.10
13:04
(2) ТабличноеПоле из 1с++
8 mirvel
 
27.08.10
13:16
(7) 1CPP_Classes.als, 1C++.als, 1C++_Add.als, 1CPP_Classes.als просмотрел....но что-то не вижу функций отбора...
(6) через dbf чтоли?
9 mirvel
 
27.08.10
23:12
тема затухла....
10 ДенисЧ
 
27.08.10
23:13
(8) Используй поставщикДанных...
11 mirvel
 
27.08.10
23:20
(10).....да ну....что-то пахло, но не совсем убедительно было....дайка попробую....поставщикданных говоришь....
он управляет списком в форме?...или вообще всем справочником вне формы списка?...я так задал этот вопрос по ходу....покамись еще не подрубил  ее и не прочитал описание функции....
12 ДенисЧ
 
27.08.10
23:21
он управляет данными, которые будут показываться в ТП...
13 mirvel
 
27.08.10
23:28
эх,щас бы проверил....но удаленка что-то не работает...думаю завтро проверю...Спасибо Денис.....Я так понимаю ТабличноеПоле это на подобие ТЗ и СЗ? и не имеет формы диалога? или что-то я путаю? и на самом ли деле будет быстрее делать отбор через ТП, чем через Цикл, а затем ИспользоватьСписок?
14 ДенисЧ
 
27.08.10
23:30
(13) тп - это элеменгт диалога. Отдельно не существует.
А быстрее - это как запрос напишешь
15 mirvel
 
27.08.10
23:36
Элемент диалога? да ну...а как его закинуть*? Программно видимо только да?
16 mirvel
 
27.08.10
23:40
ни в одной из этих описаний не нашел ТП в чистом виде...1CPP_Classes.als, 1C++.als, 1C++_Add.als, 1CPP_Classes.als
в последнем описании есть классы_ДемоТП...но там только Форма.ДГС, форма.ПКС, Форма.формаспискасправочника....
Где рыть?
17 mirvel
 
27.08.10
23:44
ТТабличноеПОлесНастройками?
18 mirvel
 
28.08.10
00:11
ИндексированнаяТаблица?
19 zak555
 
28.08.10
00:12
стоп

а если сначала использовать метод ИспользоватьДату() ???
20 zak555
 
28.08.10
00:12
всё равно не будет искать 67
21 zak555
 
28.08.10
00:12
?
22 mirvel
 
28.08.10
00:13
Думаю не проканает....будет крякать неправильный реквезит....
23 mirvel
 
28.08.10
00:19
(19) как и ожидалось...не работает...
24 mirvel
 
28.08.10
00:20
блин где-то видел я этого "поставщикаданных"....чтот не могу найти
25 zak555
 
28.08.10
00:25
да

нельзя сделать, чтоб Сортировка с "Периодическим" сочетались =(
26 mirvel
 
28.08.10
00:26
оФорма = СоздатьОбъект("Форма");
 оФорма.УстановитьФорму(Форма);
 тпПечатьТоваров = оФорма.СоздатьЭлементУправления("ТабличноеПоле",
27 mirvel
 
28.08.10
00:32
блин запарился ждать помощи...может мне поможет http://openconf.1cpp.ru/beta/artbear/1cpp_classes.rar, решил скачать и посмотреть...
28 mirvel
 
28.08.10
00:34
главное чтобы этот ТП, помог мне решить мой ТАСК
29 Cthulhu
 
28.08.10
01:48
30 mirvel
 
28.08.10
08:50
подрубил поставщикаданных...через пример...пример в виде обработки...поменял справочник контрагенты на интересующий меня другой справочник, вроде бы все работает, но только в обработке....
А теперь вопрос как возвратить элемент? допустим в документ? заменить форму списка справочника этой обработкой?
31 ДенисЧ
 
28.08.10
08:54
(40) ПриначалеВыбора()
открытьФорму()


В обработке - ВыполнитьВыбор()

В документе ОбработкаПодбора()
32 mirvel
 
28.08.10
09:04
Хорошо....
В доке пропишу
Процедура ПриначалеВыбора() //хотя приначалевыборазначения еще есть процедура...
ОткрытьФорму("Обработка.СпрТовары);
КонецПРоцедуры


а в обработке?
Дописать
Процедура ВыполнитьВыбор()
КонецПроцедуры
33 mirvel
 
28.08.10
09:06
что-то не клеется...где то я что то не понимаю.....как получить результат обработки? т.е. получить выбранный элемент из обработки? найти его опять же в справочнике?
я полагаю результатом должен быть сам элемент?
34 mirvel
 
28.08.10
09:08
читаю описание ТП...по http://www.1cpp.ru/docum/icpp/html/TableField.html#id3... в правильном направлении движусь?
35 ДенисЧ
 
28.08.10
09:10
(33) я ж написал ВыполнитьВыбор

Форма.ВыполнитьВыбор(<?>);
Form.MakeChoice(<?>);
Синтаксис:
Форма.ВыполнитьВыбор(<Знач>)
Назначение:
Осуществляет выбор в форме, открытой для подбора или выбора значения (аналогично интерактивному двойному клику в подборе).
Параметры:
<Знач> - значение, которое выбирается в форме, открытой для подбора или выбора значения.
Замечание:
Доступ к методу возможен только в контексте Модуля формы через атрибут Форма.
36 mirvel
 
28.08.10
09:27
Вот я туплююю....
ДЕнис...
объясни на пальцах....
у меня есть допустим диалог с типом "справочник.товары" на форме1 куда надо вставить выбранное значение и форма2 сама обработка....
в форме 1 к диалогу я креплю процедуру: форма.ВыполнитьВыбор("Обработка.Форма2")...
короче страшно туплю.....
плиз..хелп
37 ДенисЧ
 
28.08.10
09:29
ойблин..

ОбработкаВыбора() лепится в ту форму, из котрой должен придти ответ.
38 mirvel
 
28.08.10
09:38
в форму из которой должен прийти ответ (обработка поставщика данных)
Процедура ОбработкаВыбора()
   
   Форма.ВыполнитьВыбор(контекстзначение);

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


а в форму в диалог куда должен возвратить значение
перем контекстзначение;
//*******************************************
Процедура Подбор()
ОткрытьПодбор("Отчет.Новый1",,контекстзначение)    ;

КонецПроцедуры
ни хрена не понял......
39 ДенисЧ
 
28.08.10
09:40
F ngthm допиши процедуру ОбработкаПодбора() и удивись...
40 mirvel
 
28.08.10
09:49
влииин или у меня обработка неправильная.....и ли у меня мозги неправильные...грешу на последнее.....
Процедура ОбработкаПодбора()
Сообщить(контекстзначение);
КонецПроцедуры
дописал следующее.....
не фига....открывается форма обработки....а я не могу выбрать значения.... при двойном нажатии мыши она либо редактируется, либо открывается сама форма элемента.....
не могу удивиться....покамись...
41 mirvel
 
28.08.10
10:55
последний шаг вроде остался...а денис не выдержал издевательства и свалил...
42 viktor_vv
 
28.08.10
11:12
Можешь попроще попробовать. Прямым запросом получаешь список элементов по своим условиям, а потом ИспользоватьСписокЭлементов() в стандартной форме списка. И дальше стандартно работаешь со справочником.

СЗ = СоздатьОбъект("СписокЗначений") ;
ЗапросСКЛ.ВыполнитьИнструкцию(ТекстЗапроса,СЗ) ;
ИспользоватьСписокЭлементов(СЗ) ;
43 mirvel
 
28.08.10
11:17
(42) в принципе вариант через запрос...(на много быстрее будет чем перебор?)....а вообще мне Табличное Поле очень понравилось...много функций...Как раз, то что мне нужно....главное теперь ее внедрить..
44 viktor_vv
 
28.08.10
11:18
Намного быстрее будет.
45 mirvel
 
28.08.10
11:24
(44) выполнитьИнструкцию ВК?
46 viktor_vv
 
28.08.10
11:25
(43) Если тебе только отбор нужен, то на мой взгляд, то ТП несколько излишне будет, слишком много телодвижений. Для журнала документов со множественным отбором ТП самое то.
ВыполнитьИнструкцию это 1С++.
47 viktor_vv
 
28.08.10
11:27
ODBCRecordSet .
48 mirvel
 
28.08.10
11:33
(46) в точку попал....как раз для этих и целей нужен тП....., все те функции которые внедрены в обработку ТП, как раз и нужны...всякие отбор, фильтры, и т.д. и т.п.
49 mirvel
 
28.08.10
11:36
(46) чувствую для файлового варианта не подойдет... или я ошибаюсь?
50 viktor_vv
 
28.08.10
11:41
Для файлового варианта подойдет, только запрос надо писать по другому и там  кажется не работает виртуальное значение $ПоследнееЗначение для периодических реквизитов. Надо самому написать. Для файловой не пробовал.
51 mirvel
 
28.08.10
11:44
select
$Номенклатура.descr as Наименование,
$Номенклатура.Цена as Цена
from $Справочник.Номенклатура as Номенклатура
where Номенклатура.цена >0

думааешь подойдет?
мне последнее значение не надо! только те где цена есть...
52 viktor_vv
 
28.08.10
11:46
(48) Ты кажется не совсем правильно понимаешь. ТП в чистом виде служит для отображения данных, а фильтры и отборы накладываются на источник данных. Это тогда ищи готовые классы для справочников, на http://www.rikcenter.ru/solutions.php например, но там для SQL.
53 mirvel
 
28.08.10
11:48
(52)....не я все понял... просто я скачал готовую обработку с ТП....Подрубаю нужный мне справочник и красота....вот только не могу его сейчас использовать в доках и так далее...потому что эту обработку не могу привязать к доку!
54 viktor_vv
 
28.08.10
11:49
Цена периодическая ? $ПоследнееЗначение это аналог Получить(НаДату) для периодических реквизитов. Я ж говорю для получения периодического реквизита в файловой я тебе так сразу не скажу как получить.
55 viktor_vv
 
28.08.10
11:50
Так тебе для справочника надо или для доков, ты как-то перепрыгиваешь быстро.
56 mirvel
 
28.08.10
11:51
Смотри у меня есть справочник номенклатура...которую я использую для подбора в доках.....(ну допустим в табличной части выбираю номенклатуру и должен открыться не стандартная форма списка справочника, а обработка с ТП)...
57 mirvel
 
28.08.10
11:55
(54)....а че номенклатура.цена....в запросе не проканает? ей тоже типа.получить(датадок) нужен да? опять же в тупиковую ситуацию попадаю...вся проблема из-за этого и началась...
58 viktor_vv
 
28.08.10
12:05
Если периодическая не проканает. Ты бы еще немного почитал про хранение периодических реквизитов. (42) я предложил для простоты. Чтобы не мучится с ТП. А вот как там делать выбор не знаю.
59 viktor_vv
 
28.08.10
12:11
Могу тольк предположить, что надо смотреть в сторону события ТП Выбор() и там уже Форма.ВыполнитьВыбор()
, вместо того что там прописано.
60 mirvel
 
28.08.10
12:12
(58) спасибо за точно расширил мой узкий кругозор!!!....
а если допустим у меня был бы скульный вариант, то как выглядил бы мой код? так?
Запрос=СоздатьОбъект("Запрос");
Запрос.УстБД(сервер);
   
СЗ = СоздатьОбъект("СписокЗначений") ;

ТекстЗапроса="
|select
|$Номенклатура.descr as Наименование,
|$Номенклатура.цена as Наименование,
|from $Справочник.Номенклатура as Номенклатура
|where $Номенклатура.цена>0"


Запрос.ВыполнитьИнструкцию(ТекстЗапроса,СЗ) ;
ИспользоватьСписокЭлементов(СЗ) ;
61 mirvel
 
28.08.10
12:12
:)
62 mirvel
 
28.08.10
12:13
(59) смотрел на Выбор()....что-т не связка не получается
63 viktor_vv
 
28.08.10
12:22
ТекстЗапроса="
|select
|Номенклатура.id as [Номенклатура $Справочник.Номенклатура]
|
|from $Справочник.Номенклатура as Номенклатура
|where $ПоследнееЗначение.Номенклатура.Цена(Номенклатура.id,GetDate())>0"

Примерно так.
64 viktor_vv
 
28.08.10
12:34
Там еще с типами данных надо будет смотреть при сравнении. ПоследнееЗначение вернет строку.
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn