Меню

Свернуть значения таблицы массива строки



Как в 1с свернуть таблицу значений

Рассмотрим два способа в 1с свернуть таблицу значений. Для первого воспользуемся методом таблицы значений Свернуть, для второго используем З апрос.

Свернуть с использованием метода таблицы значений

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

Пример 1. Пусть у нас существует таблица значений с колонками Номенклатура, Цена, Количество, Сумма. Необходимо в 1с свернуть таблицу значений по колонкам Номенклатура и Цена, просуммировав при этом данные в колонках Количество и Сумма.

Также стоит отметить следующие особенности метода Свернуть:

  • Работает только НаСервере (как и любые действия с таблицами значений);
  • Прост в реализации;
  • Может суммировать значения, но не может получать минимум, максимум, среднее и т.д.

Свернуть таблицу значений при помощи запроса

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

Для свертки таблицы значений запросом необходимо:

  • Таблицу значений передать параметром в запрос;
  • Сгруппировать по нужным полям,
  • Применить агрегатные функции к нужным полям ( сумма, максимум, минимум, среднее);
  • Выгрузить результат запроса в таблицу значений.

Пример 2. Пусть у нас существует таблица значений с колонками Номенклатура, Цена, Количество, Сумма. Необходимо в 1с свернуть таблицу значений по колонке Номенклатура, по колонке Цена получить среднее значение, просуммировать данные в колонках Количество и Сумма.

Особенности данного метода:

  • Работает только НаСервере (как и любые действия с таблицами значений и запросами);
  • Более сложен в реализации;
  • Более универсален, в сравнении с предыдущим.

Скачать обработку с двумя этими примерами можно: Здесь

Источник

Обучение программированию на 1С

  • Главная
  • Статьи
    • Жизнь 1С
    • Новости & Личное
    • Программирование
  • Полезное
    • Библиотека решений
    • Функции & Процедуры
  • Материалы
  • Скачать 1С
  • Контакты

Свернуть значения таблицы, массива, строки

Привожу ещё одну любопытную реализацию задачи по свёртке значений в разных объектах 1С. Итак, чтобы свернуть значения таблицы, массива или строки можно воспользоваться одной из предложенных ниже функций:

  • СвернутьСтроку(Стр, СтрНачальныйРазделитель, СтрИтоговыйРазделитель) – Убирает повторяющиеся в строке значения. Значения разделены между собой указанным разделителем. Также можно поменять этот разделитель после преобразования.
  • СвернутьМассив(пМассив) – Убирает повторяющиеся в массиве значения.
  • СвернутьТаблицу(Таб, ИсключаяПоля, ПоляСуммы, СуммироватьВсеЧисла) – Убирает повторяющиеся значения в таблице. Процедура аналогична методу ТаблицаЗначений.Свернуть(КолонкиГруппировок, КолонкиСуммирования).

Реализация функций в 1С следующая:

1. Функция «Свернуть строку».

// Сворачивает в строке используемые повторяющиеся значения. // // Параметры: // Стр — — Исходная строка; // СтрНачальныйРазделитель — — Разделитель для разбора строки, по умолчанию «,»; // СтрИтоговыйРазделитель — — Разделитель, используемый в собранной строке. // По умолчанию «,». // // Возвращаемое значение: // — Собранная строка. // Функция СвернутьСтроку(Стр, СтрНачальныйРазделитель = «,», СтрИтоговыйРазделитель = «, «) Экспорт Результат = «»; МассивСтр = РазобратьСтрокуВМассивПоРазделителю(Стр, СтрНачальныйРазделитель); ЗаполненныйМассив = Новый Массив; Для Каждого Элемент Из МассивСтр Цикл Если ЗаполненныйМассив.Найти(Элемент) = Неопределено Тогда ЗаполненныйМассив.Добавить(Элемент); Результат = Результат + СтрИтоговыйРазделитель + Элемент; КонецЕсли; КонецЦикла; Результат = Сред(Результат, СтрДлина(СтрИтоговыйРазделитель)+1); Возврат Результат; КонецФункции;

Читайте также:  Главные события столетней войны таблица

