1с как найти строку в динамическом списке

Установить текущую строку в Динамическом списке

Я
   kisskiss

07.10.13 – 13:10

Есть ДинамическийСписок в качестве реквизита формы.

Динамический список не имеет основной таблицы, формируется запросом.

У него есть колонка Ссылка (на элемент справочника “А”). С динамическим  связана ТаблицаФормы.

Мне нужно из открытого элемента справочника “А” перейти в ТаблицуФормы и спозиционироваться на моей Ссылке. ЭлементыФормы.ТаблицаФормы.ТекущаяСтрока = Ссылка; – не работает

   kiruha

1 – 07.10.13 – 13:27

>>Если устанавливаемое значение не является допустимым (такое значение отсутствует) для данной таблицы, то такая установка игнорируется

   lapinio

2 – 07.10.13 – 13:33

1 Вариант

ОткрытьФорму(“ФормаСписка”,Новый Структура(“ТекущаяСтрока”,Ссылка));

2 вариант

ОткрытьЗначение(Ссылка);

   kiruha

3 – 07.10.13 – 13:35

У нее динамический список

>>В качестве значений для свойств ТекущаяСтрока, ТекущийРодитель и элемента коллекции, содержащейся в свойстве ВыделенныеСтроки, используются значения ссылок на объекты, которые содержит главная таблица динамического списка. Например, СправочникСсылка.Товары. Также эти свойства могут содержать значения типа СтрокаГруппировкиДинамическогоСписка.

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

   kosts

4 – 07.10.13 – 13:39

(3) > использоваться числа, являющееся идентификаторами строки

Осталось определить эти числа по ссылке.

   kiruha

5 – 07.10.13 – 14:07

Если бы автор сообщила тип значения ЭлементыФормы.ТаблицаФормы.ТекущаяСтрока можно было бы не гадать

   kisskiss

6 – 07.10.13 – 14:12

(5) Число

   kisskiss

7 – 07.10.13 – 14:14

(4) Если бы был не ДинамическийСписок, а ДанныеФормыКоллекция, определить число (Идентификатор строки) по ссылке было бы просто, а в моей ситуации – непонятно как….

   kisskiss

8 – 07.10.13 – 14:17

(2)

1. У меня не ФормаСписка, у меня сложная форма, с кучей динамических списков

2. Совсем не то. То что ты написал, это для открытия ссылки

   kiruha

9 – 07.10.13 – 14:31

(6)

Ну и как ты собираешься числу ссылку присвоить ?

Нужно задать главную таблицу а уж к ней все остальное

   kisskiss

10 – 07.10.13 – 14:31

SOS

   kisskiss

11 – 07.10.13 – 14:33

(9) да….

это нормальная ситуация, когда ТекущаяСтрока – не ссылка, а число (число – это идентификатор строки). Главную таблицу я не могу задать, потому что у меня динамический список из нескольких таблиц собирается

   kisskiss

12 – 07.10.13 – 14:34

Единственный вопрос, это для моей Ссылки получить ее идентификатор в таблице ?

   kiruha

13 – 07.10.13 – 14:37

(11)

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

   kiruha

14 – 07.10.13 – 14:42

Кнопочка Настройка списка – открыть – ввести текст запроса в свойстве Основная таблица внести таблицу

   MSII

15 – 07.10.13 – 14:56

(12) Как ты собираешься получить идентификатор из ссылки, если идентификатор должен быть уникален, а ссылки у тебя могут повторяться? Это антинаучно! 🙂

   PiVa123

16 – 07.10.13 – 15:03

(13) КРоме кривоколенного кода – нифига не получается, я уже как-то думал по этому поводу и тоже ничего внятного не нашел.

Метод – ДанныеСтроки – доступен только на клиенте

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    Клиент=Справочники.Контрагенты.НайтиПоКоду("00-000028");
    
КонецПроцедуры

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

   kisskiss

17 – 07.10.13 – 15:07

(15) Ну в моем случае не могут.

(13) хихи, думала о чем то таком, но решили отказаться

(14) Установила программно основную таблицу, хотя изначально ее не было преднамеренно. Теперь текущая строка – не число, а ссылка и ее можно спокойно устанавливать, не получая идентификатора. Не совсем то что я хотела, пришлось отказаться от объединения запросов в динамическом списке, но зато работает.

  

PiVa123

18 – 07.10.13 – 15:10

(16) в догонку – при обновлении номериндетификатора меняется постоянно, так что это дерьмовый метод, но для списков с произвольным запросом без основной таблицы, я другого способа ПОКА не знаю.

