Компонента таблица значений 1С 7.7


Объект, создаваемый данной компонентой, по свойствам аналогичен таблице значений. Но в отличие от стандартной таблицы, он дополнен необходимыми методами для удобной ее обработки.

ВнешнТаблЗнач.zip

Изначально компонента создавалась для формирования отчетов с произвольной детализацией и с разворотом по горизонтали. При этом методы стандартной таблицы значений не обеспечивали должного удобства и возможности обработки необходимых объемов. Ну а дальнейшее ее применение стало обычным делом.

Скажем вариант, когда требуется свернуть ТаблицуЗначений строк эдак на 100’000 (или больше). Стандартная ТЗ на этом просто повесится, и можно будет сходить покурить, попить кофейку…

Ну а если ее выгрузить в эту компоненту, там свернуть и загрузить обратно в ТЗ, то вся эта операция займет не более пары секунд (вместе с выгрузкой и загрузкой). Та же ситуация при сохранении ТЗ в файл.

Пример удобства формирования отчетов с произвольной детализацией и разворотом по периодам можно увидеть в «Готовые решения»

Особое место следует уделить использованию памяти.
Стандартная ТЗ будет на каждое дублирование значения выделять память. Одно значение в стандартной ТЗ занимает 88 байт и если это строка, плюс еще память под эту строку.

Пусть таблица 100’000х10. Итого 88 мегабайт. В моей таблице одинаковые значения в разных ячейках не дублируются, а ссылаются на один и тот же выделенный объект. Т.е. пусть в таблице ~10’000 различных значений справочников или строк (даже очень большие таблицы это обычно различные комбинации этих значений). Одно значение в среднем 100 байт. Тогда получается эта таблица будет 100 * 10’000 + 100’000 * 10 * 4 (ссылка на объект=4 байта) Итого всего 5 мегабайт. Одно дробное число = 8 байт (тип Double).

Скорость поиска.
Методы поиска строки со значением, или выборка по значению обрабатываются в среднем так. Сначала по индексированному (хешированному) списку ищется объект, а после в линейном списке ссылок (значения колонки) ищется ссылка на нужный объект. Ну а для современных компьютеров (P4) перебрать массив из int на 100’000 элементов, это настолько мизерная затрата по времени…

То ли дело для стандартной ТЗ, ведь там сравнивается не int, а равенство одного объекта из 88 байт другому. В результате в нашем объекте, в методах поиска, больше времени тратится на сам вызов метода, чем время поиска нужного значения.