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

Как сложить строки в запросе
Страницы: 1

К примеру есть таблица "Приход"
|номенклатура|№ Накладной|Сумма|
--------------------------------
|Стул |14 |100 |
--------------------------------
|шкаф |21 |250 |
--------------------------------
|Стул |32 |110 |

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

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

Заранее всем спасибо

Ответили: (15)

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


(0) НИ ОДИН ЗАПРОС (да и ни одна реляционная таблица) не позволит Вам сделать вот это:

|Стул |№14, №32

т.е. всунуть в один тип данных (определенный полем таблицы) совершенно другой.

Изменено: AlexO - 05.06.12 13:07


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

Ответили: (6) (7)

Да, AlexO прав. В запросе даже строки суммировать нельзя насколько помню, а вы хотите кучу типов в одно поле запихать... Пруф:
http://www.nashe1c.ru/materials-view.jsp?id=46#oultine_9

Ответили: (13)

(4) sbern1, А нельзя результат СКД выгрузить в ТЗ, там его соехинить программно как хотите с другой ТЗ, с какими угодно преобразованиями, а потом получившуюся ТЗ запихать в схему компоновки (другую) и по ней уже строить отчет?

Ответили: (8)
+ 1 [ sbern1; ]

(4) sbern1,
так сделайте свое уникальное ТЗ на основе запроса, и используйте его как внешний источник для запроса в СКД.
Заодно и внешними источниками запроса научитесь работать :)


(6) necropunk,

а потом получившуюся ТЗ запихать в схему компоновки (другую)

зачем же в "другую" - это пусть будет первоначальный запрос "другой" для формирования промежуточного ТЗ, а отчет будет тот же самый :)

Ответили: (10)

Уже так и думал подготовить ТЗ и передать в СКД. Просто думал есть более простой способ

Ответили: (11)

(8) AlexO, Да, я что-то загнался немного - ТЗ туда сюда по СКД гонять :) Да, просто сам весь в коде, голова кругом немного.


(9) sbern1,
да куда уж проще-то :)


А, мне кажется, что можно сделать отдельное поле и в него объединять СТРОКОВЫЕ значения.

Как пример

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

Изменено: bforce - 06.06.12 14:08

Ответили: (14)

(5) necropunk, получается строки суммировать можно, причем работает даже без ВЫРАЗИТЬ.

Изменено: bforce - 06.06.12 14:10


(12) bforce,
согласитесь, что

К примеру есть таблица "Приход"
|номенклатура|№ Накладной|Сумма|
--------------------------------
|Стул |14 |100 |
--------------------------------

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

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

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

- это не одно и то же?
В первом случае у вас номер - число, во-втором - "номер" вдруг стал "Код", который еще и должен быть тип "строка" :)
1С не делает в запросах преобразование между типами.
Даже через ВЫРАЗИТЬ.
Это главное.

Изменено: AlexO - 06.06.12 14:18

Ответили: (16)
+ 1 [ sbern1; ]

(1) Вроде бы только заполнением ТЗ в цикле.
Типа итоги по Номенклатуре и с помощью методов выборки СледующийПоЗначениюПоля(), НайтиСледующий() и Сбросить() собираем ТЗ.


(14) AlexO, будьте точнее. У реквизита документа Номер тип строка. То же самое относится и к справочникам (если Вы специально не изменяли тип).

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

Про преобразование типов я не упоминал и не спорил, так что, демонстрация уровня Вашего IQ с треском провалилась.

Ответили: (17) (18)

(16) bforce,
ну-ну.
дерзайте.


(16) bforce,
сложил, что-ли, строки свои ? :))
сначала шапками закидаем, потом разбираются....
что хоть понаделал-то?


при приведении к строке в запросе, указывайте размер: Строка(50), Строка(100) и т.д., иначе могут быть проблемы с конкатенацией строк неограниченной длины


В запросе такое нереально. А кто мешает для СКД в качестве таблицы данных указать нужную ТЗ?


можно еще получить 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)
+ 1 [ sbern1; ]

(21) djonm,
куда, простите, вы прямые запросы ваять собрались?


Если разговор шел за СКД, можно использовать вычисляемые поля и конкатенировать там самым безобразным образом

ВЫБОР КОГДА ВалютаКт <> &Рубли  И ВалютаДт <> &Рубли И ВалютаКт <> ВалютаДт 
ТОГДА Строка(ВалютнаяСуммаДт)+"/"+Строка(ВалютнаяСуммаКт) 
КОГДА ВалютаКт <> &Рубли ТОГДА ВалютнаяСуммаКт 
КОГДА ВалютаДт <> &Рубли ТОГДА ВалютнаяСуммаДт  
КОНЕЦ
...Показать Скрыть

+ 1 [ pavelqq; ]

ВычислитьВыражениеСГруппировкойМассив(...)

+ 1 [ 32ops; ]

Как в запросе преобразовать ЧИСЛО в СТРОКУ и ДАТУ в СТРОКУ без извращений ?
Возможно как-то через временные таблицы это можно сделать ???

Ответили: (28)

Зачем огород-то городить? Есть же в СКД прекрасные Массив и СоединитьСтроки.


А что говорит поиск по ресурсу?


(25) alex_4x, не далее чем сегодня проскакивала тема.


Страницы: 1
Форма ответов
Логин:
Пароль:
Текст сообщения*
Прикрепить файл