Имя: Пароль:
1C
1С v8
8.2 УФ: развернуть строку динамического списка
,
0 Kaidend
 
06.03.12
10:08
Всем привет. Есть управляемая форма, в ней есть реквизит с типом ДинамическийСписок, он выводится на форму в элемент ТаблицаФормы. Список иерархический. Нужно по нажатию кнопки разворачивать теущую строку списка.

Как это сделать?

У таблицы формы есть метод Развернуть, но он в качестве параметра принимает число - идентификатор строки. Как получить этот идентификатор у динамического списка.

Пока не придумал ничего лучше, чем запросом заполнять дерево значений и уже его сворачивать/разворачивать, но это как-то криво.
1 Cube
 
06.03.12
10:10
Элементы.МойДинамическийСписок.ТекущаяСтрока?
2 vmv
 
06.03.12
10:10
ПолучитьИдентификатор()
3 Feanor
 
06.03.12
10:11
не получится с вероятностью 0,(9)
4 Feanor
 
06.03.12
10:12
+(3) но если получится - самому очень интересно как
5 Kaidend
 
06.03.12
10:16
(1) не, не работает.
Да и СП намекает, что тип параметра в методе Развернуть() - Число, и никакой другой.

(2) У динамического списка нет такого метода.
6 vmv
 
06.03.12
10:17
стедентам на заметку

При первых шагах работы с УФ и ДС в частности не ленитесь смотреть в конфигураторе типы данных с которым работате и оперируйте и в мозге и в коде именно типами, а не своими бредовыми понятиями. Например я пишу так

ДфСписок = Элементы.Список;   // Таблица формы

ДфТкСтрСписок = Элементы.Список.ТекущаяСтрока;

ДфТкДнСписок = Элементы.Список.ТекущиеДанные;

тогда понятно с чем ты работаешь и какков набор методов у этого нечто, а егсли городить треэтажные конструкции, то возникают глупые вопросы да и куча доступов через трочку в циклах - плохо
7 Kaidend
 
06.03.12
10:20
(6) Вы вообще о чем? Метода ПолучитьИдентификатор() нет ни у таблицы формы, ни у динамического списка.
8 vmv
 
06.03.12
10:20
(3, 4) все получиться если подумать, я даже разные списки позиционирую и разворачивают в зависимости от внешних условий, причем на клиенте.

Главное знать типы ключей динамических списков и уметь по ним находить идентфикатор - 8.2. - это просто)
9 Kaidend
 
06.03.12
10:22
(8) Ты напиши конкретно, как у тебя это "получиться", а если не знаешь - пройди в сад, пожалуйста.

Обожаю мисто-неадекватов.
10 Feanor
 
06.03.12
10:23
(9) он намекает нам, что он знает как это сделать, но нам не скажет :)
11 Kaidend
 
06.03.12
10:24
(10) Я понял :) Терпеть этого не могу, потому что с вероятность 99% автор такого совета просто делает умный вид и ничего на самом деле не знает :)
12 vmv
 
06.03.12
10:26
(7) БСП - набор общих модулей хотя бы изучите, а потом делайте заявления без аппеляций, ога.

Идентифактор принадлежит некой коллекции на формы.
Источником таблицы формы может быть:

таблиц значений - тип коллекции ДанныеФормыСтруктура
дерево значени - тип коллекции ДанныеФормыКоллекция
дин список - тип коллекции зависит от типа основной таблицы
в определениях могу быть не точен.

Суть идентифкатор строки дереве ищут в коллекции строк узла, тип сами допрете какой у нее

и т.д. - приведи в порядок мозг, неодекват)

// Получает идентификатор (метод ПолучитьИдентификатор()) строки дерева значений для заданного значения поля строки дерева.
// Используется для позиционирования курсора в иерархических списках.
//
Процедура ПолучитьИдентификаторСтрокиДереваПоЗначениюПоля(ИмяПоля, ИдентификаторСтроки, КоллекцияЭлементовДерева, КлючСтроки, ПрекратитьПоиск) Экспорт
   
   Для Каждого СтрокаДерева ИЗ КоллекцияЭлементовДерева Цикл
       
       Если ПрекратитьПоиск Тогда
           Возврат;
       КонецЕсли;
       
       Если СтрокаДерева[ИмяПоля] = КлючСтроки Тогда
           
           ИдентификаторСтроки = СтрокаДерева.ПолучитьИдентификатор();
           
           ПрекратитьПоиск = Истина;
           
           Возврат;
           
       КонецЕсли;
       
       КоллекцияЭлементов = СтрокаДерева.ПолучитьЭлементы();
       
       Если КоллекцияЭлементов.Количество() > 0 Тогда
           
           ПолучитьИдентификаторСтрокиДереваПоЗначениюПоля(ИмяПоля, ИдентификаторСтроки, КоллекцияЭлементов, КлючСтроки, ПрекратитьПоиск);
           
       КонецЕсли;
       
   КонецЦикла;
   
