7.7 Быстро убрать строки из ТЗ

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

  1. TopicStarter Overlay
    Asttoxa
    Offline

    Asttoxa Опытный в 1С

    Регистрация:
    18 май 2010
    Сообщения:
    525
    Симпатии:
    0
    Баллы:
    26
    Ребят есть ли возможность быстро убрать ненужные строки из ТЗ.
    Быстро я имею виду не перебором, а как к примеру Свернуть() и подобное..

    Пример:
    В ТЗ есть столбик "Тип" он может равняться либо "1" либо "2" так вот нужно просто убрать строки, где ТЗ.Тип = 1. Не хочется ради этого запускать цикл.
    В итоге мне нужно собрать ИТОГ ("Сумма") НО только по строкам где Тип = 2!
  2. vartanet
    Offline

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

    Регистрация:
    16 ноя 2010
    Сообщения:
    2.698
    Симпатии:
    15
    Баллы:
    29
    не знаю как в 77. но в 8-ке я бы сделал запрос по этой таблице значений с условием.

    может быть в 77 будет быстрее в цикле по основной таблице создать новую таблицу с типом=1, чем из существующей удалять строки задом наперед.. ведь при удалении будет смещение индекса происходить..
  3. WaRDeR
    Offline

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

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    А в семерке перебором.
    Или выгрузка в другую ТЗ и свертка по типу.
  4. vartanet
    Offline

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

    Регистрация:
    16 ноя 2010
    Сообщения:
    2.698
    Симпатии:
    15
    Баллы:
    29
    если нужна только сумма.. то в методе Сернуть "тип" нужно поставить в измерение, "сумму" в ресурсы. и взять значение из второй строки.
  5. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Проще всего
    1) сортировать по реквизиту. (1-2)
    2) НайтиЗначение (2)
    3) Выгрузить с найденой позиции до конца или с первой по найденную
  6. TopicStarter Overlay
    Asttoxa
    Offline

    Asttoxa Опытный в 1С

    Регистрация:
    18 май 2010
    Сообщения:
    525
    Симпатии:
    0
    Баллы:
    26
    Спасибо всем ответившим.
    В итоге сделал перебором в обратном порядке и удаление строки с условием!
    Сильно на производительность не повлияло.
  7. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Все зависит от размера таблицы... Попробуйте обработать таблицу скажем в 1000 строк перебором, а затем описанным мною способом
  8. SirStefan
    Offline

    SirStefan Опытный в 1С

    Регистрация:
    20 апр 2010
    Сообщения:
    79
    Симпатии:
    0
    Баллы:
    26
    Как вариант - использовать 1С++ и "ИндексированнаяТаблица".
    Там можно получить Итог("Сумма") только по строкам где Тип=2 не удаляя остальные строки. В некоторых случаях побыстрее стандартной выходит.
  9. SirStefan
    Offline

    SirStefan Опытный в 1С

    Регистрация:
    20 апр 2010
    Сообщения:
    79
    Симпатии:
    0
    Баллы:
    26
    Из интереса проверил еще и с 1sqlite.dll - справочник 31000 позиций.

    Стандарт - удаление в ТЗ ненужных строк и расчет итога - 6.857 секунд

    Запрос к итогам ТЗ через 1sqlite - 0.101 секунд
    Код:
    перИтог = 0;
    БД = СоздатьОбъект("SQLiteBase");
    БД.Открыть(":memory:");
    Запрос = БД.НовыйЗапрос();
    БД.УложитьТЗ(ТЗ,"ТЗ",0);
    ТекстЗапроса="SELECT
    |SUM(Сумма) AS Итог 
    |FROM ТЗ
    |WHERE Тип = 0";
    чИтог=Запрос.ВыполнитьЗапрос(ТекстЗапроса,ПерИтог,0);
    
  10. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104

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