(1) Вроде бы только заполнением ТЗ в цикле.
Типа итоги по Номенклатуре и с помощью методов выборки СледующийПоЗначениюПоля(), НайтиСледующий() и Сбросить() собираем ТЗ.
Сгруппируйте одинаковую номенклатуру в запросе, а потом обходом пилите из результирующей ТЗ в новую ТЗ все, что угодно, и по каким угодно условиям и форматам вывода.
(3) Простите, но почти во всех РСУБД существует агрегатная функция, которая делает именно то, что нужно автору. И лично мне её ой как не хватает в 1С...
В Постгре это -- string_agg, в Файрбёрд -- list, в Оракл -- listagg и т. д.
Это понятно, но в данном случаи не подходит. Хотелось бы получить результат в запросе, так как отчет пишется в СКД, и данный результат это промежуточная таблица, которая потом будет соединена с другой.
(4) sbern1, А нельзя результат СКД выгрузить в ТЗ, там его соехинить программно как хотите с другой ТЗ, с какими угодно преобразованиями, а потом получившуюся ТЗ запихать в схему компоновки (другую) и по ней уже строить отчет?
(4) sbern1,
так сделайте свое уникальное ТЗ на основе запроса, и используйте его как внешний источник для запроса в СКД.
Заодно и внешними источниками запроса научитесь работать :)
ВЫБРАТЬ
ВЫРАЗИТЬ(Номенклатура.Наименование + " " + Номенклатура.Код КАК Строка)
ИЗ Справочник.Номенклатура КАК Номенклатура
- это не одно и то же?
В первом случае у вас номер - число, во-втором - "номер" вдруг стал "Код", который еще и должен быть тип "строка" :)
1С не делает в запросах преобразование между типами.
Даже через ВЫРАЗИТЬ.
Это главное.
при приведении к строке в запросе, указывайте размер: Строка(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) – полное имя объекта метаданных.
Описание:
Получает информацию о структуре таблиц базы данных для переданных в качестве параметра массива имен объектов метаданных или массива объектов метаданных для административных действий с ней.
Если параметр не используется, то возвращаемая таблица значений содержит информацию о структуре таблиц базы данных всех объектов метаданных.
Примечание:
Следует использовать метод только для административных задач обслуживания базы данных и анализа записей технологического журнала. Не рекомендуется применять метод для реализации какой-либо части прикладной функциональности.
Пример:
МассивИменМетаданных = Новый Массив();
МассивИменМетаданных.Добавить("Справочник.Номенклатура");
МассивИменМетаданных.Добавить("Документ.РасходнаяНакладная");
СтруктБД=ПолучитьСтруктуруХраненияБазыДанных(МассивИменМетаданных);
23.
NittenRenegade
11217.10.13 13:30 Сейчас в теме
Если разговор шел за СКД, можно использовать вычисляемые поля и конкатенировать там самым безобразным образом
ВЫБОР КОГДА ВалютаКт <> &Рубли И ВалютаДт <> &Рубли И ВалютаКт <> ВалютаДт
ТОГДА Строка(ВалютнаяСуммаДт)+"/"+Строка(ВалютнаяСуммаКт)
КОГДА ВалютаКт <> &Рубли ТОГДА ВалютнаяСуммаКт
КОГДА ВалютаДт <> &Рубли ТОГДА ВалютнаяСуммаДт
КОНЕЦ