Как создать Двумерный или Многомерный массив? Код 1C v 8.х ДвумерныйМассив = Новый Массив(2, 8);
ДвумерныйМассив = Новый Массив;
МассивВторогоПорядка = Новый Массив(8);
ДвумерныйМассив.Добавить(МассивВторогоПорядка);
ДвумерныйМассив.Добавить(МассивВторогоПорядка);
Значение = ДвумерныйМассив[2][5];
Значение = ДвумерныйМассив.Получить(2).Получить(5);
Многомерный массив
Код 1C v 8.2 УП Массив = Новый Массив(3, 2);
Массив[0][0] = "Знач11";
Массив[0][1] = "Знач12";
Массив[1][0] = "Знач21";
Массив[1][1] = "Знач22";
Массив[2][0] = "Знач31";
Массив[2][1] = "Знач32";
// обход всех элементов через конструкцию Для Каждого
Для Каждого Строка Из Массив Цикл
Для Каждого Элемент Из Строка Цикл
Сообщить(Элемент);
КонецЦикла;
КонецЦикла;
// обход всех элементов через индекс
Для ИндексСтрока = 0 По Массив.Количество() - 1 Цикл
Для ИндексСтолбец = 0 По Массив[ИндексСтрока].Количество() - 1 Цикл
Сообщить(Массив[ИндексСтрока][ИндексСтолбец]);
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Категория:
Работа с Массивом, Структурой, Соответств… Как сделать чтобы при выделении числе в табличном документе, отчете выводилась их сумма? Часто бывает необходимость сложить несколько чисел в печатной форме, например, как это сделано в Excel.
Сегодня решить посмотреть Бухгалтерию КОРП. Нашёл в ней очень интересную штуку: поле в котором показан результат сложения выделенных ячеек печатной формы. Конечно, такую штуку бы правильнее реализовать на уровне платформы. Но коль нет, можно оказывается сделать ручками. Как говориться, и за это богам спасибо.
Вот исходный код из Бухгалтерии КОРП:
Код 1C v 8.х
Функция ВычислитьСуммуВыделенныхЯчеекТабличногоДокумента(ПолеТабличногоДокумента) Экспорт
Сумма = 0;
Для Каждого Область Из ПолеТабличногоДокумента.ВыделенныеОбласти Цикл
Если ТипЗнч(Область) = Тип("ОбластьЯчеекТабличногоДокумента") Тогда
Для ИндексСтрока = Область.Верх По Область.Низ Цикл
Для ИндексКолонка = Область.Лево По Область.Право Цикл
Попытка
Сумма = Сумма + Число(СтрЗаменить(ПолеТабличногоДокумента.Область("R" + Формат(ИндексСтрока, "ЧГ=0") + "C" + Формат(ИндексКолонка, "ЧГ=0")) .Текст, " ", ""));
Исключение
КонецПопытки;
КонецЦикла;
КонецЦикла;
КонецЕсли;
КонецЦикла;
Возврат Сумма;
КонецФункции
Подумав немного, я добавил в функцию ещё расчёт среднего и определение количества ячеек с числами. Получилось вот что:
Код 1C v 8.х Функция ВычислитьСуммуВыделенныхЯчеекТабличногоДокумента(ПолеТабличногоДокумента, average = 0, count = 0) Экспорт
Сумма = 0;
count = 0;
Для Каждого Область Из ПолеТабличногоДокумента.ВыделенныеОбласти Цикл
Если ТипЗнч(Область) = Тип("ОбластьЯчеекТабличногоДокумента") Тогда
Для ИндексСтрока = Область.Верх По Область.Низ Цикл
Для ИндексКолонка = Область.Лево По Область.Право Цикл
Попытка
vNumber = Число(СтрЗаменить(ПолеТабличногоДокумента.Область("R" + Формат(ИндексСтрока, "ЧГ=0") + "C" + Формат(ИндексКолонка, "ЧГ=0")) .Текст, " ", ""));
Сумма = Сумма + vNumber;
count = count + 1;
Исключение
КонецПопытки;
КонецЦикла;
КонецЦикла;
КонецЕсли;
КонецЦикла;
Если count <> 0 Тогда
average = Сумма / count;
Иначе
average = 0;
КонецЕсли;
Возврат Сумма;
КонецФункции // ВычислитьСуммуВыделенныхЯчеекТабличногоДокумента
Результат на картинке:
Да, чуть не забыл самое главное, функцию надо вызвать в обработчике ПриАктивизацииОбласти поля табличного документа.
Автор: Pim Категория:
Табличный документ