20.01.2014

Поиск в списках

Реализовано в версии 8.3.5.1068.

Мы переработали механизм поиска в списках, сделав его более удобным и понятным.

Первое внешнее отличие заключается в том, что теперь в командной панели формы присутствуют два новых элемента: строка поиска и управление поиском:

Как и раньше, чтобы найти что-то, достаточно просто начать набирать на клавиатуре искомые слова. Курсор автоматически перейдет в строку поиска, и в ней будут отображаться набираемые вами символы.

Например, если вы хотите найти, что покупала «Шлюзовая ООО» оптом со среднего склада, то для этого просто наберите на клавиатуре: «шлюз опт сре»:

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

Очень удобной возможностью нового поиска является поиск по номеру без учёта лидирующих нулей. То есть, если вы хотите найти накладную с номером 000000011, для этого достаточно набрать на клавиатуре (или прямо в строке поиска) «11»:

Поиск по текущему значению

Мы вернули в платформу команду поиска по текущему значению. Искать по текущему значению можно было и раньше. Для этого нужно было вызвать диалог поиска и нажать Enter. Но без специальной отдельной команды многие пользователи этого не понимали.

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

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

Также удобным моментом является то, что платформа запоминает текущие значения, по которым выполнялся поиск. Они сохраняются в истории поиска, которая доступна через кнопку управления поиском. Поэтому в любой момент вы можете вернуться обратно к тем значениям поиска, которые использовали раньше:

Расширенный поиск

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

Для вызова расширенного поиска мы сделали отдельную команду на тот случай, если у вас возникнет желание использовать именно его. И кроме этого платформа использует его тогда, когда вы меняете значения, по которым уже выполнен поиск:

Выбор периода

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

Отбор списка документов по периоду можно считать одним из способов их поиска – поиск по дате. Поэтому команду установки периода мы разместили в управлении поиском.

При первом открытии диалог предлагает выбрать один или несколько месяцев текущего, предыдущего или последующего года. По нашим оценкам это наиболее часто встречающийся сценарий поиска:

Период в несколько месяцев вы можете выбрать легко. Для этого нужные месяцы надо просто выделить мышью:

Если есть необходимость, можно тут же задать произвольный период, указав дату начала и дату окончания. Или же вы можете перейти на другую страницу диалога и выбрать один из стандартных периодов, имеющихся в платформе. Для того чтобы вам было легче ориентироваться в большом количестве стандартных периодов, мы сгруппировали их по интервалам: день, неделя, декада и т.д.:

Как выглядит новый поиск в конфигураторе

Для работы с новым механизмом поиска мы добавили в форму новый элемент. Он называется Дополнение элемента формы. Раньше у формы было 5 элементов: Поле, Таблица, Кнопка, Группа и Декорация. Теперь таких элементов шесть.

Для таблиц динамических списков платформа автоматически создаёт три таких элемента: Строка поиска, Состояние просмотра и Управление поиском. Появление этих элементов в форме регулируется тремя новыми свойствами таблицы: ПоложениеСтрокиПоиска, ПоложениеСостоянияПросмотра и ПоложениеУправленияПоиском.

При желании разработчик может не использовать стандартные элементы (Дополнение элемента формы), а создать собственные. Для этого достаточно добавить в форму Дополнение элемента формы и задать ему источник. В зависимости от конкретного источника этот элемент примет тот или иной внешний вид. На данный момент источники есть только у таблицы динамического списка (три источника), но в дальнейшем мы, возможно, будем расширять эту механику:

Теги:
списки 
8.3.5 

Выделенные строки коллекции значений

Работа с коллекциями значений

Часто приходится работать с выделенными строками пользователем в различных элементах формы типа коллекции:

  • Дерево значений
  • Динамический список
  • Список значений
  • Таблица значений

Для работы выделенными строками коллекции используется свойство коллекции ВыделенныеСтроки , которое содержит массив идентификаторов выделенных строк.

Для демонстрации работы с выделенными строками, я создал в управляемой форме внешней обработки 4 вида коллекции ( см. Рис 1 )

Свойства ВыделенныеСтроки используется вместе с методом коллекции формы НайтиПоИдентификатору(<Идентификатор>) , которое получает элемент коллекции по идентификатору или с методом ДанныеСтроки(<Строка>) , который возвращает значение, содержащее данные указанной строки.

Следующий программный кок показывает как использовать свойство
ВыделенныеСтроки в различных видах коллекции

