Уникальность строк динамического списка
Раньше динамический список строился с отслеживанием уникальности строк по одной основной колонке. Сейчас с версии 8.3.14 можно отслеживать уникальность по нескольким полям.
Для этого в ПоляКлюча присваиваем фиксированный массив с указанием нужных полей
В поле ВидКлюча присваиваем ВидКлючаДинамическогоСписка.КлючСтроки
И очищаем поле ОсновнаяТаблица. Если ОсновнаяТаблица заполнено, то параметр ПоляКлюча игнорируется.
При этом нужно проследить, чтобы результат заполнения полей, указанных в качестве ключевых в ПоляКлюча не были равны Неопределено или null — это важно.
Contents
Пример
форма подбора номенклатуры — исходная форма только подбирает номенклатуру, нужно добавить размещение номенклатуры в ячейках хранения. При простом добавлении поля Ячейка в запрос динамического списка — при хранении одного и того же товара в разных ячейках возникает ошибка: повторение ключевых полей и список не строится.
Для успешного решения данного вопроса делаем следующее: при добавлении колонки Ячейка, включаемой в ключевое поле — необходимо добиться, чтобы не было результатов «Неопределено» и null.
Исходные данные
СписокНоменклатуры — реквизит формы, динамический список
Элементы.СписокНоменклатуры — соответствующий элемент формы
Объект.ПодобраннаяНоменклатура — реквизит формы таблицы подобранной номенклатуры
// БСП стандартная функция
СвойстваСписка = ОбщегоНазначения.СтруктураСвойствДинамическогоСписка();
// Правим текст запроса, добавляя колонки Ячейка и ОстатокВЯчейке
ТекстЗапроса = ТекстЗапросаСОстаткамиПоЯчейкам(СписокНоменклатуры.ТекстЗапроса);
СвойстваСписка.ТекстЗапроса = ТекстЗапроса;
СвойстваСписка.ОсновнаяТаблица = СписокНоменклатуры.ОсновнаяТаблица;
СвойстваСписка.ДинамическоеСчитываниеДанных = Истина;
// БСП стандартная функция
ОбщегоНазначения.УстановитьСвойстваДинамическогоСписка(Элементы.СписокНоменклатуры, СвойстваСписка);
// создаем фиксированный массив с перечислением ключевых колонок и присваиваем его ПоляКлюча
МассивПолейКлюча = Новый Массив;
МассивПолейКлюча.Добавить("НоменклатураСсылка");
МассивПолейКлюча.Добавить("Ячейка");
ПоляКлюча = Новый ФиксированныйМассив(МассивПолейКлюча);
СписокНоменклатуры.ПоляКлюча = ПоляКлюча;
// Вид ключа присваиваем КлючСтроки.
СписокНоменклатуры.ВидКлюча = ВидКлючаДинамическогоСписка.КлючСтроки;
// Обнуляем основную таблицу, иначе ПоляКлюча не отработают
СписокНоменклатуры.ОсновнаяТаблица = "";
// далее создаем программно новые элементы формы для отображения двух дополнительных колонок
НовыйЭлемент = Элементы.Добавить("СписокНоменклатурыЯчейка", Тип("ПолеФормы"), Элементы.СписокНоменклатуры);
НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
НовыйЭлемент.ПутьКДанным = "СписокНоменклатуры.Ячейка";
НовыйЭлемент = Элементы.Добавить("СписокНоменклатурыКоличествоЯчейки", Тип("ПолеФормы"), Элементы.СписокНоменклатуры);
НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
НовыйЭлемент.ПутьКДанным = "СписокНоменклатуры.ОстатокВЯчейке";
// Присвоим наименование колонке остатка в ячейке
НовыйЭлемент.Заголовок = "Остаток";
В результате получаем динамический список с возможностью представления одного и того же товара в разных ячейках
Comments
So empty here ... leave a comment!