![]() |
![]() |
![]() |
|
v7: Метод "ИспользоватьСписокЭлементов" Баг или руки?) | ☑ | ||
---|---|---|---|---|
0
andrewch60
30.10.14
✎
17:26
|
добавил в форму списка номенклатуры вариант вывода только имеющегося на складе, и вроде все работает при многоуровневом справочнике, но сегодня добавил код в другую базу и на примере заметил что иногда 1на из групп(обычно 1ая в списке групп, но не всегда) отображается как элемент "???"(если зайти в нее), причем все остальные нормально! изменял количество элементов, попадающих в эту группу (поступлениями регулировал) и волшебным образом "???" появляются только если внутри 2 элемента ... Помогите разобраться в ситуации.
КОД заполняющий список: //_____________________________________________________________________________ Процедура ПоказатьЭлементы(РодительТ) сзЭлементов = СоздатьОбъект("СписокЗначений"); ТекРодитель = РодительТ; Если ТекРодитель.Выбран() = 0 Тогда ТекРодитель = ПолучитьПустоеЗначение("Справочник.Номенклатура"); КонецЕсли; //группы данного уровня надо добавить нСтр = 0; Если ТаблицаГрупп.НайтиЗначение(ТекРодитель,нСтр,"Родитель") > 0 Тогда ТаблицаГрупп.ПолучитьСтрокуПоНомеру(нСтр); Пока ТаблицаГрупп.НомерСтроки > 0 Цикл Если ТаблицаГрупп.Родитель <> ТекРодитель Тогда Прервать; КонецЕсли; сзЭлементов.ДобавитьЗначение(ТаблицаГрупп.Элемент,СокрЛП(ТаблицаГрупп.Элемент)); нСтр = нСтр + 1; Если нСтр > ТаблицаГрупп.КоличествоСтрок() Тогда Прервать; КонецЕсли; ТаблицаГрупп.ПолучитьСтрокуПоНомеру(нСтр); КонецЦикла; КонецЕсли; //элементы нСтр = 0; Если ТаблицаЭлементов.НайтиЗначение(ТекРодитель,нСтр,"Родитель") > 0 Тогда ТаблицаЭлементов.ПолучитьСтрокуПоНомеру(нСтр); Пока ТаблицаЭлементов.НомерСтроки > 0 Цикл Если ТаблицаЭлементов.Родитель <> ТекРодитель Тогда Прервать; КонецЕсли; Если ПроходитПоФильтру(ТаблицаЭлементов.Элемент) = 1 Тогда сзЭлементов.ДобавитьЗначение(ТаблицаЭлементов.Элемент,СокрЛП(ТаблицаЭлементов.Элемент)); КонецЕсли; нСтр = нСтр + 1; Если нСтр > ТаблицаЭлементов.КоличествоСтрок() Тогда Прервать; КонецЕсли; ТаблицаЭлементов.ПолучитьСтрокуПоНомеру(нСтр); КонецЦикла; КонецЕсли; УстановитьОтбор("", ""); ИспользоватьСписокЭлементов(сзЭлементов); ИерархическийСписок(,0); КонецПроцедуры //_____________________________________________________________________________ Процедура ПриВыбореРодителя(Элем) Если ВариантВыводаОстатков = 4 Тогда ПоказатьЭлементы(Элем); КонецЕсли; КонецПроцедуры |
|||
1
andrewch60
30.10.14
✎
17:28
|
//_____________________________________________________________________________
Процедура ПоказатьЭлементы(РодительТ) сзЭлементов = СоздатьОбъект("СписокЗначений"); ТекРодитель = РодительТ; Если ТекРодитель.Выбран() = 0 Тогда ТекРодитель = ПолучитьПустоеЗначение("Справочник.Номенклатура"); КонецЕсли; //группы данного уровня надо добавить нСтр = 0; Если ТаблицаГрупп.НайтиЗначение(ТекРодитель,нСтр,"Родитель") > 0 Тогда ТаблицаГрупп.ПолучитьСтрокуПоНомеру(нСтр); Пока ТаблицаГрупп.НомерСтроки > 0 Цикл Если ТаблицаГрупп.Родитель <> ТекРодитель Тогда Прервать; КонецЕсли; сзЭлементов.ДобавитьЗначение(ТаблицаГрупп.Элемент,СокрЛП(ТаблицаГрупп.Элемент)); нСтр = нСтр + 1; Если нСтр > ТаблицаГрупп.КоличествоСтрок() Тогда Прервать; КонецЕсли; ТаблицаГрупп.ПолучитьСтрокуПоНомеру(нСтр); КонецЦикла; КонецЕсли; //элементы нСтр = 0; Если ТаблицаЭлементов.НайтиЗначение(ТекРодитель,нСтр,"Родитель") > 0 Тогда ТаблицаЭлементов.ПолучитьСтрокуПоНомеру(нСтр); Пока ТаблицаЭлементов.НомерСтроки > 0 Цикл Если ТаблицаЭлементов.Родитель <> ТекРодитель Тогда Прервать; КонецЕсли; Если ПроходитПоФильтру(ТаблицаЭлементов.Элемент) = 1 Тогда сзЭлементов.ДобавитьЗначение(ТаблицаЭлементов.Элемент,СокрЛП(ТаблицаЭлементов.Элемент)); КонецЕсли; нСтр = нСтр + 1; Если нСтр > ТаблицаЭлементов.КоличествоСтрок() Тогда Прервать; КонецЕсли; ТаблицаЭлементов.ПолучитьСтрокуПоНомеру(нСтр); КонецЦикла; КонецЕсли; УстановитьОтбор("", ""); ИспользоватьСписокЭлементов(сзЭлементов); ИерархическийСписок(,0); КонецПроцедуры //_____________________________________________________________________________ Процедура ПриВыбореРодителя(Элем) Если ВариантВыводаОстатков = 4 Тогда ПоказатьЭлементы(Элем); КонецЕсли; КонецПроцедуры |
|||
2
Ёпрст
гуру
30.10.14
✎
17:32
|
||||
3
Chum
30.10.14
✎
17:32
|
Элементы с ??? это баг, давно известный.
При использовании списка значений нужно запрещать менять режим иерархии, а при смене родителя перестраивать список и обновлять содержимое. Хорошо в этом помогают прямые запросы, которые получают списки. |
|||
4
andrewch60
30.10.14
✎
17:36
|
CHum, ИерархическийСписок(,0); т.е. отключил.
Процедура ПриВыбореРодителя(Элем) Если ВариантВыводаОстатков = 4 Тогда ПоказатьЭлементы(Элем); КонецЕсли; КонецПроцедуры т е при каждом переходе между группами список перестраиваю по новой |
|||
5
Chum
30.10.14
✎
17:39
|
(4) как-то так. Сменил родителя и перестроил сразу список. Кстати, не забывай включать в список группы текущего уровня, иначе будут только элементы и не сможешь сменить родителя.
|
|||
6
andrewch60
30.10.14
✎
17:41
|
CHum, хоть бы код и картинки одним глазом посмотрел) на картинках видно, что группы отображаются, лишь в какой то редкой ситуации не хочет только 1на из всех! да и в коде даже коммент "добавляем группы тек уровня")
|
|||
7
andrewch60
30.10.14
✎
17:50
|
(2) посмотрел код, да вроде все так же ... у меня только заполнение идет при открытии Таблиц с остатками и группами, а потом из этих таблиц идет формирование спискаэлементов
|
|||
8
andrewch60
31.10.14
✎
13:33
|
(0) Решил проблему ! все было из за выполнения ИерархическийСписок(,0); при каждом заполнении списка элементов(перенес исполнение при выборе варианта заполнения остатков)... при указании первого параметра 1Ска просто стала вылетать, при клике на элемент "?", хотя без его указания все нормально было.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |