8.х Долго ли будут обрабатываться 12000 записей регистра

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Elvisnya, 24 фев 2011.

  1. TopicStarter Overlay
    Elvisnya
    Offline

    Elvisnya

    Регистрация:
    30 сен 2010
    Сообщения:
    29
    Симпатии:
    0
    Баллы:
    1
    Добрый день. Пишу конфигурацию для кабельного телевидения у которого 1000 абонентов. Оплаты сохраняю в Регистр накопления. За год в регистр запишется 12000 записей. У регистра одно измерение: Договор - Ссылка на справочник. И один ресурс: Сумма - число.

    Каждый раз при открытии формы приёма оплаты перебираются все записи регистра.

    Я боюсь что машина будет повисать на минуту, а то и больше при каждом открытии формы оплаты, а через три года в регистре станет 36000 записей!

    А вы что скажите? Будет повисать или для 1С обработать такой объём как раз плюнуть?
  2. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    А задача какая стоит? Зачем перебирать записи?
  3. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    1) Количество записей небольшое.
    2) А для чего каждый раз перебирать ВСЕ записи? Есть такие понятия как остатки и обороты. Смысл перебора всех записей мне непонятен.
  4. Неназываемый
    Offline

    Неназываемый Опытный в 1С Команда форума

    Регистрация:
    2 фев 2007
    Сообщения:
    507
    Симпатии:
    7
    Баллы:
    29
    Подозреваю что при создании документа оплата необходимо показать текущую задолженность по договору.
    Вот только перебор всех элементов это, простите, перебор )
    Переделай на запрос, с условием по договору, и храни хоть "мильон" записей.
  5. mialord
    Offline

    mialord Модераторы Команда форума Модератор

    Регистрация:
    31 июл 2009
    Сообщения:
    5.400
    Симпатии:
    40
    Баллы:
    54
    1. Возможно некорректно нормализована база данных.
    2. Можно отключить пересчет итогов при записи данных в регистр скорость увеличится в разы.
  6. TopicStarter Overlay
    Elvisnya
    Offline

    Elvisnya

    Регистрация:
    30 сен 2010
    Сообщения:
    29
    Симпатии:
    0
    Баллы:
    1
    Но разве в этом случае не перебираются все записи регистра?!

    Код:
    Запрос.Текст = 
    "ВЫБРАТЬ
    |    СУММА(Оплаты.Сумма) КАК Сумма
    |ИЗ
    |    РегистрНакопления.Оплаты КАК Оплаты
    |ГДЕ
    |    Оплаты.Договор = &ТекДоговор
    |
    |СГРУППИРОВАТЬ ПО
    |    Оплаты.Договор";    
    Запрос.УстановитьПараметр("ТекДоговор", ЭтотОбъект.Договор);    
    ВыборкаСуммаПредыдущихОплат = Запрос.Выполнить().Выбрать();
    
    
    И ещё перебираются все записи регистра НЕ ПРИ ОТКРЫТИИ ФОРМЫ, а при выборе договора. Это делается для того что бы рассчитать начальную дату для оплаты.
  7. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    Т.е. вам нужно получить всю сумму оплаты по договору за весь период?
    Вид регистра какой (остатков или оборотов)?
  8. TopicStarter Overlay
    Elvisnya
    Offline

    Elvisnya

    Регистрация:
    30 сен 2010
    Сообщения:
    29
    Симпатии:
    0
    Баллы:
    1
    Да. Мне нужно получить всю сумму оплаты по договору за весь период.
    Вид регистра оборотов
  9. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    Так, вроде, быстрее должно быть:
    Код:
    Запрос.Текст =
    "ВЫБРАТЬ
    |	ОплатыОбороты.Сумма
    |ИЗ
    |	РегистрНакопления.Оплаты.Обороты(, , , Договор = &ТекДоговор) КАК ОплатыОбороты";
    Выборка = Запрос.Выполнить().Выбрать();
    Если Выборка.Следующий() Тогда
    СуммаОплаты = Выборка.Сумма;
    КонецЕсли; 
    
  10. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    Код:
    "ВЫБРАТЬ
    ОплатыОстатки.Сумма
    ИЗ
    РегистрНакопления.Оплаты.Остатки(
    КОНЕЦПЕРИОДА(&Дата, ДЕНЬ),
    Контрагент = &Контрагент
    И Договор = &ТекДоговор) КАК ОплатыОстатки"
    
  11. TopicStarter Overlay
    Elvisnya
    Offline

    Elvisnya

    Регистрация:
    30 сен 2010
    Сообщения:
    29
    Симпатии:
    0
    Баллы:
    1
    shurikvz у меня нет виртуальной таблицы остатки. У меня регистр Оборотов.
    Requin спасибо.
  12. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    Хотя shurikvz в чем-то прав: дату окончания периода нужно указать.
    Код:
    |    РегистрНакопления.Оплаты.Обороты(,  &Дата, , Договор = &ТекДоговор) КАК ОплатыОбороты";
    </span>
    </FONT></FONT></pre>
  13. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    и чО? :angry:
    внимательней смотрите.
  14. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    Заинтересовало: а куда смотреть? У оборотного регистра остатки, AFAIK, отсутствуют как класс.
    Ну и у ТС нет измерения Контрагент:
  15. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    Согласен. Не соображаю под конец дня.
    Elvisnya, прошу прощения.

    Тут невнимательно читал, было для примера.
  16. Неназываемый
    Offline

    Неназываемый Опытный в 1С Команда форума

    Регистрация:
    2 фев 2007
    Сообщения:
    507
    Симпатии:
    7
    Баллы:
    29
    Нет не перебираются.
    И да советы данные выше ускорят работу запроса на пару тысячных секунд, с вашим то количеством записей =)

    Для теста вы можете снять копию базы, наплодить записей в регистр, несколько сотен тысяч, и сравнить в отладчике скорость выполнения запроса с текущей и заполненной базой. Уверен, результаты будут обнадеживающие.
  17. ASh
    Offline

    ASh Опытный в 1С

    Регистрация:
    10 сен 2008
    Сообщения:
    568
    Симпатии:
    0
    Баллы:
    26
    Вид регистра надо переделать на остатки. В этих целях запрос по остаткам будет выполняться на порядок быстрее, чем по оборотам. Правда, это не будет заметно на таких объемах и условиях :)
    Какой-то загадочный способ расчета даты оплаты. Формулу не напишите? Думаю, найдутся варианты попроще.

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