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


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

Метки:отчеты

Может есть готовое решение?

Я
   koshechka
 
19.06.04 - 11:37
Проблема вот в чем - море складов, на складах лежат товары, каждый товар имеет свою классификацию, которая привязана к субсчету. Не могу создать отчет - вторую неделю мучаюсь  - отбор по классификации - общее количество всех этих товаров (принадлежащих классификации) и разворот только по тем складам, где они есть. Решила проблему только до уровня разворота по всем складам. Складов около 200. Пустые совсем не нужны. Помогите ПЛЗ. Заранее благодарна.
 
  Рекламное место пустует
   427
 
1 - 19.06.04 - 12:33
вообще то "классификацию, которая привязана к субсчету" - это КРУТО....
Сколько же у вас субсчетов то?




//=======================================================================
if Номенклатура.Selected() <> 1
then 
         DoMessageBox ("НаФиг пошли... Не выбран товар с классификацией"); 
         return;
endIf;                                 
     
БИ = CreateObject("BookkeepingTotals");
БИ.UseSubconto(SubcontoKinds.Номенклатура,    , 1);    
БИ.UseSubconto(SubcontoKinds.МестаХранения,    , 1);    
СубСчетикУчетика = Номенклатура.СубСчетУчета;

БИ.DoQuery( , ДатаОстатков , СубСчетикУчетика,   ,  , 1,  , "К");  
//==============================================================


if БИ.SelectSubconto(1) =1 then      
   while БИ.GetSubconto(1) = 1 do  
        ОстатокНаВсехСкладах = 0;
        Товар                 =  БИ.Subconto(1);     
        ОстатокНаКонец      =  БИ.СКД ("К")-БИ.СКК ("К");           
        Message ("--------   " +Товар + "------ Его валяется на всех складах -- " + ОстатокНаКонец);
        
        if БИ.SelectSubconto(2) =1 then      
           while БИ.GetSubconto(2) = 1 do  
                Склад                 =    БИ.Subconto(2);       
                ОстатокНаСкладе        =      БИ.СКД ("К")-БИ.СКК ("К");                          
                Message ("----" +Товар + "--на складе -- " + Склад+ "   лежит "+ ОстатокНаСкладе);
            endDo;
        endIf;    
    endDo;     
    
else
    Message ("Весь товар на субсчете "+СубсчетикУчетика+" либо украден, либо его съели мыши");
    
    
EndIf;
   koshechka
 
2 - 19.06.04 - 13:10
субсчетов порядка 25, просто нек. классификации привязаны к одному и тому же субсчету.
   SnarkHunter
 
3 - 19.06.04 - 13:25
(2)Субконто не признаете как класс?
   BorisG
 
4 - 19.06.04 - 13:33
(3) Вероятно с шестерки перевели... и оставили ;-)
   koshechka
 
5 - 19.06.04 - 13:53
Выходной отчет должен выглядеть
________________________________________________________
| ТМЦ | Колво общее | Колво     |колво     |колво      |
|     |             |на складе 1|на складе2|на складе 9|
--------------------------------------------------------
|винт |  200        |  150      |  30      |  20       |
и т. д.
а у меня получается
 ________________________________________________________________________
| ТМЦ | Колво  | Колво     |колво     |колво      |колво     |колво     |
|     | общее  |на складе 1|на складе2|на складе 3|на складе4|на складе9|
-------------------------------------------------------------------------
|винт |  200   |  150      |  30      |           |          |     20   |

а складов очень много, так вот хотелось бы избавится от пустых, тем паче что из 200 складов реально сейчас используется около 80, отчет нужен до зарезу,
спасибо за скорый ответ
   koshechka
 
6 - 19.06.04 - 13:54
классификация не есть субконто
   427
 
7 - 19.06.04 - 14:09
Снарк - это отчет с группировкой по реквизиту субконто...



мне нравится .... даже если колонка шириной 1 см - то отчет будет 85-90 см шириной... Во портянка.....

из указанного в 2 легко делается нужная тебе форма...

Или очень хочется поиметь на халяву? Тогда - вперед на Хиппо....
   koshechka
 
8 - 19.06.04 - 14:13
Господа эксперты! Подскажите где есть ошибка????


