Имя: Пароль:
1C
1C 7.7
v7: Как посчитать в отчете итоги в 1с 7.7?
, ,
0 Luffy
 
20.01.16
05:53
Подскажите пожалуйста, как подсчитать итог дала?

Вот код добавления одной строки в таблицу
// ПечатьСтроки(Запрос,Ном,НазваниеСекции,ПечТекстСтроки,ТекРасшифровка)
//
// Параметры:
//  Запрос - объект "Запрос", на основании которого строится отчет
//    Ном - Номер группировки запроса (Число)
//    НазваниеСекции - название секции, которую следует использовать (Строка)
//    ПечТекстСтроки - текстовое представление текущей строки
//    ТекРасшифровка - расшифровка текущей строки
//
// Возвращаемое значение:
//  Нет
//
// Вызывается из формул элементов диалога:
//
// Описание:
//  Производит вывод в печатную форму одной строки запроса.
//

Процедура ПечатьСтроки(Запрос,Ном,НазваниеСекции,ПечТекстСтроки,ТекРасшифровка)
        
    ПечЕд = Запрос.Номенклатура.ОсновнаяЕдиница;
    
    //начальный остаток                              
    ПечНачОстС     = глФРМ(Запрос.НачОстС);              
    ПечНачОстК     = глФРМКоличество(Запрос.НачОстК,ПечЕд);        
    ПечНачОстД     = ФРМКоличество(Запрос.НачОстД*Запрос.Номенклатура.ЕмкостьБазовойЕдиницы/10,ПечЕд);
    Таб.ВывестиСекцию(НазваниеСекции+"|Начало");
    //Область = Таб.ПолучитьСекцию("Итого");
    //Область.Параметры.ИтогоСумма = Таб.Итог("ПечНачОстД");
    //Таб.Вывести(Область);
      Область = Таб.Область("R10C3:R16C3");
      СуммаПечНачОстД = Ф
    
    // приходы (по операциям)
    ПриходС        = Запрос.ПриходС;
    ПриходК        = Запрос.ПриходК;
    ПриходД        = Запрос.ПриходД*Запрос.Номенклатура.ЕмкостьБазовойЕдиницы/10;
    ВсегоСтрок     = СписокОперДебет.РазмерСписка();
    Для СчЦикла=1 по ВсегоСтрок Цикл
        НазвОперации     = СписокОперДебет.ПолучитьЗначение(ВсегоСтрок - СчЦикла + 1).Идентификатор();
        ТекПриходС         = Запрос.ПолучитьАтрибут(НазвОперации+"ПриходС");
        ТекПриходК         = Запрос.ПолучитьАтрибут(НазвОперации+"ПриходК");
        ТекПриходД         = Запрос.ПолучитьАтрибут(НазвОперации+"ПриходД")*Запрос.Номенклатура.ЕмкостьБазовойЕдиницы/10;
        ПриходС            = ПриходС - ТекПриходС;
        ПриходК            = ПриходК - ТекПриходК;
        ПриходД            = ПриходД - ТекПриходД;
        ПечПриходС         = глФРМ(ТекПриходС);
        ПечПриходК         = глФРМКоличество(ТекПриходК,ПечЕд);
        ПечПриходД         = ФРМКоличество(ТекПриходД,ПечЕд);
        Таб.ПрисоединитьСекцию(НазваниеСекции+"|Приход");
    КонецЦикла;                                                                
    ПечПриходС     = глФРМ(ПриходС);
    ПечПриходК     = глФРМКоличество(ПриходК,ПечЕд);
    ПечПриходД     = ФРМКоличество(ПриходД,ПечЕд);
    Таб.ПрисоединитьСекцию(НазваниеСекции+"|Приход");
    
  
    // расходы (по операциям)  
    РасходС        = Запрос.РасходС;
    РасходК     = Запрос.РасходК;
    РасходД     = Запрос.РасходД*Запрос.Номенклатура.ЕмкостьБазовойЕдиницы/10;
    РасходОборот     = Запрос.РасходВыручка;
    ВсегоСтрок     = СписокОперКредит.РазмерСписка();
    Для СчЦикла=1 по ВсегоСтрок Цикл
        НазвОперации     = СписокОперКредит.ПолучитьЗначение(ВсегоСтрок - СчЦикла + 1).Идентификатор();
        ТекРасходС         = Запрос.ПолучитьАтрибут(НазвОперации+"РасходС");
        ТекРасходК        = Запрос.ПолучитьАтрибут(НазвОперации+"РасходК");
        ТекРасходД        = Запрос.ПолучитьАтрибут(НазвОперации+"РасходД");
        ТекРасходОборот        = Запрос.ПолучитьАтрибут(НазвОперации+"РасходВыручка");
        РасходС            = РасходС - ТекРасходС;
        РасходК            = РасходК - ТекРасходК;
        РасходД            = РасходД - ТекРасходД;
        РасходОборот    = РасходОборот - ТекРасходОборот;
        ПечРасходС         = глФРМ(ТекРасходС);
        ПечРасходК         = глФРМКоличество(ТекРасходК,ПечЕд);
        ПечРасходД         = ФРМКоличество(ТекРасходД,ПечЕд);
        ПечРасходОборот = глФРМ(ТекРасходОборот);
        Таб.ПрисоединитьСекцию(НазваниеСекции+"|Расход");
    КонецЦикла;
    ПечРасходС     = глФРМ(РасходС);
    ПечРасходК     = глФРМКоличество(РасходК,ПечЕд);
    ПечРасходД     = ФРМКоличество(РасходД,ПечЕд);
    ПечРасходОборот = глФРМ(РасходОборот);
    Таб.ПрисоединитьСекцию(НазваниеСекции+"|Расход");
    
    // конечный остаток
    ПечКонОстС     = глФРМ(Запрос.КонОстС);      
    ПечКонОстК     = глФРМКоличество(Запрос.КонОстК,ПечЕд);      
    ПечКонОстД     = ФРМКоличество(Запрос.КонОстД*Запрос.Номенклатура.ЕмкостьБазовойЕдиницы/10,ПечЕд);      
    Таб.ПрисоединитьСекцию(НазваниеСекции+"|КонечныйОстаток");
    глОживить(1);

КонецПроцедуры
1 Любопытная
 
20.01.16
05:56
Итог чего?
2 Luffy
 
20.01.16
06:00
Итог ПечНачОстД,ПечКонОстД,ПечПриходД,ПечРасходД
3 VladZ
 
20.01.16
06:29
Запихай в ТЗ и считай там.
4 Luffy
 
20.01.16
06:36
(3) Можешь набросать код пожалуйста, как примерно это будет выглядеть?
5 GreyK
 
20.01.16
06:37
(0) Подсчитать количество даллов в запросе не предлагать?
6 Luffy
 
20.01.16
06:41
(5) Можно, но как будет это выглядеть?
7 GreyK
 
20.01.16
06:55
(6) Первым запросом подготавливаешь данные, а вторым считаешь количество в далах по самой последней группировке функцией Сумма() примерно так, если делаешь только по товарам, без документов:
|Функция КолНачОстаток = Сумма(КолНачОстатокВдалах(Товар));
|Функция КолПриход = Сумма(КолПриходВдалах(Товар));
8 Ёпрст
 
20.01.16
07:09
(0) ДО или После (смотря куда итоги нужно пихать) группировки выводишь значения показателей.
ЗЫ: в типовой всё есть, и этот отчет (тобой допиленный) тоже это умеет. Делай, по-аналогии.
9 Luffy
 
20.01.16
07:34
(8) Можешь скинуть, где типовая находится?
10 фобка
 
20.01.16
07:47
Итог в далах! А не далА. Далы это декалитры
11 Luffy
 
20.01.16
07:52
(10) Да верно!
12 Ёпрст
 
20.01.16
08:21
(9) Ты на неё сейчас смотришь в пофигураторе
13 Ёпрст
 
20.01.16
08:22
Если че, там в рекурсии обходятся группироки запроса через вывестиГруппировку, перед обходом каждой группировки будут итоги по этой группировке. Бери их и вставляй куда тебе нужно
14 Luffy
 
20.01.16
08:29
Да вот код этой процедуры
Процедура ВывестиГруппировку(Запрос,Ном)
      
    Если Ном <= КоличествоГруппировок Тогда
        
        НазваниеГруппировки = СписокГруппировок.ПолучитьЗначение(Ном);
        Если НазваниеГруппировки = "Документ" Тогда
            ТекОстС = Запрос.НачОстС;
            ТекОстК = Запрос.НачОстК;
            ТекОстД = Запрос.НачОстД;
        КонецЕсли;        
        
        Пока Запрос.Группировка(Ном) = 1 Цикл
            
            Если НазваниеГруппировки = "Документ" Тогда
                НазваниеСекции="Документ";  
            Иначе                          
                НазваниеСекции="Строка"+Ном;
            КонецЕсли;        
            ПечТекстСтроки = Запрос.ПолучитьАтрибут(НазваниеГруппировки);
            Если (ТипЗначенияСтр(ПечТекстСтроки) = "Документ") или
                 (ТипЗначенияСтр(ПечТекстСтроки) = "Справочник") Тогда
                ТекРасшифровка = ПечТекстСтроки;
            Иначе
                ТекРасшифровка = "";
            КонецЕсли;
            Если (ТипЗначенияСтр(ПечТекстСтроки) = "Справочник") Тогда
                Если ПечТекстСтроки.Вид()="ВВП" Тогда
                    ПечТекстСтроки = ПечТекстСтроки.Код+" "+ПечТекстСтроки;
                КонецЕсли;
            КонецЕсли;
            Если НазваниеГруппировки = "Партия" Тогда
                ПечТекстСтроки = СформироватьИнформациюОПартии(ПечТекстСтроки);
            ИначеЕсли (НазваниеГруппировки = "СвойствоПартии")
                    и (ПустоеЗначение(ПечТекстСтроки) = 0)
                    Тогда
                ПечТекстСтроки = ""+ПечТекстСтроки.Владелец+": "+СокрЛП(ПечТекстСтроки);
            
            ИначеЕсли НазваниеГруппировки = "Документ" Тогда
                ПечТекстСтроки = "" + глПредставлениеДокумента(ПечТекстСтроки) +
                                 " (" + СокрЛП(глИнформацияПоДокументуВЖурнале(ПечТекстСтроки)) + ")";
            ИначеЕсли НазваниеГруппировки = "Номенклатура" Тогда
                ПечТекстСтроки = "" + ПечТекстСтроки + ?(Константа.ПоказыватьАртикул = 1, " " + СокрЛП(Запрос.Номенклатура.Артикул), "")
            
            ИначеЕсли (НазваниеГруппировки = "Производитель") Тогда  
//                Сообщить("Запрос.Производитель"+ Запрос.Производитель);
                Попытка
                    Производитель_ИНН = Запрос.Производитель.ЮрФизЛицо.ИНН
                Исключение
                    Производитель_ИНН="";
                КонецПопытки;
                Попытка
                    Производитель_КПП = Запрос.Производитель.ЮрФизЛицо.КПП
                Исключение
                    Производитель_КПП="";
                КонецПопытки;
                    
                ПечТекстСтроки = "" + ПечТекстСтроки + Производитель_ИНН+?(СтрДлина(СокрЛП(Производитель_КПП))<>0,"\"+СокрЛП(Производитель_КПП),"");
            
            ИначеЕсли (НазваниеГруппировки = "Импортер") Тогда
                Попытка
                    Импортер_ИНН = Запрос.Импортер.ЮрФизЛицо.ИНН
                Исключение
                    Импортер_ИНН="";
                КонецПопытки;
                Попытка
                    Импортер_КПП = Запрос.Импортер.ЮрФизЛицо.КПП
                Исключение
                    Импортер_КПП="";
                КонецПопытки;
                ПечТекстСтроки = "" + ПечТекстСтроки + Импортер_ИНН+?(СтрДлина(СокрЛП(Импортер_КПП))<>0,"\"+СокрЛП(Импортер_КПП),"");
            КонецЕсли;
            ПечТекстСтроки = ?(ПустоеЗначение(ПечТекстСтроки)=1,глПредставлениеПустогоЗначения(НазваниеГруппировки),ПечТекстСтроки);
            
            Выводить=1;
            Если (НазваниеГруппировки = "Контрагент") И (ПоГруппам=1) Тогда
                Если  (Запрос.ЭтоГруппа("Контрагент")=0) Тогда
                    Выводить=0;
                КонецЕсли;
            КонецЕсли;
            Если Выводить=1 Тогда
                Если НазваниеГруппировки = "Документ" Тогда
                    ПечатьСтрокиДокумента(Запрос,Ном,НазваниеСекции,ПечТекстСтроки,ТекРасшифровка,ТекОстС,ТекОстК,ТекОстД);
                Иначе
                    ПечатьСтроки(Запрос,Ном,НазваниеСекции,ПечТекстСтроки,ТекРасшифровка);
                КонецЕсли;
            КонецЕсли;
        
            // если есть более детальная группировка - выведем ее
            Если КоличествоГруппировок > Ном Тогда
                ВывестиГруппировку(Запрос,Ном+1);
            КонецЕсли;          
        
        КонецЦикла;
    КонецЕсли;

КонецПроцедуры // ВывестиГруппировку()
15 Ёпрст
 
20.01.16
08:32
(14) ну, теперь читай, что тебе пишут, много думай.
16 Luffy
 
20.01.16
11:06
(7) То есть типо та сделать?)
ТекстЗапроса = ТекстЗапроса +
"Функция ПечНачОстД = Сумма(НачОст(Далы));
|Функция ПечПриходД = Сумма(Приход(Далы));
|Функция ПечРасходД = Сумма(Расход(Далы));
|Функция ПечКонОстД = Сумма(КонОст(Далы));";
17 Luffy
 
20.01.16
11:15
(13) Как это сделать можно, я не знаю, скажи пожалуйста?
18 Luffy
 
21.01.16
09:20
Может кто нибудь помочь пожалуйста?
19 Luffy
 
21.01.16
09:51
Проблема в том, что нормализации строки, где нет умножения там выводит итог, где есть не выводит, что делать?
Здесь выводит итог:
ПечНачОстК = глФРМКоличество(Запрос.НачОстК,ПечЕд);        
А здесь не выводит:    
ПечНачОстД=ФРМКоличество(Запрос.НачОстД*Запрос.Номенклатура.ЕмкостьБазовойЕдиницы/10,ПечЕд);
20 Luffy
 
21.01.16
10:14
(3) Я пробовал записать в таблицу значения, но она не сохраняется, каждый раз новое значение добавляет и сразу суммировать не получается из за этого.
21 VladZ
 
21.01.16
11:34
(19) Я не понимаю, что у тебя за проблема. Тебе уже предложили несколько вариантов. Могу предложить еще один вариант: кидаешь мне на мыло базу и отчет.  За 500 рублей пришлю готовый вариант. Правда, не сразу. А часов через 6. Сейчас пока занят.
22 HawkEye
 
21.01.16
15:36
(19)
напиши так:
Сообщить("НачОст: " + Запрос.НачОстД);
Сообщить("Емкость б.е.: " + Запрос.Номенклатура.ЕмкостьБазовойЕдиницы);
Сообщить("Произведение: " + Запрос.НачОстД*Запрос.Номенклатура.ЕмкостьБазовойЕдиницы/10);
ПечНачОстД=ФРМКоличество(Запрос.НачОстД*Запрос.Номенклатура.ЕмкостьБазовойЕдиницы/10,ПечЕд);
23 HawkEye
 
21.01.16
15:36
да... все не читал ))) кто там кому дала или не дала?
24 asady
 
21.01.16
15:46
(0) http://catalog.mista.ru/public/142961/
когда-то давно делал подобное -

может подойдет...

что вес, что объем - принцип одинаковый
25 Luffy
 
22.01.16
05:16
(22) Неа все равно не сработала, нет итогов, отчет выглядит так же http://catalog.mista.ru/public/142961/  только вместо веса дал, дал по НачОст, КонОст, Приход, Расход, в низу должно про суммироваться в итог ))
26 Luffy
 
22.01.16
05:17
(24) А есть другая ссылка? а то от туда скачать не могу(
27 Luffy
 
22.01.16
05:35
(23) Когда умножения происходит в этих строках

ПечНачОстД=ФРМКоличество(Запрос.НачОстД*Запрос.Номенклатура.ЕмкостьБазовойЕдиницы/10,ПечЕд);
ПриходД=Запрос.ПриходД*Запрос.Номенклатура.ЕмкостьБазовойЕдиницы/10;
РасходД=Запрос.РасходД*Запрос.Номенклатура.ЕмкостьБазовойЕдиницы/10;
ПечКонОстД=ФРМКоличество(Запрос.КонОстД*Запрос.Номенклатура.ЕмкостьБазовойЕдиницы/10);

Итоги не выводит, как только убираю *Запрос.Номенклатура.ЕмкостьБазовойЕдиницы

Итог появляется такой же как в
ПечНачОстК = глФРМКоличество(Запрос.НачОстК,ПечЕд);
ПечПриходК = глФРМКоличество(ПриходК,ПечЕд);
ПечРасходК = глФРМКоличество(РасходК,ПечЕд);
ПечКонОстК = глФРМКоличество(Запрос.КонОстК,ПечЕд);

Так как, числа одинаковые просто в тех умножается и делится на 10.
Может причина в функции ФРМКоличество? вот код

Функция ФРМКоличество(Знач ЧислЗнач, Единица="", РаздТриад=" ") Экспорт
    
    Если ПустоеЗначение(Единица)=0 Тогда
        Если ТипЗначения(Единица)=11 Тогда
            ЧислЗнач = ?(Единица.Коэффициент=0,0,ЧислЗнач / Единица.Коэффициент);
        КонецЕсли;
    КонецЕсли;
    Стр=СокрЛ(Формат(ЧислЗнач,"Ч015.4." +  РаздТриад));

    Возврат Стр;

КонецФункции //глФРМКоличество()
28 VladZ
 
22.01.16
06:00
(25) Что пишет в  Сообщить("Емкость б.е.: " + Запрос.Номенклатура.ЕмкостьБазовойЕдиницы);   ?
29 Luffy
 
22.01.16
06:07
(28) НачОст: 8
Емкость б.е.: 0.25
Произведение: 0.2
НачОст: 3
Емкость б.е.: 1
Произведение: 0.3
НачОст: 53
Емкость б.е.: 0.5
Произведение: 2.65
НачОст: 14
Емкость б.е.: 0.5
Произведение: 0.7
НачОст: 5
Емкость б.е.: 0.75
Произведение: 0.375

И так 229 строк.
30 VladZ
 
22.01.16
06:16
Судя по (20) - не тем ты занимаешься...
31 VladZ
 
22.01.16
06:17
Задача в целом не сложная. Решение можно найти в интернете.  Или ты ждешь, что тебе тут готовое решение дадут?
32 Luffy
 
22.01.16
06:20
(30) Есть идеи, как это реализовать? если для тебя не сложная, так подскажи пожалуйста)
33 VladZ
 
22.01.16
06:24
(32) Чем тебя не устроил вариант с ТЗ?
34 Luffy
 
22.01.16
06:28
(33) По одной строки добавляет, возвращается с новой строкой, не сохраняется старая строка
35 VladZ
 
22.01.16
06:29
(34) Покажи, где объявил переменную для ТЗ.

Вариант с расчетом в запросе: Умножение в запросе [Решение]
36 Luffy
 
22.01.16
06:29
(33)
ПечНачОстД = ФРМКоличество(Запрос.НачОстД*Запрос.Номенклатура.ЕмкостьБазовойЕдиницы/10,ПечЕд);
    Если ПечНачОстД <> "" Тогда
    
        СуммаНачОстД = СоздатьОбъект("ТаблицаЗначений");
        СуммаНачОстД.НоваяКолонка("НачОстД",,,,,15);
        СуммаНачОстД.НоваяСтрока();  
        СуммаНачОстД.НачОстД = ПечНачОстД;

    КонецЕсли;
37 VladZ
 
22.01.16
06:33
(36)  Красава!  Сам понимаешь, что делаешь?  Таблица значений СуммаНачОстД  создается каждый раз заново при выводе одного значения (!!!!).  Процесс разработки программы начинается с разработке алгоритма. Глядя на тебя создается впечатление, что ты пытаешься писать код методом тыка.  Не проканает!  Сначала нужно придумать работающий алгоритм (!!!). На основании алгоритма - писать код.  Если ты думаешь, что процесс программирования - это "вот я ща тут воткну пару строк кода и вот тут - и все взлетит!" ты жестоко ошибаешься.
38 VladZ
 
22.01.16
06:35
"Придумать" - неверное слово.  Алгоритм нужно разработать.
39 ЧеловекДуши
 
22.01.16
06:36
(0) Написать нормальный отчет на подобие СКД от 8.х :)
И радоваться расчету :)
40 Luffy
 
22.01.16
06:37
(37) Да ты прав, просто тыкаю, без всякого алгоритма. 0 опыта, да и подсказывать не кому(
41 ЧеловекДуши
 
22.01.16
06:37
(36) Холоп, все придумано до тебя. Главное найти и понять :)
42 VladZ
 
22.01.16
06:41
(40) Метод "тыка" - это конечно замечательно. Дает много практических знаний. Представь, что ты решил стать электриком. Тебе приносят какую-то "шайтан-машину" и просят починить.  Внимание вопрос: Ты хотя бы постараешься вникнуть, как эта фигня работает? Или будешь пальцАми тыкать во все подряд, пока тебя током не шарахнет?
43 VladZ
 
22.01.16
06:46
Еще раз повторюсь: задача простая. Показывает несколько интересных вещей:

1. насколько испытуемый понимает в программировании в целом.

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

Ты что-то совсем не радуешь не по первому пункту, ни по второму.
44 Luffy
 
22.01.16
06:47
(42) Начался троллинг, от того, что ты сейчас пишешь, проблема не решиться, попробую создать документ кароч, туда будет добавлять в таб.часть, далы по НачОст, КонОст, Приход, Расход, и от туда выведу итоги.
45 Luffy
 
22.01.16
06:49
(43) Ессно документ будет записываться, как искать и что может быть подобное? если есть источники, я весь внимание.
46 Luffy
 
22.01.16
06:51
(43) Я же не просто сюда обратился, а от не знания, думал хоть тут дадут какой то базис, но пока, что то не очень(
47 VladZ
 
22.01.16
06:53
(45) Я тебе в (35) дал ссылку. Как раз твоя тема
48 VladZ
 
22.01.16
06:55
Вариант с ТЗ: вынеси создание ТЗ из процедуры "Печать" в процедуру "Сформировать".
49 Luffy
 
22.01.16
06:55
(47) Щас гляну, в любом случае спасибо вам, что не оставили без внимания)
50 Luffy
 
22.01.16
06:56
(48) Щас по пробую
51 VladZ
 
22.01.16
06:57
(46) Сейчас в инете инфы - вагон и маленькая тележка. Ищи и читай. Учить тебя специально никто не будет.
52 Luffy
 
22.01.16
08:25
(51) Вообщем запросом не получилось, хотя и вывел данные в итоги, но число не то, делал так, добавил функцию.
ТекстЗапроса = ТекстЗапроса +
    "Функция НачОстД = НачОст(Далы);
    |Функция ПриходД = Приход(Далы);
    |Функция РасходД = Расход(Далы);
    |Функция КонОстД = КонОст(Далы);
    |Функция СуммаНачОстД = Сумма(Запрос.НачОстД * Запрос.Номенклатура.ЕмкостьБазовойЕдиницы/10);";

И здесь прост выводил
ПечНачОстД = ФРМКоличество(Запрос.СуммаНачОстД,ПечЕд);

Сейчас попробую через документ.
53 oslokot
 
22.01.16
08:27
Я один не понимаю что такое "итог дала" ?
54 Luffy
 
22.01.16
08:30
(53) Это просто Количество*ЕмкостьБазовойЕдиницы/10
55 HawkEye
 
22.01.16
08:32
(25) понятно что не сработало... показало то чего?
56 HawkEye
 
22.01.16
08:33
(29) ну вот... а говоришь нет итогов )) все есть оказывается ))
57 Luffy
 
22.01.16
08:51
(56) Итогов нету, при формирование отчета
58 HawkEye
 
22.01.16
08:53
(57) ну так-то в коде из (0) нет строчек с выводом Итогов...
59 Luffy
 
22.01.16
08:59
(58) Вот код Сформировать.
Процедура Сформировать(ЗакрытьДиалог=0)
    
    Перем Запрос, ТекстЗапроса;
    
    Если глПроверкаДаты(ДатаНачала,ДатаКонца)=0 Тогда
        Возврат;
    КонецЕсли;
    
    глПриСменеСтрокиТаблицыМФ(1,ТекСтрокаВТаблице,Контекст); // записываем изменения если они были

    Если ПроверкаУчетнойПолитики() = 0 Тогда
        Возврат;
    КонецЕсли;
    
    Если (ТипЗначенияСтр(Таб) <> "Таблица") ИЛИ (Обновить = 0) Тогда
           Таб = СоздатьОбъект("Таблица");
    Иначе
         Таб.Очистить();
    КонецЕсли;      
    
    Таб.ИсходнаяТаблица( "ВедомостьПоПартиямТМЦ" );  

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

    Расшифровка.Установить("ВыбВВП",        ВыбВВП);
    Расшифровка.Установить("ВыбНоменклатура",        ВыбНоменклатура);
    Расшифровка.Установить("ВыбМОЛ",        ВыбМОЛ);
    Расшифровка.Установить("ВыбПоставщик",    ВыбПоставщик);
    Расшифровка.Установить("ВыбПроизводитель",    ВыбПроизводитель);
    Расшифровка.Установить("ВыбИмпортер",    ВыбИмпортер);

    Расшифровка.Установить("ПоОперациям",     ПоОперациям);  
    Расшифровка.Установить("ПоГруппам",     ПоГруппам);  
    
    Расшифровка.Установить("ВидСуммы",        ВидСуммы);
    
    Расшифровка.Установить("Группировки",    Группировки);
    

    // запомним МФ только если он задан
    Если глМножественныйФильтрЗадан(ТаблицаМФ) = 1 Тогда
        Расшифровка.Установить("ТаблицаМФ", ТаблицаМФ);
    КонецЕсли;
    
    глПриСменеСтрокиТаблицыМФ(1,ТекСтрокаВТаблице,Контекст); // записываем изменения если они были

    //Создание объекта типа Запрос
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =                                                                    
    "//{{ЗАПРОС(Сформировать)
    |Период с ДатаНачала по ДатаКонца;
    |Фирма            = Регистр.ПартииНаличие.Фирма;
    |УпрАналитика    = Регистр.ПартииНаличие.Фирма.УпрАналитика;
    |ЮрЛицо         = Регистр.ПартииНаличие.Фирма.ЮрЛицо;
    |Алкоголь        = Регистр.ПартииНаличие.Номенклатура.Алкоголь;
    |Номенклатура    = Регистр.ПартииНаличие.Номенклатура;
    |ВВП            = Регистр.ПартииНаличие.Номенклатура.ВВП;
    |МОЛ            = Регистр.ПартииНаличие.МОЛ;
    |Партия            = Регистр.ПартииНаличие.Партия;
    |Поставщик        = Регистр.ПартииНаличие.Партия.Поставщик;
    |Производитель    = Регистр.ПартииНаличие.Номенклатура.Производитель;
    |Импортер        = Регистр.ПартииНаличие.Номенклатура.Импортер;
    |Док            = Регистр.ПартииНаличие.ТекущийДокумент;
    |Контрагент        = Регистр.ПартииНаличие.ТекущийДокумент.ПоступлениеТМЦ.Контрагент,
    |                  Регистр.ПартииНаличие.ТекущийДокумент.ВозвратПоставщику.Контрагент,
    |                  Регистр.ПартииНаличие.ТекущийДокумент.Реализация.Контрагент,
    |                  Регистр.ПартииНаличие.ТекущийДокумент.ОтчетККМ.Контрагент,
//    |                  Регистр.ПартииНаличие.ТекущийДокумент.РеализацияСобств.Контрагент,
    |                  Регистр.ПартииНаличие.ТекущийДокумент.ВозвратОтПокупателя.Контрагент;
//    |ВидЛицензии    = Регистр.ПартииНаличие.ТекущийДокумент.ПоступлениеТМЦ.Контрагент.ОсновнаяЛицензия.ВидДеятельности,
//    |                  Регистр.ПартииНаличие.ТекущийДокумент.ВозвратПоставщику.Контрагент.ОсновнаяЛицензия.ВидДеятельности,
//    |                  Регистр.ПартииНаличие.ТекущийДокумент.Реализация.Контрагент.ОсновнаяЛицензия.ВидДеятельности,
//    |                  Регистр.ПартииНаличие.ТекущийДокумент.РеализацияСобств.Контрагент.ОсновнаяЛицензия.ВидДеятельности,
//    |                  Регистр.ПартииНаличие.ТекущийДокумент.ВозвратОтПокупателя.Контрагент.ОсновнаяЛицензия.ВидДеятельности;
    |КодОперации    = Регистр.ПартииНаличие.КодОперации;";
//    |Условие (Алкоголь=Перечисление.Булево.Да);";
    
    Если ВидСуммы = 1 Тогда // бух с НДС
        ТекстЗапроса = ТекстЗапроса + "Сумма = Регистр.ПартииНаличие.СуммаРуб;";
        
    ИначеЕсли ВидСуммы = 2 Тогда // бух без НДС
        ТекстЗапроса = ТекстЗапроса + "Сумма = Регистр.ПартииНаличие.СуммаБезНДС;";
        
    Иначе
        ТекстЗапроса = ТекстЗапроса + "Сумма = Регистр.ПартииНаличие.СуммаУпр;";
        
    КонецЕсли;
    
    ТекстЗапроса = ТекстЗапроса + "Выручка = Регистр.ПартииНаличие.ПродСтоимость;";
    ТекстЗапроса = ТекстЗапроса + "Далы = Регистр.ПартииНаличие.Количество;";
    ТекстЗапроса = ТекстЗапроса + "Количество = Регистр.ПартииНаличие.Количество;";
    
    ТекстЗапроса = ТекстЗапроса +
    "Функция НачОстС = НачОст(Сумма);
    |Функция ПриходС = Приход(Сумма);
    |Функция РасходС = Расход(Сумма);
    |Функция КонОстС = КонОст(Сумма);";
    ТекстЗапроса = ТекстЗапроса +
    "Функция НачОстК = НачОст(Количество);
    |Функция ПриходК = Приход(Количество);
    |Функция РасходК = Расход(Количество);
    |Функция КонОстК = КонОст(Количество);";
    ТекстЗапроса = ТекстЗапроса +
    "Функция НачОстД = НачОст(Далы);
    |Функция ПриходД = Приход(Далы);
    |Функция РасходД = Расход(Далы);
    |Функция КонОстД = КонОст(Далы);
    |Функция СуммаНачОстД = Сумма(Запрос.НачОстД * Запрос.Номенклатура.ЕмкостьБазовойЕдиницы/10);";
    ТекстЗапроса = ТекстЗапроса +
    "Функция РасходВыручка = Расход(Выручка);";

    ТекстЗапроса = ТекстЗапроса +
    //"Условие((КодОперации <> глКО.ПередачаВРозницу)и(КодОперации <> глКО.Перемещение)и((Док.Вид() <> ""РеализацияРозница"")и(Док.Вид()<>""ОтчетККМ"")));";
    
    // Кулагин(20151230
    // Перемещения тоже должны попадать если Фирмы разные.
    "Условие(((КодОперации <> глКО.ПередачаВРозницу)и(КодОперации <> глКО.Перемещение)));";
    //|и((Док.Вид() <> ""РеализацияРозница"")и(Док.Вид()<>""ОтчетККМ""))));";
    // Кулагин)
    
    Для СчЦикла=1 по СписокОперДебет.РазмерСписка() Цикл
        НазвОперации = СписокОперДебет.ПолучитьЗначение(СчЦикла).Идентификатор();
        ТекстЗапроса = ТекстЗапроса + РазделительСтрок+
        "Функция "+НазвОперации+"ПриходС = Приход(Сумма) когда (КодОперации = глКО."+НазвОперации+");"+
        "Функция "+НазвОперации+"ПриходК = Приход(Количество) когда (КодОперации = глКО."+НазвОперации+");"+
        "Функция "+НазвОперации+"ПриходД = Приход(Далы) когда (КодОперации = глКО."+НазвОперации+");";
    КонецЦикла;
    Для СчЦикла=1 по СписокОперКредит.РазмерСписка() Цикл
        НазвОперации = СписокОперКредит.ПолучитьЗначение(СчЦикла).Идентификатор();
        ТекстЗапроса = ТекстЗапроса + РазделительСтрок+
        "Функция "+НазвОперации+"РасходС = Расход(Сумма) когда (КодОперации = глКО."+НазвОперации+");"+
        "Функция "+НазвОперации+"РасходК = Расход(Количество) когда (КодОперации = глКО."+НазвОперации+");"+
        "Функция "+НазвОперации+"РасходД = Расход(Далы) когда (КодОперации = глКО."+НазвОперации+");"+
        "Функция "+НазвОперации+"РасходВыручка = Расход(Выручка) когда (КодОперации = глКО."+НазвОперации+");";
    КонецЦикла;
    
    Загол="";
    
    НетОш = 1; // нет ошибок при наложении фильтров
    Если ВидРазделителя = 1 Тогда
        НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "Фирма",ВыбРазделитель1,"ВыбРазделитель1",ТекстЗапроса,Загол);
        НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "ЮрЛицо",,,ТекстЗапроса,Загол);
        НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "УпрАналитика",,,ТекстЗапроса,Загол);
    ИначеЕсли ВидРазделителя = 2 Тогда                                                  
        НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "ЮрЛицо",ВыбРазделитель2,"ВыбРазделитель2",ТекстЗапроса,Загол);
        НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "Фирма",,,ТекстЗапроса,Загол);
        НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "УпрАналитика",,,ТекстЗапроса,Загол);
    ИначеЕсли ВидРазделителя = 3 Тогда                                                  
        НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "УпрАналитика",ВыбРазделитель3,"ВыбРазделитель3",ТекстЗапроса,Загол);
        НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "Фирма",,,ТекстЗапроса,Загол);
        НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "ЮрЛицо",,,ТекстЗапроса,Загол);
    КонецЕсли;
    НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "Номенклатура",ВыбНоменклатура,"ВыбНоменклатура",ТекстЗапроса,Загол,"СвойстваНоменклатуры");
    НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "ВВП",ВыбВВП,"ВыбВВП",ТекстЗапроса,Загол,"СвойстваНоменклатуры");
    НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "МОЛ",ВыбМОЛ,"ВыбМОЛ",ТекстЗапроса,Загол);                                
    НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "Поставщик",ВыбПоставщик,"ВыбПоставщик",ТекстЗапроса,Загол,"СвойстваКонтрагентов");
    НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "Контрагент",ВыбКонтрагент,"ВыбКонтрагент",ТекстЗапроса,Загол,"СвойстваКонтрагентов");
    НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "Производитель",ВыбПроизводитель,"ВыбПроизводитель",ТекстЗапроса,Загол);
    НетОш = НетОш * глФильтрПоПеременнойЗапроса(ТаблицаМФ, "Импортер",ВыбИмпортер,"ВыбИмпортер",ТекстЗапроса,Загол);
    
    Если НетОш = 0 Тогда
        Возврат;
    КонецЕсли;
    
    НомерГруппировкиПоВВП    = 9999; // невозможно большое значение
    
    ПечЗаголовокСтолбца = "";  
    ПечЗаголовок = "Ведомость по видам ТМЦ (" + ?(ВидСуммы = 3,глДоллары,"" + глРубли + ?(ВидСуммы=1,""," без НДС"))+")";
    УстановитьГруппировкиЗапроса(ТекстЗапроса, ПечЗаголовокСтолбца);
    КоличествоГруппировок = СписокГруппировок.РазмерСписка();
    
    Если КоличествоГруппировок > 5 Тогда
        Предупреждение("Нельзя сделать больше 5 группировок!",60);
        Возврат;  
    КонецЕсли;
    
    //Сообщить(ТекстЗапроса);
    
    // Если ошибка в запросе, то выход из процедуры
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Возврат;
    КонецЕсли;    
    
    глЧислоСтрок = 0;

    Таб.ВывестиСекцию("Кнопки");
    Таб.ВывестиСекцию("Шапка");
    Таб.ВывестиСекцию("ШапкаТаблицы|Начало");

    // выводим шапку на каждой странице
    НачПовт = Таб.ВысотаСекции("Кнопки") + Таб.ВысотаСекции("Шапка");
    КонПовт = НачПовт + Таб.ВысотаСекции("ШапкаТаблицы");
    Таб.ПовторятьПриПечатиСтроки(НачПовт + 1, КонПовт);
    
    // сформируем шапку, исходя из выбранной формы представления данных
    ВсегоСтрок = СписокОперДебет.РазмерСписка();
    Для СчЦикла=1 по ВсегоСтрок Цикл
        НазвОперации = СписокОперДебет.ПолучитьЗначение(ВсегоСтрок - СчЦикла + 1).Идентификатор();
        Если (Запрос.ПолучитьАтрибут(НазвОперации+"ПриходК")=0) и
             (Запрос.ПолучитьАтрибут(НазвОперации+"ПриходС")=0) Тогда
            // уберем лишние горизонтальные группировки (по которым нет итогов)
            СписокОперДебет.УдалитьЗначение(ВсегоСтрок - СчЦикла + 1);
        Иначе
            НазвОперации = СписокОперДебет.ПолучитьЗначение(ВсегоСтрок - СчЦикла + 1);
            Таб.ПрисоединитьСекцию("ШапкаТаблицы|Приход");
        КонецЕсли;
    КонецЦикла;                                                                
    НазвОперации = ?(ПоОперациям=1,"Приход - прочее","Приход");
    Таб.ПрисоединитьСекцию("ШапкаТаблицы|Приход");
    
    ВсегоСтрок = СписокОперКредит.РазмерСписка();
    Для СчЦикла=1 по ВсегоСтрок Цикл
        НазвОперации = СписокОперКредит.ПолучитьЗначение(ВсегоСтрок - СчЦикла + 1).Идентификатор();
        Если (Запрос.ПолучитьАтрибут(НазвОперации+"РасходК")=0) И
             (Запрос.ПолучитьАтрибут(НазвОперации+"РасходС")=0) Тогда            
            // уберем лишние горизонтальные группировки (по которым нет итогов)
            СписокОперКредит.УдалитьЗначение(ВсегоСтрок - СчЦикла + 1);
        Иначе
            НазвОперации = СписокОперКредит.ПолучитьЗначение(ВсегоСтрок - СчЦикла + 1);
            Таб.ПрисоединитьСекцию("ШапкаТаблицы|Расход");
        КонецЕсли;
    КонецЦикла;
    НазвОперации = ?(ПоОперациям=1,"Расход - прочее","Расход");
    Таб.ПрисоединитьСекцию("ШапкаТаблицы|Расход");
    
    Таб.ПрисоединитьСекцию("ШапкаТаблицы|КонечныйОстаток");
    глОживить(1);
    
    Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 2, "ВедомостьПоВидамТМЦ", "ВедомостьПоВидамТМЦ");
    
    // ВЫВОД ГРУППИРОВОК ЗАПРОСА
    ВывестиГруппировку(Запрос,1);
    
    Таб.ОбластьПечати(3,,,);
    
    // Заполнение полей "Итого"
    ПечатьСтроки(Запрос,0,"Итого","","");
    
    // Вывод заполненной формы
    Таб.ТолькоПросмотр(1);    
    Если глПолучитьПолномочие("РазрешитьРедактированиеТаблиц") = 0 Тогда
        Таб.Защита(1);
    КонецЕсли;
    Таб.ПараметрыСтраницы(2,,,,,,,,,1,,);
    Таб.Показать("Ведомость по видам ТМЦ", "");
    
    Если (Обновить = 2)ИЛИ(ЗакрытьДиалог=1) Тогда
        СтрокаДействийФормы = "#Закрыть";
    КонецЕсли;
    
КонецПроцедуры
60 HawkEye
 
22.01.16
09:08
(59) я так понимаю, твои шаловливые ручки уже покорежили оригинальный, рабочий текст, да?
1.  ПечатьСтроки(Запрос,0,"Итого","","");

2. Процедура ПечатьСтроки(Запрос,Ном,НазваниеСекции,ПечТекстСтроки,ТекРасшифровка)
        
    ПечЕд = Запрос.Номенклатура.ОсновнаяЕдиница;
    
    //начальный остаток                              

    ПечНачОстС     = глФРМ(Запрос.НачОстС);              
    ПечНачОстК     = глФРМКоличество(Запрос.НачОстК,ПечЕд);        
    ПечНачОстД     = ФРМКоличество(Запрос.НачОстД*Запрос.Номенклатура.ЕмкостьБазовойЕдиницы/10,ПечЕд);


видимо ты считаешь, что в Запрос.НачОстС у тебя итог?
61 Luffy
 
22.01.16
09:17
(60) Да в ПечНачОстС и ПечНачОстК присутствует итог в сформированом отчете, а в ПечНачОстД нет итога(
62 Luffy
 
22.01.16
09:19
(60) Нет, я только итоги делаю по далам, до меня видимо кто то поправил оригинал)
63 HawkEye
 
22.01.16
09:42
(61) присутствует правильный итог?
64 Luffy
 
22.01.16
09:44
(63) Да там правильный итог
65 HawkEye
 
22.01.16
09:52
(64) ну если ты говоришь, что итоги показываются и в (29) все сообщается, напиши просто
ПечНачОстД     =Запрос.НачОстД*Запрос.Номенклатура.ЕмкостьБазовойЕдиницы/10;
66 Luffy
 
22.01.16
09:59
(65) Неа, теперь в итоге просто 0 стоит, а не пустое поле
67 HawkEye
 
22.01.16
10:02
(66) т.е. у тебя написано:

Сообщить("НачОст: " + Запрос.НачОстД);
Сообщить("Емкость б.е.: " + Запрос.Номенклатура.ЕмкостьБазовойЕдиницы);
Сообщить("Произведение: " + Запрос.НачОстД*Запрос.Номенклатура.ЕмкостьБазовойЕдиницы/10);
ПечНачОстД=Запрос.НачОстД*Запрос.Номенклатура.ЕмкостьБазовойЕдиницы/10;


при этом в сообщить
НачОст: 8
Емкость б.е.: 0.25
Произведение: 0.2

а в таблице:
0


да?
68 Luffy
 
22.01.16
10:05
(67) Да, а в отчете 0
69 HawkEye
 
22.01.16
13:21
(68) завязывай с программированием...
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.