Форум на Kuban.ru (http://forums.kuban.ru/)
-   Территория 1С (http://forums.kuban.ru/f1040/)
-   -   можно ли определить событие перехода на 2 уровня вверх в справочнике (http://forums.kuban.ru/f1040/mozhno_li_opredelit-_sobytie_perehoda_na_2_urovnya_vverh_v_spravochnike-4348857.html)

LivingStar 14.06.2013 06:35

можно ли определить событие перехода на 2 уровня вверх в справочнике
 
Перебирается в цикле справочник.
Если в подгруппе А были группы (папки) а потом элементы,
то после перебора их, родитель группы Б находящийся в одном каталоге с родителем группы А, должен смениться на 2 уровня вверх, не подскажете как это можно определитть?

SergeyT2006 14.06.2013 07:11

А это у нас где, 7 или 8?

EarlyBird 14.06.2013 07:16

Уровень()

LivingStar 14.06.2013 07:17

(1) 8.2

LivingStar 14.06.2013 07:24

(2) уровень определяет какой уровень

LivingStar 14.06.2013 07:25

я спрашиваю как выявить момент когда в каталоге есть каталоги и элементы, потом при смене елемента последнего при мереборе, родитель нужно сменить на 2 уровня, как это можно выявить, не пойму....

Ткачик 14.06.2013 07:51

[url]http://forums.kuban.ru/f1040/peregruzka_kontragentov-4345786.html[/url]

Тестирование происходит не на базе, а на форуме.

Ёпрст 14.06.2013 08:26

(5) открой для себя понятие рекурсии.

USSR 14.06.2013 09:22

странные задачи какие-то возникают. Я вот нифига не понял, какое событие, кто меняет каталог. Поясни задачу нормально на физическом уровне ))

Uho 14.06.2013 09:24

[quote=LivingStar;30856493]родитель нужно сменить на 2 уровня[/quote]все евреи кроме я...

LivingStar 14.06.2013 09:27

(7) я просто не догоняю

LivingStar 14.06.2013 09:42

(9) делаю структуру каталогов по подобию, все сбивается на месте когда нужно подниматься на уровни вверх, у меня все в рекурсии, но видимо не правильно, я не догоняю как поправить это!!!

Helen1986 14.06.2013 09:49

не догоняешь? прячься!!! [img]http://copypast.ru/foto9/2470/demotivatory_9.jpg[/img]

EarlyBird 14.06.2013 09:49

[quote=LivingStar;30857941]я просто не догоняю [/quote]
ты не [b][em]просто[/em][/b] не догоняешь
ты [b][em]катастрофически [/em][/b] не въезжаешь в своё ремесло
бросай пока не выгнали

Helen1986 14.06.2013 10:00

(13) просто это типичный однаЭсник

USSR 14.06.2013 10:13

Родителей не выбирают )

USSR 14.06.2013 10:15

(11)Обработками выгрузки загрузки контрагентов получается неверная иерархия справочника или что ?

qweqwe123123 14.06.2013 10:59

есть полное наименование и полный код элемента. получай из них родителей более верхнего уровня. если пустое значение наименования/кода - значит верхний уровень.

LivingStar 14.06.2013 11:16

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

LivingStar 14.06.2013 11:17

(18+) Ну а структуру эту придется по подобию потом раскидать вручную.

LivingStar 14.06.2013 11:24

Вот код, но он не креативный нифига (((((
|
// -----------------------------------------------------------------------------------------------------------------------------------------------------
Функция ПолучитьссылкуИерархическогоСправочникаНеобходимогоУровня(сСсылка,Знач зУровень=0)
Если зУровень = 0 Тогда
Возврат сСсылка;
КонецЕсли;
Если ЗначениеЗаполнено(сСсылка.Родитель) Тогда
Возврат ПолучитьссылкуИерархическогоСправочникаНеобходимогоУровня(сСсылка.Родитель,зУровень-1);
Иначе
Возврат Неопределено;
КонецЕсли;
КонецФункции
// -----------------------------------------------------------------------------------------------------------------------------------------------------
Функция РекурсивноеСозданиеКаталогов(Выборка, РодительТТ, ВыборкаРодитель)
Гр_ТТочки = Справочники.Контрагенты.НайтиПоНаименованию("ТОРГОВЫЕ ТОЧКИ");
к = 0;
УровеньВыше = 0;
ТекУровень = 1;
Гр = Справочники.Контрагенты.НайтиПоНаименованию(Выборка.Наименование,,РодительТТ.Ссылка);
Если Гр = Справочники.Контрагенты.ПустаяСсылка() Тогда
Гр = Справочники.Контрагенты.СоздатьГруппу();
Гр.Наименование = Выборка.Наименование;
Если ВыборкаРодитель = "" Тогда
РодительГр = Справочники.Контрагенты.НайтиПоНаименованию(Выборка.Родитель.Наименование,,Гр_ТТочки);
Если РодительГр = Справочники.Контрагенты.ПустаяСсылка() Тогда
РодительГр = Справочники.Контрагенты.СоздатьГруппу();
РодительГр.Наименование = Выборка.Родитель.Наименование;
//
РодительГр.Записать();
Сообщить("Создана группа: " + РодительГр + " уровень ["+ РодительГр.Ссылка.Уровень() +"]");
к = к + 1;
КонецЕсли;
Гр.Родитель = РодительГр;
Иначе
Гр.Родитель = РодительТТ.Ссылка;
КонецЕсли;
Гр.Записать();
Сообщить("Создана группа: " + Гр + " уровень ["+ Гр.Ссылка.Уровень() +"]");
к = к + 1;
Иначе
//
КонецЕсли;
Пока Выборка.Следующий() Цикл
Если Не Выборка.Ссылка.ЭтоГруппа и УровеньВыше = 0 Тогда
ТекУровень = Выборка.Ссылка.Уровень();
УровеньВыше = 1;
Гр = ПолучитьссылкуИерархическогоСправочникаНеобходимогоУровня(Гр,1);
Продолжить;
ИначеЕсли Не Выборка.Ссылка.ЭтоГруппа и УровеньВыше = 1 Тогда
ТекУровень = Выборка.Ссылка.Уровень();
Продолжить;
КонецЕсли;
Если Выборка.Наименование = "ТОРГОВЫЕ ТОЧКИ" Тогда
Продолжить;
КонецЕсли;
//ВыборкаРодитель = ПолучитьссылкуИерархическогоСправочникаНеобходимогоУровня(Выборка.Ссылка,1);
//ВыборкаРодитель = ПолучитьссылкуИерархическогоСправочникаНеобходимогоУровня(Гр,1);
РекурсивноеСозданиеКаталогов(Выборка, Гр, ПолучитьссылкуИерархическогоСправочникаНеобходимогоУровня(Гр,1));
Возврат к;
КонецЦикла;
КонецФункции
// -----------------------------------------------------------------------------------------------------------------------------------------------------
Процедура ОсновныеДействияФормыСоздатьГруппы(Кнопка)
Родитель = Справочники.Контрагенты.НайтиПоНаименованию("Покупатели");
ТТ = Справочники.Контрагенты.НайтиПоНаименованию("ТОРГОВЫЕ ТОЧКИ");
Если ТТ = Справочники.Контрагенты.ПустаяСсылка() Тогда
ТТ = Справочники.Контрагенты.СоздатьГруппу();
ТТ.Наименование = "ТОРГОВЫЕ ТОЧКИ";
Если Родитель.Уровень() = 0 Тогда
ТТ.Родитель = Родитель;
ТТ.Записать();
КонецЕсли;
КонецЕсли;
СпрПок = Справочники.Контрагенты.НайтиПоНаименованию("Покупатели",,ТТ.Ссылка);
Если СпрПок = Справочники.Контрагенты.ПустаяСсылка() Тогда
СпрПок = Справочники.Контрагенты.СоздатьГруппу();
СпрПок.Наименование = Родитель.Наименование;
СпрПок.Родитель = ТТ.Ссылка;
СпрПок.Записать();
КонецЕсли;
ПодгруппыТТ = Справочники.Контрагенты.ВыбратьИерархически(Родитель);
Пока ПодгруппыТТ.Следующий() Цикл
//Если ПодгруппыТТ.ЭтоГруппа = Истина И ПодгруппыТТ.Наименование = "Покупатели" Тогда
Рез = РекурсивноеСозданиеКаталогов(ПодгруппыТТ, СпрПок, "");
Сообщить("Создание каталогов, режим:" + Рез);
Сообщить(ПодгруппыТТ.Наименование);
Прервать;
//КонецЕсли;
КонецЦикла;
КонецПроцедуры
// -----------------------------------------------------------------------------------------------------------------------------------------------------

USSR 14.06.2013 11:45

Когда я вижу в тексте модуля конкретное название "ТОРГОВЫЕ ТОЧКИ", "Покупатели", то мне дальше неинтересно читать

LivingStar 14.06.2013 11:49

(21) Некогда было соображать, были конкретные условия от них и отталкивался. Не сообразив ещё до конца как буду делать. Понятно что это все не интересно. По сути нечего там особо читать, не рабочее это все....


Текущее время: 22:49. Часовой пояс GMT +3.