1С 7.7+1С++(ИТ)

  1. 8 мес. назад

    :)
    всем чмоки в этому чате
    есть у кого опыт работы с ИТ в 1сpp?
    а то вот такая интригующая история вышла
    вчера возникла необходимость быстро(!) спозиционироваться на нужной строке большой таблицы значений
    по критерию совпадения значений в от 3 до 5 колонок - сразу вспомнил про ИТ и индексы
    взял для примера пока маленькую таблицу в 20 тыщ строк и 3 колонки (типы значений - 1 документ+2 справочника)
    делаю индекс выбираю значения предпоследней строки и ищу ... время 1'21''
    как-то не быстро
    делаю тупой перебор строк ... время 2''
    это нормально вообще?

  2. Выложи кусок кода

  3. :)
    думаешь код кривой?
    ну раньше я по индексам не искал но по алс и по темам на форумах вроде идентичен и работает
    а учитывая что и тупой перебор можно ускорить то ИТ и не нужна особо

    Ответы: (4)
  4. Поиск в ТЗ в 7.7 (по одному полю) и так быстро работал.
    ИТ не требовались.

    Надо попробовать сделать одно составное поле, и поиск по нему.

  5. andrewalexk :)
    думаешь код кривой?

    Понятия не имею.
    Я на ИТЗ чудеса творил. Стало интересно.

    Ответы: (5) (6) (7) (15)
  6. (4):) воот потому и спросил нормально ли
    итз = СоздатьОбъект("ИндексированнаяТаблица");
    итз.Загрузить(т);
    время0=ТекущееВремя();
    итз.ДобавитьИндекс("Инд","Пациент,Услуга,Документ",0);
    Сп = СоздатьОбъект("СписокЗначений");
    Сп.ДобавитьЗначение(ПервыйЭлементИндекса);
    Сп.ДобавитьЗначение(ВторойЭлементИндекса);
    Сп.ДобавитьЗначение(ТретийЭлементИндекса);
    Сообщить("Найдена строка:"+ИТЗ.НайтиСтроку("Инд",Сп)+"("+время0+"="+ТекущееВремя()+")");
    форма.т.видимость(0);
    т.выбратьстроки();
    пока т.получитьстроку()>0 цикл
    ЗаголовокСистемы(строка(Т.НомерСтроки)+" ~ "+строка(Т.КоличествоСтрок()));
    если (т.Пациент=ПервыйЭлементИндекса) и (т.Услуга=ВторойЭлементИндекса) и (т.Документ=ТретийЭлементИндекса) Тогда
    Сообщить("Найдена строка:"+Т.НомерСтроки+"("+время0+"="+ТекущееВремя()+")");
    прервать;
    КонецЕсли;
    КонецЦикла;
    форма.т.видимость(1);

    Ответы: (6)
  7. 19.04.2024 18:47:51 отредактировано Эльниньо

    andrewalexk (4):) воот потому и спросил нормально ли
    итз = СоздатьОбъект("ИндексированнаяТаблица");
    итз.Загрузить(т);
    время0=ТекущееВремя();
    итз.ДобавитьИндекс("Инд","Пациент,Услуга,Документ",0);
    Сп = СоздатьОбъект("СписокЗначений");
    Сп.ДобавитьЗначение(ПервыйЭлементИндекса);
    Сп.ДобавитьЗначение(ВторойЭлементИндекса);
    Сп.ДобавитьЗначение(ТретийЭлементИндекса);
    Сообщить("Найдена строка:"+ИТЗ.НайтиСтроку("Инд",Сп)+"("+время0+"="+ТекущееВремя()+")");
    форма.т.видимость(0);
    т.выбратьстроки();
    пока т.получитьстроку()>0 цикл
    ЗаголовокСистемы(строка(Т.НомерСтроки)+" ~ "+строка(Т.КоличествоСтрок()));
    если (т.Пациент=ПервыйЭлементИндекса) и (т.Услуга=ВторойЭлементИндекса) и (т.Документ=ТретийЭлементИндекса) Тогда
    Сообщить("Найдена строка:"+Т.НомерСтроки+"("+время0+"="+ТекущееВремя()+")");
    прервать;
    КонецЕсли;
    КонецЦикла;
    форма.т.видимость(1);

    Подзабыл уже, но думаю тормоз на итз.ДобавитьИндекс
    Смысл индексирования есть только, если потом будешь искать много раз после индексирования.
    Если разово, смысла нет.
    Ради эскремента поменяй местами строки:
    время0=ТекущееВремя();
    итз.ДобавитьИндекс("Инд","Пациент,Услуга,Документ",0);

    Ответы: (10)
  8. Эльниньо Я на ИТЗ чудеса творил

    :)

  9. Лучёк предсказуем, как менструация у баб.

  10. 20.04.2024 10:08:50 отредактировано andrewalexk

    :)
    ну идея была что я эту таблицу параллельно выборке запроса парсю и вставляю сумму я думал что перебор медленный будет
    а если искать в обычной таблице значений по первой колонке то и ИТ не надо
    хотя ее можно использовать кажется для подытогов
    нет?

    Ответы: (10)
  11. andrewalexk :)
    ну идея была что я эту таблицу параллельно выборке запроса парсю и вставляю сумму я думал что перебор медленный будет
    а если искать в обычной таблице значений по первой колонке то и ИТ не надо
    хотя ее можно использовать кажется для подытогов
    нет?

    Сделай, как я сказал в (6). Сравни время.

    Ответы: (18)
  12. Прямые запросы + ИТЗ ващще чума. Восьмёрка нервно курит в сторонке.

    Ответы: (16)
  13. :) че до сих пор? вроде они исправляются ... вон снегопат наконец сделали :)))

    Ответы: (13)
  14. andrewalexk снегопат наконец сделали :)))

    Надо же! Какой прогресс!

  15. :) сарказм детектед

  16. Эльниньо Я на ИТЗ чудеса творил

    Не сомневаюсь!

  17. Эльниньо Восьмёрка нервно курит в сторонке.

    Восьмёрка - ещё сырая. Мем что ли с мисты.

  18. Ну а вообще я в семёре постольку, поскольку (типа никого нет, ну выручи). Думаю, как вы вообще в ней работали.

  19. (10):) как выяснилось для поиска не надо индексов - можно не искать но индексы нужны для итогов по узлу и добавление индекса по 3 колонкам в таблице из 40 тыщ строк занимает 2'24''- это нормально?

  20. :)
    но даже так норм - не думал что в универсальном отчете по регистру можно через ИТ + итоги по узлу доделать почти универсальную колонку с суммой другого регистра

    Ответы: (20)
  21. andrewalexk :)
    но даже так норм - не думал что в универсальном отчете по регистру можно через ИТ + итоги по узлу доделать почти универсальную колонку с суммой другого регистра

    ИТЗ.Группировать() - весчь!

  22. :)
    да не я еще только про
    иТЗ.НайтиСтроку("Инд"+ном,фильтр, 0, 1);
    опл=иТЗ.ИтогПоУзлу("зарплата", "Инд"+ном);

или зарегистрируйтесь чтобы ответить!