7.7 Долго обрабатывается информация

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем Chudka, 28 дек 2009.

  1. TopicStarter Overlay
    Chudka
    Offline

    Chudka Опытный в 1С

    Регистрация:
    8 окт 2009
    Сообщения:
    63
    Симпатии:
    0
    Баллы:
    26
    ТиС, ред.9.2
    Имеется функция, которая тормозит процесс создания и открытия документа.
    Код:
     
    Функция РасчетСуммыПродаж() 
    ДатаНач = Дата(2008,12,01);        
    ДатаКонца = ПолучитьДатуТА();
    ЗапросПродажи = СоздатьОбъект("Запрос");
    ТекстЗапроса = 
    "//{{Запрос(Сформировать)  
    |Период с ДатаНачала по ДатаКонца; 
    |СтоимостьОтгрузки = Регистр.Продажи.ПродСтоимость;
    |СтоимостьВозврата = Регистр.Продажи.ПродСтоимостьВ;
    |Покуп = Регистр.Продажи.Покупатель;
    |Функция СуммаОтгрузки = Сумма(СтоимостьОтгрузки);
    |Функция СуммаВозврата = Сумма(СтоимостьВозврата);
    |Условие(Покуп=Контрагент);
    |"//}}Запрос
    ;              
    ЗапросПродажи.Выполнить(ТекстЗапроса);   
    СуммаПродажи = ЗапросПродажи.СуммаОтгрузки-ЗапросПродажи.СуммаВозврата;
    Возврат(СуммаПродажи);
    КонецФункции 
    
    Я пробовала решить эту проблему следующим образом:
    1. Создала справочник Продажи и написала внешнюю обработку, которая рассчитывает и заносит в спр. данные за период от Дата(2008,12,01) до тек.мом.;
    2. Создала КОНСТАНТУ, в которой хранится дата, до которой пересчитаны данные в справочнике;
    3.Ну и изменила исходную функцию таким образом, что данные будут считаться только за последние дни(от константы до тек.мом.), а сумма продаж за начальный период будет браться из справочника.:
    Код:
    Функция РасчетСуммыПродаж() 
    ДатаНачала = Константа.ПолучитьАтрибут("РасчетПродажПо");
    ДатаКонца = ДатаДок;
    ЗапросПродажи = СоздатьОбъект("Запрос");
    ТекстЗапроса = 
    "//{{Запрос(Сформировать)  
    |Период с ДатаНачала по ДатаКонца; 
    |СтоимостьОтгрузки = Регистр.Продажи.ПродСтоимость;
    |СтоимостьВозврата = Регистр.Продажи.ПродСтоимостьВ;
    |Покуп = Регистр.Продажи.Покупатель;
    |Функция СуммаОтгрузки = Сумма(СтоимостьОтгрузки);
    |Функция СуммаВозврата = Сумма(СтоимостьВозврата);
    |Условие(Покуп=Контрагент);
    |"//}}Запрос
    ;              
    ЗапросПродажи.Выполнить(ТекстЗапроса);   
    СуммаПродажН = ЗапросПродажи.СуммаОтгрузки-ЗапросПродажи.СуммаВозврата;
    
    ЗапросСпрПродажи = СоздатьОбъект("Запрос");
    ТекстЗапроса = 
    "//{{ЗАПРОС(СфрСпрПродажи)
    |СуммаПродаж = Справочник.Продажи.СуммаПродаж;
    |Конт = Справочник.Продажи.Контрагент;
    |Функция СуммаПродажОбщ = Сумма(СуммаПродаж);
    |Условие(Конт = Контрагент);
    |"//}}ЗАПРОС  
    ;
    ЗапросСпрПродажи.Выполнить(ТекстЗапроса);   
    СуммаПродажСпр = ЗапросСпрПродажи.СуммаПродажОбщ;
    
    СуммаПродажи = СуммаПродажН + СуммаПродажСпр;
    Возврат(СуммаПродажи);
    КонецФункции 
    
    
    И все хорошо, если бы эта функция вызывалась бы только при записи. Но она еще вызывается при открытии документа и при смене контрагента, и если документ реализации старый, то выдает ошибку. Ибо дата документа меньше, чем дата, сохраненная в константе. Не знаю что делать. И еще документ задним числом не ввести по той же самой причине. Как решить эту проблему?
  2. gloom_prov
    Offline

    gloom_prov

    Регистрация:
    26 дек 2009
    Сообщения:
    5
    Симпатии:
    0
    Баллы:
    1
    Ну честно говоря не знаю зачем у тебя весь этот страх делается но тараканы у каждого свои.
    1. Ты какой у тебе регистр оборотный или накопительный.
    2. Ошибка в датах естественна. Избавится можно. Вызывай старую обработку (старый запрос) при дате меньше чем в константе. Правд это тежи грабли.
    3. Если регистр оборотный то создай дополнительный регистр накопления и тули туда все что угодно.
    а точнее свои итоги по датам. или суммы.
  3. dianofob
    Offline

    dianofob (-_-)y-.o0O

    Регистрация:
    3 июл 2009
    Сообщения:
    711
    Симпатии:
    0
    Баллы:
    26
    ммм..а зачем в принципе нужны запросы к регистрам при открытии и создании документа?
  4. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    В ТиС сумма долга контрагента вычисляетчя через СводныйОстаток - быстро получается. М.б. имеет смысл воспользоваться этим методом, а не запросом?

    Выразите свою мысль с запросом яснее (для чего вам это нужно) М.б. существует более простое и красивое решение.....
  5. TopicStarter Overlay
    Chudka
    Offline

    Chudka Опытный в 1С

    Регистрация:
    8 окт 2009
    Сообщения:
    63
    Симпатии:
    0
    Баллы:
    26
    Этот запрос уже был изначально до того как программа попала ко мне. Не знаю кто его написал. Народ жалуется на то, что программа долго работает. Выяснила, что причина именно тут. Думала обойтись меньшими усилиями, но не получилось... Вот и пытаюсь понять, какое решение будет более оптимальным, при минимальных изменениях в конфигурации.
  6. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Попробуйте через СводныйОстаток
  7. TopicStarter Overlay
    Chudka
    Offline

    Chudka Опытный в 1С

    Регистрация:
    8 окт 2009
    Сообщения:
    63
    Симпатии:
    0
    Баллы:
    26
    Я попробую...

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