Top.Mail.Ru

Уникальность строк динамического списка

Раньше динамический список строился с отслеживанием уникальности строк по одной основной колонке. Сейчас с версии 8.3.14 можно отслеживать уникальность по нескольким полям. 

Для этого в ПоляКлюча присваиваем фиксированный массив с указанием нужных полей 

В поле ВидКлюча присваиваем ВидКлючаДинамическогоСписка.КлючСтроки 

И очищаем поле ОсновнаяТаблица. Если ОсновнаяТаблица заполнено, то параметр ПоляКлюча игнорируется. 

При этом нужно проследить, чтобы результат заполнения полей, указанных в качестве ключевых в ПоляКлюча не были равны Неопределено или null — это важно. 

Пример

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

Для успешного решения данного вопроса делаем следующее: при добавлении колонки Ячейка, включаемой в ключевое поле — необходимо добиться, чтобы не было результатов «Неопределено» и null

Исходные данные

СписокНоменклатуры — реквизит формы, динамический список 

Элементы.СписокНоменклатуры — соответствующий элемент формы 

Объект.ПодобраннаяНоменклатура — реквизит формы таблицы подобранной номенклатуры

// БСП стандартная функция  
СвойстваСписка = ОбщегоНазначения.СтруктураСвойствДинамическогоСписка(); 
// Правим текст запроса, добавляя колонки Ячейка и ОстатокВЯчейке 
ТекстЗапроса = ТекстЗапросаСОстаткамиПоЯчейкам(СписокНоменклатуры.ТекстЗапроса); 
  
СвойстваСписка.ТекстЗапроса = ТекстЗапроса; 
СвойстваСписка.ОсновнаяТаблица = СписокНоменклатуры.ОсновнаяТаблица; 
СвойстваСписка.ДинамическоеСчитываниеДанных = Истина; 
// БСП стандартная функция 
ОбщегоНазначения.УстановитьСвойстваДинамическогоСписка(Элементы.СписокНоменклатуры, СвойстваСписка);
  
// создаем фиксированный массив с перечислением ключевых колонок и присваиваем его ПоляКлюча 
МассивПолейКлюча = Новый Массив; 
МассивПолейКлюча.Добавить("НоменклатураСсылка"); 
МассивПолейКлюча.Добавить("Ячейка"); 
ПоляКлюча = Новый ФиксированныйМассив(МассивПолейКлюча); 
СписокНоменклатуры.ПоляКлюча = ПоляКлюча; 
// Вид ключа присваиваем КлючСтроки.  
СписокНоменклатуры.ВидКлюча = ВидКлючаДинамическогоСписка.КлючСтроки; 
// Обнуляем основную таблицу, иначе ПоляКлюча не отработают 
СписокНоменклатуры.ОсновнаяТаблица = ""; 
 
// далее создаем программно новые элементы формы для отображения двух дополнительных колонок 
НовыйЭлемент = Элементы.Добавить("СписокНоменклатурыЯчейка", Тип("ПолеФормы"), Элементы.СписокНоменклатуры); 
НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;       
НовыйЭлемент.ПутьКДанным = "СписокНоменклатуры.Ячейка"; 
  
НовыйЭлемент = Элементы.Добавить("СписокНоменклатурыКоличествоЯчейки", Тип("ПолеФормы"), Элементы.СписокНоменклатуры); 
НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;       
НовыйЭлемент.ПутьКДанным = "СписокНоменклатуры.ОстатокВЯчейке"; 
// Присвоим наименование колонке остатка в ячейке 
НовыйЭлемент.Заголовок = "Остаток"; 

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

Comments

So empty here ... leave a comment!

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

Sidebar