7.7 ТИС для Украины Отчет по скидкам

Новая тема
Показывать по 10 20 40 сообщений
"Почемуто значение цены берет с рабочей даты, а я вроде как указываю по дате документа Цены.ИспользоватьДату(Док.ДатаДок)
Помогите разобраться


Процедура Сформировать()
СуммаОбщПоДок=0;
СуммаОбщПоСпр=0;
РазницаОбщ=0;  
Таблица=СоздатьОбъект("Таблица");
   Таблица.ИсходнаяТаблица("Отчет");
Док=СоздатьОбъект("Документ");
Док.ИспользоватьЖурнал("РасходныеНакладные");
Док.ВыбратьДокументы(ВыбНачПериода,ВыбКонПериода);
ПечКонтрагент="По контрагенту "+ВыбКонтрагенты.ПолнНаименование;
Таблица.ВывестиСекцию("шапка");
Пока Док.ПолучитьДокумент()=1 Цикл
Если  Док.Контрагент=ВыбКонтрагенты Тогда
  номердок=  Док.НомерДок;
  Док.ВыбратьСтроки();  
  СуммаПоДок=0;
  СуммаПоСправочнику=0;
  Пока Док.ПолучитьСтроку()=1 Цикл
  Цены=СоздатьОбъект("Справочник.Цены");
  Цены.ИспользоватьДату(Док.ДатаДок);
  Цены.ИспользоватьВладельца(Док.Товар.ТекущийЭлемент());
  ТипЦены= Док.КатегорияЦен;
  Цены.НайтиПоРеквизиту("КатегорияЦены",ТипЦены,0);
  СуммаПоСправочнику=СуммаПоСправочнику+(Док.Количество*Цены.цена);  
  СуммаПоДок=СуммаПоДок+(Док.Количество*Док.ЦенаСНДС);
  Разница=СуммаПоСправочнику-СуммаПоДок;
  РазницаПроц=Окр(СуммаПоСправочнику/СуммаПоДок*100-100,2,1);
  КонецЦикла;
  СуммаОбщПоДок=СуммаОбщПоДок+СуммаПоДок;
          СуммаОбщПоСпр=СуммаОбщПоСпр+СуммаПоСправочнику;
  РазницаОбщ=РазницаОбщ+Разница;
  Таблица.ВывестиСекцию("Документ");
КонецЕсли;
КонецЦикла;
РазницаОбщПроц=Окр(СуммаОбщПоСпр/СуммаОбщПоДок*100-100,2,1);
Таблица.ВывестиСекцию("Итоги");
   Таблица.Показать("Отчет");
КонецПроцедуры
"
"А если использовать:
Цены.ИспользоватьДату(Док.ДатаДок, 1);"
тоже самое
"За "Цены=СоздатьОбъект("Справочник.Цены")" внутри цикла "Пока Док.ПолучитьСтроку()=1 Цикл" пожизненный эцих с гвоздями :)

В общем, надо так:
Процедура Сформировать()
    СуммаОбщПоДок=0;
    СуммаОбщПоСпр=0;
    РазницаОбщ=0;  
    Таблица=СоздатьОбъект("Таблица");
    Таблица.ИсходнаяТаблица("Отчет");
    Цены=СоздатьОбъект("Справочник.Цены");
    Док=СоздатьОбъект("Документ");
    Док.ИспользоватьЖурнал("РасходныеНакладные");
    Док.ВыбратьДокументы(ВыбНачПериода,ВыбКонПериода);
    ПечКонтрагент="По контрагенту "+ВыбКонтрагенты.ПолнНаименование;
    Таблица.ВывестиСекцию("Шапка");
    Пока Док.ПолучитьДокумент()=1 Цикл
         Если Док.Контрагент=ВыбКонтрагенты Тогда
              номердок = Док.НомерДок;
              Док.ВыбратьСтроки();  
              СуммаПоДок=0;
              СуммаПоСправочнику=0;
              Пока Док.ПолучитьСтроку()=1 Цикл
                   СуммаПоСправочникуПоСтроке=0;
                   Цены.ИспользоватьВладельца(Док.Товар);
                   Если Цены.НайтиПоРеквизиту("КатегорияЦены",Док.КатегорияЦен,0)=1 Тогда
                        СуммаПоСправочникуПоСтроке=(Док.Количество*Цены.Цена.Получить(Док.ДатаДок));
                   КонецЕсли;
                   СуммаПоСправочнику=СуммаПоСправочнику+СуммаПоСправочникуПоСт­роке;
                   СуммаПоДок=СуммаПоДок+(Док.Количество*Док.ЦенаСНДС);
                   Разница=СуммаПоСправочнику-СуммаПоДок;
                   РазницаПроц=Окр(СуммаПоСправочнику/СуммаПоДок*100-100,2,1);
              КонецЦикла;
              СуммаОбщПоДок=СуммаОбщПоДок+СуммаПоДок;
              СуммаОбщПоСпр=СуммаОбщПоСпр+СуммаПоСправочнику;
              РазницаОбщ=РазницаОбщ+Разница;
              Таблица.ВывестиСекцию("Документ");
         КонецЕсли;
    КонецЦикла;
    РазницаОбщПроц=Окр(СуммаОбщПоСпр/СуммаОбщПоДок*100-100,2,1);
    Таблица.ВывестиСекцию("Итоги");
    Таблица.Показать("Отчет");
КонецПроцедуры
"
на счет "За "Цены=СоздатьОбъект("Справочник.Цены")" внутри цикла "Пока Док.ПолучитьСтроку()=1 Цикл" пожизненный эцих с гвоздями :)", полностью согласен (невнимательность)
а переменные я описывал чтобы самому было понятней(в процессе разработки)
По вашему коду вобще какаета фигня получилась
а чем собственно отличается ИспользоватьДату от Получить?
Вы переменную в начале цыкла установили СуммаПоСправочникуПоСтроке=0 , поэтому ее значение равнялось последней позиции в списке
я исправил, получилось тоже что и у меня
> СуммаПоСправочникуПоСтроке=0 , поэтому ее значение равнялось последней позиции в списке я исправил

Не исправляйте, смотрите еще разок что там у меня написано.

Кстати, а это нормально, что у вас СуммаПоСправочнику идет внутри цикла перебора строк? У вас же не по отдельной позции разницы считаются, а вообще как то накопительно...
"Вроде бы я понял что вы задумали, попробуйте вот такой вариант:
Процедура Сформировать()
   СуммаОбщПоДок=0;
   СуммаОбщПоСпр=0;
   РазницаОбщ=0;  
   Таблица=СоздатьОбъект("Таблица");
   Таблица.ИсходнаяТаблица("Отчет");
   Цены=СоздатьОбъект("Справочник.Цены");
   Док=СоздатьОбъект("Документ");
   Док.ИспользоватьЖурнал("РасходныеНакладные");
   Док.ВыбратьДокументы(ВыбНачПериода,ВыбКонПериода);
   ПечКонтрагент="По контрагенту "+ВыбКонтрагенты.ПолнНаименование;
   Таблица.ВывестиСекцию("Шапка");
   Пока Док.ПолучитьДокумент()=1 Цикл
        Если Док.Контрагент=ВыбКонтрагенты Тогда
             номердок = Док.НомерДок;
             Док.ВыбратьСтроки();  
             СуммаПоДок=0;
             СуммаПоСправочнику=0;
             Пока Док.ПолучитьСтроку()=1 Цикл
                  Цены.ИспользоватьВладельца(Док.Товар);
                  Если Цены.НайтиПоРеквизиту("КатегорияЦены",Док.КатегорияЦен,0)=1 Тогда
                       СуммаПоСправочнику=СуммаПоСправочнику+(Док.Количество*Цены.Цена.Получить(Док.ДатаДок));
                  КонецЕсли;
                  СуммаПоДок=СуммаПоДок+(Док.Количество*Док.ЦенаСНДС); //а в документе нет реквизита "Сумма"?
             КонецЦикла;
             СуммаОбщПоДок=СуммаОбщПоДок+СуммаПоДок;
             СуммаОбщПоСпр=СуммаОбщПоСпр+СуммаПоСправочнику;
             Разница=СуммаПоСправочнику-СуммаПоДок;
             РазницаОбщ=РазницаОбщ+Разница;
             Таблица.ВывестиСекцию("Документ");
        КонецЕсли;
   КонецЦикла;
   РазницаОбщПроц=Окр(СуммаОбщПоСпр/СуммаОбщПоДок*100-100,2,1);
   Таблица.ВывестиСекцию("Итоги");
   Таблица.Показать("Отчет");
КонецПроцедуры
"
тоже что и у меня
СуммаПоСправочнику у меня не внутри а перед циклом, а вот у Вас внутри
Читают тему
(гостей: 1)

Быстрый переход