Как мы уже писали, “закармливать” видео пока не будем :)
Зато мы просмотрели вопросы, которые разбирали в Мастер-группах и выбрали несколько “общественно полезных” :)
Немного причесали, и – готово, можно читать:
Несколько вопросов из Мастер-группы курса
Профессиональная разработка интерфейсов и форм в 1С:Предприятие 8.3
Вопрос № 1:
Ответ:
Можно. Пример кода:
Сообщение.Текст = “Текст сообщения”;
Сообщение.Поле = “ИмяРеквизитаФормы”;
Сообщение.Сообщить();
Вопрос 2
Прошу на примере УТ 11 (см. скриншот) пояснить, как быстро найти команду, отображенную в командном интерфейсе?
Ответ:
Окно командного интерфейса подсистемы, которое приведено на скриншоте, не подходит для этих целей. Для поиска команды следует использовать окно Все подсистемы.
Необходимо в дереве найти интересующую команду и вызвать в контекстном меню пункт Найти в дереве:
Вопрос 3
Есть управляемая форма документа с табличной частью, где заполнена колонка «Номенклатура».
Необходимо программно «сымитировать» интерактивный выбор номенклатуры, чтобы при этом сработали соответствующие обработчики в каждой строке, как будто пользователь выбрал эту же номенклатурную позицию вручную.
Ответ:
Да, это возможно. Вот программный код, который это реализует:
Процедура КомандаПересчетСтрок(Команда)
Для каждого Стр Из Объект.Товары Цикл
Элементы.Товары.ТекущаяСтрока = Стр.ПолучитьИдентификатор();
Элементы.Товары.ТекущийЭлемент = Элементы.ТоварыНоменклатура;
Элементы.Товары.ИзменитьСтроку();
ФормаВыбора = ПолучитьФорму(“Справочник.Номенклатура.ФормаВыбора”
,,Элементы.Товары.ТекущийЭлемент);
ФормаВыбора.ОповеститьОВыборе(Стр.Номенклатура);
Элементы.Товары.ЗакончитьРедактированиеСтроки(Ложь);
КонецЦикла;
КонецПроцедуры
Стоит отметить, что данный программный код будет приводить к множественным обращениям к серверу, что серьезно скажется на его производительности.
Поэтому этот код следует применять только в крайних случаях, например, когда нужно срочно выполнить пересчет строк табличной части в зависимости от выбранной номенклатуры, а времени на разбор логики работы формы нет.
Вопрос 4
Как можно на командной панели формы разместить две команды так, чтобы первая из них занимала крайнее левое положение, а вторая – крайнее правое?
Ответ:
Чтобы реализовать такое размещение, необходимо:
- Выключить автозаполнение командной панели формы
- Создать 2 командных панели и сгруппировать их горизонтально
- На первой панели необходимо разметить команды, которые должны быть выровнены по левому краю, а на второй панели – по правому краю.
- В свойствах 2-й панели следует включить выравнивание по правому краю.
Вопрос 5
В процессе выполнения кода создается текстовый файл. По окончании формирования файла используется метод ПоказатьОповещениеПользователя().
Можно ли в этом методе создать гиперссылку, при переходе по которой будет открываться созданный файл?
Ответ:
Стандартно такой возможности нет, но можно предложить следующий вариант решения задачи.
Можно создать общую форму ФормаТекстовогоДокумента, клиентскую глобальную переменную глТекстовыйДокумент и выводить оповещение следующим образом:
ПоказатьОповещениеПользователя(“Текст оповещения”,
“e1cib/app/ОбщаяФорма.ФормаТекстовогоДокумента”);
При переходе по ссылке будет открываться общая форма, где из глобальной переменной глТекстовыйДокумент можно получить текст для отображения.
Вопрос 6
Подскажите, пожалуйста, как убрать контекстное меню элемента формы.
В палитре свойств у элемента управления формы и у реквизита подходящих по смыслу настроек не вижу, может быть, не заметил.
Этот код не работает:
Ответ:
Необходимо в контекстном меню включить отображение командной панели:
После чего в свойствах контекстного меню нужно выключить Автозаполнение:
Вопрос 7
Подскажите, можно ли получить владельца списка подчиненного справочника, если список пустой?
Например, в БП3 выбрал контрагента, перешел на вкладку «Договоры» – список пуст.
Как получить ссылку на контрагента?
Ответ:
Так как в форме контрагента при переходе по команде Договоры открывается форма списка справочника «Договоры» с отбором по текущему контрагенту, значение контрагента можно получить 2 способами:
1-й способ – получение контрагента из параметров открываемой формы, можно использовать только в обработчике ПриСозданииНаСервере:
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Владелец = Неопределено;
Параметры.Отбор.Свойство(“Владелец”, Владелец);
КонецПроцедуры
2-й способ – получение контрагента из отбора по владельцу, размещенного в фиксированных настройках:
Владелец = Неопределено;
ПолеВладелец = Новый ПолеКомпоновкиДанных(“Владелец”);
Для каждого ЭлементОтбора Из ЭлементыОтбора Цикл
Если ТипЗнч(ЭлементОтбора)=Тип(“ЭлементОтбораКомпоновкиДанных”) и
ЭлементОтбора.ЛевоеЗначение = ПолеВладелец Тогда
Владелец = ЭлементОтбора.ПравоеЗначение;
КонецЕсли;
КонецЦикла;
Вопрос 8
С помощью метода ЗапуститьПриложение() запускаю другую базу, в которой должна выполниться некоторая обработка.
Вот программный код:
ЗапуститьПриложение(КоманднаяСтрока,,Истина);
Программный код должен продолжить свое исполнение только после завершения этого приложения.
Однако, несмотря на параметр ДождатьсяЗавершения, равный Истине, следующие команды начинают выполняться сразу же.
Каким образом можно дождаться завершения работы запущенной базы?
Ответ:
Все дело в том, что 1cestart.exe — это универсальная программа запуска, целью которой является запуск толстого или тонкого клиента нужной версии.
Ничего удивительного в том, что 1cestart.exe закрывается, нет. Поэтому лучше запускать нужный клиент напрямую.
Например, для версии 8.2.19.83 строка запуска толстого клиента:
Вопрос 9
Можно ли выключить видимость у «Панель навигации и действий» по умолчанию для новых пользователей?
Ответ:
Для этого потребуется программным способом устанавливать настройки текущего пользователя при первом входе в базу.
Сделать это можно только на сервере, поэтому эффективнее всего использовать «Модуль сеанса», так как его код исполняется на стороне сервера до выполнения кода других модулей и до формирования главного окна приложения.
В результате установленные настройки будут сразу же применены к новому пользователю.
Вот пример кода:
Настройки = ХранилищеСистемныхНастроек.Загрузить(
“Общее/НастройкиКлиентскогоПриложения”);
Если Настройки=Неопределено Тогда
Настройки = Новый НастройкиКлиентскогоПриложения;
Настройки.ОтображатьПанелиНавигацииИДействий = Ложь;
Настройки.ОтображатьПанельРазделов = Истина;
Настройки.РежимОткрытияФормПриложения=
РежимОткрытияФормПриложения.Закладки;
ХранилищеСистемныхНастроек.Сохранить(
“Общее/НастройкиКлиентскогоПриложения”,,Настройки);
КонецЕсли;
КонецПроцедуры
Курс Профессиональная разработка отчетов в 1С 8.3 на Системе Компоновки Данных (СКД)
Поддержка: 60 дней. Стоимость: 3900 рублей.
Курс Профессиональная разработка интерфейсов и форм в 1С:Предприятии 8.3
Поддержка: 90 дней. Стоимость: 7400 рублей.
Несколько вопросов из Мастер-группы курса
Профессиональная разработка отчетов в 1С 8.3 на Системе Компоновки Данных (СКД)
Вопрос 1
Для чего могут потребоваться пользовательские поля, если в схеме компоновки можно использовать ресурсы и вычисляемые поля?
Ответ:
Главная особенность пользовательских полей в том, что их можно настраивать в режиме «1С:Предприятие» – то есть нет необходимости редактировать саму схему компоновки в конфигураторе.
В пользовательском режиме можно создать новое поле, которое разработчик не определил в схеме компоновки.
Для этого нужно обратиться к окну изменения варианта отчета, добавить новое пользовательское поле и указать, как для этого поля будут рассчитываться детальные и итоговые записи:
Полученное поле можно использовать в отчете:
Затем настроенный вариант отчета с новым добавленным полем можно сохранить.
Все эти действия можно выполнить в режиме «1С:Предприятие», без обращения к конфигуратору. С этой точки зрения пользовательское поле-выражение похоже на вычисляемое поле и ресурс. Если для пользовательского поля задано выражение итоговых записей, то в списке доступных и выбранных полей оно будет отображаться при помощи зеленой пиктограммы (как ресурс).
Но создать новое вычисляемое поле, задать или изменить выражение для ресурса в режиме «1С:Предприятие» нельзя. Для этого потребуется обратиться к конструктору схемы компоновки.
Вопрос 2
Как настроить форму отчета таким образом, чтобы в быстрых пользовательских настройках для отборов отображался вид сравнения?
Ответ:
Перейти к виду сравнения для быстрых пользовательских настроек можно при помощи команды на форме «Еще» — «Изменить форму»:
По умолчанию вид сравнения скрыт.
Разработчики платформы обосновывают это следующим допущением.
Если у отбора установлен вид сравнения «Равно», то пользователю нужно иметь возможность быстро вводить значение и не отвлекаться на вид сравнения. А если ему нужно изменить вид сравнения, то для этого следует воспользоваться формой настроек. Эта же форма используется для редактирования и других «не быстрых» настроек.
Например, в УТ 11.2 (БСП) выбор вида сравнения реализован при помощи контекстного меню:
Вопрос 3
Если в отчете «ОстаткиТоваровНаСкладах» установить выражение представления для поля «Количество»:
Строка(Количество) + "%"
то при формировании отчета символ «%» не выводится. В чем может быть дело?
Ответ:
Причина такого поведения системы в том, что выражение представления влияет только на вывод детальных записей.
А в настройках компоновки используется группировка, а не детальные записи.
Поэтому, чтобы получить символ «%» в итоговом отчете, можно использовать два варианта.
Первый вариант – в настройках структуры отчета воспользоваться детальными записями:
Тогда в отчете в колонке «Количество» будет использоваться выражение представления:
Второй вариант – изменить выражение для ресурса «Количество»:
Строка(Сумма(Количество)) + "%"
А для более красивого представления можно использовать такое выражение:
Формат(ЕстьNull(Сумма(Количество), 0), "ЧДЦ=2; ЧН=0,00") + "%"
Тогда отчет будет выглядеть следующим образом:
Вопрос 4
Отчет строится по оборотному регистру накопления «Продажи». Для ресурсов используются следующие выражения:
В настройках структуры отчета дважды используются детальные записи (первый раз – как подчиненная группировка, второй раз – как отдельная группировка):
При этом данные в отчет выводятся по-разному. В первом случае в детальных записях указывается количество документов, а во втором – сам Регистратор:
В чем причина такого поведения системы?
Ответ:
Вы столкнулись с особенностью использования детальных записей.
Детальные записи – это группировка без указанных группировочных полей. Если для детальных записей в списке выбранных полей присутствуют только ресурсы, то такая группировка будет рассматриваться как «общий итог», будет выводиться всего одна запись с итогом по выбранным ресурсам.
Для детальных записей, подчиненных «Контрагенту», в списке выбранных полей используется «Автополе».
Если развернуть его, то можно увидеть, что оно состоит из двух ресурсов («Регистратор» и «Количество»). Получается, что в группировке есть только ресурсы, поэтому в первом случае система выводит только итог по этим ресурсам.
На уровне детальных записей, вложенных в «Контрагента», в выбранных полях можно удалить «Автополе», добавить явно поля «Контрагент», «Регистратор» и «Количество»:
Тогда в этой группировке система будет выводить представление регистратора, а не значение агрегатной функции:
Вопрос 5
В запросах для источников данных параметры виртуальных таблиц заданы в явном виде, также добавлены параметры типа «Стандартный период» для быстрого ввода.
На закладке «Параметры» все равно кроме этого присутствуют параметры «НачалоПериода» и «КонецПериода», которых нет в тексте запроса. Как можно их убрать из списка параметров?
Ответ:
Автоматическое добавление параметров «НачалоПериода» и «КонецПериода» связано с использованием автозаполнения в наборе данных.
При установленном флажке «Автозаполнение» в схему компоновки автоматически добавляются параметры виртуальных таблиц с соответствующими именами («НачалоПериода», «КонецПериода», «Период» и т.д.).
Управлять поведением системы можно при помощи конструкций в фигурных скобках (расширение языка запросов для системы компоновки). Возьмем для примера вот такой фрагмент:
Для системы это значит:
Т.е. значение параметра «НачалоПериодаТекущий» используется, только если в настройках не установлено значение параметра «НачалоПериода».
За этим нужно внимательно следить, потому что можно сформировать отчет, в котором данные будут выводиться не за тот интервал времени, за который ожидается их получить.
Чтобы в списке параметров не было «НачалоПериода» и «КонецПериода», нужно изменить тексты запросов наборов данных, указать параметры виртуальных таблиц в фигурных скобках:
ПродажиОбороты.Номенклатура,
ПродажиОбороты.СуммаОборот КАК ТекущееЗначение
ИЗ
РегистрНакопления.Продажи.Обороты({&НачалоПериодаТекущий}, {&КонецПериодаТекущий}, , ) КАК ПродажиОбороты
ВЫБРАТЬ
ПродажиОбороты.Номенклатура,
ПродажиОбороты.СуммаОборот КАК ПредыдущееЗначение
ИЗ
РегистрНакопления.Продажи.Обороты({&НачалоПериодаПредыдущий}, {&КонецПериодаПредыдущий}, ,) КАК ПродажиОбороты
В таком случае список параметров выглядит следующим образом:
Вопрос 6
Разрабатывается отчет по остаткам товаров на складах. В отчет выводятся группировки по складу и номенклатуре, детальные записи и общий итог по количеству:
Для ресурса «Количество» используется следующее выражение:
Выбор Когда Количество > 0 Тогда Сумма(Количество) Иначе 0 Конец
При этом итоги в отчет выводятся не так, как ожидается, а общий итог вообще не выводится:
В чем ошибка?
Ответ:
Здесь ошибка в выражении для ресурса: неправильно указано, к чему будет применяться агрегатная функция «Сумма».
Использование просто полей в выражении для расчета итогов обычно не имеет смысла, поскольку на уровне группировки требуется рассчитать сумму (или другую агрегатную функцию) по детальным записям.
Нужно изменить выражение для ресурса на следующее:
Сумма(Выбор Когда Количество > 0 Тогда Количество Иначе 0 Конец)
В таком случае система будет рассчитывать итог по группировке следующим образом.
Обходятся все записи, для каждой выполняется проверка: если Количество > 0, будет использоваться само значение Количество, иначе будет использоваться значение 0. Полученные значения складываются. Так будет получен итог по группировке.
То есть, чтобы получить корректный итог, нужно использовать агрегатную функцию, а условное выражение указать внутри нее.
Тогда получится ожидаемый результат:
Вопрос 7
Предположим, у нас стоит задача выводить остатки товара в кросс-таблицу, где в строках выведены группировки по номенклатуре, а в колонках — по складу и организации.
Каким образом можно организовать группировки в колонках так, чтобы группировка верхнего уровня (склад) накрывала шапкой группировки нижнего уровня (организация)?
Пример на рисунке.
Ответ:
Можно задать следующую структуру отчета:
Тогда отчет будет отображаться следующим образом:
Он отличается от требуемого только тем, что не объединены расположенные рядом ячейки с одинаковым складом.
Чтобы ячейки со складами были объединенными, можно использовать предопределенный макет схемы компоновки и программную обработку готового сформированного табличного документа.
Зададим имя Организация для группировки в колонках таблицы:
Чтобы «накрыть шапкой» такие колонки, воспользуемся макетом заголовка:
В ячейках указываются шаблоны и специальные «маркеры» — символы «??».
После того, как весь табличный документ выведен, осуществляется поиск соседних ячеек с одинаковым текстом, начинающимся с «??».
Эти ячейки объединяются, получается общая шапка для колонок.
Пример программного кода в модуле отчета приведен ниже:
Программный код
Функция НужноОбъединятьЯчейки(ТабДок, ИндексСтроки, ИндексКолонки)
ТекущаяЯчейка = ТабДок.Область(ИндексСтроки, ИндексКолонки);
СледующаяЯчейка = ТабДок.Область(ИндексСтроки, ИндексКолонки + 1);Если НЕ ЗначениеЗаполнено(ТекущаяЯчейка.Текст) Тогда
Возврат Ложь;
ИначеЕсли ТекущаяЯчейка.Текст = СледующаяЯчейка.Текст
И ТекущаяЯчейка.Имя = "R" + ИндексСтроки + "C" + ИндексКолонки
И Лев(ТекущаяЯчейка.Текст, 2) = "??" И Лев(СледующаяЯчейка.Текст, 2) = "??" ТогдаВозврат Истина;
Иначе
Возврат Ложь;
КонецЕсли;
КонецФункции
Процедура ОбъединитьЯчейкиВШапке(ТабДок)
Для ИндексСтроки = 1 По ТабДок.ВысотаТаблицы Цикл
НачальнаяКолонка = 0;
Для ИндексКолонки = 1 По ТабДок.ШиринаТаблицы ЦиклЕсли НужноОбъединятьЯчейки(ТабДок, ИндексСтроки, ИндексКолонки) Тогда
Если НЕ НачальнаяКолонка Тогда
НачальнаяКолонка = ИндексКолонки;
КонецЕсли;ИначеЕсли НЕ НачальнаяКолонка = 0 Тогда
ТекстЗаголовка = ТабДок.Область(ИндексСтроки, ИндексКолонки).Текст;
ТекстЗаголовка = Сред(ТекстЗаголовка, 3, СтрДлина(ТекстЗаголовка) - 2);
// уберем из заголовка "??"
ОбъединяемаяОбласть = ТабДок.Область(ИндексСтроки, НачальнаяКолонка,
ИндексСтроки, ИндексКолонки);
ОбъединяемаяОбласть.Объединить();
ОбъединяемаяОбласть.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Центр;
ОбъединяемаяОбласть.Текст = ТекстЗаголовка;
НачальнаяКолонка = 0;Иначе
ТекстЗаголовка = ТабДок.Область(ИндексСтроки, ИндексКолонки).Текст;
Если Лев(ТекстЗаголовка, 2) = "??" ТогдаТекстЗаголовка = Сред(ТекстЗаголовка, 3, СтрДлина(ТекстЗаголовка) - 2);
// уберем из заголовка "??"
Область = ТабДок.Область(ИндексСтроки, НачальнаяКолонка,
ИндексСтроки, ИндексКолонки);
Область.Текст = ТекстЗаголовка;КонецЕсли;
НачальнаяКолонка = 0;КонецЕсли;
КонецЦикла;
Если НЕ ОбъединяемаяОбласть = Неопределено Тогда
Продолжить;
КонецЕсли;КонецЦикла;
КонецПроцедуры
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
НастройкиКомпоновки = КомпоновщикНастроек.ПолучитьНастройки();
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиКомпоновки,
ДанныеРасшифровки);ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки);ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);ОбъединитьЯчейкиВШапке(ДокументРезультат);
КонецПроцедуры
Здесь используется программное формирование отчета, после чего дорабатывается полученный табличный документ, объединяются соседние ячейки с одинаковым текстом, начинающимся с «??».
Получается вот такой отчет:
Вопрос 8
В схеме компоновки используется набор данных – объединение, при помощи которого получаются продажи за два периода.
Было добавлено два вычисляемых поля:
Для этих вычисляемых полей на закладке «Ресурсы» заданы выражения:
Но при формировании отчета поле Отклонение (%) не выводится:
В чем причина?
Ответ:
Чтобы разобраться, почему получается такой результат, добавим в настройки компоновки подчиненную группировку (Детальные записи), в выбранных полях укажем поле Номенклатура:
Тогда отчет будет выглядеть следующим образом:
Теперь видно, почему на уровне группировки не заполняется Отклонение (%).
Поскольку используется объединение двух наборов данных, на уровне детальных записей мы получаем две строки.
Для каждой строки рассчитывается вычисляемое поле. На уровне группировки простое суммирование отклонений даст неправильный результат.
Чтобы получить корректный результат, нужно изменить выражения для ресурса:
При таких настройках в отчет попадут следующие данные:
Курс Профессиональная разработка отчетов в 1С 8.3 на Системе Компоновки Данных (СКД)
Поддержка: 60 дней. Стоимость: 3900 рублей.
Курс Профессиональная разработка интерфейсов и форм в 1С:Предприятии 8.3
Поддержка: 90 дней. Стоимость: 7400 рублей.
PDF-версия статьи для участников группы ВКонтакте
Мы ведем группу ВКонтакте - http://vk.com/kursypo1c.
Если Вы еще не вступили в нее - сделайте это сейчас, и в блоке ниже (на этой странице) появится ссылка на скачивание материалов.
Вы можете скачать эту статью в формате PDF по следующей ссылке: Ссылка доступна для зарегистрированных пользователей)
Добрый день, не подскажете в чем причина?
создан обработчик события формы «ПриСозданииНаСервере», в который мы внесем следующий текст:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Параметры.Отбор.Свойство(“Владелец”) Тогда
Элементы.Код.Видимость = Ложь;
КонецЕсли;
КонецПроцедуры
Когда запускаю в режиме откладки выдает это :
“Поле объекта не обнаружено(Отбор)”
подскажите, пожалуйста, в чем проблема может быть )
Добрый день!
Проблема заключается в том, что в коллекции Параметры нет поля Отбор.
Нужно под отладчиком остановиться на строке, вызывающей ошибку, просмотреть, какие элементы существуют в коллекции Параметры.
Состав параметров определяется тем, форма какого объекта открывается. Например, для формы отчета параметр Отбор доступен, а для формы документа – нет.
Добрый день! Подскажите пожалуйста в решении: есть отчет в виде кросс-таблицы: в колонках хочу вывести группировку и дополнительную информацию – на тек.момент их вставила в группировку “Детальные записи” без полей. И присвоить этой группировке заголовок, например, “Текущий период – август 2019”
https://a.radikal.ru/a06/1909/2c/53a6e6ef3a78.png
https://c.radikal.ru/c15/1909/d4/74cc29931a08.png
https://b.radikal.ru/b00/1909/c0/00440a715830.png
Добрый день!
Я бы первым делом попробовал воспользоваться приемом, который описан на этой странице в разделе по СКД под номером 7 (про объединение ячеек).
В группировках колонок указать два поля – Период и Контрагент. Потом при помощи программного кода объединить одинаковые значения в ячейках, подставить в объединенные ячейки нужный заголовок.
Здравствуйте.
В настройках СКД сделаны вложенные группировки Подразделение – > Склад -> Номенклатура.
При определенном условии отчет должен формироваться без промежуточной группировки Склад, т.е. Подразделение -> Номенклатура.
Намекните, каким образом можно решить такой вопрос без использования настроек отчета в пользовательском режиме ?
Спасибо.
Добрый день!
Например, можно в процедуре ПриКомпоновкеРезультата в зависимости от условия программно изменить структуру формируемого отчета в настройках компоновки – удалить ненужную группировку. Т.е. работаем со свойством КомпоновщикНастроек.Настройки.Структура.
Доброго дня
Подскажите на СКД Можно ли получить подобную структуру крос таблицы:
1. Строки субконто
2. Колонки По месяцам
3. Итоги После 3х мес среднее по кварталу
4. В последней колонке среднее по году
Добрый день, Евгений!
Конечно можно! Между делом накидал на пробу.
Сделал на базе регистра накопления. Особенности: а запросе от виртуальной таблицы обороты использовал периодичность Авто (что-бы выбрать несколько реквизитов периода: ПериодМесяц, ПериодКвартал, ПериодГод), так-же в запросе выбрал СуммаОборот и Субконто1. На страничке компоновок у ПериодКвартал и ПериодГод указал другой формат (что-бы их отличать от ПериодМесяц и между собой), у всех периодов указано что их Роль = Период, то они дополнительные и указана нумерация (Месяц=1 и т.д.), на страничке ресурсов указываю как производить расчет итогов.
Саму настройку делаю мастером: кросс-таблица, выбираю все поля запроса, строки = Субконто1, Колонки = ПериодГод, ПериодКвартал, ПериодМесяц (т.е. не указал только СуммаОборот).
Для самого отчёта на закладке “Другие настройки” отключаю вывод горизонтальных и вертикальных итогов и для для группировок ПериодГод и ПериодКвартал (для ПериодМесяц этого не следует делать!) на закладке “Другие настройки” указываю 3 настройки
Огромное спасибо.
Пожалуйста сделайте скриншот структуры крос таблицы и выбранных полей.
Заранее спасибо
Добрый день, Евгений!
Макет СКД: ресурсы, выбранные поля, структура кросс-таблицы так или так – кому как привычнее.
Огромное спасибо.
Настройки для меня не очевидные.
Аналогичный отчет “Взлетел” на регистре бухгалтерии.
Честно Я не думал что это заработает.
Добрый день. Столкнулась с таким вопросом. Строится отчет по актуальным остаткам на 3х складах(каждый склад в новой колонке). Если товара нет на складе, то и колонка со складом соответственно не показывается. А как можно принудительно заставить выводить все колонки и все строки даже с нулевым значением?
Добрый день!
Для этого нужно, чтобы в результате запроса присутствовали записи со всеми складами, даже с теми, на которых нет остатков.
Тогда компоновщик выведет в колонках все склады.
Например, можно использовать левое соединение справочника Склады с виртуальной таблицей Остатки регистра накопления:
Склады.Ссылка КАК Склад,
ТоварныеЗапасыОстатки.Товар КАК Товар,
ЕСТЬNULL(ТоварныеЗапасыОстатки.КоличествоОстаток, 0) КАК Количество
ИЗ
Справочник.Склады КАК Склады
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварныеЗапасы.Остатки КАК ТоварныеЗапасыОстатки
ПО Склады.Ссылка = ТоварныеЗапасыОстатки.Склад
Хорошо. Пробовала так делать,но в результате этого запроса(использую РегистрНакопления.СвободныеОстатки.Остатки – УТ 11.4) нет строк где остаток<0 по всем 3м складам(в принципе так и должно быть, но мне нужны пустые строки в отчете)+так как я вызываю этот отчет из Заказа клиента, необходимо соединить с табличной частью документа
Делаю пример.
Есть три склада – Склад1, Склад2 и Склад3.
Одна номенклатура – Товар1.
Остатки на складах:
Товар1, Склад1 = -1
Товар1, Склад2 = -2
Товар1, Склад3 = -3
Получаем такой результат запроса:
Склад1, Товар1, -1
Склад2, Товар1, -2
Склад3, Товар1, -3
Т.е. все склады попали в результат запроса.
Значит, при разработке запроса нужно учитывать конкретную решаемую задачу и Вашу специфику.
Но для того, чтобы компоновщик вывел колонки со всеми складами, необходимо, чтобы в детальных записях (в результате запроса) встречались все склады.
Также при разработке текста запроса учитывайте, что при левом соединении в результат запроса попадут все данные из левой таблицы. Т.е. его можно использовать, чтобы получить все склады в результате запроса.
Это такие “заготовки”, идеи для запроса, остальное нужно адаптировать под Вашу задачу.
Здравствуйте.
А как насчет такого вопроса. В СКД 2 набора данных соединены на закладке связи наборов данных. Если в наборе приемнике нет данных, то мы получаем NULL. Каким образом можно превратить этот NULL в 0 или другое значение, по аналогии с ЕСТЬNULL(ПолеИзПремника,0) в запросе? Нужно чтобы, например, работал отбор вида ПолеИзПремника= 0
Добрый день!
Можно создать собственное вычисляемое или пользовательское поле, где и использовать функцию ЕСТЬNULL.
Уже пытался так сделать, И только что перепроверил.
в вычисляемом поле КоличествоОборот1 пишу ЕстьNULL(КоличествоОборот,0), в ресурсе КоличествоОборот1 пишу Сумма(ЕстьNULL(КоличествоОборот,0)
Значение действительно приводится к 0 это видно если используя условное оформление раскрасить отчет.
Но при указании в отборе на уровне отчета КоличествоОборот1=0 в результат ничего не попадает. Хотя без отбора в результате есть строки где КоличествоОборот1=0 .
Спасибо, теперь можно хотя бы подсветить позиции в отчете, частично вопрос закрыт.
Тут дело в особенностях работы системы компоновки.
Поскольку отбор установлен на поле набора – приемника связи, то система компоновки применяет элементы оптимизации, в макете компоновки по факту используется внутренняя связь между наборами данных, а не внешняя левая. Выполняется запрос из набора – источника связи, затем выполняется запрос из набора – приемника связи с отбором. Получается пустой результат. В результате внутреннего соединения между наборами будет тоже пустой результат.
Получается, что система не даст сделать такой отбор.
Попробуйте заменить соединение наборов на объединение. Для объединения такой отбор будет работать. Прикрепил пример – ОтборОбъединение.zip.
К сожалению обеднение не вариант потому как соединение использовано как в видео 19. Срез последних на каждую дату из 10 занятия курса по СКД. За тем лишь отличием что я получаю обороты за периоды полученные в запросе источнике.
В принципе мне удалось выкрутится в данной ситуации применив отбор не на уровне отчета а на уровне самой нижней группировки, но пришлось отключить отражение итогов потому как итоги считаются по все данным отчета.
Отлично, что удалось найти способ обхода!
Добрый день.
А можно разобрать ситуацию с расположением ресурсов среди других полей с отображением итогов по вертикали. Кроме решения с собственным макетом есть другие варианты. Я перепробовал многие настройки на закладке дополнительно, но не могу добиться желаемых результатов.
Отчет простой – группировка по детальным записям.
Добрый день!
В Других настройках установите параметр Авто позиция ресурсов в значение Не использовать. Тогда поля будут отображаться в том порядке, как они перечислены в выбранных полях.
Разобрался. Не понял почему, но при отключении автопозиции ресурсов вчера не срабатывал порядок полей, указанных в выбранных полях. Можете что-нибудь добавить к этому?
Если на закладке Другие настройки галочка использования для этого параметра не установлена, то по умолчанию ресурсы будут выводиться последними.
Ответ на вопрос №1
“Сообщение.Поле = «ИмяРеквизитаФормы»;”
“ИмяРеквизитаФормы”?? Что-то не работает… Сообщение.Поле = “ПутьКДаннымРеквизитаФормы” – работает! Платформа 8.3.8.2088.
Добрый день, Денис!
Уточните пожалуйста, что такое “ПутьКДаннымРеквизитаФормы”? Мне такой термин неизвестен.
Хм… Вопрос №9 из первого блока – когда-то уже возникала у меня такая необходимость, нашел подобное решение, но увы – не работает. Грешил на сырую платформу (работали тогда на 8.3.4.*). Сейчас попробовал на 8.3.8 – специально создал нового юзера – результат нулевой. В чем может быть дело?
Добрый день, Дмитрий!
Данный код предназначен для классического управляемого интерфейса версии 8.2, в Такси он работать не будет.
Для Такси можно применить следующий код:
Настройки = ХранилищеСистемныхНастроек.Загрузить("Общее/НастройкиИнтерфейсаКлиентскогоПриложения");
Если Настройки=Неопределено Тогда
Настройки = Новый НастройкиИнтерфейсаКлиентскогоПриложения;
СоставПанелей = Новый НастройкиСоставаИнтерфейсаКлиентскогоПриложения;
СоставПанелей.Верх.Добавить(Новый ЭлементНастройкиСоставаИнтерфейсаКлиентскогоПриложения("ПанельРазделов"));
СоставПанелей.Низ.Добавить(Новый ЭлементНастройкиСоставаИнтерфейсаКлиентскогоПриложения("ПанельОткрытых"));
Настройки.УстановитьСостав(СоставПанелей);
ХранилищеСистемныхНастроек.Сохранить("Общее/НастройкиИнтерфейсаКлиентскогоПриложения",,Настройки);
КонецЕсли;
КонецПроцедуры
Я описал ситуацию с классическим интерфейсом…
О какой конфигурации идет речь?
УТП (не на УФ), в которой добавлена подсистема для торговых представителей с небольшим набором прав и доступом к двум документам и одному отчету. Т.е. по сути это один рабочий стол с двумя дин. списками – панели разделов и задач там не нужны, вот и пытаюсь побороть :)
Добрый день, Дмитрий!
Уточните пожалуйста:
1. Версию используемой платформы
2. Режим совместимости, который установлен в свойствах конфигурации (8.3.7, 8.3.6 …)
3. Режим управляемого интерфейса (в закладках или в отдельных окнах, для этого в пользовательском режиме в упр. интерфейсе войдите в меню Сервис-Параметры)
Добрый день. Версия платформы 8.3.8.1784, режим совместимости не используется, режим совместимости интерфейса – “Версия 8.2. Разрешить такси”.
В настройках внешнего вида – формы в закладках. Причем изменить не получается – после выбора “В отдельных окнах” и перезапуска – опять стоит “В закладках”. Этого бага, кстати, я и не видел раньше, т.к. в нашем случае нужно использовать закладки (приложение запускается в терминале с отключенным рабочим столом Windows) .
В самописной конфигурации с такими же режимами совместимости и на этой же платформе – такого нет, работают оба режима – и в окнах и в закладках… Более того, панели этим методом отключаются!
Значит проблема где-то в типовой (возможно “Основной режим запуска – обычное приложение” в свойстве конфигурации?), так как в изначально написанной под УФ конфигурации код работает, хоть он там мне и не нужен :)
Добрый день!
Судя по всему в коде вашей конфигурации присутствует код по настройке видимости панелей. Попробуйте глобальным поиском по модулям поискать строку “НастройкиКлиентскогоПриложения”.
Здравствуйте
А что подразумевает под собой “Поддержка”?
“Поддержка: 45 / 90 дней. Стоимость: 4900 / 8700 рублей.”
Доброго дня, Леонид!
«Поддержка: 45 / 90 дней. Стоимость: 4900 / 8700 рублей.»
В зависимости от версии курса будет разный период поддержки от преподавателя.
В рамках поддержки Вы сможете задавать вопросы преподавателю на сайте по материалам курса, увидите ответы на вопросы других участников.
Также в курсе есть практические задания. Отчитываетесь об их выполнении на сайте, после одобрения отчета, Вы получаете доступ к решению преподавателя.
Какие-то сертификаты после прохождения курса будут? Электронные или бумажные?
Да, в курсе по СКД предусмотрен сертификат о прохождении курса в случае выполнения всех практических заданий, в том числе финального. Сертификат высылается в электронном виде на электронную почту.
Спасибо за материал!!!
Спасибо!
а вот интересный вопрос по закладке прочих настроек:
расположение общих итогов по горизонтали(вертикали) – отключаешь один, например вертикальный, пропадают оба. почему?
Добрый день!
В настройках компоновки задаю значения параметров следующим образом:
Результирующий отчет при этом выглядит следующим образом:
Т.е. выключены общие итоги по вертикали, а общие итоги по горизонтали не настраиваем. Отчет выводится в соответствии с этими настройками – итогов по вертикали нет, а итоги по горизонтали выводятся.
Какие настройки используются в вашем случае? Как воспроизвести некорректное поведение системы?
1. устанавливаем расположение обоих итогов в начале
http://radikal.ru/lfp/s017.radikal.ru/i439/1610/03/7b5c3b8ca1eb.png/htm
получаем такой результат:
http://radikal.ru/lfp/s008.radikal.ru/i304/1610/cb/c2b307262f41.png/htm
2. убираем вертикальный итог
http://radikal.ru/lfp/s019.radikal.ru/i631/1610/a2/7db1b3ba6882.png/htm
пропадают оба итога:
http://radikal.ru/lfp/s017.radikal.ru/i410/1610/8a/55986650ea47.png/htm
На своем примере указал такое же расположение общих итогов, как и на вашем скриншоте. Получилось корректное, ожидаемое отображение итогов: общий итог по горизонтали выводится в начале, а по вертикали – не выводится.
Так что нужно разбираться в конкретном отчете, какая настройка влияет на отображение. Может, это выражение для расчета ресурсов.
Предлагаю разобраться в таком поведении системы в рамках Мастер-группы.
Спасибо!
Спасибо!
Очень полезная информация, спасибо.
Хороший материал. Как минимум – равноценная замена бесплатному видео, а, скорее, и поинтереснее будет.
Будет хорошо, если подобные материалы будут появляться и впредь.
Да очень познавательно, спасибо.
Как всегда отличный материал!
Спасибо.
еще
:-))
Почему нет PDF версии?
Не успели подготовить.
Постараемся сделать на выходных.
Спасибо за разъяснения, очень полезный материал.
Спасибо большое!
Спасибо
Спасибо. Полезная информация.
Очень интересно.
Что-то встречал сам, но ответ на вопрос 7 из второй части меня поразил.
Тоже зацепило. Интересно, это стандартный прием? Не встречал его до этого ни в какой литературе.
Добрый день!
Стандартно система при настройках, как в 7-м вопросе, не “накрывает шапкой” группировку нижнего уровня, а выводит их на одном уровне. Это не всегда наглядно, поэтому приходится прибегать к доработкам. А вот вариантов, как именно реализовать объединение ячеек, может быть несколько, в зависимости от особенностей решаемой задачи и от требуемого вида отчета. В примере использовались специальные маркеры, чтобы объединять только нужные ячейки, а не все подряд соседние ячейки с одинаковым текстом. Еще вариант – для оптимизации изменить алгоритм, чтобы поиск происходил не во всем табличном документе, а только в шапке.
Василий, 1К, спасибо большое за материал!
Спасибо, познавательная статья.