Процедура ОстаткиТоваров()
    БИ=СоздатьОбъект("БухгалтерскиеИтоги");
    БИ.ИспользоватьСубконто(ВидыСубконто.ТМЦ,ВыбТовары,1,1 );
    
    Если ВыбСклад.Выбран()=1 Тогда
        БИ.ИспользоватьСубконто(ВидыСубконто.Сотрудники,ВыбСклад,2,1);
    Иначе
        БИ.ИспользоватьСубконто(ВидыСубконто.Сотрудники,,1,1);
    КонецЕсли;                                       
    БИ.Опции(1,1);
    БИ.ВыполнитьЗапрос(ДатаОтчета,ДатаОтчета,"43,10.01,10.02,10.03,",,,1,,"КС");

    БИР=СоздатьОбъект("БухгалтерскиеИтоги");
    БИР.ИспользоватьСубконто(ВидыСубконто.ТМЦ,ВыбТовары,1,1 );
    Если ВыбСклад.Выбран()=1 Тогда
        БИР.ИспользоватьСубконто(ВидыСубконто.Сотрудники,ВыбСклад,2,1);
    Иначе
        БИР.ИспользоватьСубконто(ВидыСубконто.Сотрудники,,1,1);
КонецЕсли;                                       
    
    Если ВыбТовары.РазмерСписка()=0 Тогда
        Заг="По всем товарам. ";
    Иначе
        Заг="По товарам из списка: "+ВыбТовары.ВСтрокуСРазделителями()+". ";
    КонецЕсли;
    
    Если ВыбСклад.Выбран()=0 Тогда
        Заг1="По всем складам";
    Иначе
        Заг1 = "По складу " + ВыбСклад.Наименование;
    КонецЕсли;
    Если ВыбКласс.Выбран()=0 Тогда
        Заг2="Без выбора классификации";
    Иначе
        Заг2="Классификатор: "+ВыбКласс.Наименование;
    КонецЕсли;
    ЧислоСтрок=0;
   //  Создание Таблицы для выходного отчета

    Таб=СоздатьОбъект("Таблица");
    СписокСкладов=СоздатьОбъект("СписокЗначений");
    ОстСкладов=СоздатьОбъект("СписокЗначений");
    РезСкладов=СоздатьОбъект("СписокЗначений");  
    КЛ=СоздатьОбъект("СписокЗначений");
    Всего=БИ.СКД("К");
    Таб.ВывестиСекцию("Отчет|НаимТовара");
    Если ВыбСклад.Выбран()=0 Тогда
        БИ.ВыбратьСубконто(2);
        Пока БИ.ПолучитьСубконто(2)=1 Цикл
            Если  (ВыбКласс.Выбран()=1) И (БИ.Субконто(1).Классификация<>ВыбКласс) Тогда
                Продолжить;
            Иначе// Возврат;

                КонецЕсли;
            Если БИ.СКД("К")<>0 Тогда
                Склад=БИ.Субконто(2).Наименование;
                Ост=БИ.СКД("К");
                Рез=0;
                Таб.ПрисоединитьСекцию("Отчет|Склад");
                СписокСкладов.ДобавитьЗначение(БИ.Субконто(2));
                ОстСкладов.ДобавитьЗначение(Ост);
                РезСкладов.ДобавитьЗначение(Рез);
            КонецЕсли;    
        КонецЦикла;    
    КонецЕсли;    
    БИ.ВыбратьСубконто(1);
    Пока БИ.ПолучитьСубконто(1) = 1 Цикл
            Если  (ВыбКласс.Выбран()=1) И (БИ.Субконто(1).Классификация<>ВыбКласс) Тогда
                Продолжить;
            Иначе// Возврат;

                КонецЕсли;
                
        Если БИ.СКД("К")>0 Тогда  
            Товар=БИ.Субконто(1);
            НаимТовара="";
           //Если Товар.Родитель.Выбран()=1 Тогда

           //    НаимТовара=СокрЛП(Товар.Родитель.Артикул)+" ";

           //КонецЕсли;                            

            НаимТовара=НаимТовара+Товар.Наименование;
            ПечЕд=Товар.ЕдИзм;
            ПечКол=Формат(БИ.СКД("К"),"Ч010.3");
            ПечРез="";
            
            Если БИ.Субконто(1).ЭтоГруппа()=1 Тогда
                Таб.ВывестиСекцию("Группа|НаимТовара");
            Иначе    
                Таб.ВывестиСекцию("Товар|НаимТовара");
            КонецЕсли;    
            Если ВыбСклад.Выбран()=0 тогда 
            Если  (ВыбКласс.Выбран()=1) И (БИ.Субконто(1).Классификация<>ВыбКласс) Тогда
                Продолжить;
            Иначе// Возврат;

                КонецЕсли;
                Для а=1 по СписокСкладов.РазмерСписка() Цикл
                    ПечКол="";
                    Если БИ.ПолучитьСубконто(2,,СписокСкладов.ПолучитьЗначение(а)) = 1 Тогда
                        Если БИ.СКД("К")>0 Тогда
                            ПечКол=Формат(БИ.СКД("К"),"Ч010.3");
                        КонецЕсли;    
                    КонецЕсли;              
                    ПечРез="";
                    Если БИ.Субконто(1).ЭтоГруппа()=1 Тогда
                        Таб.ПрисоединитьСекцию("Группа|Склад");
                    Иначе    
                        Таб.ПрисоединитьСекцию("Товар|Склад");
                    КонецЕсли;    
                КонецЦикла;    
            КонецЕсли;
        КонецЕсли;    
    КонецЦикла;
    ПечКол=Формат(Всего,"Ч010.3");
    Таб.ВывестиСекцию("Итог|НаимТовара");
    Для а=1 по СписокСкладов.РазмерСписка() Цикл
    Если  (ВыбКласс.Выбран()=1) Тогда
       //Продолжить;

        ПечКол=Формат(ОстСкладов.ПолучитьЗначение(а),"Ч010.3");
        Таб.ПрисоединитьСекцию("Итог|Склад");
    Иначе// Возврат;

    КонецЕсли;
    КонецЦикла;    
   //Вызов выходного отчета в окно просмотра и редактирования.
   koshechka
 
