1с скд добавить строку

Обновлено: 05.02.2023

Очень часто бывают ситуации, когда необходимо сделать отчет СКД на сложном запросе, который используюет в себе вложенные запросы и объединения внутренние и полные и т.д. - в результате в консоли этот запрос формируется верно, а в скд половина полей пустые! Связано это с особенностью СКД в объединении внутренних данных, а так же не стоит забывать что в СКД наборы данных связываются как левое соединение.

Решения возможны следующие:

  • Изменить запрос в СКД
  • Сформировать запрос обычным способом и подставить эти данные в СКД как внешние

Рассмотрим последний вариант:

Внешний источник данных, грузим из ТЗ

В модуле объекта уже есть функция

установим в ней наш запрос, получается примерно так:

Ниже в коде происходит установка внешних данных из нашей ТЗ с именем ТаблицаВнешнегоНабораДанных

В самой компоновке добавляем набор Объект с именем ТаблицаВнешнегоНабораДанных и перечисляем поля, которые будут использоваться в отчете:


Как я уже говорил выше, далее нам необходимо получить остатки взаиморасчетов на дату документа:

Получение остатков на документ в СКД

Набор данных Запрос - назвали его Остатки:


Теперь установим связи Запроса и Объекта

Остатки нужно получать на дату документа и по контрагенту


Далее, если нужно, задайте вычисляемые поля, ресурсы, параметры и Настройте Список вывода.

Пример результата отчета:


Распечатать

Похожие FAQ

Еще в этой же категории

Ключевые слова и Изображения

Слова упорядочены по частоте использования в тексте

Изображения

СКД Внешний источник данных, грузим из ТЗ и далее получаем остатки на каждый документ
СКД Внешний источник данных, грузим из ТЗ и далее получаем остатки на каждый документ
СКД Внешний источник данных, грузим из ТЗ и далее получаем остатки на каждый документ
СКД Внешний источник данных, грузим из ТЗ и далее получаем остатки на каждый документ

На повестке дня появилась задача следующего характера:

Измерения:
Филиал Справочник
День Перечисление
Час Число

Необходимо организовать вывод данных одним запросом на СКД как на скрине, во вложении.

Подкиньте хоть пару идей как можно такое реализовать, а то голову сломал уже

(1)При приведенных данных, достаточно Вычисляемого поля, например ЧасыПП от Часы. Сами часы в ресурс. Максимум не обязательно. Ну а если надо чтобы в одну строку попали 7 и 10 то надо пронумеровать строки в запросе по Филиалу

(1)При приведенных данных, достаточно Вычисляемого поля, например ЧасыПП от Часы. Сами часы в ресурс. Максимум не обязательно. Ну а если надо чтобы в одну строку попали 7 и 10 то надо пронумеровать строки в запросе по Филиалу

(16) Кажется, что идея нумерация записей лежит на поверхности, но на мой взгляд, данных для этого недостаточно. Не хватает более удачного поля порядка, нежели сами часы, т.к. в приведенном Вами запросе две записи в расписании в один и тот же день с одинаковым количеством часов свернутся в одну. И кажется, что это вполне вероятная ситуация.

На примере автора, это ситуация, когда во вторник будут не "10" и "17", а "10" и "10".

(22) Ну вот, в рамках одного дня у Вас часы различны. Как я указал выше, на мой взгляд, достаточно вероятна ситуация, когда часы за один и тот же день не будут различаться. Замените в своем примере в первом же операторе запроса число часов с 10 на 7 и сформируйте отчет. У Вас данные первого и второго операторов запроса сольются в одну, да еще и в отчете эта строка будет стоять обособленно.

Прошу прощения, если как-то непонятно излагаю свои мысли.

(23) Ну как то не слились.Да вроде бы и не могут Или покажите пример, когда сольются в одну. Ну и если брать те данные, которые привели, то ни какой нумерации и не нужно. 7 встанет в 7, 10 в 10. 5 будет отдельной строчкой.
В общем. Это мы с Вами разные варианты рассматриваем, а заказчик слил общие данные и не колется:)

(24) А, так Вы схитрили. :) Сразу не обратил внимание, что у Вас используется "ОБЪЕДИНИТЬ", а не "ОБЪЕДИНИТЬ ВСЕ".

(25) Схитрил бэ, если б написал distinct при union all, а так это жеж разные методы при кажущей похожести:) В конструкторе, что написано? Без дублей


Как раз таки в Вашем примере distinct при union all дал бы тот же результат, что и union all без distinct, т.е. отличный от union.

(27Давай таки на Ты. Бесит, когда обзывают на Вы. Алгоритм работает? Да В чем проблемм?Без раницы уважаешь ты меня или нет. Я тебя назначил уважаемым людём. Это уважение, данность. Как сам знаешь, но мой алгоритм работает в легкую

(3) И в правду. Вам никак не подойдет вариант, где все цифры сгруппированы в одну строку? Как на картинке в приложении.

(3) Идея вроде бы лежит на поверхности: необходимо в запросе сначала пронумеровать записи в разрезе филиалов и дней недели, а затем сгруппировать данные по филиалу и номеру записи, взяв "Максимум" от часов. Но к сожалению не могу предложить Вам алгоритм нумерации в запросе, не хватает какого-нибудь поля упорядочивания, например периода.

(6) запрос элементарный. только вот как он может помочь решить задачу? если в одном филиале пн = 10, вт = 12, ср = 17? по условию задачи нужно вывести одной строкой, а не тремя

(10) зачем мне пробовать, если и так все понятно. ты же написал, что все просто - вот и давай покажи нам рабочий пример

(12) Проверить отчет слабо было что ли?

а вот про то что студенты проснулись - похоже на правду ибо задача похожа не предыдущую.

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

и уже по филиалу и по этому дополнительному номеру делать группировку в строках, по дню в колонках.
ну и ресурс максмум(час)

Есть запрос на СКД.
Нужно, при формировании документа-результата, обращаться к каждой текущей строке выборки и, проверяя значения на соответствие условиям, выводить определенные данные в свой макет группировки. Кроме того по каждой строке нужно в переменную записывать по условию сумму значений (т.е. из одной строки сумму включать в переменную, из другой нет), а затем выводить ее в свой макет общих итогов (стандартные общие итоги не считают по такому алгоритму).
Подскажите, как это можно сделать?

а в других процедурах (ПриКомпоновкеРезультата или других) нельзя отловить каждую текущую строку выборки?

(9) нет, пробовал их.
у меня так(результат запроса):

Договор____СуммаДоговора____Документ
1__________5000_____________Док1
1__________5000_____________Док2
1__________5000_____________Док3
1__________5000_____________Док4

В общих итогах по полю Договор выводит 20000, хотя сумма по договору=5000 и надо выводить 5000.
Поэтому думал как-то программно проверять на значение текущей строки в выборке и суммировать в какую-то переменную реальную сумму по договору(5000) и потом значение этой переменной выводить в общие итоги.

(11)так я и суммирую только по договору. Договор есть в четырех документах, соответственно 5000*4=20000. А сумма по договору=5000.

т.е. надо так сделать:

Договор____СуммаДоговора____Документ__СуммаДока
1__________5000_____________Док1_______100
1__________5000_____________Док2_______5600
1__________5000_____________Док3_______4500
1__________5000_____________Док4_______1200
2__________3000_____________Док1_______500
2__________3000_____________Док2_______1600
2__________3000_____________Док3_______2500
2__________3000_____________Док4_______1250
Итого______8000________________________ХХХ

т.е. чтобы итоговая сумма по всем договорам была равна 8000

(10) Я так понял группировка Документ самая нижняя. Добавь в запросе еще одно поле для счетчика документов. На закладке ресурсы добавь еще один ресурс СуммаДоговора рассчитывать по договору, в выражении Сумма(СуммаДоговора)/Сумма(ПолеСчетчикаДокументов) и есстественно через выбор для проверки Сумма(ПолеСчетчикаДокументов) <> 0. Как-то так. Это если структура группировок жесткая.

(16) пробовал этот вариант: для отдельного договора считает сумму по договору правильно, для общих итогов неправильно. Для примера (14) итог по сумме договора посчитает 32000/8=4000, а надо 8000

(17) В общем-то можно в форму добавить новую кнопку "Сформировать" и прописать алгоритм формирования отчета через СКД. Если надо, я могу алгоритм обработки скинут

(21) подскажите, как там проверить, какая группировка там текущая и в зависимости от этого выводить свой определенный макет вместо стандартного.

(14) У тебя не правильно построен запрос. необходимо в компоновке создать два набора данных "Договор" и "Документы" и связать их на закладке "Связи наборов данных" и ВСЕ.

(23) так то же самое получится. Для одного договора (и его суммы) есть несколько документов. При Левом соединениии (все договоры и документы удовлетворяющие условию связи по договору) будет таблица как в (14), т.е. суммы договоров будут повторяться для каждого документа. Далее в итогах они будут увеличиваться в столько раз, сколько документов по договору.

(24) Есть еще вариант, не знаю, будет ли тебе это сложновато?
В СКД есть возможность импользовать "Вложенные схемы".
Суть в том, чтоб строку с итогами выводить отдельной схемой

(28) Не путай человека.
(27) Если в СКД применять несколько наборов данных, то итоги рассчитываются в каждом из них отдельно.

(31) Все зависит от задачи. Ты можешь написать сколь угодно сложные запросы в наборах, а компоновка будет обрабатывать уже готовые наборы. В том числе и при помощи описания связей.

еще вопрос в тему: если в какую-то колонку (поле) в скд нужно будет выводить результат выборки строк какой-то таблицы (прямо через запятую последовательно значения строк выборки), то как это можно сделать?

т.е. примерно так (характеристики):

Договор____СуммаДоговора_____Характеристики_______Документ
1__________5000_______________доп.согл1,допсогл2___Док1___
1__________5000_______________доп.согл1,допсогл2___Док2___
1__________5000_______________доп.согл1,допсогл2___Док3___
1__________5000_______________доп.согл1,допсогл2___Док4___
2__________3000_______________доп.согл1,допсогл2___Док1___
2__________3000_______________доп.согл1,допсогл2___Док2___
2__________3000_______________доп.согл1,допсогл2___Док3___
2__________3000_______________доп.согл1,допсогл2___Док4___
Итого______8000___________________________________________

(36) т.е. так же отдельным набором данных присоединить таблицу характеристик к таблице договоров по условию совпадения по договору, а как потом перебрать все значения таблицы характеристик по договору и вставить их в одну ячейку?

(38) неправильно написал: в поле характеристики через запятую надо вывести значения строк регистра сведений по каждому договору.

(39) Сворачивание нескольких строк в одну отдельная задача.
А в данном случае не понял структуру характеристик. "доп.согл." - это значение характеристики? Тип какой? Сколько может быть характеристик? Подозрение, что не совсем верно организовано хранение данных. Если доп.согл. - это документы, то лучше бы добавить в них реквизит с ссылкой на договор. В общем не понятно.

(40) мне как раз и нужно несколько строк в одну свернуть.Это можно сделать с помощью конструктора скд?
Характеристики - это периодический регистр сведений для договора. Хранит номера, даты, названия доп. соглашений с опред. даты. Нужно перебрать все строки регистра по договору, и вывести их результат через запятую в одном поле скд.

(41) СКД такой вопрос не решает. Можно при помощи запроса (много раз обсуждалось) или при помощи предварительной обработки характеристик - создаем программно ТЗ с колонками "Договор" и "Характеристики" (уже свернутые) и передаем в СКД как объект.

я как раз запросом и пытаюсь сделать - добавил для характеристик набор-запрос, а как в одну строку-то свернуть?

Кстати. В 8.2.14 появилась в СКД функция ВычислитьВыражение, которая, если я правильно понял, может делать тоже самое, что и запрос из (46).

(46) а если у меня для объекта может быть 1 св-во, а может быть и 20, то тогда надо добавлять 20 полей?

КАК Свойство1
.
КАК Свойство20

(48) Ну если кому то нужен отчет, в ячейке которого через запятую будет перечислено 20 свойств - пиши "КАК Свойство20".
А в приведенный запрос будет отображать первые четыре даже если реально 20.

(49) имел ввиду нет ли чего более универсального, т.к. хранить во врем. таблице 20 полей, которые не всегда будут использованы.

Функция возвращает массив, каждый элемент которого содержит результат вычисления выражения для группировки по указанному полю.

Строка() - Если в качестве параметра передан массив, то функция возвращает строку, содержащую строковые представления всех элементов массива, разделенных символами "; ".

(67) через Строка пробовал, но в тексте запроса это не работает, опять же непонятно, как какой-то тип (число, дата) преобразовать в строку в самом запросе

(69) в вычисляемых полях нельзя использовать в выражении вычисляемые поля. У меня нужно сначала к дате добавить символ (", "), затем сложить несколько таких полей. Т.е. поле с датой и с символом(",") должно быть готовое уже в запросе, а потом в вычисляемом поле уже несколько таких полей сложить.

В запросе получаешь поля Т.Свойство1 . Т.Свойство20.
в вычисляемом поле пишешь
Формат(Свойство1,"ДЛФ=D") + ", " + . + Формат(Свойство20,"ДЛФ=D")

(71) я именно так и сделал. Не устраиваю лишние запятые в случае пустых значений. Поэтому нужна предварительная обработка, чтобы "Свойство1" уже содержало текст "Свойство1, " в случае наличия, и текст "" в случае отсутствия текста в "Свойство1".

можно ли менять размер колонок в скд, не используя макеты? Потому как слишком широкие стандартные колонки.

(83) Колонка "Оформление" в описании полей на закладках "Наборы данных" и "Вычисляемые поля".
Или постобработка табличного документа.

ВычислитьВыражениеСГруппировкойМассив пока оставлю. Попробую еще вариант сделать то же через внешний набор данных.

Шрифт заголовков можно изменить в "Макете оформления компоновки данных". Выбор макета осуществляется в настройках компоновки на закладке "Другие настройки". Создать свой макет можно либо в общих макетах ветки конфигурации. либо в другом объекте где возможно создание макетов. При создании макета надо указать тип макета - "Макет оформления компоновки данных". В открывшемся окне редактора макета, за основу возможно взять один из стандартных макетов и отредактировать его.

В какой процедуре нужно этот макет оформления (созданный на основе стандартного) привязывать к компоновщику макета? При нажатии на кнопку "сформировать"? т.е. надо свою кнопку "сформировать" с обработчиком делать?

(92) это стандартный макет. Я так понял, чтобы изменить шрифт заголовков полей группировок, нужно создать свой макет оформления и в нем изменить шрифт. А потом программно его подвязать к компоновщику макета. Если не так, поясните.

(29) Вы писали, что если в СКД применять несколько наборов данных, то итоги рассчитываются в каждом из них отдельно.
Подскажите, если делать не через скд, а просто запросом в модуле отчета, то как результат запроса можно привести к виду (т.е. чтобы итоговая сумма по всем договорам была равна 8000)?
таб1:
Договор____СуммаДоговора____Документ__СуммаДока
1__________5000_____________Док1_______100
1__________5000_____________Док2_______5600
1__________5000_____________Док3_______4500
1__________5000_____________Док4_______1200
2__________3000_____________Док1_______500
2__________3000_____________Док2_______1600
2__________3000_____________Док3_______2500
2__________3000_____________Док4_______1250
Итого______8000________________________ХХХ

т.е. чтобы итоговая сумма по всем договорам была равна 8000.
Я кроме как объединением таблиц не знаю. В случае объединения будет так (таб2):
Договор____СуммаДоговора____Документ__СуммаДока
1__________5000_____________""_________0
1__________0________________Док1_______5600
1__________0________________Док2_______4500
1__________0________________Док3_______1200
2__________3000_____________""_________0
2__________0________________Док1_______1600
2__________0________________Док2_______2500
2__________0________________Док3_______1250
Итого______8000________________________ХХХ

Подскажите, можно ли такое сделать через соединение, т.к. в 1-ом результате (таб1) если делать итоги по сумме договора, получится 32000.

(94)-(95). Создал в разделе макетов отчета макет с типом "Макет оформления компоновки данных". В нем загрузил стандартный макет. Изменил его. Сохранил. Макет в настройках не появился.

+(98)
Подвязал этот макет к компоновщику макета:
После этого отчет выводится через этот макет. Но в настройках его не нашел, поясните.

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

Но на практике часто встречаются задачи, когда схему компоновки нужно программно создать с нуля или доработать существующую схему при помощи кода на встроенном языке, настроить вариант отчета – добавить отбор, установить условное оформление, добавить группировку и т.д. Такие задачи решаются на внедрениях при адаптации типовых конфигураций фирмы “1С” под требования конкретного заказчика.

Задача действительно очень актуальная, участники Мастер-группы по СКД задают много вопросов на эту тему :)

Также традиционно много вопросов возникает при программной работе с пользовательскими настройками отчетов:

  • Почему отличаются значения параметра в настройках компоновщика и в пользовательских настройках? Которое из этих значений используется для формирования отчета?
  • Как связываются между собой настройки компоновщика и пользовательские настройки?
  • Как установить значение отбора или параметра, если они вынесены в пользовательские настройки?
  • И многие другие…

Поэтому мы опубликовали серию видеоуроков, в которых рассказывается, как работать со схемой компоновки программно.

Общая длительность всех видеоуроков – 1 час 5 минут.

Для того, чтобы Вам было проще ориентироваться в материале, мы указали тайминг наиболее важных моментов в видео.

Видео 1 – Программное создание варианта отчета

00:37 – В каком обработчике можно расположить код для создания настроек компоновки
01:00 – Где в Синтакс-помощнике можно “подсмотреть” свойства, которые потребуются при написании кода
01:58 – Как настроить группировки отчета
02:28 – Какое свойство позволяет создавать вложенные группировки
03:11 – Как включить/выключить отдельные элементы настроек.

Видео 2 – Программное создание группировки

00:22 – Как создать структуру отчета
02:00 – Как указать поля, по которым выполняется группировка
04:10 – Как настроить выбранные поля
06:30 – Как создать автополе.

Видео 3 – Программное создание вложенной группировки

00:22 – Как создать подчиненную группировку
02:05 – Почему в отчете группировки могут выводиться несколько раз
02:40 – Как проверить наличие группировок в структуре отчета.

Видео 4 – Программное добавление отбора

00:18 – Где в Синтакс-помощнике найти типы данных, необходимые для создания отборов
00:55 – Какие свойства объекта типа ЭлементОтбораКомпоновкиДанных нужно использовать для создания отбора
01:20 – Как создать отбор при помощи программного кода.

Видео 5 – Программная установка сортировки

00:25– Где в Синтакс-помощнике найти типы данных, необходимые для включения сортировки
00:50 – Какие свойства объекта типа ЭлементПорядкаКомпоновкиДанных нужно использовать для включения сортировки
01:00 – Как установить сортировку при помощи программного кода.

Видео 6 – Программное добавление условного оформления

00:25 – Где в Синтакс-помощнике найти типы данных, необходимые для работы с условным оформлением
00:33 – Какие свойства объекта типа ЭлементУсловногоОформленияКомпоновкиДанных нужно использовать
02:08 – Как добавить условное оформление при помощи программного кода
02:31 – Как задать перечень полей, к которым будет применяться условное оформление
03:34 – Как отобрать оформляемые данные
04:15 – Как при помощи программного кода описать применяемое оформление.

Видео 7 – Программная работа с пользовательскими настройками

01:01 – Как программно установить значение параметра
02:00 – Почему значения параметров, выводимые на форму отчета, не совпадают со значениями в самом отчете
04:25 – Что делает метод ПолучитьНастройки
05:10 – Как нужно работать с пользовательскими настройками
06:17 – Для чего нужно свойство ИдентификаторПользовательскойНастройки
07:10 – Где в типовой конфигурации УТ 11 можно найти пример работы с пользовательскими настройками.

Видео 8 – Особенности использования метода ПолучитьНастройки

00:58 – Почему отличаются значения параметра в настройках компоновщика и в пользовательских настройках
01:23 – Как связываются между собой настройки компоновщика и пользовательские настройки
03:06 – Как работает метод ПолучитьНастройки и значение какого типа он возвращает

Видео 9 – Программное создание отборов в пользовательских настройках

00:34 – Чем отличается отбор в настройках компоновщика и отбор в пользовательских настройках
02:34 – Как используется свойство ИдентификаторПользовательскойНастройки
03:08 – Какой алгоритм должен использоваться для установки значения отбора в пользовательских настройках
03:42 – Как реализовать процедуру для установки значения отбора в пользовательских настройках.

Видео 10 – Программное создание схемы компоновки

00:40 – Как при компоновке отчета программно создать схему, по которой будет формироваться отчет
02:15 – Какой алгоритм должен использоваться для программного создания с нуля схемы компоновки
02:50 – Как программно создать источник данных схемы компоновки
04:00 – Как программно добавить в схему набор данных – объект
06:25 – Как программно добавить поля набора данных.

Хотите научиться грамотно создавать отчеты на СКД и дорабатывать отчеты в типовых конфигурациях?

Чтобы подробнее изучить возможности системы компоновки данных и уверенно применять механизм на практике, рекомендуем пройти курс Профессиональная разработка отчетов в 1С 8.3 на Системе Компоновки Данных (СКД)

При формировании отчетов на СКД по умолчанию все группировки развернуты, но бывает что необходимо сразу после формирования показать отчет со свернутыми группировками!

Данный код в модуле отчета позволяет свернуть группировки до необходимого уровня (0,1,2. ):

Распечатать

Похожие FAQ

Как заполнить табличную часть формы программно? 8
Нужно по кнопке Заполнить - сформировать данные для заполнения табличных частей и заполнить их. Форма имеет вид: Рядом с кнопкой Записать и закрыть добавлена кнопка Заполнить документ , код ее команды: // Код заполнения ТЧ НаСервере П 17 правил для составления оптимального ЗАПРОСа к данным базы 1С 44
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ 1С 8.x : Как убрать лидирующие нули в номере Документа (вариант2) 0
Скопировать строку с номером, с лидирующими нулями, в числовом поле (с форматом без групп, без группировки), и вернуть(скопировать) обратно в строковом поле с номером. Возвращает без нулей. Google maps : вывод точек на карту и режим панорамы 7
В отличие от яндекс карт в GMaps можно использовать панорамы - за что им большой плюс! Надеюсь в яндексе прочитают этот пост и тоже когда-нибудь это сделают! Для клиента нужно было сделать вывод объектов на карту С возможностью просмотра панора Выборка из результата запроса всех вошедших в него значений группировок 4
При обходе результата запроса нередко возникает необходимость получения всех значений группировок внутри какой-либо другой группировки. Такая возможность может понадобиться, например, при выводе кросс отчета. Для обеспечения такой возможности в объек Посмотреть все результаты поиска похожих

Читайте также: