7.7 Отчёты

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

  1. TopicStarter Overlay
    enb83
    Offline

    enb83

    Регистрация:
    23 июн 2008
    Сообщения:
    3
    Симпатии:
    0
    Баллы:
    1
    Здравствуйте!

    У меня случился ступор мозгов, никак не могу доделать отчет.
    Проблема заключается в том что у меня этот алгоритм считает сумму скидки по всем чекам где была скидка, т.е. игнорирует отмену чека. В одном чеке может быть такая ситуация

    Продажа по коду
    Продажа по коду
    Проц. скидка на чек
    Детализация скидки на чек
    Отмена чека
    Продажа по коду
    Продажа по коду
    Проц. скидка на чек
    Детализация скидки на чек
    Оплата
    Закрытие чека

    Результат:
    Дата Сумма
    Запрос1.ДатаТранз Запрос1.Всего

    Пример:
    Дата Сумма
    01.01.2008 548,54
    02.01.2008 433,34
    03.01.2008 564,67

    Задача: Выводить сумму фиксированной скидки на чек за каждый день продаж.

    Алгоритм: В журнале транзакций ищем те номера чеков в которых есть отмена чека(тип транзакции = 56) пусть это будут номера чеков 4563, 4578, 4596, запоминаем их, далее формируем условие например (НомерЧека <> 4563) И (НомерЧека <> 4578) И (НомерЧека <> 4596), и наконец делаем новый запрос по журналу транзакций в котором считаем сумму скидки соблюдая условия (ТипТранзакции = 71) и (НомерЧека <> 4563) И (НомерЧека <> 4578) И (НомерЧека <> 4596).

    Исходник:
    Код:
    Перем Запрос0, ТекстЗапроса0, Запрос1, ТекстЗапроса1, условие, условие0, условие1, условие2, условие3, условие4;      
    
    Процедура Сформировать1()	
    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Сформировать");  
    
    СписокЗнач = СоздатьОбъект("СписокЗначений");
    
    Текст0=" "; 
    Наимен=" ";
    //Создание объекта типа Запрос
    Запрос0 = СоздатьОбъект("Запрос");      
    
    ТекстЗапроса0 = 
    "//{{ЗАПРОС(Сформировать0)
    |Период с ВыбНачПериода по ВыбКонПериода;
    |ДатаТранз = Справочник.Транзакции.ДатаТранз;  
    |НомерЧека = Справочник.Транзакции.НомерЧека; 
    |КодТовараТранзакции = Справочник.Транзакции.КодТовара;	
    |ТипТранзакции = Справочник.Транзакции.ТипТранзакции;
    |Условие(ТипТранзакции=56); 
    |Условие(НомерЧека>0);
    |Условие(ВыбНачПериода<=ДатаТранз);
    |Условие(ВыбКонПериода>=ДатаТранз);
    |Группировка НомерЧека;
    |"//}}ЗАПРОС;
    Пока Запрос0.Группировка(1)=1 Цикл 	
    СписокЗнач.ДобавитьЗначение(Запрос0.НомерЧека);		                             
    КонецЦикла;  
    
    условие="";
    условие0="("; 
    условие1="НомерЧека<>"; 
    условие2="2716";
    условие3=" "; 
    условие4=") И ";  
    условие5=")";
    условие=условие1+условие2+условие3; 
    
    Для Номер = 1 По СписокЗнач.РазмерСписка() Цикл
    значение = СписокЗнач.ПолучитьЗначение(Номер); //получить значение и представление
    Если Номер=СписокЗнач.РазмерСписка() Тогда
    условие=условие+условие0+условие1+значение+условие5;
    иначе 
    условие=условие+условие0+условие1+значение+условие4;  
    КонецЕсли;
    КонецЦикла; 
    
    Запрос1 = СоздатьОбъект("Запрос");
    ТекстЗапроса1 = 
    "//{{ЗАПРОС(Сформировать1)
    |Период с ВыбНачПериода по ВыбКонПериода; 
    |Код = Справочник.Транзакции.Код;  
    |ДатаТранз = Справочник.Транзакции.ДатаТранз;  
    |Сумма = Справочник.Транзакции.Сумма;
    |ТипТранзакции = Справочник.Транзакции.ТипТранзакции;     
    |НомерЧека = Справочник.Транзакции.НомерЧека; 
    |Условие(ВыбНачПериода<=ДатаТранз);
    |Условие(ВыбКонПериода>=ДатаТранз);
    |Условие(ТипТранзакции=71);
    |Условие("+условие+");
    |Группировка ДатаТранз;        
    |Функция Всего = Сумма(Сумма);
    |"//}}ЗАПРОС;
    // Если ошибка в запросе, то выход из процедуры    
    Если Запрос1.Выполнить(ТекстЗапроса1) = 0 Тогда
    Возврат;
    КонецЕсли;   
    
    загол="По скидкам";    
    Таб.ВывестиСекцию("Заголовок");
    Таб.ВывестиСекцию("Шапка");   
    
    Пока Запрос1.Группировка(1)=1 Цикл 
    Таб.ВывестиСекцию("Содержание");	
    КонецЦикла;
    
    Состояние("Заполнение выходной таблицы...");
    Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
    Таб.ТолькоПросмотр(1);
    Таб.Показать("Сформировать", "");    
    КонецПроцедуры  
    
    ВыбНачПериода = НачМесяца(РабочаяДата());
    ВыбКонПериода = КонМесяца(РабочаяДата());
    
  2. Akulina
    Offline

    Akulina Опытный в 1С

    Регистрация:
    30 авг 2007
    Сообщения:
    87
    Симпатии:
    0
    Баллы:
    26
    На мой взгляд, неправильно сформирован первый запрос. Вот это делается для чего?
    Код:
    Пока Запрос0.Группировка(1)=1 Цикл 	
    СписокЗнач.ДобавитьЗначение(Запрос0.НомерЧека);		                             
    КонецЦикла;  
    
    Это можно делать только после выполнения запроса, а он у Вас не выполнен. Надо полагать, Вы хотели сформировать список номеров чеков, которые не надо включать в выборку по запросу. Тогда надо сначала сформировать список, а потом прописать условие в запросе.

    Код:
    СписокЧеков=СоздатьОбъект("СписокЗначений");
    СписокЧеков.ДобавитьЗначение(...);
    .....
    
    Код:
    |Условие( НЕ(НомерЧека в СписокЧеков));
    
    Вот что-то типа этого.
Похожие темы
  1. OlesyaLinnik
    Ответов:
    3
    Просмотров:
    2.582
  2. konan
    Ответов:
    8
    Просмотров:
    2.129
  3. gaz0n
    Ответов:
    2
    Просмотров:
    632
  4. scooper
    Ответов:
    1
    Просмотров:
    865
Загрузка...

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