2. Функция «Свернуть массив».

// Сворачивает в массиве повторяющиеся значения. // // Параметры: // пМассив — — Исходный массив. // // Возвращаемое значение: // — Свёрнутый массив. // Функция СвернутьМассив(пМассив) Экспорт Если пМассив.Количество() > 1 Тогда ТЗ = Новый ТаблицаЗначений; ИмяКолонки = «Колонка1»; ТЗ.Колонки.Добавить(ИмяКолонки); Для Индекс = 0 По пМассив.Количество()-1 Цикл ТЗ.Добавить(); КонецЦикла; ТЗ.ЗагрузитьКолонку(пМассив, ИмяКолонки); ТЗ.Свернуть(ИмяКолонки, «»); Возврат ТЗ.ВыгрузитьКолонку(ИмяКолонки); Иначе Результат = Новый Массив; Для Каждого Элемент Из пМассив Цикл Результат.Добавить(Элемент); КонецЦикла; Возврат Результат; КонецЕсли; КонецФункции;

3. Процедура «Свернуть таблицу». Отличается от процедуры по умолчанию тем, что сворачивает все поля за исключением указанных и имеет дополнительную возможность распознавать колонки с числами.

// Сворачивает в таблице повторяющиеся значения. // // Параметры: // Таб — — Исходная таблица; // ИсключаяПоля — — Колонки таблицы, исключаемые из рассмотрения; // ПоляСуммы — — Поля для суммирования строк; // СуммироватьВсеЧисла — — Команда на суммирование всех колонок с числами (поля добавляются к полям суммы). // Процедура СвернутьТаблицу(Таб, ИсключаяПоля = «НомерСтроки», ПоляСуммы = «», СуммироватьВсеЧисла = Ложь) Экспорт МассивИсключаяПоля = ?(ИсключаяПоля = «», Новый Массив, ПреобразоватьВМассив(ИсключаяПоля)); Если СуммироватьВсеЧисла Тогда МассивПоляСуммы = Новый Массив; Для Каждого Колонка Из Таб.Колонки Цикл МассивТипов = Колонка.ТипЗначения.Типы(); Если МассивТипов.Найти(Тип(«Число»)) <> Неопределено И (МассивТипов.Количество() = 1 ИЛИ (МассивТипов.Количество() = 2 И (МассивТипов.Найти(Тип(«Null»)) <> Неопределено ИЛИ МассивТипов.Найти(Тип(«Неопределено»)) <> Неопределено)) ИЛИ (МассивТипов.Количество() = 3 И МассивТипов.Найти(Тип(«Null»)) <> Неопределено И МассивТипов.Найти(Тип(«Неопределено»)) <> Неопределено)) Тогда ПоляСуммы = ?(ПустаяСтрока(ПоляСуммы), «», ПоляСуммы + «, «) + Колонка.Имя; МассивПоляСуммы.Добавить(Колонка.Имя); КонецЕсли; КонецЦикла; Иначе МассивПоляСуммы = ?(ПоляСуммы = «», Новый Массив, ПреобразоватьВМассив(ПоляСуммы)); КонецЕсли; СтрКолонки = «»; Для Каждого Колонка Из Таб.Колонки Цикл Если МассивПоляСуммы.Найти(Колонка.Имя) = Неопределено И МассивИсключаяПоля.Найти(Колонка.Имя) = Неопределено Тогда СтрКолонки = СтрКолонки + «, » + Колонка.Имя; КонецЕсли; КонецЦикла; СтрКолонки = Сред(СтрКолонки, 3); Таб.Свернуть(СтрКолонки, ПоляСуммы); КонецПроцедуры;

Также в данном коде используются следующие вспомогательные функции:

  • ПреобразоватьВМассив(Объект, Проверка) – Преобразует объект в массив.
  • РазобратьСтрокуВМассивПоРазделителю(Стр, СтрРазделитель, ИгнорироватьПустые) – Разбирает предложенную строку в массив.

Код вспомогательных функций на 1С:

// Преобразует в массив переменную любого типа данных. // // Параметры: // Объект — Произвольный — произвольный объект данных; // Проверка — — Осуществление проверки на заполненное значение. // // Возвращаемое значение: // — Массив с теми же данными. // Функция ПреобразоватьВМассив(Объект, Проверка = Ложь) Экспорт ОбъектМассив = Новый Массив; Если НЕ Проверка ИЛИ ЗначениеЗаполнено(Объект) Тогда Если ТипЗнч(Объект) = Тип(«Массив») Тогда ОбъектМассив = Объект; ИначеЕсли ТипЗнч(Объект) = Тип(«СписокЗначений») Тогда ОбъектМассив = Объект.ВыгрузитьЗначения(); ИначеЕсли ТипЗнч(Объект) = Тип(«Строка») Тогда ОбъектМассив = РазобратьСтрокуВМассивПоРазделителю(Объект); ИначеЕсли ТипЗнч(Объект) = Тип(«Структура») Тогда Для Каждого Элемент Из Объект Цикл ОбъектМассив.Добавить(Элемент.Значение); КонецЦикла; Иначе ОбъектМассив.Добавить(Объект); КонецЕсли; КонецЕсли; Возврат ОбъектМассив; КонецФункции; // Разбирает строку в массив подстрок по разделителю. // При этом пробелы между подстроками не учитываются. // // Параметры: // Стр — исходная строка; // СтрРазделитель — разделитель, по умолчанию «,»; // ИгнорироватьПустые — игнорировать ли пустые места между разделителями. // // Возвращаемое значение: // Массив строк // Функция РазобратьСтрокуВМассивПоРазделителю(Знач Стр, СтрРазделитель = «,», ИгнорироватьПустые = Ложь) Экспорт Результат = Новый Массив; ВхождениеРазделителя = Найти(Стр, СтрРазделитель); Пока ВхождениеРазделителя <> 0 Цикл ЧастьДоРазделителя = СокрЛП(Лев(Стр, ВхождениеРазделителя — 1)); Если НЕ (ИгнорироватьПустые И ПустаяСтрока(ЧастьДоРазделителя)) Тогда Результат.Добавить(ЧастьДоРазделителя); КонецЕсли; Стр = СокрЛП(Сред(Стр, ВхождениеРазделителя + 1)); ВхождениеРазделителя = Найти(Стр, СтрРазделитель); КонецЦикла; Если НЕ (ИгнорироватьПустые И ПустаяСтрока(Стр)) Тогда Результат.Добавить(СокрЛП(Стр)); КонецЕсли; Возврат Результат; КонецФункции;

Читайте также:  Таблица Свойства химического состава клетки

Смело используйте эти и другие функции для реализации своих проектов. Удачи!

Если вам понравилась эта статья или у вас к ней есть замечания, напишите об этом, пожалуйста, в комментариях ниже.

Источник

v8: ТЗ как свернуть таблицу с колонками из переменных?

есть ТЗ названия двух колонок, которые потом должны ссумироватся, создаются как переменные:
НазваниеКолонки = Строка(«н»+СокрЛП(Выборка.Номенклатура.Код));
НазваниеКолонкиЦена = Строка(«ц»+СокрЛП(Выборка.Номенклатура.Код));

но бывает так что в одной накладной может быть 2 одинаковых номенклатуры с одной ценой — поэтому необходимо это дело Свернуть — НО КАК?

ТЗ.Свернуть(«Дата, Номер, ДатаВходящая, НомерВходящий, Контрагент», «[НазваниеКолонки], [НазваниеКолонкиЦена]»);

+Доступность:
Сервер, толстый клиент, внешнее соединение.

Свернуть (GroupBy)
Синтаксис:

Тип: Строка.
Имена колонок, разделенные запятыми, по которым необходимо группировать строки таблицы значений.
Тип: Строка.
Имена колонок, разделенные запятыми, по которым необходимо суммировать значения в строках таблицы значений.
Описание:

Осуществляет свертку таблицы значений по указанным колонкам группировки. Строки, у которых совпадают значения в колонках, указанных в первом параметре, сворачиваются в одну строку. Значения этих строк, хранящиеся в колонках, указанных во втором параметре, накапливаются.
Важно! Списки колонок не должны пересекаться. Колонки, не вошедшие ни в один из списков колонок, после выполнения метода удаляются из таблицы значений.

Сервер, толстый клиент, внешнее соединение.
Примечание:

Если в колонке установлен тип и он единственный, то при суммировании будет предприниматься попытка преобразования значения к типу Число.
Если колонке не присвоены типы, то в процессе суммирования будут принимать участие только значения, имеющие тип Число, значения других типов будут игнорироваться.
Если в колонке несколько типов и среди них есть тип Число, то в процессе суммирования будут принимать участие только значения, имеющие тип Число, значения других типов будут игнорироваться.
Если в колонке несколько типов и среди них нет типа Число, то результат суммирования будет 0, который будет присвоен в соответствующую колонку, где будет преобразован к значению по умолчанию для типа, установленного в колонке.
Пример:

Источник

Таблица значений

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

Как можно создать новую таблицу значений?

Как добавить новую колонку с определенным типом и заголовком?

  • Имя (необязательный, тип Строка , по умолчанию пустая строка). Имя колонки.
  • Тип (необязательный, тип ОписаниеТипов ). Объект, описывающий допустимые типы значений для колонки. Если параметр не указан, в колонке можно будет хранить значение любого типа.
  • Заголовок (необязательный, тип Строка , по умолчанию пустая строка). Заголовок колонки таблицы значений. Используется при визуальном отображении таблицы значений.
  • Ширина (необязательный, тип Число , по умолчанию ноль). Ширина колонки в символах. Используется при визуальном отображении таблицы значений.
Читайте также:  Экстенсивный и интенсивный экономический рост

Как добавить новые строки?

Как выгрузить результат запроса в таблицу значений?

Как обойти в цикле все строки таблицы значений?

Как сделать выборку строк в таблице значений с отбором?

  • ПараметрыОтбора (обязательный, тип Структура ). Задает условия поиска: ключ структуры определяет имя колонки, по которой будет осуществляться поиск, а значение структуры — искомое значение.

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

Массив хранит ссылки на строки таблицы значений, то есть при изменении строки в таблице, значение в массиве тоже будет измененным.

Как выполнить сортировку?

Как вычислить итоги по колонке?

Как сделать копию таблицы значений?

Как свернуть таблицу значений по колонке и суммировать по количеству?

Метод Свернуть() сворачивает таблицу по колонке «Наименование» и суммирует колонку «Количество». Если существуют еще колонки, то они будут удалены.

  • КолонкиГруппировок (обязательный, тип Строка ). Имена колонок, разделенные запятыми, по которым необходимо группировать строки таблицы значений.
  • КолонкиСуммирования (необязательный, тип Строка ). Имена колонок, разделенные запятыми, по которым необходимо суммировать значения в строках таблицы значений.

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

Списки колонок не должны пересекаться. Колонки, не вошедшие ни в один из списков колонок, после выполнения метода удаляются из таблицы значений.

  • Если в колонке установлен тип и он единственный, то при суммировании будет предприниматься попытка преобразования значения к типу Число .
  • Если колонке не присвоены типы, то в процессе суммирования будут принимать участие только значения, имеющие тип Число , значения других типов будут игнорироваться.
  • Если в колонке несколько типов и среди них есть тип Число , то в процессе суммирования будут принимать участие только значения, имеющие тип Число , значения других типов будут игнорироваться.
  • Если в колонке несколько типов и среди них нет типа Число , то результат суммирования будет 0, который будет присвоен в соответствующую колонку, где будет преобразован к значению по умолчанию для типа, установленного в колонке.

Как найти строку в таблице значений по значению?

  • Значение (обязательный, тип Произвольный ). Искомое значение.
  • Колонки (необязательный, тип Строка , по умолчанию пустая строка). Список имен колонок, разделенных запятыми, по которым производится поиск. Если параметр не указан, поиск осуществляется по всей таблице значений.

Осуществляет поиск значения в указанных колонках таблицы значений. Возвращает строку таблицы значений, в которой содержится искомое значение. Если значение не найдено, то возвращается значение Неопределено . Метод эффективно использовать для поиска уникальных значений.

Источник