7.7 Сравнить остатки с инвентаризациооной ведомостью

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

  1. TopicStarter Overlay
    SerzhM
    Offline

    SerzhM Опытный в 1С

    Регистрация:
    26 окт 2009
    Сообщения:
    511
    Симпатии:
    3
    Баллы:
    29
    Создали документ инвентаризация по основному свойству мыло и бумага. Потом еще одну инву создали туда по основному свойству освежитель и стир порошки. Номенклатурные позиции разложены по разным группам(папкам) в номенклатуре, но принадлежат одному родителю Быт химия. Стоит у персонала задача что за месяц просчитать полностью группу Быт химия, но не у всех номенклатурных позициях есть основное свойство и при формировании инвы по осн свойству не вся номенклатура попадает в инву. Нужно сравнить остаток по группе(выбираем в форме какую группу) в нашем случае быт химия с номенклатурными позициями в всех документах инва за выбранный период и вывести строки номенклатры не попавшие в инву.
    Вот сделал
    Код:
    Функция Запр(Ном)
        Перем Запрос, ТекстЗапроса;
        //Создание объекта типа Запрос
        Запрос = СоздатьОбъект("Запрос");
        ТекстЗапроса =
        "//{{ЗАПРОС(Запр)
        |Период с ВыбНачПериода по ВыбКонПериода;
        |ОбрабатыватьДокументы все;
        |Обрабатывать НеПомеченныеНаУдаление;
        |Номенклатура = Документ.ИнвентаризацияТМЦ.Номенклатура;
        |Условие(Номенклатура=Ном);
        |Группировка Номенклатура;
        |"//}}ЗАПРОС
        ;
        // Если ошибка в запросе, то выход из процедуры
        Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
            Возврат 1;
        КонецЕсли;
    
        Если Запрос.Группировка("Номенклатура")=1 Тогда
            Возврат 0;
        Конецесли;
        Возврат 1;
    КонецФункции
    
    
    
    
    
    
    //*******************************************
    //Конструкции <<...>> необходимо заменить на реальные логические условия и значения переменных
    Процедура Сформировать() 
        Перем Запрос, ТекстЗапроса, Таб,Загол;
       
        Запрос = СоздатьОбъект("Запрос");
    
        ТекстЗапроса =
        "//{{ЗАПРОС(Сформировать)
    //    |Период с ДатаНачала по ДатаКонца;
        |Фирма            = Регистр.ОстаткиТМЦ.Фирма;
        |УпрАналитика     = Регистр.ОстаткиТМЦ.Фирма.УпрАналитика;
        |ЮрЛицо         = Регистр.ОстаткиТМЦ.Фирма.ЮрЛицо;     
        |Номенклатура    = Регистр.ОстаткиТМЦ.Номенклатура;     
        |Склад            = Регистр.ОстаткиТМЦ.Склад;            
        |ЦенаПрод = Регистр.ОстаткиТМЦ.ЦенаПрод;
        |Количество = Регистр.ОстаткиТМЦ.Количество;
    //    |Резерв     = Регистр.РезервыТМЦ.Количество;
        |Функция КоличествоКонОст = КонОст(Количество);
        |Группировка Номенклатура;";
        // Если ошибка в запросе, то выход из процедуры 
        Загол="";
        глФильтрПоПеременнойЗапроса(, "Номенклатура",ВыбТМЦ,"ВыбТМЦ",ТекстЗапроса,Загол);
        глФильтрПоПеременнойЗапроса(, "Склад",ВыбСклад,"ВыбСклад",ТекстЗапроса,Загол);
        Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
            Возврат;
        КонецЕсли;
    
        Таб = СоздатьОбъект("Таблица");
        Таб.ИсходнаяТаблица("Сформировать");
        Таб.ВывестиСекцию("Шапка");
        Таб.Опции(0,0,Таб.ВысотаТаблицы(),0);
       
        Пока Запрос.Группировка("Номенклатура")=1 Цикл
            Если Запр(Запрос.Номенклатура)=1 Тогда
                Если Запрос.Номенклатура.ЭтоГруппа()=1 Тогда
                    Таб.ВывестиСекцию("Строка_2");
                Иначе
                    Таб.ВывестиСекцию("Строка_1");
                КонецЕсли;
            КонецЕсли;
    
        Конеццикла;
       
    
        Таб.ТолькоПросмотр(1);
        Таб.Показать("Сформировать","");
    КонецПроцедуры 
    Но что то долго формирует отчет.
    Может можно как то ускорить работу отчета?
    Для справки примерно позиций в быт химии 3930 документов инва примерно 6.
  2. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    1) Убрать из запроса переменные которые вы не используете. Зачем они? А ресурсы на их вычисление расходуются.
    2) Объдените запросы в один.

    |Период с ВыбНачПериода по ВыбКонПериода;
    |...
    |Номенклатура = Регистр.ОстаткиТМЦ.Номенклатура,Документ.ИнвентаризацияТМЦ.Номенклатура;
    |...
    |Группировка Документ;
    |Группировка Номенклатура все вошедшие в запрос;

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