КонецПроцедуры
13 vmv
 
06.03.12
10:30
(11) ти просто ленив, признай это и не визжи тут как баба, читать смешно.

не удосужился разобраться с тем, что видишь на форме и что являться ключами таблици и простейшую задачу решить не можешь, самому не стыдно. Вопрос в (0) можно адекватно воспринять от девочки лет 18, но не от спеца со стажем)
14 Kaidend
 
06.03.12
10:31
(12) "дин список - тип коллекции зависит от типа основной таблицы"
Динамический список не отображается ни в какую коллекцию, это тип такой - ДинамическойСписок, который присутствует на форме на клиенте.

И ты мне будешь какие-то советы давать? :)
15 Kaidend
 
06.03.12
10:32
(13) Мог бы нахамить в ответ, но лень на глупое быдло время тратить, честно говоря. Ты уж не обижайся.
16 vmv
 
06.03.12
10:33
(14) и все же он имеет ключ(и) строки - по которым можно получить ее идентфикатор.

адекватному спецу будет досточно этой скупой фразы, чтобы понять, что делать. а больше потакать вашей лени глупо)
17 vmv
 
06.03.12
10:35
(15) а мог бы уже решить задачу, включив мозг по моим советам, но наверно не дано, какая жаль)
18 Kaidend
 
06.03.12
10:36
(16) Дурашко, ты выведи на форму динамический список, посмотри отладчиком какой тип имеет соответсвующий реквизит, посмотри в СП какие методы имеет этот тип :)

Может, тогда ты прекратишь строчить свой бред из серии "я знаю, как повернуть голову на 180 градусов" :) Хотя вряд ли, ты какой-то упорный слишком :)
19 Cube
 
06.03.12
10:37
Открыл попкорн, считаю vmv правым и болею за него :)
20 Kaidend
 
06.03.12
10:42
(19) Быдлоиды всегда в кучу собираются :)
21 Kaidend
 
06.03.12
10:43
(19) Тем более, судя по совету, данному в (1), вас с vmw объединяет одинаково низкий уровень знаний :)
22 vmv
 
06.03.12
10:46
боже, он еще и истеричка любящая развести сплетни, с кем приходиться работать.

вот уйду я на пенсию и кто будет делать нетленки - вот эти остолопы, для которых получить идентифактор строки дс архиневозможная задача)
23 Kaidend
 
06.03.12
10:49
(22) к счастью, с тобой мне работать не приходиться :)

ладно, оставлю убогих в их теплой компании :) можешь напоследок еще пару раз тявкнуть, тем более, что написать, как именно получить идентификатор строки динамического списка ты все равно не в состоянии :)
24 Feanor
 
06.03.12
10:58
(16) у меня всё же несколько иная задача: мне нужно в динамическом списке найти строку с определенным значением определенного поля. Это возможно?
25 Cube
 
06.03.12
11:18
(20) (21) (23) Вот ты дятел! Тебе говорят, так ты слушай!

На вот, покури на досуге:

&НаКлиенте
Процедура СписокПриАктивизацииСтроки(Элемент)
   
   Если Элементы.Список.Развернут(Элементы.Список.ТекущаяСтрока) Тогда
       Элементы.Список.Свернуть(Элементы.Список.ТекущаяСтрока);
   Иначе
       Элементы.Список.Развернуть(Элементы.Список.ТекущаяСтрока);
   КонецЕсли;
   
КонецПроцедуры

Это в форме списка справочника "СтруктураПредприятия" конфигурации "1С:Документооборот 8 (1.0.5.9)".

Ты не поверишь - работает...
26 Kaidend
 
06.03.12
11:23
(25) Это для дерева значений может работать, где ТекущаяСтрока имеет тип Число. Для динамического списка, выводящего в моем случае, например, справочник, где текущая строка имеет тип СправочникСсылка,  - не сработает.

Или называй конкретную форму в Документообороте, где расположен этот код.
27 Cube
 
06.03.12
11:25
(26) Чукча не читатель? Цитирую: "Это в форме списка справочника "СтруктураПредприятия"".
Код этот я добавил сам.
28 Kaidend
 
06.03.12
11:31
(27) Да, в ДО этот код работает.
Странно, я это пробовал, у меня в другой конфигурации не срабатывало.
Ладно, будем разбираться.
29 Cube
 
06.03.12
11:34
(28) Думаю, самое время тебе извиниться за (9), (11), (15), (18), (20), (21) и (23)...
30 Feanor
 
06.03.12
11:34
очень интересует ответ на (24)
31 DexterMorgan
 
06.03.12
11:39
(26)Расширение таблицы формы для динамического списка (Form table extension for dynamic list)
Свойства:

АвтоОбновление (AutoRefresh)
ВосстанавливатьТекущуюСтроку (RestoreCurrentRow)
ВыборГруппИЭлементов (ChoiceFoldersAndItems)
ОбновлениеПриИзмененииДанных (UpdateOnDataChange)
ОтображатьКорень (ShowRoot)
Период (Period)
ПериодАвтоОбновления (AutoRefreshPeriod)
РазрешитьВыборКорня (AllowRootChoice)
РодительВерхнегоУровня (TopLevelParent)

Описание:

Дополнительные свойства элемента управления ТаблицаФормы.
Расширение предоставляет возможность доступа к свойствам динамического списка.
В качестве значений для свойств ТекущаяСтрока, ТекущийРодитель и элемента коллекции, содержащейся в свойстве ВыделенныеСтроки, используются значения ссылок на объекты, которые содержит главная таблица динамического списка. Например, СправочникСсылка.Товары.
32 DexterMorgan
 
06.03.12
11:40
(26)В качестве значений для свойств ТекущаяСтрока, ТекущийРодитель и элемента коллекции, содержащейся в свойстве ВыделенныеСтроки, используются значения ссылок на объекты, которые содержит главная таблица динамического списка. Например, СправочникСсылка.Товары.
33 Cube
 
06.03.12
11:41
(30) А зачем?
34 Feanor
 
06.03.12
11:44
(33) заказчик возжелал. Смысл в том, что есть 2 связанных справочника по реквизиту, нужно при позиционировании на 1-ом автоматом находить связанный элемент во втором с учетом иерархии.
35 Feanor
 
06.03.12
11:45
+(34) сделать это с помощью динамического списка у меня не получилось
36 Cube
 
06.03.12
11:46
(34) Ну, допустим, нашел, что с ним дальше делать-то будешь?
37 Feanor
 
06.03.12
11:46
(36) выделить его нужно, а так же выделить всех его родителей, но это решается условным оформлением
38 Feanor
 
06.03.12
11:47
+(37) вся загвоздка в том, что бы развернуть ДС
39 Kaidend
 
06.03.12
11:55
Мда, действительно, код, приведенный в (25) работает. С одним условием - вид отображения списка должен быть не "иерархический список", а "дерево". Я почему-то сразу не сообразил этот момент проверить и догадался только когда посмотрел на форму в Документообороте.
40 Cube
 
06.03.12
12:00
(38) Ну дык:

   ИскомоеЗначение = ПредопределенноеЗначение("Справочник.СтруктураПредприятия.ПустаяСсылка");
   Если ВвестиЗначение(ИскомоеЗначение) Тогда
       Элементы.Список.ТекущаяСтрока = ИскомоеЗначение;
       Если Элементы.Список.Развернут(Элементы.Список.ТекущаяСтрока) Тогда
           Элементы.Список.Свернуть(Элементы.Список.ТекущаяСтрока);
       Иначе
           Элементы.Список.Развернуть(Элементы.Список.ТекущаяСтрока);
       КонецЕсли;
   КонецЕсли;
41 Cube
 
06.03.12
12:02
(39) Прочитай (29).
42 Feanor
 
06.03.12
12:07
(40) мляяя я нуб. Спасибо, работает ))
43 Feanor
 
06.03.12
12:08
+(42) работает даже без "Развернуть"
44 Kaidend
 
