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

Обновлено: 04.07.2024

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

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

Трюк №1. Многоликость правого значения.

Итак, для разогрева начнём с чего-нибудь попроще. В таких механизмах СКД, как "Отбор" или "Условное форматирование" вы наверняка сталкивались с колонками "Поле" (или "Левое значение") и "Значение" (или "Правое значение"). Профессионалы, наверняка знают этот трюк, но начинающим не всегда легко догадаться, что поле компоновки данных можно использовать как слева, так и справа (т.е. сравнивать не только заданные фиксированные значения, но и другие поля СКД в пределах одной строки). Для этого достаточно в поле правого значения зайти в режим редактирования, нажать кнопку очистки значения ("кретик"), затем нажать появившуюся кнопку выбора типа (буква "Т") и выбрать тип "Поле компоновки данных".

Пример.
В качестве примера я не стал изобретать велосипед, а взял самую обычную оборотно-сальдовую ведомость по счету 60 из демо-версии 1С:Бухгалтерии (я использую ред. 2.0.). Кто не знает, начиная с редакции 2.0 этот отчёт сделан на базе СКД.

Итак, зададим прямо в ней отбор для строк с условием "БУ Дт (оборот)" Равно "БУ Кт (оборот)", а также применим к отчёту условное оформление, подсветив жёлтым цветом ячейки строк, где "БУ Кт (кон. сальдо)" Больше "БУ Кт (оборот)". Если кто не знает, как включить панель "Оформление" - найдите кнопку "Параметры панели настроек" справа от надписи "Панель настроек".

Конечный результат должен получиться примерно таким:



Трюк №2. Отбор на группировках.

Все знают, что такое Отбор в СКД, но не все знают, что его можно применять не только для отчета в целом, но и на отдельных группировках строк и колонок. Прикладных задач для задействования такого средства много. Например, условная детализация (ограничение для каких группировок верхнего уровня выводить детализацию, а для каких нет), или вариативная детализация (для разных значений группировок верхнего уровня выводить разные расшифровки). На одном из проектов УПП, к примеру, пришлось делать форму калькуляции себестоимости с фиксированной структурой (отдельный справочник) и для разных статей калькуляции выводить расшифровки или по статьям затрат, или по конкретным затратам или не выводить ничего. Благодаря этому трюку не пришлось отказываться от СКД при разработке отчёта.

Пример.
Цель примера: отобразить ОСВ, в которой для взаиморасчетных счетов (60,62,76) показать расшифровку по контрагентам, а для затратных (20,23,25,26) - по статьям затрат.

Сама СКД реализована в виде набора данных, где используется запрос к виртуальной таблице остатков и оборотов регистра бухгалтерии "Хозрасчетный".
Размещаем вложенные группировки "Организация" и "Счет". В группировке "Счет" параллельно размещаем 2 группировки "Субконто1" и "Субконто2", для которых задаем соответствующие отборы.
Иллюстрацию настройки привожу в скриншоте:



Если в основных настройках отчёта на закладке "Другие настройки" вы не отключали вывод отборов, то это обязательно нужно будет сделать в "других настройках" наших группировок "Субконто1" и "Субконто2"

Трюк №3. Шапка-невидимка

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

При разработке схемы в предопределённом макете оформления добавьте макет группировки, с определением по имени группировки "Невидимка" так, как показано на скриншоте. Обратите внимание, что поле "Область" должно остаться пустым!


А затем задайте для группировки "Субконто2" имя "Невидимка":


И вуаля. шапка группировки "Субконто2" исчезает, а отчёт становится вот таким:


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

Да, есть ещё один ньюанс этого трюка: учитывайте, что "шапка-невидимка" накрывает не только эту группировку, но и все нижестоящие! Т.е. если вы назначите имя "Невидимка" группировке "Субконто1", то в шапке не будет видно ни "Субконто1", ни "Субконто2"!

Трюк №4. Называй меня как хочешь

Большинство разработчиков СКД знают, как можно задать заголовок поля запроса. На закладке СКД "Наборы данных", достаточно поставить галочку отмены автозаголовка и внести в поле "Заголовок" необходимый текст. Минус состоит в том, что в пользовательском режиме, этот способ недоступен, а переименовать заголовок хочется не прибегая к помощи конфигуратора. Так вот в настройках вариантов отчёта есть не только способ переименовать заголовки полей, но и "накрыть" их группировочной "шапкой". Для этого на закладке "Выбранные поля" необходимо выделить нужные поля и нажать правую кнопку мыши. Как видно на скриншоте для полей доступны опции "Установить заголовок" и "Сгруппировать поля".
Обратите внимание, что для полей группировок установку заголовка необходимо делать также именно через закладку "Выбранные поля", а не через контекстное меню "Установить имя" в верхней (структурной) части настройки варианта!




После всех настроек вариант отчёта выглядит вот так:




P.S.
Небольшая подсказка для тех, кто будет качать схему. Схема - одна, но все трюки выполнены в виде отдельных вариантов настроек отчёта этой схемы:

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

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

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

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

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

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

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

(19) И что? Одни и одни и те же Часы выйдут в номер 1 и 2?.
Результат на скрине

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

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

(23) Ну как то не слились.Да вроде бы и не могут Или покажите пример, когда сольются в одну. Ну и если брать те данные, которые привели, то ни какой нумерации и не нужно. 7 встанет в 7, 10 в 10. 5 будет отдельной строчкой.
В общем. Это мы с Вами разные варианты рассматриваем, а заказчик слил общие данные и не колется:) (24) А, так Вы схитрили. :) Сразу не обратил внимание, что у Вас используется "ОБЪЕДИНИТЬ", а не "ОБЪЕДИНИТЬ ВСЕ". (25) Схитрил бэ, если б написал distinct при union all, а так это жеж разные методы при кажущей похожести:) В конструкторе, что написано? Без дублей
Как раз таки в Вашем примере distinct при union all дал бы тот же результат, что и union all без distinct, т.е. отличный от union. (27Давай таки на Ты. Бесит, когда обзывают на Вы. Алгоритм работает? Да В чем проблемм?Без раницы уважаешь ты меня или нет. Я тебя назначил уважаемым людём. Это уважение, данность. Как сам знаешь, но мой алгоритм работает в легкую (2) Спасибо за ответ конечно, но если бы все было так просто, эта тема бы тут не создалась (3) И в правду. Вам никак не подойдет вариант, где все цифры сгруппированы в одну строку? Как на картинке в приложении. (3) Идея вроде бы лежит на поверхности: необходимо в запросе сначала пронумеровать записи в разрезе филиалов и дней недели, а затем сгруппировать данные по филиалу и номеру записи, взяв "Максимум" от часов. Но к сожалению не могу предложить Вам алгоритм нумерации в запросе, не хватает какого-нибудь поля упорядочивания, например периода. что то посыпались однотипные задачи про расписание,
у студентов сессия началась? :)
соотвественно Филиал + Час - строки, День - Колонки, Ресурс - это ресурс :) (6) запрос элементарный. только вот как он может помочь решить задачу? если в одном филиале пн = 10, вт = 12, ср = 17? по условию задачи нужно вывести одной строкой, а не тремя (7)
СКД автоматом группирует строки, ты проверь сначала прежде чем критиковать (10) зачем мне пробовать, если и так все понятно. ты же написал, что все просто - вот и давай покажи нам рабочий пример

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

(13)
отчет работает на тех данных что в примере,
но возможно я неправильно понял условие задачи

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

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

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

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