10 - 19.06.04 - 14:17
А из указанного в п.2 СОВСЕМ НЕ ДЕЛАЕТСЯ НУЖНАЯ ФОРМА!!!!
Я ТОЛЬКО ЧТО ПРОВЕРИЛА
ДЕЛО НЕ В ПОЛУЧЕНИИ ОСТАТКОВ! ПЛИИИИЗ! ДЕЛО В ТОМ ЧТОБЫ НЕ ВЫВОДИЛИСЬ НА ПЕЧАТЬ ПУСТЫЕ!!!!
 
 
   427
 
12 - 19.06.04 - 14:46
Не ори... Оглохну....

Какие сроки? Завтра - воскресенье.....

Если ВыбСклад.Выбран()=1 Тогда 
       БИ.ИспользоватьСубконто(ВидыСубконто.Сотрудники,ВыбСклад,2,1); 
Иначе 
       БИ.ИспользоватьСубконто(ВидыСубконто.Сотрудники,,1,1); 
КонецЕсли;      

Это чего? Конфа переделана? Субконто 10 и 43 - сотрудники?  Круто... ну ладно, хрен с ними...


БИ.Опции(1,1);    не нужно... ты указываешь список субсчетов.... Кстати, какие нахрен субсчета, если нужен отчет по реквизиту субконто.... А если нужно одним вопросам по всем классификаторам - тогда алгоритм другой...


БИ.ВыполнитьЗапрос(ДатаОтчета,ДатаОтчета,"43,10.01,10.02,10.03,",,,1,,"КС");
здесь ошибка.... Стоят обе даты... будет возращены остатки на начало дня и на конец... Если в этот день на начало было 10, ушло десять, на конец 0 - запрос ВОЗВРАТИТ эту строку..... а она тебе не нужна....

Также нельзя по реализованному алгоритмы просто выбросить склад...
если ты хочешь получить табличку вида



   Товар        Склад1    Склад2    Склад3
   тов1        10        15        ----
    тов2        ---        5        15
    тов3        ---        ---        ---


то пока ты не просмотришь ВСЕ товары - ты не знаешь, какие склады есть в таблице, а каких быть не должно

Так что берешь (2), результат запроса выгружаешь в ТЗ, разносишь склады по колонкам, сортируешь по Товару, Складу, Классификатору, выбрасываешь полностью пустые колонки (вообще говоря, их не должно быть после запроса в (2) и этот пункт - лишнее) и выводишь .....

Да, кстати, с какого бодуна 43 и 10 счета имеют субконто ТМЦ? В типовой бух это материалы на 10 и номенклатура на 43.... Или это тоже переделано?
   koshechka
 
13 - 19.06.04 - 14:54
счета 10 и 43 я указала просто так, чтобы не писать <выбКласс.СчетУчета>
Сотрудники - это склады, они и хранят ТМЦ, за дату спасиб, а то что завтра воскресень ничего не меняет, в понедельник бухи уже будут этот отчет юзать, а если нет, то тада.....................
   427
 
14 - 19.06.04 - 14:59
Уточнение
"Кстати, какие нахрен субсчета, если нужен отчет по реквизиту субконто..."

