Здравствуйте!
У меня такой вопрос по работе с ТЗ. Есть таблица. В ней вбиты построчно контрагенты, товары и значение товара.
контрагент Товар значение товара
Контрагент1 товар1 2
Контрагент1 товар2 3
Контрагент1 товар3 4
Контрагент1 товар4 7
Контрагент2 товар5 2
Контрагент2 товар6 8
Контрагент2 товар7
как мне свернуть таблицу по контрагенту, в результате с работой с тз мне необходимо будет создать документ, в котором Контрагент будет в шапке, а товары и значения товара в табличной части.
не могу сообразить как это сделать.
У меня такой вопрос по работе с ТЗ. Есть таблица. В ней вбиты построчно контрагенты, товары и значение товара.
контрагент Товар значение товара
Контрагент1 товар1 2
Контрагент1 товар2 3
Контрагент1 товар3 4
Контрагент1 товар4 7
Контрагент2 товар5 2
Контрагент2 товар6 8
Контрагент2 товар7
как мне свернуть таблицу по контрагенту, в результате с работой с тз мне необходимо будет создать документ, в котором Контрагент будет в шапке, а товары и значения товара в табличной части.
не могу сообразить как это сделать.
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(2) sommid, пробую через запрос, в результат возвращается поле Количество.
сам запрос
само собой так не работает выборка, что не так делаю?
сам запрос
//ТаблицаЗначений.выбратьСтроку();
Запрос = Новый Запрос;
МенеджерВТ = Новый МенеджерВременныхТаблиц;
Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
// Текст запроса для построения временной таблицы
Запрос.Текст = "ВЫБРАТЬ
| Таб.Контрагент КАК Контрагент,
| Таб.Номенклатура КАК номенклатура,
| Таб.ЗначениеНоменклатуры КАК Значениеноменклатуры
|ПОМЕСТИТЬ ВТДанные
|ИЗ
| &Данные КАК Таб
|{ИТОГИ ПО
| Контрагент}";
Показатьсамо собой так не работает выборка, что не так делаю?
(9) Sherdrada, забавно... Передача в запрос параметра в виде ТЗ будет гораздо дольше, чем обработка простым перебором.......
нужно правильно выбирать сторону обработки данных - если у вас уже есть ТЗ, то с ней надо и работать, а вот если данные для этой ТЗ до этого выбирались запросом, то проще в запросе добавить группировку.
нужно правильно выбирать сторону обработки данных - если у вас уже есть ТЗ, то с ней надо и работать, а вот если данные для этой ТЗ до этого выбирались запросом, то проще в запросе добавить группировку.
(13) Sherdrada, ну.. это заметно только на больших объемах (т.е. где уже надо использовать клиент серверную архитектуру), но желательно сразу научиться писать правильно.
особенно если у нас данные на клиенте - то получается ситуация следующая:
1. Упаковка на клиенте
2. Передача на сервер 1с
3. Распаковка на сервере 1с
3. Передача на уровень сервера БД
4. Обработка на SQL (если там ТЗ то еще и создание временной таблицы) + 1с сам неявно многое по временным таблицам протаскивает
5. Возврат выборки
6. Упаковка на сервере 1С
7. Передача на клиент
8. Распаковка на клиенте
вот каждый пункт занимает время и дает нагрузку на клиент, сервер, БД, и каналы связи между ними.
И тот же набор можно просто обработать на клиенте, никуда не передавая - с выигрышем времени до пары порядков
особенно если у нас данные на клиенте - то получается ситуация следующая:
1. Упаковка на клиенте
2. Передача на сервер 1с
3. Распаковка на сервере 1с
3. Передача на уровень сервера БД
4. Обработка на SQL (если там ТЗ то еще и создание временной таблицы) + 1с сам неявно многое по временным таблицам протаскивает
5. Возврат выборки
6. Упаковка на сервере 1С
7. Передача на клиент
8. Распаковка на клиенте
вот каждый пункт занимает время и дает нагрузку на клиент, сервер, БД, и каналы связи между ними.
И тот же набор можно просто обработать на клиенте, никуда не передавая - с выигрышем времени до пары порядков
(9) выборка из результата запроса с Поместить - возвращает количество записей в созданной вами временной табличке, данные получите только из запроса без этого ключевого слова
"ВЫБРАТЬ
| Таб.Контрагент КАК Контрагент,
| Таб.Номенклатура КАК номенклатура,
| Таб.ЗначениеНоменклатуры КАК Значениеноменклатуры
|ПОМЕСТИТЬ ВТДанные
|ИЗ
| &Данные КАК Таб
|;
|ВЫБРАТЬ
| ВТДанные.Контрагент КАК Контрагент,
| ВТДанные.Номенклатура КАК номенклатура,
| ВТДанные.ЗначениеНоменклатуры КАК Значениеноменклатуры
|ИЗ
| ВТДанные КАК ВТДанные
|ИТОГИ ПО
| Контрагент"
Показать
ну или отсортировать по контрагенту, и обходить тз в цикле.
если контрагент не совпадает с предыдущим - создавать новый документ.
ну или выгрузить колонку с контрагентами в новую тз, свернуть ее, и обходить. каждая строка - новый документ.
для наполнения товарами выбирать нужные строки из первой тз как тз.НайтиСтроки(...)
если контрагент не совпадает с предыдущим - создавать новый документ.
ну или выгрузить колонку с контрагентами в новую тз, свернуть ее, и обходить. каждая строка - новый документ.
для наполнения товарами выбирать нужные строки из первой тз как тз.НайтиСтроки(...)
(4) ditp, Первый вариант самый оптимальный по производительности, но наименее наглядный. А в 1С обычно не имеет смысла оптимизировать локальные операции.
Я обычно вариацию (5) использую - как вариант, выгружаю колонку в массив и удаляю дубли.
Еще иногда бывает неудобно, что НайтиСтроки() возвращает массив строк, а не таблицу.
На этот случай почему-то немногие знают, но у метода Скопировать() есть вариант синтаксиса аналогичный НайтиСтроки().
Я обычно вариацию (5) использую - как вариант, выгружаю колонку в массив и удаляю дубли.
Еще иногда бывает неудобно, что НайтиСтроки() возвращает массив строк, а не таблицу.
На этот случай почему-то немногие знают, но у метода Скопировать() есть вариант синтаксиса аналогичный НайтиСтроки().
Контрагенты = ИсходнаяТаблица.Скопировать();
Контрагенты.Свернуть("Контрагент"); // тут имя колонки с контрагентом
Для каждого Контр из Контрагенты Цикл
ДанныеКонтрагента = ИсходнаяТаблица.НайтиСтроки(Новый Структура("Контрагент", Контр.Контрагент));
// а тут уже в строках только данные по нужному контрагенту
// создаем документ и обходим массив
Для каждого строкаМассива из ДанныеКонтрагента Цикл
// заполняем товары
КонецЦикла;
КонецЦикла;
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот