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

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

Метки:

Оборотка по материалам (Есть наработки)

Я
   Platon
 
10.12.03 - 13:33
Здравствуйте все! Продолжим тему
Я усиленно работал над отчётом все выходные и вот что получилось.
Создал Регистр остатков: ОборотМатериалов
Измерения: Склад и Материалы
Ресурсы: Количество и Стоимость
Привязал к документам 
ПриходМатериалов(Приход)
ТребованиеНакладная(Расход)
Справка (Либо приход либо расход)
Вот текст запроса:
//*******************************************

// Процедура генерации запроса Сформировать.
//

Процедура Сформировать()
    Перем Запрос, ТекстЗапроса, Таб;
   //Создание объекта типа Запрос

    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса = 
    "//{{ЗАПРОС(Сформировать)

    |Период с ВыбНачПериода по ВыбКонПериода;
    |Обрабатывать НеПомеченныеНаУдаление;
    |Склад = Регистр.ОборотМатериалов.Склад;
    |Код = Регистр.ОборотМатериалов.Материалы.Код;
    |Количество = Регистр.ОборотМатериалов.Количество;
    |Сумма = Регистр.ОборотМатериалов.Сумма;
    |Материалы = Регистр.ОборотМатериалов.Материалы;
    |Функция КоличествоНачОст = НачОст(Количество);
    |Функция СуммаНачОст = НачОст(Сумма);
    |Функция КоличествоПриход = Приход(Количество);
    |Функция СуммаПриход = Приход(Сумма);
    |Функция КоличествоРасход = Расход(Количество);
    |Функция СуммаРасход = Расход(Сумма);
    |Функция КоличествоКонОст = КонОст(Количество);
    |Функция СуммаКонОст = КонОст(Сумма);
    |Группировка Склад без групп;
    |Группировка Код без групп;
   //|Условие(Склад = ВыбСклад);

   //|Условие(Материалы = ВыбМатериалы);

    |//}}ЗАПРОС

    ;
    
    Если ПустоеЗначение(ВыбСклад)=0 Тогда
     ТекстЗапроса=ТекстЗапроса+"Условие(Склад=ВыбСклад);"; 
КонецЕсли;
 Если ПустоеЗначение(ВыбМатериалы)=0 Тогда
     ТекстЗапроса=ТекстЗапроса+"Условие(Материалы = ВыбМатериалы);";
    КонецЕсли;
    Если ВыбСклад.ЭтоГруппа()=1 Тогда
        ТекстЗапроса=ТекстЗапроса+"Условие(Склад в ВыбСклад);";
    КонецЕсли;
     Если ВыбМатериалы.ЭтоГруппа()=1 Тогда
        ТекстЗапроса=ТекстЗапроса+"Условие(Материалы в ВыбМатериалы);";
    КонецЕсли;
   // Если ошибка в запросе, то выход из процедуры

    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Возврат;
    КонецЕсли;

   // Подготовка к заполнению выходных форм данными запроса

    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Сформировать");
    Таб.ВывестиСекцию("Заголовок")// Заполнение полей "Заголовок" 

    Таб.ВывестиСекцию("Дата");
    Таб.ВывестиСекцию("Шапка");
    
    Состояние("Заполнение выходной таблицы...");
    Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
    Пока Запрос.Группировка(1) = 1 Цикл
       // Заполнение полей Склад

        Таб.ВывестиСекцию("Склад");
        Пока Запрос.Группировка(2) = 1 Цикл
           // Заполнение полей Код

            Таб.ВывестиСекцию("Код");
            
        КонецЦикла;
    КонецЦикла;
   // Заполнение полей "Итого"

    Таб.ВывестиСекцию("Итого");
   // Вывод заполненной формы

    Таб.ТолькоПросмотр(1);
    Таб.Показать("Сформировать", "");
КонецПроцедуры

И всёбы ничего но начальнику кровь из носу надо чтобы
в каждом складе по коду каждой группы наименований был показан итог.
Объясняю подробно;
Есть в складе материалы с номерами
111001
111002
111003
213555
213556 итд
Итог по складу: Количество Сумма
А надо чтобы так: Выбираются все коды с одинаковыми первыми тремя цифрами и по такой группе итог
       Приход                           Расход
               Количество   Сумма
111001
111002
111003
Итог по 111:   Количество   Сумма
213555
213556  
Итог по 213:   Количество   Сумма
Если у кого есть соображения поделитесь
С Уважением Platon.
 
 
   skunk
 
1 - 10.12.03 - 17:12
Выгрузи запрос в таблицу. Полученную таблицу отсортируй как тебе надо.

Зарпос.Выгрузить(ТабЗнч);
ТабЗнч.Сортировать("Склад+, Код+");

Ну дальше разгебай таблицу как тебе надо. Для простоты понимания процесса разребания создай на ТЗ на форме и просмотри результат визуально.
   GrayT
 
2 - 10.12.03 - 21:12
1. Если в качестве ВыбМатериала (ВыбСклада) ты используешь группу - получишь текст запроса с двумя условиями Сперва не пустое условие, а потом для группы. Причем элементы (не группы) по первому условию уже не попадут в запрос :(. Все проще используй просто "В" прямо в тексте запроса (без условий "если"). Если ВыбМатериалы пустое - входят все материалы, если ВыбМатериалы группа входят элементы входящие в группу, если это элемент - входит соответстветствующий элемент.
2. (1) В таблицу он выгрузит, отсортирует и итоги по группам убегут. (0) Но без выгрузки похоже не обойтись. Только надо формировать запрос без итогов, сортировать и группировать программно самому.
3. А у тебя пользователи код материала в справочнике случайно изменить не смогут? Ведь потом не спишешь нормально с регистра.
------------------
Все-таки решил на регистрах. Извини за назойливость, но в первой ветке ты не ответил на вопрос "устроит средняя стоимость по складам?". И еще там Puh "обламился" с твоим адресом. Повтори, плиз, адресок - впереди пара дней может что нарисуется :))
Проще
   Platon
 
3 - 11.12.03 - 06:23
Добрый день сейчас запущу конфигуратор и попробую как вы посоветовали. адрес был нормальный и письмо я вроде получил но без отчёта прошу в .exe файлах не присылать т.к. там фильтр стоит, лучше в архивах. На всякий случай пишу другой адрес. Только No_Sp_ Уберите в адресе.
   Platon
 
4 - 11.12.03 - 06:30
Добрый день сейчас запущу конфигуратор и попробую как вы посоветовали. адрес был нормальный и письмо я вроде получил но без отчёта прошу в .exe файлах не присылать т.к. там фильтр стоит, лучше в архивах. На всякий случай пишу другой адрес. Только No_Sp_ Уберите в адресе.


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