Вроде я понял так - один классификатор - один субсчет....
Если не так - тогда конструкцию типа
Если  (ВыбКласс.Выбран()=1) И (БИ.Субконто(1).Классификация<>ВыбКласс) Тогда 
              Продолжить;
надо вставить в (2).....
   427
 
15 - 19.06.04 - 15:00
без ТЗ ты ничего в данном случае не сделаешь - в частности, не удастся удалить колонки, ибо при просмотре БИ количество складов известно только в конце.....
   koshechka
 
16 - 19.06.04 - 15:52
ес! один классификатор - один субсчет. у меня что то в голове засело, если субконто(1) отобрать по классификатору, то потом глянуть их остатки (БИ.СКД) общие, а после этого раскидать по каким складам эти остатки наблюдаются то ТЗ вообще не нужна, или тута есть жесткое условие, или по всем, или вообще тока общие? Написала от отчаяния, потому что уже совсем запуталась и очевидных вещей не наблюдаю
   koshechka
 
17 - 19.06.04 - 18:41
уффффффф! написала ТЗ, правда при этом чуть не сожгла квартиру (забыла что на плите кое что вариться), ну да ладно! все заработало. огромное спасибо 427
   427
 
18 - 19.06.04 - 20:52
а теперь возьми ломик и молоток.... и на кухню - оббивать кастрюлю....
   koshechka
 
23 - 21.06.04 - 01:47
все равно не то, таблица получается кривая - завтра будет море недовольства, сегодня уже звонили :-(((
кароче, мне так и не удалось запихать в печатную форму все что хотели и как хотели. или красиво и с пустыми, или как надо и криво
   Z1
24 - 21.06.04 - 08:05
Разделяем исходную задачу на несколько далее решаем каждую
в итоге имеем решение всей задачи.
1.Создаем таблицу значений с колонками
  Товар, КолвоСклад_Код_1го_Склада,
  КолвоСклад_Код_2го_Склада
  КолвоСклад_Код_n_го_Склада

2. Заполняем эту таблицу значений.
  эта задача у тебя тоже решена вроде.

3. Анализируем  таблицу значений.
  Цикл по колонкам - если в столбце одни нули то удаляем
  колонку.
  Можно после проверить по строкам ( только проверку делай с последней по 1-ю  строку ) если в строке одни нули то удаляем строку.

4. И последнее написать Красивый вывод получившийся Таблицы значений.
   427
 
25 - 21.06.04 - 08:35
Тз     --> колонки - все заполняется в цикле просмотра БИ… классификатор пишется для общего алгоритма – можно будет работать при неуказанном классификаторе….. т.е. полные остатки по всем классификаторам с сортировкой по складу классификатору материалу

колонки

Склад
Материал
Классификатор
Остаток


Бух итоги  --> по условию в ТЗ
=======================================
Выясняем колво складов в запросе
ТЗ   --> тз1…
Тз1.свернуть (\"склад\", \"Остаток\") – это список складиков
Тз1.сортировка (Склад)
=======================================
Для Ш=1 по тз1.колво строков делать
Тз.новаяКолонка (\"Скл\"+число(Ш), \"Число\",……….)
Конец

Тз.новаяКолонка (\"ИтогоПоВсемСкладам\", \"Число\",……….)
Тз.новаяКолонка (\"ДляСОртироки\", \"Строка\", \"НужнойДлины\",……….)

НужнойДлины - Сумма длин (названияСклада + названия классификатора + названия материала + еще немного для сл целей...)

Для Индекс …. По тз.количество строков ………
Тз.получитьПоНомеру(Индекс)

Определяем – куда (в какую колонку совать остаток)
Инд = \"\";
Тз1.найтиЗначение(тз.Склад,Инд,\"Склад\");   нашли нужную колонку
Тз.установитьЗначение(индекс,\"Скл\"+Инд, тз.Остаток)
    
    Тз.ДляСортировки =  тз.Склад.Наименование + \" \"+
            Тз.Классификатор+\" \"+
            тз.Материал.ПолноеНаименование()
           или
           тз.материал.наименование (см как надо сортировать)
конецЦикла

тз.Сортировка(ДляСортировки)

здесь можно сделать ТЗ.выбратьСтроку – чтобы посмотреть что получилось, дальше будет ясно, как печатать…. В ТЗ уже весь требуемый сортированный отчет….  

Только вот смотреть тебе явно будет неудобно…. Эти казлы в 1С сделали окошко выбора строки ТЗ маленьким…..  Я это обхожу, правя 1crcrus.dll - Dialogs - 1511   (для СЗ 1116)
теперь по выбратьСтроку() у меня открывается окно шириной почти во весь экран, очень удобно…..  И мне положить в этом моменте на © 1с…  Зато удобно…

==========================================      
колонку ИтогоПоВсемСкладам заполнишь сама …. Можно при печати….  Можно сворачиванием ТЗ

Итоги по классификатору (Сводный остаток материала по классификатору, если материалов с одним классификатором несколько) – заполнишь сама… если эти итоги нужны….. вообще часто требуют….
   427
 
26 - 21.06.04 - 08:47
(24) ты не умеешь готовить ТЗ-шных кошек ......

Чем хороша ТЗ - не надо анализировать... надо просто грамотно заполнить и свернуть....

В моем вариант нет анализа заполнения ТЗ
В моем варианте нет предопределнных колонок по складам - колво складов неопределенное (в твоем - жестко заданное)

т.е. ты удаляешь пустые колонки - я добавляю попавшие в запрос хотя бы по одному товару...

Единственный недостаток - в зависимости от классификатора отчет может быть разной ширины .... это есть
   koshechka
 
27 - 21.06.04 - 11:48
не умею, согласна, до сег. дня не пользовалась такой возможностью. бухи меня убивают, медленно, но верно, дали срок до завтра, может чего и получится. тока текучки стока, что до завтра не успею, это уже понятно
спасибки тебе "427"
   427
 
28 - 21.06.04 - 14:52
фигню спорол...  Пропустил кусок

Перед
тз.Сортировка(ДляСортировки)
нужно вставить след кусок - пропустил

СтрСортировки= ""
для И=...... тз1.колвоСтрок
    СтрСортироки = СтрСортировки +"Скл"+число(И);
   если И <> тз1.колвоСтрок тогда СтрСортироки = СтрСортировки + ",";
конеццикла
тз.свернуть ("Склад,Материал,Классификатор,Остаток",СтрСортировки);
   koshechka
 
29 - 21.06.04 - 15:29
cспасибки огромное, часика через два воспользуюся и посотрю что выйдет но вааще то хочу засесть за "Конфигурирование и...т.д. в 1С", а то голова совсем пустая, аж стыдно прям
   koshechka
 
30 - 21.06.04 - 21:42
Не, не вышло у меня ничего.
Есть другая идея, она у меня в доке одном реализована суперски.
Тока как туда загнать ту номенклатуру, которая подпадает под классификатор?
Процедура Сформировать()
    ТЗ=СоздатьОбъект("ТаблицаЗначений");
    ТЗ.НоваяКолонка("Номенклатура");
    Заг2="Классификация: "+ВыбКласс;
    Субк=СоздатьОбъект("Справочник.ТМЦ");
    Субк.ВыбратьЭлементыПоРекВизиту("Классификация",выбКласс);  -------это пральна?
    СЗ = СоздатьОбъект("СписокЗначений");
    СЗ.Выгрузить(субк);
    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Сформировать");  
    Таб.ПараметрыСтраницы(1,   ,,20,,5,,,,1);
    Таб.ВывестиСекцию("Заголовок");
    Ит = СоздатьОбъект("БухгалтерскиеИтоги");
    Ит.ИспользоватьСубконто(ВидыСубконто.ТМЦ, СЗ, 1);
    Ит.ИспользоватьСубконто(ВидыСубконто.Сотрудники,,1);
    Ит.ВыполнитьЗапрос(, ДатаОтчета, ВыбКласс.СчетУчета,,, 1,, "СК");
    Сформировать_Колонки(Ит, Таб, "Шапка");
    Таб.Опции(0,0,Таб.ВысотаТаблицы(),0);
    
    
    Ит.ВыбратьСубконто(1,1);    
    ТЗ.ВыбратьСтроки();
    Пока ТЗ.ПолучитьСтроку() = 1 Цикл
        Ит.ПолучитьСубконто(1,ТЗ.Номенклатура);
        Сформировать_Колонки(Ит, Таб, "Субконто2");
    КонецЦикла;
    Сформировать_Колонки(Ит, Таб, "Подвал");
    Таб.ТолькоПросмотр(1);
    Таб.Показать("Сформировать","");    
КонецПроцедуры
Очень коротенько, зато все что надо, кроме выбранных субк.
   koshechka
 
31 - 21.06.04 - 21:44
А в доке просто табл. значения загружаются
    СЗ = СоздатьОбъект("СписокЗначений");
    ВыгрузитьТабличнуюЧасть(СЗ,"Номенклатура");
   427
 
32 - 21.06.04 - 23:07
Процедура ОстаткиТоваров() 
    БИ=СоздатьОбъект("БухгалтерскиеИтоги"); 
    БИ.UseSubconto(SubcontoKinds.ТМЦ,ВыбТовары,1,1 ); 
    
    if ВыбСклад.Selected()=1  
        then     БИ.UseSubconto(SubcontoKinds.Сотрудники,ВыбСклад,2,1); 
        else     БИ.UseSubconto(SubcontoKinds.Сотрудники,,1,1); 
    endIf;                                       
    
    БИ.DoQuery(, ДатаОтчета,"43,10.01,10.02,10.03,",,,1,,"К"); 
    
  //  Создание ТЗ

   
   тз = CreateObject("ValueTable");
   тз.NewColumn( "Материал","Reference.Материалы",,,"СправМ",,,);   
   тз.NewColumn( "Склад","Reference.МестаХранения  или Сотрудники ?",,  ,  "Справ"  ,   ,   ,  );  
   тз.NewColumn( "Количество","Число"      ,15 , 3,  "  "  ,   ,   ,  );  
   тз.NewColumn( "Классификация","Не знаю какой тип ?" ,  , , "Классификатор " );

                
  // заполнение тз

   
   if БИ.SelectSubconto(1) =1 then       
  while БИ.GetSubconto(1) = 1 do  
      if БИ.SelectSubconto(2) =1 then      
          while БИ.GetSubconto(2) = 1 do  
         if ВыбКласс.Выбран()=1  then
             if  БИ.Субконто(1).Классификация<>ВыбКласс    then
                   Continue;
               endIf; 
           endIf;
           тз.NewLine();
                   тз.Склад         =    БИ.Subconto(2);       
                   тз.Количество    =    БИ.СКД ("К")-БИ.СКК ("К");
           тз.Материал    =    Би.Subconto (1);
           тз.Классификация=     Би.Материал.Классификация;
           endDo; 
       endIf;     
   endDo;  
                      
   
  // далее трясем тз................

   
   
   if тз.LinesCnt() =0 then
        DoMessageBox ("Ничего не найдено"); 
           return;
   endIf; 
       
Склады = CreateObject("ValueTable");
тз.Unload(Склады);
Склады.GroupBy("Склад","Количество");  // это список складиков 

Склады.Sort("Склад");           // отсортировали для приличия

    
    
// навесим колонки в ТЗ

for Индекс = 1 to Склады.LinesCnt() do
    тз.NewColumn( "Скл"+string(Индекс),"Число" , 14 , 3, "Скл" );
endDo;
    
Тз.NewColumn( "ДляСортировки","Строка" , 500 , , "ДляСортировки" );
    
//-------------------------------------------------------

// разносим остатки по нужным колонкам

for Индекс = 1 to тз.LinesCnt() do
    тз.GetLineByNumber(Индекс);
    стр = "";  
    кол = "";
    Склады.FindValue(тз.Склад,стр,кол);// нашли номер строки - склад 

        
   // загоняем остаток в нужную колонку

    тз.SetValue ( Индекс,"Скл"+string(стр),тз.Количество) ; 
        
   // индекс сортировки - Склад, классификая, наименование

    тз.ДляСортировки =     тз.Склад.Description     +     " "+ 
                Тз.Классификация          +    " "+ 
                     тз.Материал.Description;
endDo;
                                                                    
    
//-------------------------------------------------------

// сворачиваем тз для объединения инфы по Материалу из нескольких
// строк в одну строку....

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

        
// составляем перечень колонок, по которым будет суммирование

// сами названия колонок сформированы как 
// СклХ - где Х - номер склада в списке


СтрСортировки= "" 
for Индекс = 1 to Склады.LinesCnt() do                 
    СтрСортировки = СтрСортировки +"Скл"+string(Индекс);                               
    если Индекс <> Склады.LinesCnt()  then 
       // пришили запятую, если это не последний склад в списке

        СтрСортировки = СтрСортировки + ","; 
    endIf;
endDo; 
    
    
// свернем ТЗ для получения нужного вида

тз.GroupBy("Материал,Классификация","Количество,"+СтрСортировки); 
    
// отсортировали по критерию - типа 

// Склад
//        Классификация

//                Название материала

тз.Sort("ДляСортировки"); 

   
вот по сути и все - данные ТЗ имеют вид
   
Классификация    Материал Колво    Скл1    Скл2    ....... СклН
   
ХХХ1        Мат1    10    0        0    .......    10
ХХХ1        Мат2    15    0        15    .......    0
ХХХ2        Мат3    20    0        20    .......    0
   
   
   Ну а уж красиво напечатать - без проблем
   склады выводятся через ПрисоединитьСекцию ....
   столько раз, сколько строк в таблице значений Склады...
   koshechka
 
34 - 25.06.04 - 01:10
А вообще все оказалось гораздо проще:

//==================================================

//*******************************************
Процедура Сформировать_Колонки(Ит, Таб, Стр)
    Таб.ВывестиСекцию(Стр+"|Начало");
    Ит.ВыбратьПериоды(1, 1);
    Таб.ПрисоединитьСекцию(Стр+"|Конец");
КонецПроцедуры
Процедура Сформировать()                               
    Перем Запрос, ТекстЗапроса, СписокТМЦ;
   //Перем Документ;

    Ит = СоздатьОбъект("БухгалтерскиеИтоги");
   //Ит.ИспользоватьРазделительУчета(ВыбРазделительУчета);

    
    Если ВыбСубконто1.Выбран() = 1 Тогда
        
       //Создание объекта типа Запрос

        Запрос = СоздатьОбъект("Запрос");
        ТекстЗапроса = 
        "//{{ЗАПРОС(ВыбТМЦ)

        |ТМЦ = Справочник.ТМЦ.ТекущийЭлемент;
        |Классификация = Справочник.ТМЦ.Классификация;
        |Группировка ТМЦ;
        |Группировка Классификация;
        |Условие(Классификация в ВыбСубконто1);
        |//}}ЗАПРОС

        ;
       // Если ошибка в запросе, то выход из процедуры

        Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
            Возврат;
        КонецЕсли;
        Если Запрос.Выгрузить(СписокТМЦ,,0)   = 0 Тогда Предупреждение("Фигня"); КонецЕсли;
        СТ= СоздатьОбъект("СписокЗначений");
        СписокТМЦ.Выгрузить(СТ,,,"ТМЦ");
        Ит.ИспользоватьСубконто(ВидыСубконто.ТМЦ, СТ, 1); 
    Иначе
        Ит.ИспользоватьСубконто(ВыбСубконто1.СчетУчета.ВидСубконто(1)); 
    КонецЕсли;
    
    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Сформировать");
      
    Если ВыбСубконто2.Выбран() = 1 Тогда
        Ит.ИспользоватьСубконто(ВидыСубконто.Сотрудники, ВыбСубконто2, 2);
    Иначе
        Ит.ИспользоватьСубконто(ВидыСубконто.Сотрудники);
    КонецЕсли;                                             
    Ит.ВыполнитьЗапрос(ВыбНачПериода, ВыбКонПериода, ВыбСубконто1.СчетУчета,,, 3, "Операция", "К");
    Таб.ВывестиСекцию("Заголовок"); 
    
    СЗДебет = СоздатьОбъект("СписокЗначений");
    СЗКредит = СоздатьОбъект("СписокЗначений");
    СЗСотры = СоздатьОбъект("СписокЗначений");
    ТЗ = СоздатьОбъект("ТаблицаЗначений"); 
    ТЗ.НоваяКолонка("ККод","Строка");
    ТЗ.НоваяКолонка("ТМЦ","Строка");//Справочник.ТМЦ    

    ТЗ.НоваяКолонка("ЕдИзм","Строка");
    ТЗ.НоваяКолонка("Начало","Число");
    ТЗ.НоваяКолонка("Конец","Число");
    ТЗ.НоваяКолонка("Дебет","Число");
    ТЗ.НоваяКолонка("Кредит","Число");
    Если ВыбСубконто2.Выбран() = 0 Тогда
        Ит.ВыбратьСубконто(2,1);
        Пока Ит.ПолучитьСубконто(2) =1 Цикл
            Если Ит.СКД(3)<>0 Тогда
                СЗСотры.ДобавитьЗначение(Ит.Субконто(2), Ит.Субконто(2).Наименование);
                ТЗ.НоваяКолонка("С_"+СЗСотры.РазмерСписка(),"Число");                    
            КонецЕсли;              
        КонецЦикла;
    КонецЕсли;
    
    Ит.ВыбратьСубконто(1);
    Пока Ит.ПолучитьСубконто(1) = 1 Цикл 
        ТЗ.НоваяСтрока();            
            ТЗ.ККод = Ит.Субконто(1).Код;
        ТЗ.ТМЦ = Ит.ПредставлениеСубконто(1,);//Субконто(1);

        ТЗ.ЕдИзм = Ит.Субконто(1).ЕдИзм.Наименование;
        ТЗ.Начало = Ит.СНД(3);
        ТЗ.Дебет  = Ит.ДО(3);
        ТЗ.Кредит = Ит.КО(3);
        ТЗ.Конец  = Ит.СКД(3);
        Если ВыбСубконто2.Выбран() = 0 Тогда                                       
            Ит.ВыбратьСубконто(2,1);
            Пока Ит.ПолучитьСубконто(2)= 1 Цикл
                ТекПоз = СЗСотры.НайтиЗначение(Ит.Субконто(2));
                ТЗ.УстановитьЗначение(ТЗ.НомерСтроки,"С_"+Строка(ТекПоз),Ит.СКД(3));
            КонецЦикла;
        КонецЕсли;
    КонецЦикла;
    Таб.ВывестиСекцию("Шапка|Начало"); 
    Документ = "";
    Таб.ПрисоединитьСекцию("Шапка|Конец");
    Если ВыбСубконто2.Выбран() = 0 Тогда        
        Для идн = 1 По СЗСотры.РазмерСписка() Цикл  
            СЗСотры.ПолучитьЗначение(идн, Документ);
            Таб.ПрисоединитьСекцию("Шапка|Оборот");
        КонецЦикла;                           
    КонецЕсли;
    КС = 0;
    ТЗ.ВыбратьСтроки();
    Пока ТЗ.ПолучитьСтроку() = 1 Цикл 
        КС = КС+1;
        Состояние("Обрабатывается "+ТЗ.НомерСтроки + " из "+ТЗ.КоличествоСтрок());
        Таб.ВывестиСекцию("Субконто1|Начало");
        Таб.ПрисоединитьСекцию("Субконто1|Конец");
        Если ВыбСубконто2.Выбран() = 0 Тогда
            Для идн = 1 По СЗСотры.РазмерСписка() Цикл
                Оборот = 0;
                Оборот = ТЗ.ПолучитьЗначение(ТЗ.НомерСтроки,"С_"+Строка(идн));
                Таб.ПрисоединитьСекцию("Субконто1|Оборот");
            КонецЦикла;                               
        КонецЕсли;
    КонецЦикла;    
    
    Таб.ВывестиСекцию("Итого|Начало");
    Таб.ПрисоединитьСекцию("Итого|Конец");
    Если ВыбСубконто2.Выбран() = 0 Тогда
        Для идн = 1 По СЗСотры.РазмерСписка() Цикл
            Таб.ПрисоединитьСекцию("Итого|Оборот");
        КонецЦикла;                               
    КонецЕсли;
    Таб. ВывестиСекцию("Подвал");
    Таб.ТолькоПросмотр(0);
    Таб.Опции(1,1,1,0);
    Таб.Показать("Сформировать","");
    Сигнал();
    Сигнал();
    Сигнал();
    Сигнал();
КонецПроцедуры
Процедура ПриОткрытии()
    ВыбНачПериода = НачалоПериодаБИ();
    ВыбКонПериода = РабочаяДата();     
КонецПроцедуры  

//===============================================================



надо было просто мне мозгами пошевелить
бухи от меня в диком восторге, все плохое позабыто и терь у нас мир и согласие
:-)))
все одно - спасибки тебе
   koshechka
 
35 - 25.06.04 - 01:17
получилось можно по классиф. можно по складу, мож. по тому и тому, просто супер! а на счет халяв - я тя умоляю - не пользуюсь
сама люблю поработать :-)
   Z1
36 - 25.06.04 - 09:01
(34,35) Молодец. Твое решение один в один ложиться на (24)- метод разделяй и
властвуй. Разделяем одну сложную задачу на несколько независимых мелких более простых.Далее решаем каджую задачу по отдельности и имеем решение исходной задачи.
Совет на будущее. В таблицах значения хранить не представления товаров не
коды товаров а сами элементы справочника т.е
 ТЗ.НоваяКолонка("ТМЦ","Справочник.ТМЦ");//Справочник.ТМЦ     
ТЗ.НоваяКолонка("ЕдИзм","Справочник.Единицы");
Если хранить в виде строк то в будущем можешь налететь на большие грабли
(при поиске в таблице значений и/или при свертке таблицы значений)

Интересно а почему в базу знаний не заносят?
   427
 
37 - 25.06.04 - 09:37
(36) хороший совет... хранить ссылки... В любой момент можно додернуть из элемента нужную инфу.. Кстати, если Единица хранится в карточке материала/товара - тогда ее хранить не надо - а просто получать в момент печати.

Только и в этом случае можно налететь... Причем не совсем явно... Например, в сортировках...

Но это реже все таки.



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