как перенести группы в справочниках в 1С 7.7 используя список значений

  • Автор темы Автор темы sergeyji
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.
S

sergeyji

У меня справочник в 1С77 иерархический.Когда заношу с помощью определеннного фильтра элементы справочника в сисок значений и использую "использовать список элементов" для формы списка то когда пытаюсь использовать "иерархический список" в форме появляются какие-то несуществующие в справочнике строки.Что не пытался делать -все равно появляются.Сталкивался ли кто-нибудь с этим.Кто может знает как это устранить?
 
Ясен пень будет куча проблем и элементов с восклицательным значком красного значения!!!!!!
Перед использованием иерархического списка (как я понял) тебе надо ИспользоватьСписокЭлементов("") а потом вся морковь ..... тоесть надо вернуть в первоначальное состояние а то не может понять что за борода в списке !!!!!!! :unsure:
 
не получается
я вставил код
ИспользоватьСписокЭлементов("");
иерархическийсписок(1,1);
все равно тоже самое появляются пустые элементы
к тому же при переходе к иерархическому списку нужно сохранить фильтр как это в совокупности сделать
 
А этот спраовчник не подчиненный???? а то получается что да подчиненный!!!
 
Привожу код того что я делаю справочник не подчиненный
процедура иерарх()
ИспользоватьСписокЭлементов("");
иерархическийсписок(1,1);


ИспользоватьСписокЭлементов(Список);
конецпроцедуры
Процедура приоткрытии()
иерархическийсписок(0,1);
Список=создатьОбъект("СписокЗначений");
Буфер = СоздатьОбъект("Справочник.фио");
Буфер1 = СоздатьОбъект("Справочник.фио");
// ИерархическийСписок(1,1);
// отбираем только те элементы, которые могут отображаться в текущем списке
Буфер.ИспользоватьРодителя(ИспользоватьРодителя());
Буфер.ВключатьПодчиненные(0);
Буфер.ВыбратьЭлементы();
Пока Буфер.ПолучитьЭлемент() = 1 Цикл
// если буфер.этогруппа()=1 тогда
Список.ДобавитьЗначение(Буфер.текущийэлемент());
// сообщить(список.текущаястрока());

буфер1.использоватьродителя(буфер);
Буфер1.ВыбратьЭлементы();
Пока Буфер1.ПолучитьЭлемент() = 1 Цикл
если буфер1.этогруппа()=0 тогда
если буфер1.родитель=буфер.текущийэлемент() тогда
// // отбираем только те элементы, которые удовлетворяют заданному признаку
Если (найти(Буфер1.документ.документоснование.видвыплаты,"ппенд")>0) Тогда
Список.ДобавитьЗначение(Буфер1.текущийэлемент());

КонецЕсли;
КонецЕсли;
КонецЕсли;
//КонецЕсли;
КонецЦикла;
//КонецЕсли;
КонецЦикла;

ИспользоватьСписокЭлементов(Список);
КонецПроцедуры

В форме списка я сделал кнопку и запускаю процедуру иерарх.Эффект -те же красные вопросительные знаки
переменную список я объявляю в начале модуля тут нету
 
Во первых - скольки уровневый у тебя справочник? а то судя по коду он у тебя может одни и те-же элементы несколько раз выбирать

буфер1.использоватьродителя(буфер); - Это как ? мож таки Буфер.ТекущийЭлемент()
 
Справочник 2-х уровневый.Элементы в список значений заносятся нормально - я проверял через сообщить()
И группы заносятся при этом коде и дочерние элементы.Глюк состоит в том ,что при переходе в режим иерархический список появляется уже перетертое выше.Если режим неиерархического списка то все нормально показывает.Вот сделай какой-нибудь маленький 2-уровневый справочник и проверь тему.
 
Налей мне - я зестрелюсь! :) Где такой код надыбал??????
Код:
Процедура ПриОткрытии()
ИерархическийСписок(0,1); 
Список=СоздатьОбъект("СписокЗначений");
Буфер = СоздатьОбъект("Справочник.фио");
Буфер.ВыбратьЭлементы();
Пока Буфер.ПолучитьЭлемент()=1 Цикл
Если Буфер.ЭтоГруппа()=0 Тогда
Если Найти(Буфер.Документ.ДокументОснование.ВидВыплаты,"ппенд")>0 Тогда
Список.ДобавитьЗначение(Буфер.ТекущийЭлемент());
Если Список.НайтиЗначение(Буфер.ТекущийЭлемент().Родитель)=0 Тогда
Список.ДобавитьЗначение(Буфер.ТекущийЭлемент().Родитель);
КонецЕсли;
КонецЕсли;
КонецЕсли;	
КонецЦикла; 
ИспользоватьСписокЭлементов(Список);
КонецПроцедуры
Вот только я непойму начерта тебе это ?????? :blink:
да вот еще так или иначе у тебя будут проблемы со списком!!!!
доработай этот код!!! он не совершенен!!!
:blink:
 
Я этот код получил экспериментально,были и другие варианты но тогда не все элементы заносились в список значений ак так если в режиме без иерархии нормально показывает форма то есть все чисто все красиво то почему в режиме иерархии это теряется.Беда 1С в том что не видно как происходит это механизм.это от нас закрыто.Это явно глюк................

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

если текущийэлемент().этогруппа()=1 тогда
буфер1.использоватьродителя(текущийэлемент());
Буфер1.ВыбратьЭлементы();
Пока Буфер1.ПолучитьЭлемент() = 1 Цикл
если буфер1.этогруппа()=0 тогда
// // отбираем только те элементы, которые удовлетворяют заданному признаку
Если (найти(Буфер1.документ.документоснование.видвыплаты,"ппенд")>0) Тогда
Список.ДобавитьЗначение(Буфер1.текущийэлемент());
сообщить(буфер1.текущийэлемент());
КонецЕсли;
КонецЕсли;
//КонецЕсли;
//КонецЕсли;
КонецЦикла;
//КонецЕсли;
//КонецЦикла;

ИспользоватьСписокЭлементов(Список);


иначе
буфер1.использоватьродителя(текущийэлемент().родитель);
Буфер1.ВыбратьЭлементы();
Пока Буфер1.ПолучитьЭлемент() = 1 Цикл
если буфер1.этогруппа()=0 тогда
// // отбираем только те элементы, которые удовлетворяют заданному признаку
Если (найти(Буфер1.документ.документоснование.видвыплаты,"ппенд")>0) Тогда
Список.ДобавитьЗначение(Буфер1.текущийэлемент());
сообщить(буфер1.текущийэлемент());
КонецЕсли;
КонецЕсли;
//КонецЕсли;
//КонецЕсли;
КонецЦикла;
//КонецЕсли;
//КонецЦикла;

ИспользоватьСписокЭлементов(Список);




конецесли;

при повторном нажатии кнопки я повесил код как при открытии
Тогда все нормально.
Вообще без иерархии.
Например можно сначала показать только группы а потом нажать кнопочку.Вот если бы этот код можно было повесить на значок иерархический список.а так этот значок надо вообще убирать.
 
Все чики пуки!!!! не получится убрать????? ставь при открытии ИерархическийСписок(0,0) ... :( сам не пробовал не знаю!!!!
 
Когда ставишь иерахический список(0,0) значок исчезает а вот если бы на него повесить этот код ,я пробовал так
Процедура ПриСменеИерархии(ф)
если ф=1 тогда
присменеиерархии(0);


иначе
тот код где кнопка
КонецЕсли;
//КонецЦикла;

все дело в том что при смене иерархии (1)
то же самое что иерархичемский список(1)
КонецПроцедуры
 
Ну и как продвигаешся в этом вопросе? или уже кинул и решил написать другое чет??? :)
 
Я решил оставить вариант с кнопкой и без значка иерахический список такой интерфейс хоть не совсем 1с -овский
но зато рабочий.Программа которая я внедряю-это депонирование выплат из кассы.этих выплат несколько видов-зарплата,стиппендия,кая-то премия и т.д.справочник фио-это справочник депонентов.группы-это депонированные лица.они подразделяются на уже получившие деньги,еще не получившие,деньги перечислены в бюджет и .д..Эффектней было бы как в 1с-щелкнул на крестик и группа раскрылась .если у кого-то= может у тебя есть желание над этим поработать-ты мне и так помог решить вопрос то я остановлюсь на том че есть-нада внедрять программу.спасибо Вар.привет.sergeyji.
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!