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


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                    пУровень

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



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