&НаКлиенте
Процедура РаботаСвыделеннымиСтроками()
	   // Коллекция  Дерево Значений
	Для Каждого ВыделеннаяСтрока Из Элементы.ДеревоЗначений.ВыделенныеСтроки Цикл
		 ЭлементДерево = Элементы.ДеревоЗначений.ДанныеСтроки(ВыделеннаяСтрока);
	 КонецЦикла;
	    // Коллекция  Динамический Список
	 Для Каждого ВыделеннаяСтрока Из Элементы.ДинамическийСписок.ВыделенныеСтроки Цикл
		 СтрокаДинамическогоСписка = Элементы.ДинамическийСписок.ДанныеСтроки(ВыделеннаяСтрока);
	 КонецЦикла;
     // Коллекция  Таблица Значений
	 Для Каждого ВыделеннаяСтрока Из Элементы.ТаблицаЗначений.ВыделенныеСтроки Цикл
	 СтрокаТаблицыЗначений = Элементы.ТаблицаЗначений.ДанныеСтроки(ВыделеннаяСтрока);
	 КонецЦикла;
    // Коллекция  Список Значений
	   Для Каждого ВыделеннаяСтрока Из Элементы.ТаблицаЗначений.СписокЗначений.ВыделенныеСтроки Цикл
		 ЭлементСпискаЗначений = СписокЗначений.НайтиПоИдентификатору(ВыделеннаяСтрока);
		 ЭлементСпискаЗначений = Элементы.СписокЗначений.ДанныеСтроки(ВыделеннаяСтрока);
	   КонецЦикла;

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

ТекущаяСтрока — свойство таблицы формы, содержащее идентификатор текущей строки. Тип свойства может различаться в зависимости от источника таблицы. Для всех источников, кроме динамического списка текущая строка 1с — это числовой идентификатор. Для динамического списка возможны несколько вариантов

  • Ссылка. Если у динамического списка задана основная таблица объектного типа данных (Справочник, Документ и т.п.);
  • СтрокаГруппировкиДинамическогоСписка. Если в динамический список добавлены группировки и текущей является именно такая строка;
  • КлючСтрокиДинамическогоСписка. Если у динамического списка не задана основная таблица и ключевые поля заданы вручную. Представляет из себя набор значений, обеспечивающих уникальный ключ для строки списка;
  • <ТипРегистра>КлючЗаписи.<ИмяРегистра>. Ключ с уникальным набором значений, позволяющий идентифицировать запись регистра. Например:
    РегистрСведенийКлючЗаписи.ДополнительныеСведения
  • Число. Используется в остальных случаях. Когда основная таблица списка и ключевые поля не заданы, либо в качестве вида ключа задан НомерСтроки;

Рассмотрим несколько способов практического применения свойства ТекущаяСтрока. С его помощью можно изменить текущую строку таблицы форы, получить строку таблицы источника и т. д.

Изменение текущей строки таблицы

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

Пример 1. Для динамического списка справочника Номенклатура, создать процедуру изменяющую текущую строку списка. В качестве новой текущей строки, использовать ссылку на элемент справочника, переданную в параметре.

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

Заметим, что если строки с указанной ссылкой не будет найдена в таблице формы, то свойство ТекущаяСтрока примет значение Неопределено. Что означает отсутствие текущей строки таблицы.

Получение строки источника

Так как свойство ТекущаяСтрока является идентификатором, его можно использовать в качестве параметра метода НайтиПоИдентификатору. При помощи данного метода можно получить строку источника таблицы формы (нельзя использовать для динамического списка). Так как строку источника можно искать и использовать не только на клиенте, но и на сервере, это дает некоторое преимущество, над свойством таблицы формы ТекущиеДанные.

Пример 2. В серверной процедуре получить данные текущей строки таблицы значений ТаблицаТоваров, которая расположена на форме.

&НаКлиенте
Процедура ПолучитьДанныеСтроки(Команда)
	
    Идентификатор = Элементы.ТаблицаТоваров.ТекущаяСтрока;
    ПолучитьДанныеСтрокиНаСервере(Идентификатор);
	
КонецПроцедуры

&НаСервере
Процедура ПолучитьДанныеСтрокиНаСервере(Идентификатор);

    СтрокаТаблицы = ТаблицаТоваров.НайтиПоИдентификатору(Идентификатор);
	
    Если Не СтрокаТаблицы = Неопределено Тогда
	//Код обрабатывающий данный полученной строки
    КонецЕсли;
	
КонецПроцедуры


Добавить комментарий