06.03.12
12:13
В общем, получается, что в СП не совсем точно написано:

Развернуть (Expand)
Синтаксис:
Развернуть(<ИдентификаторСтроки>, <СПодчиненными>)
Параметры:
<ИдентификаторСтроки> (обязательный)
Тип: Число. Идентификатор строки таблицы.

Тип первого параметра - не обязательно число, если таблица содержит динамический список справочника (на других объектах не проверял, но, скорее всего, должно быть то же самое), то можно передавть и ссылку на справочник. Т. е. ТекущаяСтрока. Таким образом, для динамических списков нет необходимости (и, по всей видимости, нет возможности) получать ИдентификаторСтроки.
45 Kaidend
 
06.03.12
12:13
Надо только надеяться, что со временем СП "синхронизируют" с действительным положением вещей, а не наоборот :)
46 Cube
 
06.03.12
12:14
(43) Без развернуть работает разворот только верхних уровней, если в качестве текущей строки будет узел, то подчиненные не развернуться, вроде.
47 Feanor
 
06.03.12
12:15
(46) а подчиненные и не нада - достаточно спозиционировать на нужном узле дерево.
48 Cube
 
06.03.12
12:15
(44) (45) Ты вообще читаешь, что тебе пишут или как? Перечитывай (31) и (32) до полного прозрения.
49 Kaidend
 
06.03.12
12:16
(41) А, ты хочешь, чтобы я извинился? Ни за что - во-первых, хамить первым начал не я, во-вторых, vmw так и не рассказал нам, как получить уникальный идентификатор строки динамического списка. У нормальных людей принято, когда они что-то говорят, при необходимости доказывать это, а не предлагать собеседникам найти доказательства самостоятельно.

Но тебе могу сказать спасибо.
50 Cube
 
06.03.12
12:17
(48) Так что-то я тут промазал немного...
51 Kaidend
 
06.03.12
12:18
(48) Господи, да ты прекрати ты хамить, быдлецо.
Я отлично знаю, что у справочника в динамическом списке ТекущаяСтрока имеет тип СправочникСсылка.
Ты справку к методу Развернуть() почитай - так сказано, что первый параметр должен иметь тип Число, а не "произвольный" или "число или справочникСсылка.ИмяСправочника".
52 vmv
 
06.03.12
12:20
(44) для динамических списков оперируют понятием КЛЮЧ строки по которуму ее можно позиционировать или использовать этот ключ в методах, которые требуют идентификатор строки.

Ключ строки дин. списка зависит от "главного" свойства основной таблицы дс. Например для справочника это справочник. ссиылка, для документа документ.ссылка, для регистрасведений регистрсведенийключзаписи и т.д.
53 Cube
 
06.03.12
12:22
(49) Вот и вся твоя натура... Оскорблять ты мастер, а извиняться не научили? Меня ты тоже оскорбил. И в (51) продолжаешь это упорно делать... Своё "спасибо" засунь себе сам знаешь куда. Я ответил на вопрос только потому, чтобы другие читатели нашли то, что искали, это же форум. А то придут прочитают, что ты умный, а все дураки и будут думать, что в 1С этого сделать нельзя... А, как оказалось...
54 vmv
 
06.03.12
12:23
хватит спорить, луччший медод обучения - вызывать истерику, чем больше истерики у хомячка, тем лучше он засвоит материал.

вседь в результате автор стал мудрее, просветленнее и даже богаче духовно, так к нему прикоснулся самый жестокий тролль рунета, в данный момент забаненный всюду, кроме мисты.

миста наяшка и великолепный источник знаний для юношей-истеричек
55 Kaidend
 
06.03.12
12:38
(52) Ну да. Но ты просто сравни в СП описание методов "Свернуть" и "Развернуть", и все поимешь.

(53) Ну-ну, не обижайся.

(54) Все хамишь? :) Ну ладно, раз больше ничего не умеешь...
56 Новиков
 
06.03.12
12:43
Если участники сего спора помиряться, то предлагаю им подарок к 8-му марту

+25 Гб к их дропбоксам ;)
57 Cube
 
06.03.12
12:45
(56) А ты всё плюшки раздаешь?)) А у меня нет аккаунта дропбокса))
58 Feanor
 
06.03.12
12:54
(57) думаешь, он подарит еще и акк на 8-ое марта? )))))
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан