8.х Оптимизация обнуления остатков по Регистру накопления

Тема в разделе "Отчеты и обработки для "1С:Предприятие 8"", создана пользователем Graf1000, 14 фев 2014.

  1. TopicStarter Overlay
    Graf1000
    Offline

    Graf1000

    Регистрация:
    1 фев 2012
    Сообщения:
    41
    Симпатии:
    0
    Баллы:
    1
    Добрый вечер!
    Цель этой темы, улучшить обработку по обнулению остатков.
    Общая суть обработки:
    1. Выбираем остатки по объекту или объектам
    2. У каждого объекта, есть план работ на год. Вводим его.
    3.У каждого План работ на год, есть заказы(их может быть несколько)
    4.ПОлучаем остатки и задаем условие
    Если введенный план работ на год = плану работ в заказе, то Добавляем в табличную часть и не трогаем.
    иначе Мы по этим данным делаем обнуление СУмм ПР, ВР и НУ и записываем в регистр.
    ЧТо я сделал:
    Сейчас запрос работает очень долго. МОжет есть возможность, его ускорить.
    Есть ли возможность делать отбор без регистратора? Мне кажется, из- за этого он работает дольше обычного. Можно конечно еще дату на конец добавить, но это погоду не сделает.
    Народ, давайте вместе подумаем. Спасибо)

    Код:
    Запрос = Новый запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | мтУчетЗатратПоЗаказамОстаткиИОбороты.Заказ,
    | мтУчетЗатратПоЗаказамОстаткиИОбороты.НИОКР,
    | мтУчетЗатратПоЗаказамОстаткиИОбороты.Заказ.ПланРаботНаГод как ПланРабот,
    | мтУчетЗатратПоЗаказамОстаткиИОбороты.СуммаНУКонечныйОстаток КАК СуммаНУ,
    | мтУчетЗатратПоЗаказамОстаткиИОбороты.СуммаВРКонечныйОстаток КАК СуммаВР,
    | мтУчетЗатратПоЗаказамОстаткиИОбороты.СуммаПРКонечныйОстаток КАК СуммаПР,
    | мтУчетЗатратПоЗаказамОстаткиИОбороты.Регистратор
    |ИЗ
    | РегистрНакопления.мтУчетЗатратПоЗаказам.ОстаткиИОбороты(
    |   ,
    |   ,
    |   Регистратор,
    |   ,
    |   Организация = &Организация
    |	И НИОКР В (&Объекты)) КАК мтУчетЗатратПоЗаказамОстаткиИОбороты";
    запрос.УстановитьПараметр("Объекты", объекты);
    Запрос.УстановитьПараметр("Организация",организация);
    Результат = Запрос.Выполнить();
    Выборка = Результат.Выбрать();
    Пока Выборка.Следующий() Цикл
    Если ПланРаботНаГод = Выборка.ПланРабот тогда
    СтрокаТЧ = Тч.Добавить() ;
    СтрокаТЧ.Заказ = Выборка.Заказ;
    СтрокаТЧ.НИОКР = Выборка.НИОКР;
    СтрокаТЧ.СуммаВР = Выборка.СуммаВР;
    СтрокаТЧ.СуммаНУ = Выборка.СуммаПР;
    СтрокаТЧ.СуммаНУ = Выборка.СуммаНУ;
    Иначе
    Набор = РегистрыНакопления.мтУчетЗатратПоЗаказам.СоздатьНаборЗаписей();
    Набор.Отбор.Регистратор.Установить(Выборка.Регистратор);
    Набор.Прочитать();
    Для каждого стр из  набор Цикл
    Стр.СуммаВР = 0;
    Стр.СуммаНУ = 0;
    Стр.СуммаПР = 0;
    КонецЦикла;
    Набор.Записать();
    КонецЕсли;
    КонецЦикла;
    
    
  2. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.266
    Симпатии:
    131
    Баллы:
    104
    первое - регистратор вам там не нужет
    второе - вам там и обороты не нужны - зачем их выбирать?

    ваш запрос должен быть таким
    Код:
    Запрос.Текст = "
    |ВЫБРАТЬ
    |  мтУчетЗатратПоЗаказамОстатки.Заказ,
    |  мтУчетЗатратПоЗаказамОстатки.Заказ.ПланРаботНаГод КАК ПланРабот,
    |  мтУчетЗатратПоЗаказамОстатки.НИОКР,
    |  мтУчетЗатратПоЗаказамОстатки.СуммаНУОстаток КАК СуммаНУ,
    |  мтУчетЗатратПоЗаказамОстатки.СуммаПРОстаток КАК СуммаПР,
    |  мтУчетЗатратПоЗаказамОстатки.СуммаВРОстаток КАК СуммаВР
    |ИЗ
    |  РегистрНакопления.мтУчетЗатратПоЗаказам.Остатки( , Организация=&Организация И НИОКР В (&Объекты)) КАК мтУчетЗатратПоЗаказамОстатки";
    
    и работать он будет значительно быстрее
  3. TopicStarter Overlay
    Graf1000
    Offline

    Graf1000

    Регистрация:
    1 фев 2012
    Сообщения:
    41
    Симпатии:
    0
    Баллы:
    1
    Пробовал, но у меня возникли проблемы. Ошибку выдает, что нельзя прочитать данные регистра. Если не испл регистратор.
    Набор = РегистрыНакопления.мтУчетЗатратПоЗаказам.СоздатьНаборЗаписей();
    Набор.Отбор.Регистратор.Установить(Выборка.Регистратор);
    Набор.Прочитать();
  4. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.266
    Симпатии:
    131
    Баллы:
    104
    какие документы регистраторами выступают? вернее даже - какие документы приходы делают?
    если Заказ - то он есть в выборке, его движения и надо корректировать.
    а движения всех регистраторов и смысла нет корректировать - фигню получите, потому что получите остатки не на конец периода, а после движений каждого регистратора

    будет еще лучше если у вас будет отдельный документ для закрытия остатков, типа закрытия заказов покупателей
  5. TopicStarter Overlay
    Graf1000
    Offline

    Graf1000

    Регистрация:
    1 фев 2012
    Сообщения:
    41
    Симпатии:
    0
    Баллы:
    1
    Может, конечно, Я думаю не правильно. Но хотел получить остатки и сразу их обнулить , и записать. Если конечно такое возможно.
    Обязательно при обнуление использовать док, например Корректировка записей регистра?
  6. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.266
    Симпатии:
    131
    Баллы:
    104
    желательно очень.
    что случится с этими корректировками если кто-нибудь очень умный решит перепровести документы?

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