Сложение строк в запросе

1. Sergey Berns (sbern1) 05.06.12 13:02
К примеру есть таблица "Приход"
|номенклатура|№ Накладной|Сумма|
--------------------------------
|Стул |14 |100 |
--------------------------------
|шкаф |21 |250 |
--------------------------------
|Стул |32 |110 |

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

|номенклатура|№ Накладной|Сумма|
--------------------------------
|Стул |№14, №32 |220 |
--------------------------------
|шкаф |№21 |250 |

Заранее всем спасибо
Подписаться Добавить вознаграждение

Ответы

2. Алекс Ю (AlexO) 05.06.12 13:05
Сгруппируйте одинаковую номенклатуру в запросе, а потом обходом пилите из результирующей ТЗ в новую ТЗ все, что угодно, и по каким угодно условиям и форматам вывода.
3. Алекс Ю (AlexO) 05.06.12 13:07
(0) НИ ОДИН ЗАПРОС (да и ни одна реляционная таблица) не позволит Вам сделать вот это:
|Стул |№14, №32

т.е. всунуть в один тип данных (определенный полем таблицы) совершенно другой.
4. Sergey Berns (sbern1) 05.06.12 13:10
Это понятно, но в данном случаи не подходит. Хотелось бы получить результат в запросе, так как отчет пишется в СКД, и данный результат это промежуточная таблица, которая потом будет соединена с другой.
5. Сергей (necropunk) 05.06.12 13:13
Да, AlexO прав. В запросе даже строки суммировать нельзя насколько помню, а вы хотите кучу типов в одно поле запихать... Пруф:
http://www.nashe1c.ru/materials-view.jsp?id=46#oultine_9
6. Сергей (necropunk) 05.06.12 13:15
(4) sbern1, А нельзя результат СКД выгрузить в ТЗ, там его соехинить программно как хотите с другой ТЗ, с какими угодно преобразованиями, а потом получившуюся ТЗ запихать в схему компоновки (другую) и по ней уже строить отчет?
7. Алекс Ю (AlexO) 05.06.12 13:15
(4) sbern1,
так сделайте свое уникальное ТЗ на основе запроса, и используйте его как внешний источник для запроса в СКД.
Заодно и внешними источниками запроса научитесь работать :)
8. Алекс Ю (AlexO) 05.06.12 13:18
(6) necropunk,
а потом получившуюся ТЗ запихать в схему компоновки (другую)

зачем же в "другую" - это пусть будет первоначальный запрос "другой" для формирования промежуточного ТЗ, а отчет будет тот же самый :)
9. Sergey Berns (sbern1) 05.06.12 14:08
Уже так и думал подготовить ТЗ и передать в СКД. Просто думал есть более простой способ
10. Сергей (necropunk) 05.06.12 16:04
(8) AlexO, Да, я что-то загнался немного - ТЗ туда сюда по СКД гонять :) Да, просто сам весь в коде, голова кругом немного.
11. Алекс Ю (AlexO) 06.06.12 13:37
(9) sbern1,
да куда уж проще-то :)
12. Никита Коротаев (bforce) 06.06.12 14:08
А, мне кажется, что можно сделать отдельное поле и в него объединять СТРОКОВЫЕ значения.

Как пример
ВЫБРАТЬ
	ВЫРАЗИТЬ(Номенклатура.Наименование + " " + Номенклатура.Код КАК Строка)
ИЗ Справочник.Номенклатура КАК Номенклатура
13. Никита Коротаев (bforce) 06.06.12 14:10
(5) necropunk, получается строки суммировать можно, причем работает даже без ВЫРАЗИТЬ.
14. Алекс Ю (AlexO) 06.06.12 14:15
(12) bforce,
согласитесь, что
К примеру есть таблица "Приход"
|номенклатура|№ Накладной|Сумма|
--------------------------------
|Стул |14 |100 |
--------------------------------

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

|номенклатура|№ Накладной|Сумма|
--------------------------------
|Стул |№14, №32 |220 |

и
ВЫБРАТЬ
   ВЫРАЗИТЬ(Номенклатура.Наименование + " " + Номенклатура.Код КАК Строка)
ИЗ Справочник.Номенклатура КАК Номенклатура

- это не одно и то же?
В первом случае у вас номер - число, во-втором - "номер" вдруг стал "Код", который еще и должен быть тип "строка" :)
1С не делает в запросах преобразование между типами.
Даже через ВЫРАЗИТЬ.
Это главное.
15. Сергей Верютин (Leoon) 06.06.12 14:44
(1) Вроде бы только заполнением ТЗ в цикле.
Типа итоги по Номенклатуре и с помощью методов выборки СледующийПоЗначениюПоля(), НайтиСледующий() и Сбросить() собираем ТЗ.
16. Никита Коротаев (bforce) 06.06.12 14:52
(14) AlexO, будьте точнее. У реквизита документа Номер тип строка. То же самое относится и к справочникам (если Вы специально не изменяли тип).

В своем примере я могу легко объединить Номенклатуру и Номер документа. Ничего мне в этом не мешает.

Про преобразование типов я не упоминал и не спорил, так что, демонстрация уровня Вашего IQ с треском провалилась.
17. Алекс Ю (AlexO) 06.06.12 15:44
18. Алекс Ю (AlexO) 13.06.12 22:16
(16) bforce,
сложил, что-ли, строки свои ? :))
сначала шапками закидаем, потом разбираются....
что хоть понаделал-то?
19. Сергей Петухин (nilabs) 14.06.12 14:51
при приведении к строке в запросе, указывайте размер: Строка(50), Строка(100) и т.д., иначе могут быть проблемы с конкатенацией строк неограниченной длины
20. Евгений (man99) 18.06.12 15:56
В запросе такое нереально. А кто мешает для СКД в качестве таблицы данных указать нужную ТЗ?
21. Виталий Кличко (djonm) 19.06.12 15:49
можно еще получить sql структуру базы данных и ваять прямые запросы. здесь подробней:

ПолучитьСтруктуруХраненияБазыДанных (GetDBStorageStructureInfo)
Глобальный контекст
ПолучитьСтруктуруХраненияБазыДанных (GetDBStorageStructureInfo)
Синтаксис:
ПолучитьСтруктуруХраненияБазыДанных(<Объекты метаданных>, <Имена базы данных>)
Параметры:
<Объекты метаданных> (необязательный)
Тип: Массив. Массив имен объектов метаданных или массив объектов метаданных, для которых требуется получить структуру таблиц базы данных.
<Имена базы данных> (необязательный)
Тип: Булево. Определяет, в каких терминах выдается информация о структуре хранения.
Истина - в терминах СУБД
Ложь - в терминах SDBL.
Значение по умолчанию: Ложь
Возвращаемое значение:
Тип: ТаблицаЗначений. Возвращает таблицу значений с описаниями структуры таблиц, индексов и полей базы данных в терминах SDBL или используемой СУБД, в зависимости от значения параметра "Имена базы данных".
Если параметр не используется, то возвращаемая таблица значений содержит информацию о структуре таблиц базы данных всех объектов метаданных.
Таблица значений включает следующие колонки:
ИмяТаблицыХранения(StorageTableName) – имя таблицы SDBL или базы данных;
ИмяТаблицы(TableName) – имя таблицы в терминах языка запросов (для тех у кого оно есть);
Метаданные(Metadata) – полное имя объекта метаданных;
Назначение(Purpose) – назначение таблицы:
Основная(Main) - основная;
Константы(Constants) - константы;
Итоги(Totals) - итоги;
ИтогиПоСчетам(TotalsByAccounts) - итоги по счетам;
ИтогиПоСчетамССубконто(TotalsByAccountsWithExtDim) - итоги по счетам с субконто;
ИтогиМеждуСчетами(TotalsBetweenAccounts) - итоги между счетами;
ВидыСубконто(ExtDimensionTypes) - виды субконто;
ЗначенияСубконто(ExtDimensionsValues) - значения субконто;
ВытесняющиеВидыРасчета(DisplacingCalculationTypes) - вытесняющие виды расчета;
ПорядокВытеснения(DisplacementOrder) - порядок вытеснения;
ВедущиеВидыРасчета(LeadingCalculationTypes) - ведущие виды расчета;
БазовыеВидыРасчета(BaseCalculationTypes) - базовые виды расчета;
ПериодыДействия(ActionPeriods) - периоды действия;
ГраницыПоследовательности(SequenceBoundaries) - границы последовательности;
ТочкиМаршрута(RoutePoints) - точки маршрута бизнес-процесса;
ТабличнаяЧасть(TabularSection) - табличная часть;
РегистрацияИзменений(ChangeRecord) - регистрация изменений;
РегистрацияИзмененийКонстант(ConstantsChangeRecord) - регистрация изменений констант;
РегистрацияИзмененийКонфигурации(ConfigChangeRecord) - регистрация изменений конфигурации;
РегистрацияИзмененийВнешнихСвойствКонфигурации(ConfigExtPropertiesChangeRecord) - регистрация изменений внешних свойств конфигурации;
ТаблицаНастроекХраненияИтоговРегистровНакопления(AccumulationRegistersOptionsTable) - таблица настроек хранения итогов регистров накопления;
ТаблицаНастроекХраненияИтоговРегистровБухгалтерии(AccountRegistersOptionsTable) - таблица настроек хранения итогов регистров бухгалтерии;
Поля(Fields) - таблица значений с полями таблицы базы данных;
ИмяПоляХранения(StorageFieldName) - имя поля SDBL или базы данных;
ИмяПоля(FieldName) - имя поля в терминах языка запросов (для тех у кого оно есть);
Метаданные(Metadata) – полное имя объекта метаданных;
Индексы(Indexes) – таблица значений с индексами таблицы базы данных;
ИмяИндексаХранения(StorageIndexName) - имя индекса SDBL или базы данных;
ПоляИНдекса(IndexFields) - таблица значений с полями индекса;
ИмяПоляХранения(StorageFieldName) - имя поля SDBL или базы данных;
ИмяПоля(FieldName) - имя поля в терминах языка запросов (для тех у кого оно есть);
Метаданные(Metadata) – полное имя объекта метаданных.
Описание:
Получает информацию о структуре таблиц базы данных для переданных в качестве параметра массива имен объектов метаданных или массива объектов метаданных для административных действий с ней.
Если параметр не используется, то возвращаемая таблица значений содержит информацию о структуре таблиц базы данных всех объектов метаданных.
Примечание:
Следует использовать метод только для административных задач обслуживания базы данных и анализа записей технологического журнала. Не рекомендуется применять метод для реализации какой-либо части прикладной функциональности.
Пример:
МассивИменМетаданных = Новый Массив();
МассивИменМетаданных.Добавить("Справочник.Номенклатура");
МассивИменМетаданных.Добавить("Документ.РасходнаяНакладная");
СтруктБД=ПолучитьСтруктуруХраненияБазыДанных(МассивИменМетаданных);
22. Алекс Ю (AlexO) 11.08.12 23:28
(21) djonm,
куда, простите, вы прямые запросы ваять собрались?
23. Владимир Попов (NittenRenegade) 17.10.13 13:30
Если разговор шел за СКД, можно использовать вычисляемые поля и конкатенировать там самым безобразным образом

ВЫБОР КОГДА ВалютаКт <> &Рубли  И ВалютаДт <> &Рубли И ВалютаКт <> ВалютаДт 
ТОГДА Строка(ВалютнаяСуммаДт)+"/"+Строка(ВалютнаяСуммаКт) 
КОГДА ВалютаКт <> &Рубли ТОГДА ВалютнаяСуммаКт 
КОГДА ВалютаДт <> &Рубли ТОГДА ВалютнаяСуммаДт  
КОНЕЦ
...Показать Скрыть
24. Наталья Никитина (dmitrogorsky) 11.02.15 12:37
ВычислитьВыражениеСГруппировкойМассив(...)
25. Allexey (alex_4x) 26.08.15 14:28
Как в запросе преобразовать ЧИСЛО в СТРОКУ и ДАТУ в СТРОКУ без извращений ?
Возможно как-то через временные таблицы это можно сделать ???
26. antz Петров (antz) 26.08.15 14:40
Зачем огород-то городить? Есть же в СКД прекрасные Массив и СоединитьСтроки.
27. Петр Петренко (PetroP) 26.08.15 14:40
А что говорит поиск по ресурсу?
28. antz Петров (antz) 26.08.15 14:43
(25) alex_4x, не далее чем сегодня проскакивала тема.