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

10.02.12

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

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

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

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

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

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

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

                Р = 0;

                Попытка

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

                               Попытка

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

                               Исключение

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

                               Попытка

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

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

                                               КонецЦикла;

                               Исключение

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

                              

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

                КонецЦикла;

                Исключение

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

                Возврат Р;

               

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

 

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

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

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

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

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

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

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

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

 

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

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

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

 

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

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

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

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

 

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

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

 

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

 

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

См. также

GUID в 1С 8.3 - как с ними быть

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

12.02.2024    4350    atdonya    22    

41

Переоткрытие внешних обработок

Универсальные функции Платформа 1С v8.3 Бесплатно (free)

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

30.11.2023    3889    ke.92@mail.ru    16    

60

Валидация JSON через XDTO (включая массивы)

WEB-интеграция Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    8569    YA_418728146    6    

139

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    2024    21    progmaster    7    

3

Расширение: Быстрые отборы через буфер [Alt+C] Копировать список, [Alt+V] Вставить список, [Ctrl+C] Копировать из файлов

Инструментарий разработчика Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

Копирует в буфер значения из списков, из ячеек отчетов, таблиц, настроек списков, других отборов и вставляет в выбранную настройку отбора. Работает с Объект не найден. Работает как в одной так и между разными базами 1С. Использует комбинации [Alt+C] Копировать список, [Alt+V] Вставить список. Также для копирования данных используется стандартная [Ctrl+C] (например из открытого xls, mxl, doc и т.п. файла скопировать список наименований)

1 стартмани

13.10.2022    16019    131    sapervodichka    112    

129

Система контроля ведения учета [БСП]

Универсальные функции Механизмы типовых конфигураций БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В данном материале рассмотрим типовой алгоритм подсистемы контроля учета БСП в конфигурациях на примерах.

18.07.2022    7202    quazare    8    

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

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

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


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

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