Работа с таблицей значения

1. Sherdrada 23.03.16 09:43 Сейчас в теме
Здравствуйте!
У меня такой вопрос по работе с ТЗ. Есть таблица. В ней вбиты построчно контрагенты, товары и значение товара.

контрагент Товар значение товара
Контрагент1 товар1 2
Контрагент1 товар2 3
Контрагент1 товар3 4
Контрагент1 товар4 7
Контрагент2 товар5 2
Контрагент2 товар6 8
Контрагент2 товар7

как мне свернуть таблицу по контрагенту, в результате с работой с тз мне необходимо будет создать документ, в котором Контрагент будет в шапке, а товары и значения товара в табличной части.
не могу сообразить как это сделать.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
6. deniseek77 86 23.03.16 13:01 Сейчас в теме
(1) Sherdrada,
ВыгрузитьКолонку("Контрагент"); ТаблицаЗначений.НайтиСтроки();
2. sommid 23.03.16 09:47 Сейчас в теме
написать запрос с итогами по контрагенту. при обходе выборки на уровне контрагента создавать документ, на уровне детальных записей - заполнять табчасть товаров
Sherdrada; +1 Ответить
3. Sherdrada 23.03.16 09:51 Сейчас в теме
9. Sherdrada 24.03.16 15:56 Сейчас в теме
(2) sommid, пробую через запрос, в результат возвращается поле Количество.

сам запрос
	//ТаблицаЗначений.выбратьСтроку();
	Запрос = Новый Запрос;
МенеджерВТ = Новый МенеджерВременныхТаблиц;
Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
// Текст запроса для построения временной таблицы
Запрос.Текст = "ВЫБРАТЬ
               |	Таб.Контрагент КАК Контрагент,
               |	Таб.Номенклатура КАК номенклатура,
               |	Таб.ЗначениеНоменклатуры КАК Значениеноменклатуры
               |ПОМЕСТИТЬ ВТДанные
               |ИЗ
               |	&Данные КАК Таб
               |{ИТОГИ ПО
               |	Контрагент}";
Показать

само собой так не работает выборка, что не так делаю?
10. ditp 91 24.03.16 16:09 Сейчас в теме
(9) Sherdrada, сначала выберите во временную таблицу, потом уже из нее выбирайте с нужными итогами.
11. caponid 24.03.16 16:14 Сейчас в теме
(9) Sherdrada, забавно... Передача в запрос параметра в виде ТЗ будет гораздо дольше, чем обработка простым перебором.......

нужно правильно выбирать сторону обработки данных - если у вас уже есть ТЗ, то с ней надо и работать, а вот если данные для этой ТЗ до этого выбирались запросом, то проще в запросе добавить группировку.
Sherdrada; +1 Ответить
13. Sherdrada 24.03.16 17:09 Сейчас в теме
(11) caponid, хм, понятно. Таких нюансов не знала, спасибо
14. caponid 24.03.16 18:59 Сейчас в теме
(13) Sherdrada, ну.. это заметно только на больших объемах (т.е. где уже надо использовать клиент серверную архитектуру), но желательно сразу научиться писать правильно.

особенно если у нас данные на клиенте - то получается ситуация следующая:
1. Упаковка на клиенте
2. Передача на сервер 1с
3. Распаковка на сервере 1с
3. Передача на уровень сервера БД
4. Обработка на SQL (если там ТЗ то еще и создание временной таблицы) + 1с сам неявно многое по временным таблицам протаскивает
5. Возврат выборки
6. Упаковка на сервере 1С
7. Передача на клиент
8. Распаковка на клиенте

вот каждый пункт занимает время и дает нагрузку на клиент, сервер, БД, и каналы связи между ними.
И тот же набор можно просто обработать на клиенте, никуда не передавая - с выигрышем времени до пары порядков
15. ditp 91 24.03.16 21:11 Сейчас в теме
(14) caponid, все в ваших рассуждениях хорошо, если не считать того, что топик стартеру нужно документы создавать, т.е. так или иначе данные на сервер гнать.
12. sommid 24.03.16 16:23 Сейчас в теме
(9) выборка из результата запроса с Поместить - возвращает количество записей в созданной вами временной табличке, данные получите только из запроса без этого ключевого слова
"ВЫБРАТЬ
               |    Таб.Контрагент КАК Контрагент,
               |    Таб.Номенклатура КАК номенклатура,
               |    Таб.ЗначениеНоменклатуры КАК Значениеноменклатуры
               |ПОМЕСТИТЬ ВТДанные
               |ИЗ
               |    &Данные КАК Таб
               |;
               |ВЫБРАТЬ
               |    ВТДанные.Контрагент КАК Контрагент,
               |    ВТДанные.Номенклатура КАК номенклатура,
               |    ВТДанные.ЗначениеНоменклатуры КАК Значениеноменклатуры
               |ИЗ
               |    ВТДанные КАК ВТДанные
               |ИТОГИ ПО
               |    Контрагент"
Показать
Sherdrada; +1 Ответить
4. ditp 91 23.03.16 09:52 Сейчас в теме
ну или отсортировать по контрагенту, и обходить тз в цикле.
если контрагент не совпадает с предыдущим - создавать новый документ.

ну или выгрузить колонку с контрагентами в новую тз, свернуть ее, и обходить. каждая строка - новый документ.
для наполнения товарами выбирать нужные строки из первой тз как тз.НайтиСтроки(...)
8. herfis 500 24.03.16 12:32 Сейчас в теме
(4) ditp, Первый вариант самый оптимальный по производительности, но наименее наглядный. А в 1С обычно не имеет смысла оптимизировать локальные операции.
Я обычно вариацию (5) использую - как вариант, выгружаю колонку в массив и удаляю дубли.
Еще иногда бывает неудобно, что НайтиСтроки() возвращает массив строк, а не таблицу.
На этот случай почему-то немногие знают, но у метода Скопировать() есть вариант синтаксиса аналогичный НайтиСтроки().
5. caponid 23.03.16 12:49 Сейчас в теме
Контрагенты = ИсходнаяТаблица.Скопировать();
Контрагенты.Свернуть("Контрагент"); // тут имя колонки с контрагентом

Для каждого Контр из Контрагенты Цикл
    ДанныеКонтрагента = ИсходнаяТаблица.НайтиСтроки(Новый Структура("Контрагент", Контр.Контрагент));
    
    // а тут уже в строках только данные по нужному контрагенту
    // создаем документ и обходим массив
    Для каждого строкаМассива из ДанныеКонтрагента  Цикл
        // заполняем товары 
    КонецЦикла; 
КонецЦикла;

Показать
herfis; pm74; Sherdrada; +3 Ответить
7. Sherdrada 24.03.16 12:24 Сейчас в теме
(5) caponid, хм, тоже интересно, спасибо
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот