Всем доброго времени суток!
А можно мне задать вопрос по отборам в отчетах на СКД.
Пытаюсь из расширения запустить отчет конфигурации БП 3.0 "Движения товаров". Передаю туда отбор по номенклатуре:
Выдает ошибку:
Прошу помощи!!!
А можно мне задать вопрос по отборам в отчетах на СКД.
Пытаюсь из расширения запустить отчет конфигурации БП 3.0 "Движения товаров". Передаю туда отбор по номенклатуре:
Номенклатура = ТекущиеДанные.Ссылка;
//структура отбора
Отбор = Новый Структура("Номенклатура", Номенклатура);
Отбор.Вставить("НачалоПериода", НачалоМесяца(ТекущаяДата()));
Отбор.Вставить("КонецПериода", ТекущаяДата());
ПараметрыФормы = Новый Структура("СформироватьПриОткрытии, Отбор", Истина, Отбор);
ФормаОтчета = ПолучитьФорму("Отчет.ДвижениеТоваров.ФормаОбъекта", ПараметрыФормы);
НовыеПользовательскиеНастройки = Новый ПользовательскиеНастройкиКомпоновкиДанных;
ФормаОтчета.Отчет.КомпоновщикНастроек.ЗагрузитьПользовательскиеНастройки(НовыеПользовательскиеНастройки);
ОткрытьФорму(ФормаОтчета);
ПоказатьВыдает ошибку:
Невозможно применить фиксированные настройки. Совпадают значения параметра.
{Отчет.ДвижениеТоваров.Форма.ФормаОтчета.Форма(667)}: ПараметрыОтчета.НастройкиКомпоновкиДанных = Отчет.КомпоновщикНастроек.ПолучитьНастройки();
{Отчет.ДвижениеТоваров.Форма.ФормаОтчета.Форма(925)}: ПараметрыОтчета = ПодготовитьПараметрыОтчетаНаСервере();
{Отчет.ДвижениеТоваров.Форма.ФормаОтчета.Форма(733)}: БухгалтерскиеОтчеты.ЗаписатьОперациюБизнесСтатистики(ЭтотОбъект, "СформироватьОтчет", НастройкиОтчетаДляСтатистики());
{Отчет.ДвижениеТоваров.Форма.ФормаОтчета.Форма(875)}: РезультатВыполнения = СформироватьОтчетНаСервере();
{Отчет.ДвижениеТоваров.Форма.ФормаОтчета.Форма(511)}: ЗапуститьФормированиеОтчета();
по причине:
Невозможно применить фиксированные настройки. Совпадают значения параметра
ПоказатьПрошу помощи!!!
По теме из базы знаний
- Универсальный конструктор отчетов СКД (управляемые формы, тонкий клиент)
- Как программно открыть внешний отчет из "Дополнительных отчетов и обработок" и передать параметры (при помощи БСП)
- Расшифровка отчета на СКД с детализацией по выбранному полю на основе БСП
- Отчет на СКД с использованием форм из БСП. Варианты передачи списка значений в параметр СКД
- СКД, пример выбора варианта в обработке
Найденные решения
Для этого не нужно устанавливать отбор в параметрах формы, нужно установить значение отбора в настройках отчёта.
Настройки получаются через компоновщик. Попробуй так, должно работать:
Настройки получаются через компоновщик. Попробуй так, должно работать:
ЭлементыОтбора = ФормаОтчета.Отчет.КомпоновщикНастроек.Настройки.Отбор.Элементы;
ПолеНоменклатура = Новый ПолеКомпоновкиДанных("Номенклатура");
Для Каждого ЭлементОтбора Из ЭлементыОтбора Цикл
Если ЭлементОтбора.ЛевоеЗначение = ПолеНоменклатура Тогда
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = Номенклатура;
Прервать;
КонецЕсли;
КонецЦикла;
Показать
Всем доброго времени суток!
В результате поисков нашел универсальную схему открытия типового (из конфигурации) отчета в 1С: БП 3.0, подходит для большинства отчетов конфигурации. Вот код:
Всем удачи.
В результате поисков нашел универсальную схему открытия типового (из конфигурации) отчета в 1С: БП 3.0, подходит для большинства отчетов конфигурации. Вот код:
&НаКлиенте
Процедура ОтчетДвиженияНоменклатуры(Команда)
ТекущиеДанные = Элементы.СписокНоменклатуры.ТекущиеДанные;
Если ТекущиеДанные.Свойство("Ссылка")<>Неопределено Тогда
Номенклатура = ТекущиеДанные.Ссылка;
Отборы = Новый Массив;
Отборы.Добавить(Новый Структура("Поле, Значение, ВидСравнения","Номенклатура", Номенклатура, ВидСравненияКомпоновкиДанных.Равно));
ОткрытьОтчет("Отчет.ДвижениеТоваров.Форма", ,Отборы, ,"ДвижениеТоваров");
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьОтчет(Отчет, ГруппировкаОтчета = Неопределено, Отборы = Неопределено, Показатели = Неопределено, КлючВарианта = Неопределено, НачалоПериода = Неопределено, КонецПериода = Неопределено)
ПользовательскиеНастройки = ПользовательскиеНастройкиДляРасшифровки(НачалоПериода, КонецПериода);
ДополнительныеСвойства = ПользовательскиеНастройки.ДополнительныеСвойства;
Если ГруппировкаОтчета <> Неопределено И ТипЗнч(ГруппировкаОтчета) = Тип("Массив") Тогда
ДополнительныеСвойства.Вставить("Группировка", ГруппировкаОтчета);
КонецЕсли;
Если ТипЗнч(Отборы) = Тип("Массив") Тогда
НастройкаОтбора = ПользовательскиеНастройки.Элементы.Добавить(Тип("ОтборКомпоновкиДанных"));
НастройкаОтбора.ИдентификаторПользовательскойНастройки = "Отбор";
Для Каждого Отбор Из Отборы Цикл
БухгалтерскиеОтчетыКлиентСервер.ДобавитьОтбор(НастройкаОтбора, Отбор.Поле, Отбор.Значение, Отбор.ВидСравнения);
КонецЦикла;
КонецЕсли;
Если ТипЗнч(Показатели) = Тип("Массив") Тогда
Для Каждого Показатель Из Показатели Цикл
ДополнительныеСвойства.Вставить(Показатель, Истина);
КонецЦикла;
КонецЕсли;
Если КлючВарианта <> Неопределено Тогда
ДополнительныеСвойства.Вставить("КлючВарианта", КлючВарианта);
КонецЕсли;
ПараметрыОтчета = Новый Структура;
ПараметрыОтчета.Вставить("РежимРасшифровки" , Истина);
ПараметрыОтчета.Вставить("ВидРасшифровки" , 2);
ПараметрыОтчета.Вставить("ПользовательскиеНастройки", ПользовательскиеНастройки);
ОткрытьФорму(Отчет, ПараметрыОтчета, ЭтотОбъект, Истина);
КонецПроцедуры
ПоказатьВсем удачи.
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Фиксированные настройки - настройки, предопределённые разработчиком. Они имеют приоритет перед настройками СКД и пользовательскими. В СКД отчёта есть фиксированные настройки, а ты пытаешься установить значение какой-то из них в пользовательских настройках. Либо нужно убрать пересекающуюся настройку из отбора, либо передать в форму фиксированные настройки:
фиксНастройки = Новый НастройкиКомпоновкиДанных;
....
Установка значений настроек
....
ПараметрыФормы.Вставить("ФиксированныеНастройки", фиксНастройки);
(3) Хотелось-бы передать Отбор в виде Пользовательских настроек, чтоб пользователь (если это ему понадобиться) зашел в "Показать настройки" снял галку отбора и получил полный отчет.
Как получить и очистить Фиксированные настройки? Надеюсь это действие на период текущего сеанса работы с Отчетом.
Как получить и очистить Фиксированные настройки? Надеюсь это действие на период текущего сеанса работы с Отчетом.
Для этого не нужно устанавливать отбор в параметрах формы, нужно установить значение отбора в настройках отчёта.
Настройки получаются через компоновщик. Попробуй так, должно работать:
Настройки получаются через компоновщик. Попробуй так, должно работать:
ЭлементыОтбора = ФормаОтчета.Отчет.КомпоновщикНастроек.Настройки.Отбор.Элементы;
ПолеНоменклатура = Новый ПолеКомпоновкиДанных("Номенклатура");
Для Каждого ЭлементОтбора Из ЭлементыОтбора Цикл
Если ЭлементОтбора.ЛевоеЗначение = ПолеНоменклатура Тогда
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = Номенклатура;
Прервать;
КонецЕсли;
КонецЦикла;
Показать
(6)К сожалению Ваш код не сработал. Удовлетворительно работает только этот код:
Как видите настройки Фиксированные. В Пользовательских настройках не находит "Отбор".
Да и ФормироватьСразу тоже не исполняет.
Номенклатура = ТекущиеДанные.Ссылка;
ПараметрыФормы = Новый Структура("СформироватьПриОткрытии", Истина);
ФормаОтчета = ПолучитьФорму("Отчет.ДвижениеТоваров.ФормаОбъекта", ПараметрыФормы);
ФормаОтчета.НастройкиОтчета.ФормироватьСразу = Истина;
КомпоновщикНастроек = ФормаОтчета.Отчет.КомпоновщикНастроек;
НастройкиКомпоновки = КомпоновщикНастроек.ФиксированныеНастройки;
НастройкиКомпоновки.Отбор.Элементы.Очистить();
Отбор = НастройкиКомпоновки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Отбор.ИдентификаторПользовательскойНастройки = Новый УникальныйИдентификатор;
Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Номенклатура");
Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
Отбор.ПравоеЗначение = Номенклатура;
Отбор.Использование = Истина;
ПоказатьКак видите настройки Фиксированные. В Пользовательских настройках не находит "Отбор".
Да и ФормироватьСразу тоже не исполняет.
К счастью, Вы решили свою проблему, но, к сожалению, не разобрались в вопросе. Я не просто так написал код, я его проверил на внешней обработке именно с этим отчётом. Чем последний код отличается от моего? Тем, что очищаются фиксированные настройки отчёта и добавляются свои, а это некорректно, потому что они предусмотрены разработчиком и код, таким образом, вмешивается в разработку. Мой вариант основан на том, что отбор уже установлен в этом конкретном отчёте и код устанавливает значение нужного элемента отбора. Вот и вся разница. Почему он у Вас не сработал, нужно смотреть в целом.
(10) Просто поэкспериментируйте, чтобы разобраться. Дело не в моём коде или другом. Нужно разобраться в том, как это работает, чтобы больше вопросов не возникало. "СформироватьПриОткрытии" в параметрах формы достаточно для запуска, зачем ещё эта строчка: ФормаОтчета.НастройкиОтчета.ФормироватьСразу = Истина; ?
Получите Настройки, посмотрите в отладчике Отбор. У него есть коллекция элементов. В ней уже есть Номенклатура. Раз так, просто установите её значение. Всё.
Получите ПользовательскиеНастройки, посмотрите, что в них. Потом фиксированные. И выберите подходящий вариант.
Получите Настройки, посмотрите в отладчике Отбор. У него есть коллекция элементов. В ней уже есть Номенклатура. Раз так, просто установите её значение. Всё.
Получите ПользовательскиеНастройки, посмотрите, что в них. Потом фиксированные. И выберите подходящий вариант.
(9)Проверил, после сброса настроек. На условии: "Если ЭлементОтбора.ЛевоеЗначение = ПолеНоменклатура Тогда"
выходит из цикла. По причине: первым у меня другое условие "Счет", поэтому в цикле ввел оператор "Иначе". И "ЭлементОтбора.Использование = Истина;" тоже добавил, мало-ли пользователь что выбирал в прошлый раз.
Просто я полагал, что нужно работать с "ПользовательскимиНастройками", а не с "Настройками" вообще.
Спасибо за помощь, так действительно работает, с учетом моих хотелок. Остальные параметры надеюсь передать самостоятельно.
Вот только отчет не формируется автоматом и выходит сообщение: "Отчет не сформирован! Недействительный адрес или не найден родительский сеанс задания".
выходит из цикла. По причине: первым у меня другое условие "Счет", поэтому в цикле ввел оператор "Иначе". И "ЭлементОтбора.Использование = Истина;" тоже добавил, мало-ли пользователь что выбирал в прошлый раз.
Просто я полагал, что нужно работать с "ПользовательскимиНастройками", а не с "Настройками" вообще.
Спасибо за помощь, так действительно работает, с учетом моих хотелок. Остальные параметры надеюсь передать самостоятельно.
Вот только отчет не формируется автоматом и выходит сообщение: "Отчет не сформирован! Недействительный адрес или не найден родительский сеанс задания".
(12)
появляется при работе с временным хранилищем, адрес которого не обнаружен либо при ошибке в релизе конфигурации БП. Например, в версии БП 29.8. В последнем случае поможет только обновление конфигурации до следующего релиза. У меня, на БП 3.0.95.29 ничего подобного не было. В первом случае нужно смотреть как и откуда вызывается отчёт. Весь приведённый выше код - для клиента, временное хранилище служит для передачи данных между клиентом и сервером. Из приведённого кода этого понять невозможно.
Так и должно быть, дальше оператор Прервать. Зачем продолжать цикл, если нужный элемент уже найден? Порядок следования элементов коллекции отбора неважен, поэтому то, что первым "Счёт" значения не имеет.
сообщение: "Отчет не сформирован! Недействительный адрес или не найден родительский сеанс задания".
появляется при работе с временным хранилищем, адрес которого не обнаружен либо при ошибке в релизе конфигурации БП. Например, в версии БП 29.8. В последнем случае поможет только обновление конфигурации до следующего релиза. У меня, на БП 3.0.95.29 ничего подобного не было. В первом случае нужно смотреть как и откуда вызывается отчёт. Весь приведённый выше код - для клиента, временное хранилище служит для передачи данных между клиентом и сервером. Из приведённого кода этого понять невозможно.
На условии: "Если ЭлементОтбора.ЛевоеЗначение = ПолеНоменклатура Тогда" выходит из цикла.
Так и должно быть, дальше оператор Прервать. Зачем продолжать цикл, если нужный элемент уже найден? Порядок следования элементов коллекции отбора неважен, поэтому то, что первым "Счёт" значения не имеет.
Всем доброго времени суток!
В результате поисков нашел универсальную схему открытия типового (из конфигурации) отчета в 1С: БП 3.0, подходит для большинства отчетов конфигурации. Вот код:
Всем удачи.
В результате поисков нашел универсальную схему открытия типового (из конфигурации) отчета в 1С: БП 3.0, подходит для большинства отчетов конфигурации. Вот код:
&НаКлиенте
Процедура ОтчетДвиженияНоменклатуры(Команда)
ТекущиеДанные = Элементы.СписокНоменклатуры.ТекущиеДанные;
Если ТекущиеДанные.Свойство("Ссылка")<>Неопределено Тогда
Номенклатура = ТекущиеДанные.Ссылка;
Отборы = Новый Массив;
Отборы.Добавить(Новый Структура("Поле, Значение, ВидСравнения","Номенклатура", Номенклатура, ВидСравненияКомпоновкиДанных.Равно));
ОткрытьОтчет("Отчет.ДвижениеТоваров.Форма", ,Отборы, ,"ДвижениеТоваров");
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьОтчет(Отчет, ГруппировкаОтчета = Неопределено, Отборы = Неопределено, Показатели = Неопределено, КлючВарианта = Неопределено, НачалоПериода = Неопределено, КонецПериода = Неопределено)
ПользовательскиеНастройки = ПользовательскиеНастройкиДляРасшифровки(НачалоПериода, КонецПериода);
ДополнительныеСвойства = ПользовательскиеНастройки.ДополнительныеСвойства;
Если ГруппировкаОтчета <> Неопределено И ТипЗнч(ГруппировкаОтчета) = Тип("Массив") Тогда
ДополнительныеСвойства.Вставить("Группировка", ГруппировкаОтчета);
КонецЕсли;
Если ТипЗнч(Отборы) = Тип("Массив") Тогда
НастройкаОтбора = ПользовательскиеНастройки.Элементы.Добавить(Тип("ОтборКомпоновкиДанных"));
НастройкаОтбора.ИдентификаторПользовательскойНастройки = "Отбор";
Для Каждого Отбор Из Отборы Цикл
БухгалтерскиеОтчетыКлиентСервер.ДобавитьОтбор(НастройкаОтбора, Отбор.Поле, Отбор.Значение, Отбор.ВидСравнения);
КонецЦикла;
КонецЕсли;
Если ТипЗнч(Показатели) = Тип("Массив") Тогда
Для Каждого Показатель Из Показатели Цикл
ДополнительныеСвойства.Вставить(Показатель, Истина);
КонецЦикла;
КонецЕсли;
Если КлючВарианта <> Неопределено Тогда
ДополнительныеСвойства.Вставить("КлючВарианта", КлючВарианта);
КонецЕсли;
ПараметрыОтчета = Новый Структура;
ПараметрыОтчета.Вставить("РежимРасшифровки" , Истина);
ПараметрыОтчета.Вставить("ВидРасшифровки" , 2);
ПараметрыОтчета.Вставить("ПользовательскиеНастройки", ПользовательскиеНастройки);
ОткрытьФорму(Отчет, ПараметрыОтчета, ЭтотОбъект, Истина);
КонецПроцедуры
ПоказатьВсем удачи.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот