ошибка создания источника доступных настроек компоновки данных
Доброе утро.
Ситуация такая:
есть документ
у документа есть макет схемы компановки, в которой запрос и настройки.
в форме документа кнопка "заполнить", по ней открывается произвольная форма документа, в которой реквизиты: СсылкаНаДокумент - ДокументСсылка.УстановкаКоэффициентовРасходаМатериалов, НастройкиЗаполнения - КомпоновщикНастроекКомпоновкиДанных, АдресМакета - строка, Адрес - строка.
На формы выведены "НастройкиЗаполнения.Настройки.Отбор" и кнопка
В форме заполнения при создании на сервере:
в обработчике кнопки:
В толстом клиенте все ОК, в тонком вылетает ошибка см.картинку
ХЕЛП!!!
Ситуация такая:
есть документ
у документа есть макет схемы компановки, в которой запрос и настройки.
в форме документа кнопка "заполнить", по ней открывается произвольная форма документа, в которой реквизиты: СсылкаНаДокумент - ДокументСсылка.УстановкаКоэффициентовРасходаМатериалов, НастройкиЗаполнения - КомпоновщикНастроекКомпоновкиДанных, АдресМакета - строка, Адрес - строка.
На формы выведены "НастройкиЗаполнения.Настройки.Отбор" и кнопка
В форме заполнения при создании на сервере:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
МакетСКД=Документы.УстановкаКоэффициентовРасходаМатериалов.ПолучитьМакет("МакетСКД");
АдресМакета = ПоместитьВоВременноеХранилище(МакетСКД);
НастройкиЗаполнения.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресМакета));
НастройкиЗаполнения.ЗагрузитьНастройки(МакетСКД.НастройкиПоУмолчанию);
СсылкаНаДокумент = Параметры.СсылкаНаДокумент;
КонецПроцедуры
Показатьв обработчике кнопки:
&НаКлиенте
Процедура ПринятьОтбор(Команда)
ПринятьОтборНаСервере();
КонецПроцедуры
&НаСервере
Процедура ПринятьОтборНаСервере()
МакетСКД = ПолучитьИзВременногоХранилища(АдресМакета);
Настройки = НастройкиЗаполнения.Настройки;
Настройки.ПараметрыДанных.Элементы[1].Значение = СсылкаНаДокумент;
Настройки.ПараметрыДанных.Элементы[0].Значение = СсылкаНаДокумент.Дата;
КомпоновщикМакетаКомпоновкиДанных = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновкиДанных =КомпоновщикМакетаКомпоновкиДанных.Выполнить(МакетСКД,Настройки,,,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновкиДанных);
СтрокиТаблицы = Новый ТаблицаЗначений;
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
ПроцессорВывода.УстановитьОбъект(СтрокиТаблицы);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
Адрес = ПоместитьВоВременноеХранилище(СтрокиТаблицы);
КонецПроцедуры
ПоказатьВ толстом клиенте все ОК, в тонком вылетает ошибка см.картинку
ХЕЛП!!!
Прикрепленные файлы:

По теме из базы знаний
- Дебиторская задолженность по срокам долга в 1С
- Отборы в отчётах. Нюансы работы компоновщика настроек.
- Учебный пример программного формирования схемы компоновки данных: Универсальный отчет по регистрам накопления
- Генератор схемы компоновки данных (СКД), написание кода схемы программно
- Неочевидные возможности системы компоновки данных
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Пробегаясь отладчиком понял, что ошибка происходит, когда серверная процедура отработала полностью и корректно (результат получен в ТЗ и помещен во временное хранилище). Т.е. в момент возврата с сервера на клиент.
Что не так я делаю на сервере?
Что не так я делаю на сервере?
(4) monkbest, отладчиком проверяете в файловом варианте? Потому что в серверном пока на клиент не вернется, ошибку не выдаст.
Ошибка не с вот этим связана случайно?
И самое главное - зачем выносить отборы табчасти на отдельную произвольную форму?
Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресМакета)
Ошибка не с вот этим связана случайно?
И самое главное - зачем выносить отборы табчасти на отдельную произвольную форму?
(10) Follower, это не отборы таб части это её заполнение, заполнение результатами работы схемы компановки данных. В ней у меня запрос к регистру сведений. Не хотел, городить это в той же форме. Честно говоря я пробовал все это реализовать в одной форме - результат тот же.
(14) Follower, да нормально я с ними все делаю :) на клиенте адрес временного хранилища передается в метод формы закрыть. Форма открыта модально и адрес уходит на форму документа открывшую эту, там вызывается серверная процедура, которая читает из хранилища и заполняет таб часть. Это все работает и вообще я для эксперимента все закоментил в плане передачи и обработки ТЗ, ошибка остается.
Вот такой код тоже не работает:
Вот такой код тоже не работает:
&НаСервере
Процедура ПринятьОтборНаСервере()
МакетСКД = ПолучитьИзВременногоХранилища(АдресМакета);
Настройки = НастройкиЗаполнения.Настройки;
Настройки.ПараметрыДанных.Элементы[1].Значение = СсылкаНаДокумент;
Настройки.ПараметрыДанных.Элементы[0].Значение = СсылкаНаДокумент.Дата;
КомпоновщикМакетаКомпоновкиДанных = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновкиДанных =КомпоновщикМакетаКомпоновкиДанных.Выполнить(МакетСКД,МакетСКД.НастройкиПоУмолчанию ,,,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновкиДанных);
СтрокиТаблицы = Новый ТаблицаЗначений;
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
ПроцессорВывода.УстановитьОбъект(СтрокиТаблицы);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
//Адрес = ПоместитьВоВременноеХранилище(СтрокиТаблицы);
КонецПроцедуры
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
МакетСКД=Документы.УстановкаКоэффициентовРасходаМатериалов.ПолучитьМакет("МакетСКД");
АдресМакета = ПоместитьВоВременноеХранилище(МакетСКД);
НастройкиЗаполнения.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресМакета));
НастройкиЗаполнения.ЗагрузитьНастройки(МакетСКД.НастройкиПоУмолчанию);
СсылкаНаДокумент = Параметры.СсылкаНаДокумент;
КонецПроцедуры
&НаКлиенте
Процедура ПринятьОтбор(Команда)
ПринятьОтборНаСервере();
Закрыть();//(Адрес);
КонецПроцедуры
Показатьсуть: попробовать
Адрес = ПоместитьВоВременноеХранилище(СтрокиТаблицы, УНикальныйИдентификатор);
вместо
Адрес = ПоместитьВоВременноеХранилище(СтрокиТаблицы);
(6) ditp, точно мимо
вторую строку меняю вот так
т.е. беру не те настройки, что пользователь задал на форме в компановщике настроек, то отрабатывает на ура. Но задача состоит именно в том, чтобы пользователь мог задать любой отбор
вторую строку меняю вот так
Настройки = МакетСКД.НастройкиПоУмолчанию;//НастройкиЗаполнения.Настройки;
т.е. беру не те настройки, что пользователь задал на форме в компановщике настроек, то отрабатывает на ура. Но задача состоит именно в том, чтобы пользователь мог задать любой отбор
(8) monkbest, я пишу не о
а о последней строчке процедуры ПринятьОтборНаСервере().
В
добавить вторым параметром УникальныйИдентификатор:
Настройки = МакетСКД.НастройкиПоУмолчанию;//НастройкиЗаполнения.Настройки;
а о последней строчке процедуры ПринятьОтборНаСервере().
В
Адрес = ПоместитьВоВременноеХранилище(СтрокиТаблицы);
добавить вторым параметром УникальныйИдентификатор:
Адрес = ПоместитьВоВременноеХранилище(СтрокиТаблицы, УНикальныйИдентификатор);
Я имел в виду то, что проблема не в помещении таблицы значений во временное хранилище. Проблема в том, что если я использую настроки указанные на форме - падает с ошибкой, если я компановщикНастроекКомпановкиДанных не трогаю, то не падает с ошибкой, в результат лезет все без указанных отборов, нормально помещается во временное хранилище, нормально читается в форме документа.
Я пробовал просто убрать строку (закоментил):
т.е. никуда результат не помещать и не обрабатывать его, все равно ошибка.
Я пробовал просто убрать строку (закоментил):
Адрес = ПоместитьВоВременноеХранилище(СтрокиТаблицы);
т.е. никуда результат не помещать и не обрабатывать его, все равно ошибка.
Удалось повторить ошибку у себя на аналогичной процедуре.
Было
После того, как переделал на
получил ошибку.
Так что.
Было
АдресСхемы = ПоместитьВоВременноеХранилище(СхемаКД, УникальныйИдентификатор);
После того, как переделал на
АдресСхемы = ПоместитьВоВременноеХранилище(СхемаКД);
получил ошибку.
Так что.
На самом то деле, достаточно не извращаться с адресами и сохранением макетов, а в процедуре ПринятьОтборНаСервере() вместо
тупо сделать
Результат не изменится, и реквизит формы сэкономим.
МакетСКД = ПолучитьИзВременногоХранилища(АдресМакета);
тупо сделать
МакетСКД=Документы.УстановкаКоэффициентовРасходаМатериалов.ПолучитьМакет("МакетСКД");
Результат не изменится, и реквизит формы сэкономим.
URLСхемы = ПоместитьВоВременноеХранилище(скдДанные, Новый УникальныйИдентификатор());
ИсточникНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(URLСхемы);
КД = Вычислить("кд"+ИмяОтбора);
КД.Инициализировать(ИсточникНастроек);
КД.ЗагрузитьНастройки(скдДанные.НастройкиПоУмолчанию);
тут важно URLСхемы = ПоместитьВоВременноеХранилище(скдДанные, Новый УникальныйИдентификатор()); передать свой уид адреса
ИсточникНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(URLСхемы);
КД = Вычислить("кд"+ИмяОтбора);
КД.Инициализировать(ИсточникНастроек);
КД.ЗагрузитьНастройки(скдДанные.НастройкиПоУмолчанию);
тут важно URLСхемы = ПоместитьВоВременноеХранилище(скдДанные, Новый УникальныйИдентификатор()); передать свой уид адреса
Еще по теме sozdaniye-istochnika-dostupnykh-nastroyek
Разработчики платформы рекомендуют для управляемых форм применять такой способ – поместить схему во временное хранилище и инициализировать источник доступных настроек полученным адресом:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
СКД = РеквизитФормыВЗначение("Объект").ПолучитьМакет("Макет");
АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(СКД, УникальныйИдентификатор);
ИсточникНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресВоВременномХранилище);
КомпоновщикНастроек.Инициализировать(ИсточникНастроек);
КомпоновщикНастроек.ЗагрузитьНастройки(СКД.НастройкиПоУмолчанию);
КонецПроцедуры
Данная ошибка возникает когда есть внешний отчет добавленный в "Дополнительные отчеты и обработки" (БСП) и для отладки запускаем измененный отчет через Файл-Открыть.
Для решения проблемы в модуле отчета добавляем следующие процедуры:
Для решения проблемы в модуле отчета добавляем следующие процедуры:
Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, НастройкиОтчета) Экспорт
НастройкиОтчета.События.ПриСозданииНаСервере = Истина;
КонецПроцедуры
Процедура ПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка) Экспорт
//определяем, что отчет запущен через Файл-Открыть
Если Прав(ЭтотОбъект.ИспользуемоеИмяФайла,3) = "erf" Тогда
Форма.НастройкиОтчета.Внешний = Истина;
КонецЕсли;
КонецПроцедуры
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот