7.7 Товарный отчет

Тема в разделе "Отчеты и обработки для "1С:Предприятие 7.7"", создана пользователем BigAnn, 27 апр 2011.

  1. TopicStarter Overlay
    BigAnn
    Offline

    BigAnn Опытный в 1С

    Регистрация:
    22 сен 2008
    Сообщения:
    73
    Симпатии:
    0
    Баллы:
    26
    Всем доброго дня.
    Имеется Бухгалтерия 7.7 обычная (не УСН).
    Конфигурацию дорабатывали. В ней есть Товарный отчет.
    Писала не сама, лорабатываю. До этого отчет группировал строки по контрагенту и выводил общую сумму.
    Исходный отчет http://depositfiles.com/files/q4vmlt568

    Товарный отчет (немного исправленный):
    Код:
    Процедура Сформировать()   
    Сч =0;
    Док = СоздатьОбъект("Документ");
    Оп = СоздатьОбъект("Операция");
    
    ТабПеч = СоздатьОбъект("Таблица");
    ТабПеч.ИсходнаяТаблица("Таблица");
    
    ТабПрих = СоздатьОбъект("ТаблицаЗначений");
    ТабПрих.НоваяКолонка("КтСчета","Счет.Основной");
    ТабПрих.НоваяКолонка("ДтСчета","Счет.Основной");
    ТабПрих.НоваяКолонка("Документ","Документ");
    ТабПрих.НоваяКолонка("Контрагент","Строка"); 
    ТабПрих.НоваяКолонка("Тара","Число",12,3);
    ТабПрих.НоваяКолонка("Сумма","Число",12,3); 
    
    
    ТабПрих_ = СоздатьОбъект("ТаблицаЗначений");
    ТабПрих_.НоваяКолонка("Документ","Документ");
    ТабПрих_.НоваяКолонка("Контрагент","Строка");
    ТабПрих_.НоваяКолонка("Товар","Число",12,3);
    ТабПрих_.НоваяКолонка("Наценка","Число",12,3);
    ТабПрих_.НоваяКолонка("Тара","Число",12,3);
    ТабПрих_.НоваяКолонка("Издержки","Число",12,3);
    
    ТабРасх = СоздатьОбъект("ТаблицаЗначений");
    ТабРасх.НоваяКолонка("КтСчета","Счет.Основной");
    ТабРасх.НоваяКолонка("ДтСчета","Счет.Основной");
    ТабРасх.НоваяКолонка("Документ","Документ");
    ТабРасх.НоваяКолонка("Контрагент","Строка");
    ТабРасх.НоваяКолонка("Сумма","Число",12,3);
    
    ТабРасх_ = СоздатьОбъект("ТаблицаЗначений");
    ТабРасх_.НоваяКолонка("Документ","Документ");
    ТабРасх_.НоваяКолонка("Контрагент","Строка");
    ТабРасх_.НоваяКолонка("Товар","Число",12,3);
    ТабРасх_.НоваяКолонка("Наценка","Число",12,3);
    ТабРасх_.НоваяКолонка("Тара","Число",12,3);
    
    Сч41_2 = СчетПоКоду("41.2");
    Сч41_3 = СчетПоКоду("41.3");
    Сч42 = СчетПоКоду("42");
    Сч44_1_2 = СчетПоКоду("44.1.2");
    Сч50_1 = СчетПоКоду("50.1");
    Сч60_1 = СчетПоКоду("60.1");        
    Сч90_1_2 = СчетПоКоду("90.1.2");
    Сч70 = СчетПоКоду("70");    
    
    БухИт = СоздатьОбъект("БухгалтерскиеИтоги");    
    БухИт.ВключатьСубСчета(1);
    
    БухИт.ИспользоватьСубконто("МестаХранения",МестоХранения);    
    
    НачСдТовар = 0; 
    НачСдТара = 0;
    КонСдТовар = 0;
    
    ОстатокПоКассеН = 0;//     
    ОстатокПоКассеК = 0;// 
    
    БухИт.ВыполнитьЗапрос(НачПериод, КонПериод,"50.1",, , 1, "Период", "СВ");
    
    ОстатокПоКассеН = БухИт.СНД();
    ОстатокПоКассеК = БухИт.СКД();
    
    БухИт.ВыполнитьЗапрос(НачПериод, КонПериод,"41.2","60.1,90.1.2,42,41.2", , 1, "Период", "СВ"); // 
    БухС = СоздатьОбъект("БухгалтерскиеИтоги");
    БухС.Рассчитать(НачПериод,НачПериод);   
    НачСдТовар = БухС.СНДРС("41.2",1,,,3,МестоХранения,2)- БухС.СНКРС("41.2",1,,,3,МестоХранения,2)+ОстатокПоКассеН;
    //НачСдТовар = БухС.СНДРС("41.2",1,,,3,МестоХранения,2) + ОстатокПоКассеН;     
    НачСдТара = БухС.СНДРС("41.3",1,,,3,МестоХранения,2);;
    БухИт.ИспользоватьСубконто("МестаХранения",МестоХранения);
    БухИт.ВыполнитьЗапрос(НачПериод, КонПериод,"41.2,41.3",, , 1, "Операция", "СВ");
    
    БухИт.ВыбратьПериоды();
    
    // Приходная часть товарного отчета 
    
    ТабПеч.ВывестиСекцию("Шапка");
    ТабПеч.ВывестиСекцию("ШапкаПрихода");
    
    Пока БухИт.ПолучитьПериод() = 1 Цикл
    Дт = БухИт.ВыбранаПоДт();
    Кт = БухИт.ВыбранаПоКт();   
    Если Дт=0 Тогда
    Продолжить;
    КонецЕсли;
    
    Опер = БухИт.Операция;
    Док.НайтиДокумент(Опер.Документ);
    //Сообщить(Строка(Док.Вид())+" "+Строка(Док.НомерДок)); 
    Оп.ВыбратьОперацииСПроводками(Опер.Документ,Опер.Документ);
    Пока Оп.ПолучитьПроводку()=1 Цикл
    ТабПрих.НоваяСтрока();
    ТабПрих.КтСчета = Оп.Кредит.Счет;
    ТабПрих.ДтСчета = Оп.Дебет.Счет;
    Если Оп.Кредит.Счет = Сч60_1 Тогда
    ТабПрих.Контрагент = СокрЛП(Строка(Оп.Кредит.Субконто(1)));
    Иначе
    Попытка
    ТабПрих.Контрагент = СокрЛП(Строка(Док.Контрагент));
    Исключение
    КонецПопытки;
    КонецЕсли;
    Если Док.Вид() = "ПеремещениеТоваровСык" Тогда
    Если Оп.Дебет.Субконто(2) = МестоХранения Тогда
    ТабПрих.ДтСчета = Оп.Дебет.Счет;
    ТабПрих.КтСчета = Сч60_1;                    
    ТабПрих.Контрагент = СокрЛП(Строка(Оп.Кредит.Субконто(2)));
    КонецЕсли;                
    КонецЕсли;
    ТабПрих.Сумма = Оп.Сумма;
    КонецЦикла;
    КонецЦикла;    
    
    //ТабПрих.Свернуть("КтСчета,ДтСчета,Контрагент","Сумма"); 
    //ТабПрих.Сортировать("+Контрагент"); 
    
    ТабПрих.ВыбратьСтроки();
    Сч = 0;
    Пока ТабПрих.ПолучитьСтроку() = 1 Цикл
    Если ТабПрих.Контрагент = "" Тогда
    Продолжить;
    КонецЕсли;
    НомСтр = 0; НомКол = 0;
    Если ТабПрих_.НайтиЗначение(ТабПрих.Контрагент,НомСтр,НомКол) = 0 Тогда
    ТабПрих_.НоваяСтрока();
    ТабПрих_.Контрагент = ТабПрих.Контрагент;
    Иначе
    ТабПрих_.ПолучитьСтрокуПоНомеру(НомСтр);
    КонецЕсли;
    Если ТабПрих.КтСчета = Сч60_1 Тогда
    Если ТабПрих.ДтСчета = Сч41_2 Тогда
    ТабПрих_.Товар = ТабПрих.Сумма;
    ИначеЕсли ТабПрих.ДтСчета = Сч41_3 Тогда
    ТабПрих_.Тара = ТабПрих.Сумма;
    ИначеЕсли ТабПрих.ДтСчета = Сч44_1_2 Тогда
    ТабПрих_.Издержки = ТабПрих.Сумма;
    КонецЕсли;
    ИначеЕсли ТабПрих.КтСчета = Сч42 Тогда
    ТабПрих_.Наценка = ТабПрих.Сумма;
    ИначеЕсли ТабПрих.КтСчета = Сч41_3 Тогда
    ТабПрих_.Тара = ТабПрих.Сумма;
    
    КонецЕсли; 
    Сч=Сч+1;
    ТабПеч.ВывестиСекцию("СтрокаПриход");
    КонецЦикла;
    ТабПеч.ВывестиСекцию("ИтогоПриход");
    
    
    // Расходная часть товарного отчета 
    
    
    БухИт.ВыбратьПериоды(); 
    Пока БухИт.ПолучитьПериод() = 1 Цикл
    Дт = БухИт.ВыбранаПоДт();
    Кт = БухИт.ВыбранаПоКт();   
    Если Кт=0 Тогда
    Продолжить;
    КонецЕсли;
    
    Опер = БухИт.Операция;
    Док.НайтиДокумент(Опер.Документ);        
    Оп.ВыбратьОперацииСПроводками(Опер.Документ,Опер.Документ);        
    
    Пока Оп.ПолучитьПроводку()=1 Цикл
    Если Оп.Дебет.Субконто(2) = МестоХранения Тогда    
    Продолжить;
    КонецЕсли;
    ТабРасх.НоваяСтрока();
    ТабРасх.КтСчета = Оп.Кредит.Счет;
    ТабРасх.ДтСчета = Оп.Дебет.Счет;
    Если Оп.Дебет.Счет = Сч60_1 Тогда
    ТабРасх.Контрагент = СокрЛП(Строка(Оп.Дебет.Субконто(1)));
    ИначеЕсли Оп.Дебет.Счет = Сч42 Тогда
    Попытка
    ТабРасх.Контрагент = СокрЛП(Строка(Док.Контрагент));
    Исключение
    КонецПопытки;                
    ИначеЕсли Оп.Дебет.Счет = Сч41_2 Тогда 
    Если Док.Вид() = "СписаниеТоваров" Тогда
    ТабРасх.Контрагент = "Списание";
    Иначе
    ТабРасх.Контрагент = СокрЛП(Строка(Док.СкладПолучатель)); 
    КонецЕсли;
    ИначеЕсли Оп.Дебет.Счет = Сч41_3 Тогда
    ТабРасх.Контрагент = СокрЛП(Строка(Док.СкладПолучатель));    
    ИначеЕсли Оп.Дебет.Счет = Сч50_1 Тогда
    ТабРасх.Контрагент = "Сдача выручки";
    ИначеЕсли Оп.Дебет.Счет = Сч70 Тогда
    ТабРасх.Контрагент = "Выдача зарплаты";
    Иначе
    Попытка
    ТабРасх.Контрагент = СокрЛП(Строка(Док.Контрагент));
    Исключение
    КонецПопытки;
    КонецЕсли;
    ТабРасх.Сумма = Оп.Сумма;   
    КонецЦикла;    
    
    КонецЦикла;
    
    //ТабРасх.Свернуть("ДтСчета,КтСчета,Контрагент","Сумма");     
    //ТабРасх.Сортировать("+Контрагент");     
    
    БухК = СоздатьОбъект("БухгалтерскиеИтоги");
    БухК.ИспользоватьСубконто("ДвиженияДенежныхСредств");
    БухК.ИспользоватьСубконто("МестаХранения",МестоХранения);
    БухК.ВыполнитьЗапрос(НачПериод, КонПериод,"50.1",, , 1, "Период", "СВ");
    БухК.ВыбратьСубконто();
    Пока БухК.ПолучитьСубконто() = 1 Цикл
    Если БухК.КО() > 0 Тогда  
    ТабРасх.НоваяСтрока();
    ТабРасх.ДтСчета = Сч90_1_2;
    ТабРасх.КтСчета = Сч41_2;
    ТабРасх.Контрагент = СокрЛП(Строка(БухК.Субконто()));
    ТабРасх.Сумма = Число(БухК.КО());
    КонецЕсли;
    КонецЦикла;    
    
    ТабРасх.ВыбратьСтроки();
    ТабПеч.ВывестиСекцию("ШапкаРасхода");
    Сч=0;
    Пока ТабРасх.ПолучитьСтроку() = 1 Цикл
    Если ТабРасх.Контрагент = "" Тогда
    Продолжить;
    КонецЕсли;
    НомСтр = 0; НомКол = 0;
    Если ТабРасх_.НайтиЗначение(ТабРасх.Контрагент,НомСтр,НомКол) = 0 Тогда
    ТабРасх_.НоваяСтрока();
    ТабРасх_.Контрагент = ТабРасх.Контрагент;
    Иначе
    ТабРасх_.ПолучитьСтрокуПоНомеру(НомСтр);
    КонецЕсли;
    Если ТабРасх.КтСчета = Сч41_2 Тогда
    Если ТабРасх.ДтСчета = Сч60_1 Тогда
    ТабРасх_.Товар = ТабРасх.Сумма;
    ИначеЕсли ТабРасх.ДтСчета = Сч42 Тогда                
    ТабРасх_.Наценка = ТабРасх.Сумма;  
    ИначеЕсли ТабРасх.ДтСчета = Сч70 Тогда                
    ТабРасх_.Товар = ТабРасх.Сумма;    
    ИначеЕсли ТабРасх.ДтСчета = Сч90_1_2 Тогда
    ТабРасх_.Товар = ТабРасх.Сумма;
    //ТабРасх_.Товар = КассаКО; 
    ИначеЕсли (ТабРасх.ДтСчета = Сч41_2)   Тогда 
    ТабРасх_.Товар = ТабРасх.Сумма; 
    Если (ТабРасх.ДтСчета = Сч41_2) и (ПустоеЗначение(МестоХранения)=1) Тогда //23.05.2003 для всей организации перемещение не учитываем 
    ТабРасх_.УдалитьСтроку(); 
    КонецЕсли;
    ИначеЕсли ТабРасх.ДтСчета = Сч50_1 Тогда 
    ТабРасх_.Товар = ТабРасх.Сумма;         
    КонецЕсли;
    ИначеЕсли ТабРасх.КтСчета = Сч41_3 Тогда
    Если ТабРасх.ДтСчета = Сч60_1 Тогда
    ТабРасх_.Тара = ТабРасх.Сумма;
    ИначеЕсли ТабРасх.ДтСчета = Сч42 Тогда                
    ТабРасх_.Наценка = ТабРасх.Сумма;
    
    ИначеЕсли (ТабРасх.ДтСчета) = Сч41_3  Тогда
    ТабРасх_.Тара = ТабРасх.Сумма; 
    Если (ТабРасх.ДтСчета = Сч41_3) и (ПустоеЗначение(МестоХранения)=1) Тогда //23.05.2003 для всей организации перемещение не учитываем 
    ТабРасх_.УдалитьСтроку(); 
    КонецЕсли;
    КонецЕсли;
    КонецЕсли; 
    
    Сч = Сч+1;
    ТабПеч.ВывестиСекцию("СтрокаРасход");  
    КонецЦикла; 
    ТабПеч.ВывестиСекцию("ИтогоРасход");
    
    //////////////////////////// 
    //ТабПрих_.ВыбратьСтроки(); 
    //Пока ТабПрих_.ПолучитьСтроку() = 1 Цикл  
    //    Сч=Сч+1; 
    //    ТабПеч.ВывестиСекцию("СтрокаПриход"); 
    //КонецЦикла; 
    //ТабПеч.ВывестиСекцию("ИтогоПриход"); 
    
    //ТабПеч.ВывестиСекцию("ШапкаРасхода"); 
    //ТабРасх_.ВыбратьСтроки();   
    //Сч=0;  
    //Пока ТабРасх_.ПолучитьСтроку() = 1 Цикл     
    //    Сч = Сч+1; 
    //    ТабПеч.ВывестиСекцию("СтрокаРасход");   
    //КонецЦикла;      
    //ТабПеч.ВывестиСекцию("ИтогоРасход"); 
    
    ТабПеч.ВывестиСекцию("КонОстаток");                   
    ТабПеч.ВывестиСекцию("Подвал");
    //ТабПеч.Защита(1); 
    ТабПеч.Опции(0,,,,,,,);
    ТабПеч.Показать("Товарный отчет " + Строка(НачПериод) + " - " + Строка(КонПериод));
    КонецПроцедуры
    
    // преодпределенные процедуры 
    Процедура ПриОткрытии()
    НачПериод = НачНедели(РабочаяДата());
    КонПериод = КонНедели(РабочаяДата());
    МестоХранения = константа.ОсновнойСклад;
    КонецПроцедуры
    
    

    Сделала вот так. Теперь выводит каждую строку документа. Причем в разном сочетании. Например:
    Документ Поступление товара содержит
    1. Товар 1 шт. цена опт. - 3
  2. TopicStarter Overlay
    BigAnn
    Offline

    BigAnn Опытный в 1С

    Регистрация:
    22 сен 2008
    Сообщения:
    73
    Симпатии:
    0
    Баллы:
    26
    Сделала вот так. Теперь выводит каждую строку документа. Причем в разном сочетании. Например:
    Документ Поступление товара содержит
    1. Товар 1 шт. цена опт. - 30 руб., цена с наценкой - 60 руб., сумма опт. - 30 руб. , наценка - 30 руб., всего - 60 руб.
    2. Тара 1 шт. цена опт. - 20 руб., цена с наценкой - 20 руб., сумма опт. - 20 руб. , наценка - 0 руб., всего - 20 руб.
    3. транспортные расходы 1 шт. цена опт. - 200 руб., цена с наценкой - 200 руб., сумма опт. - 200 руб. , наценка - 0 руб., всего - 200 руб.

    В отчете выводится так:
    Контрагент Товар Тара Наценка
    КОБЗЕВ АЛЕКСАНДР ВИКТОРОВИЧ (И 20.00
    КОБЗЕВ АЛЕКСАНДР ВИКТОРОВИЧ (И 30.00 20.00
    КОБЗЕВ АЛЕКСАНДР ВИКТОРОВИЧ (И 60.00 20.00 30.00
    КОБЗЕВ АЛЕКСАНДР ВИКТОРОВИЧ (И 230.00 20.00 30.00
    КОБЗЕВ АЛЕКСАНДР ВИКТОРОВИЧ (И 200.00 20.00

    Как сделать группировку по документу?
    Спасибо.
  3. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Если я правильно понял....
    При выводе ТаблицыЗначений
    Код:
    ТЗ.НоваяСтрока();
    Док="";
    ТЗ.выбратьСтроки();
    Пока ТЗ.ПолучитьСтроку()=1 Цикл
    Если ТЗ.Документ<>Док Тогда
    Если ПустоеЗначение(Док)=0 Тогда
    ТабПеч.ВывестиСекция("Строка");
    КонецЕсли;
    Док=ТЗ.Документ;
    КонецЕсли;
    //тут заполняем из строк ТЗ одного документа нужные нам 
    //данные
    КонецЦикла;
    
    
  4. TopicStarter Overlay
    BigAnn
    Offline

    BigAnn Опытный в 1С

    Регистрация:
    22 сен 2008
    Сообщения:
    73
    Симпатии:
    0
    Баллы:
    26
    что-то я в замешательстве. Вы не могли бы на примере моего отчета написать?
  5. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Теперь моя очередь быть в замешательстве....))))
    Для чего тогда у вас в отчете ТаблицыЗначений?
    Я привел пример как вывести для одного документа одну строку....

Поделиться этой страницей