Мощность коллекции 1с8

10.02.12

Разработка - Универсальные функции

Неплохо было бы иметь платформенную функцию для вычисления размера коллекции, но пока этого нет, напишем функцию для мощности сами.

Иногда при отладке нужно посчитать мощность коллекции. В 1С8 коллекции должны быть ограничены в размерах.

В сложных структурах сложно на глаз вычислить размер, а он все растет, и растет, причем непонятно где. Поэтому возможность вычислить мощность коллекции очень полезна.

Код по вычислению мощности выглядит так:

Функция обМощностьКоллекции(К) Экспорт

                Перем Р, Эл, Кол;

                Р = 0;

                Попытка

                Для Каждого Эл Из К Цикл //Список, Структура, Соответствие, ТЗ

                               Попытка

                                               Р = Р + обМощностьКоллекции(Эл.Значение); //Список, Структура, Соответствие

                               Исключение

                               КонецПопытки;

                               Попытка

                                               Для Каждого Кол Из К.Колонки Цикл

                                                               Р = Р + обМощностьКоллекции(Эл[Кол.Имя]);

                                               КонецЦикла;

                               Исключение

                               КонецПопытки;

                              

                               Р = Р + 1; //Один элемент есть

                КонецЦикла;

                Исключение

                КонецПопытки;

                Возврат Р;

               

КонецФункции

 

Для проверки можно использовать структуру мощностью 10:

П = Новый Структура();

П.Вставить("ТЗ", Новый ТаблицаЗначений());

П.ТЗ.Колонки.Добавить("Зн");

Стр = П.ТЗ.Добавить();

Стр.Зн = Новый СписокЗначений();

Стр.Зн.Добавить(1);

Стр.Зн.Добавить(2);

 

СС = Новый Структура();

СС.Вставить("Ага", 1);

СС.Вставить("БугАга", 2);

 

Стр = П.ТЗ.Добавить();

Стр.Зн = Новый Соответствие();

Стр.Зн.Вставить(1,1);

Стр.Зн.Вставить(2, СС);

 

Стр = П.ТЗ.Добавить();

Стр.Зн = "Маша";

 

Сообщить(обМощностьКоллекции(П));

 

Буду благодарен за выявленные ошибки.

Вступайте в нашу телеграмм-группу Инфостарт

См. также

Загрузка и выгрузка в Excel Универсальные функции Программист 1С:Предприятие 8 Россия Бесплатно (free)

Описанный ниже подход позволяет в три шага заполнять формулы в Excel файлы, вне зависимости от ОС сервера (MS Windows Server или Linux). Подход подразумевает отказ от работы с COM-объектом в пользу работы через "объектную модель документа" (DOM).

30.10.2025    3408    Abysswalker    8    

45

Универсальные функции Работа с интерфейсом Программист 1С:Предприятие 8 Бесплатно (free)

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

14.05.2025    6333    DeerCven    15    

57

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Благодаря этим пяти строчкам можно больше не заморачиваться с загрузкой из внешних файлов. Пользуюсь везде, всегда и постоянно.

21.05.2024    48691    dimanich70    83    

169

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    7295    6    John_d    13    

59

Универсальные функции Программист Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    60885    atdonya    31    

69

Универсальные функции Программист 1С:Предприятие 8 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    9088    ke.92@mail.ru    17    

68
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. sCHTASS 49 10.02.12 11:36 Сейчас в теме
Эмм... Что-то никак не могу придумать практическое применение расчета мощности коллекции 1с.
2. fixin 4323 10.02.12 11:44 Сейчас в теме
(1) я использовал в отладчике. Чтобы понимать, большая у меня структура или нет. Это в некоторых случаях важно.
3. serega3333 10.02.12 12:38 Сейчас в теме
похоже на очередной пример по применению рекурсии
5. fixin 4323 10.02.12 13:08 Сейчас в теме
(3) рекурсия - один из мощных инструментов программирования, не удивительно что она тут применяется.
4. amiralnar 9 10.02.12 12:53 Сейчас в теме
СтрДлина(ЗначениеВСтрокуВнутр(Коллекция))
Synoecium; +1 Ответить
6. fixin 4323 10.02.12 13:09 Сейчас в теме
(4) это в чем? в условных байтах? Меня интересует количество вложенных объектов.
Кстати, попробуй зацикленную структуру преобразовать во внутреннюю строку и вылетишь из программы.
Правда я не помню, я учитываю циклы или нет.
8. WaterSmith 357 10.02.12 13:14 Сейчас в теме
(6) "Зацикленная структура", это как? Нет умом я понимаю, чисто теоретически, это структура содержащая в одном из элементов себя, ссылку на саму себя. Только вот как создать такое из списков, структур, соответствий и ТЗ?
9. fixin 4323 10.02.12 13:19 Сейчас в теме
(8)
С = Новый Структура();
С.Вставить("С", С);
10. WaterSmith 357 10.02.12 13:23 Сейчас в теме
(9) Хм, допустим, а зачем? Я к тому, что это ведь уже ошибочная ситуация?
11. fixin 4323 10.02.12 13:29 Сейчас в теме
(10) вы что, программирование не изучали? Не знаете где применяются рекурсивные ссылки?
подумайте, или вам сразу разжевать. Пример - закольцованный список, например (Prev, Next)
14. WaterSmith 357 10.02.12 13:32 Сейчас в теме
(11) Не изучал. Подумаю =)
Но если у вас была закольцованная структура, то где в вашем алгоритме условие выхода? По моему ваш алгоритм зациклиться при закольцованной структуре.
wolfsoft; +1 Ответить
12. Трактор 1276 10.02.12 13:30 Сейчас в теме
(10)
это ведь уже ошибочная ситуация?

Ошибочная или нет - не важно. Главное что это возможная ситуация.
15. amiralnar 9 10.02.12 14:29 Сейчас в теме
(6)

Меня интересует количество вложенных объектов.


СтрЧислоВхождений(ЗначениеВСтрокуВнутр(Новый Структура("Стркутура", Новый Структура("Структура"))), "{""#""") = 2
7. WaterSmith 357 10.02.12 13:10 Сейчас в теме
С "попытками" не аккуратненько как-то, может лучше было бы все же проверять типы значений?
И понятие "большой" структуры очень расплывчато. Если важна например нагрузка на память, то мне кажется, вариант предложенный (4) информативнее. Ну а то, что он банально проще, это и так видно всем =)

А как образец рекурсии конечно пойдет.
13. fixin 4323 10.02.12 13:32 Сейчас в теме
(7) честно говоря, уже не помню, зачем мне это нужно было. видимо, нужна была нагрузка на память. но структура точно была закольцована.
Для отправки сообщения требуется регистрация/авторизация