Вход | Регистрация


1С:Предприятие ::

Метки: справочники

Группы справочников... Как узнать узел листа?

Я
   Crystalizer
 
01.06.04 - 11:35
Есть справочник.
Элементы разбиты по группам.
Как узнать Узел данного элемента или по-другому к какой группе принадлежит данный элемент справочника?

п.с. "а шо ще дали буде" (С) Л.П.
 
  Рекламное место пустует
   Crystalizer
 
20 - 01.06.04 - 14:23
да надо ещё движения
//тут щас с глюком бьюсь
   Crystalizer
 
22 - 01.06.04 - 14:41
427: ок

GrayT или кто знает в чём тут могут быть грабли? почему ТМЦ не выбираются??

     товары = списокзначений. заполняется нормально. проверил.
    Запрос2 = СоздатьОбъект("Запрос");
    ТекстЗапроса2 = 
    "//{{ЗАПРОС(Сформировать)

    |ТМЦ = Справочник.ТМЦ;
    |ГруппаТМЦ = Справочник.ТМЦ.ГруппыТоваров;
    |Условие (ТМЦ в товары);    
    |Группировка ГруппаТМЦ;    
    |Группировка ТМЦ;
    |";

    Если Запрос2.Выполнить(ТекстЗапроса2) = 0 Тогда
        Сообщить("Ошибка во время выполнения запроса 911");
        Возврат;
    КонецЕсли;

      .....

    Пока Запрос2.Группировка(1) = 1 Цикл
        имя_группы = Запрос2.ГруппаТМЦ;
        Таб.ВывестиСекцию("группа_группа|Начало");
        Таб.ПрисоединитьСекцию("группа|Итог");
        Сообщить(имя_группы);
        Пока Запрос2.Группировка(2) = 1 Цикл/// НЕ ЗАХОДИТ СЮДА ВООБЩЕ!!!

            Сообщить("-----");
            спр_тмц = Запрос2.ЗначениеУпорядочивания(2,1);
            сообщить(спр_тмц);
            с=0;
            Если Таб2.НайтиЗначение( спр_тмц, с, "имя")=0 Тогда
                Сообщить("       Ошибка при поиске соответствия ... /2/");
            Иначе
                Таб2.ПолучитьСтрокуПоНомеру(с);
                Кво = Таб2.ТекКолво;
            КонецЕсли;
            Таб.ВывестиСекцию("группа_тмц|Начало");
            Таб.ПрисоединитьСекцию("группа_тмц|Итог");        
        КонецЦикла;                             
    КонецЦикла;
   GrayT
 
23 - 01.06.04 - 14:50
ТМЦ = Справочник.ТМЦ.ТеекущийЭлемент попробуй
   SnarkHunter
 
25 - 01.06.04 - 15:09
Справочник.ТМЦ.ГруппыТоваров <== Что бы это значило?
   Crystalizer
 
27 - 01.06.04 - 15:28
SnarkHunter: так и есть. не я это делал. там есть ещё дополнительная разновидность товара. В принципе удобно (пользоваться) - 2 вида сортировки;
   Crystalizer
 
29 - 01.06.04 - 16:05
работает
но не всегда корректно получается, т.к. вложенность может предшествовать
прока оставлю так
   427
 
39 - 01.06.04 - 17:10
Ну вот... практически весь лтчет без запроса и таблицы

как будешь заполнять тз с остатками и движениями
    как говорится - твои проблемы.... Можешь запросом по БИ в ТиС
    или обычным в Бух
    
    спавочник Групп будет так и называть
    
    тзТовар - остатки товара на складах
    колонки 
    ----------------------------
    Склад   
    Товар
    ДляСортировки - служебная
    КоличествоНН  - кол-во на начало,
    КоличествоНК  - кол-во на конец периода,
    Приход          - приход на склад
    Расход          - расход со склада
    Группа          - Группа 
                                
    
    
    тзСклад  - документы движения по товару 
    колонки
    ---------------------------------------
    Товар
    Склад                           
    Приход          - приход на склад
    Расход          - расход со склада
    Док              - док движения
    
    
    Обе ТЗ элементарно заполняются по обычному запросу или по БухЗапросу
    

   //-------------------------------------------------------

   // названия складов - добавим потом в итоговую ТЗ

   //-------------------------------------------------------

    Скл = CreateObject("ValueTable"); 
    тзТовар.Unload(Скл);
    Скл.GroupBy("Склад","КоличествоНН");

   //-------------------------------------------------------

   //  добавим колонки для последующей сортировки

   //-------------------------------------------------------

    тзТовар.NewColumn( "СС","Строка" , 
            Metadata.Reference("Группы").DescriptionLength*
               Metadata.Reference("Группы").LevelsLimit +
               Metadata.Reference("Материалы").DescriptionLength + 
               Metadata.Reference("местаХранения").DescriptionLength +
               100, , "СС" );
    
    тзТовар.NewColumn( "УровеньЭлемента","Число" , 2 , 0, "УровеньЭлемент" ); 
    тзТовар.NewColumn( "Род","Reference.Группы" ,  , , "Род" ); 
    тзТовар.NewColumn( "Док","Документ" , , , "Док" );

   
    МахУровень = 0;                                                                   
   //-----------------------------------------

    for Индекс = 1 to тзТовар.LinesCnt() do // цикл по ТЗ  тзСклад

        тзТовар.GetLineByNumber(Индекс);
        if тзТовар.Товар.Selected() <> 1 then Continue; endIf;                 
        тзТовар.ДляСортировки    = 30;
        тзТовар.Группа            = тзТовар.Товар.Группа;
        тзТовар.УровеньЭлемента = тзТовар.Группа.Level(); 
        
        if тзТовар.УровеньЭлемента > МахУровень then 
            МахУровень             = тзТовар.УровеньЭлемента; 
        endIf;  
        
        тзТовар.Род =     тзТовар.Группа.Parent; 
        тзТовар.СС    =     TrimAll(тзТовар.Склад.Description)    +" "+
                        тзТовар.Группа.Parent.FullDescr()    +" "+ 
                        тзТовар.товар.Description            +" "+
                        ValueToStringInternal(тзТовар.Товар);
    endDo;  
    
   //-------------------------------------------------------

    тзУровней = CreateObject("ValueTable"); 
    тзТовар.Unload(тзУровней);   
    
   //-------------------------------------------------------

   // добавим движения

   //-------------------------------------------------------

    
    for Индекс = 1 to тзСклад.LinesCnt() do 
        тзСклад.GetLineByNumber(Индекс);
        if тзСклад.Товар.Selected() <> 1 then Continue; endIf;                 
        тзТовар.NewLine();
        
        тзТовар.Товар            = тзСклад.Товар;
        тзТовар.Склад            = тзСклад.Склад ;
        тзТовар.Приход            = тзСклад.Приход;
        тзТовар.Расход            = тзСклад.Расход;
        тзТовар.Группа            = тзСклад.Товар.Группа;
        тзТовар.УровеньЭлемента = тзСклад.Группа.Level(); 
        
        тзТовар.Род             = тзТовар.Группа.Parent; 
        тзТовар.Док             = тзСклад.Док; 
        тзТовар.ДляСортировки    = 41; 
        тзТовар.СС    =     TrimAll(тзТовар.Склад.Description)    +" "+
                        тзТовар.Группа.Parent.FullDescr()    +" "+ 
                        тзТовар.товар.Description            +" "+
                        ValueToStringInternal(тзТовар.Товар);
    endDo;   

    УказательЦикла = 0;
    СчетчикЦикла   = 15;     // максимально возможное количество уровней в

                           // справочнике Групп... как говорится, с запасом

    
    if МахУровень > 1 then МахУровень = МахУровень-1; endIf; 
        
    while МахУровень > 0 do
        тзУровней.GroupBy("Склад,Род","КоличествоНК");              
        СчетчикЦикла        = СчетчикЦикла - 1;
        for Индекс = 1 to тзУровней.LinesCnt() do // цикл по ТЗ  ПоСкладам.LinesCnt()

            тзУровней.GetLineByNumber(Индекс); 
            if тзУровней.Род.Selected() <> 1 then Continue; endIf; 
            if тзУровней.Род.Level()  <> МахУровень then Continue; endIf; 
            тзТовар.NewLine();
            тзТовар.Склад         = тзУровней.Склад;
            тзТовар.Род         = тзУровней.Род;
            
            тзТовар.СС            = TrimAll(тзТовар.Склад.Description)+" "+тзУровней.Род.FullDescr()+" ";
            тзТовар.ДляСортировки= СчетчикЦикла;
            тзУровней.Род        = тзУровней.Род.Parent; 
        endDo;    
        МахУровень = МахУровень - 1;
    endDo;
                                     
    
   //-------------------------------------------------------

   // добавим склады - для вывода в таблицу

   //-------------------------------------------------------


    for Индекс = 1 to Скл.LinesCnt() do // цикл по ТЗ  Скл

        Скл.GetLineByNumber(Индекс);
        тзТовар.NewLine();
        тзТовар.Склад         = Скл.Склад;
        тзТовар.ДляСортировки=1;
        тзТовар.СС            = TrimAll(тзТовар.Склад.Description)+" ";
    endDo;        
    
   // сортировка 

    
    тзТовар.Sort("Склад,СС,Док",1);
    
   //===========================================================

    т = CreateObject("Table"); 
    т.SourceTable("Таблица3");   
    
    СЗ = CreateObject("ValueList");
    т.PutSection("Шапка");  // в таблице д.б. секция шапка                                         


    
    for Индекс = 1 to тзТовар.LinesCnt() do // цикл по ТЗ  тзСклад

        тзТовар.GetLineByNumber(Индекс);
        if тзТовар.ДляСортировки =1 then
            пСклад            = тзТовар.Склад;
            т.PutSection("Склад"); 
        elsIf тзТовар.ДляСортировки = 30 then    
           // это строка самого ТМЦ

                Товар            = тзТовар.Товар; 
                рТовар            = тзТовар.Товар;
                ед                = тзТовар.Товар.ЕдиницаИзмерения; 
                пНаНач            = КоличествоВОтчет(тзТовар.КоличествоНН);
                пПриход            = КоличествоВОтчет(тзТовар.Приход);
                пРасход            = КоличествоВОтчет(тзТовар.Расход);
                пНаКон            = КоличествоВОтчет(тзТовар.КоличествоНК);
                
                Ур=тзТовар.Товар.Level()-1;
                т.PutSection("Товар"+_А+string(Ур));                                 

        elsIf тзТовар.ДляСортировки = 41 then    
               // вывод документа движения

                РасД            = тзТовар.Док;
                пДок            = РасД.Kind()+"  "+расД.DocNum;
                пДата            = РасД.DocDate;
                СЗ.RemoveAll();
                СЗ.Set ("ОткрытьЖурналДокументов", 1);
                СЗ.Set ("ДокументЖурнала", РасД); 
                Расшифровка     = СЗ;
                пПриход1        = КоличествоВОтчет(тзТовар.Приход);
                пРасход1        = КоличествоВОтчет(тзТовар.Расход);             
                Ур=тзТовар.Товар.Level()-1;
                т.PutSection("Док"+string(Ур));                                 
        else
               // печатаем Level();

                пУровень = тзТовар.Род;
                Ур=тзТовар.Род.Level();
                т.PutSection("Уровень"+string(Ур));                                 
        endIf;     
    endDo;   // конец цикла по ТЗ  тзСклад

   //-----------------------------------------

    
    
    т.PutSection("Подвал");   
    т.ReadOnly(1); 
    т.Options(0,0,4,6 ,"ОстП ", "ОстП" ); 
    т.PageSetup(2 ,  ,  ,  ,  ,  ,  ,  ,  , 1 ,  1 );
    т.Show("Движение товаров за "+PeriodStr(НачДата,КонДата));
    
    
    секции в таблице ДокХ, ТоварХ, УровеньХ сформированы следующим образов
    
    ИмяСекции1    пУровень 
    ИмяСекции2        пУровень
    ИмяСекции3            пУровень
    ИмяСекции4                пУровень
    ИмяСекции5                    пУровень

    
    чтобы структура отчета по группам была похожа на дерево групп в справочнике групп



Список тем форума
Рекламное место пустует   Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Ветка сдана в архив. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует