ошибка создания источника доступных настроек компоновки данных

1. monkbest 114 12.08.15 15:05 Сейчас в теме
Доброе утро.
Ситуация такая:
есть документ
у документа есть макет схемы компановки, в которой запрос и настройки.
в форме документа кнопка "заполнить", по ней открывается произвольная форма документа, в которой реквизиты: СсылкаНаДокумент - ДокументСсылка.УстановкаКоэффициентовРасходаМатериалов, НастройкиЗаполнения - КомпоновщикНастроекКомпоновкиДанных, АдресМакета - строка, Адрес - строка.
На формы выведены "НастройкиЗаполнения.Настройки.Отбор" и кнопка

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


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


В толстом клиенте все ОК, в тонком вылетает ошибка см.картинку

ХЕЛП!!!
Прикрепленные файлы:
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
16. ditp 94 12.08.15 16:07 Сейчас в теме
Удалось повторить ошибку у себя на аналогичной процедуре.

Было
АдресСхемы	= ПоместитьВоВременноеХранилище(СхемаКД, УникальныйИдентификатор);

После того, как переделал на
АдресСхемы	= ПоместитьВоВременноеХранилище(СхемаКД);

получил ошибку.

Так что.
marku; Rus1k; movled; AntonH851; KPAMOP; TimkoNzt; Kutuzov; vitaliy1911; julia96_07; Vad1m; unichkin; nbeliaev; _root; rayastar; Dmitriy41; +15 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. monkbest 114 12.08.15 15:15 Сейчас в теме
Релиз платформы, ну и код видно
Прикрепленные файлы:
3. monkbest 114 12.08.15 15:18 Сейчас в теме
Параметры запуска: тонкий клиент
Прикрепленные файлы:
4. monkbest 114 12.08.15 15:21 Сейчас в теме
Пробегаясь отладчиком понял, что ошибка происходит, когда серверная процедура отработала полностью и корректно (результат получен в ТЗ и помещен во временное хранилище). Т.е. в момент возврата с сервера на клиент.
Что не так я делаю на сервере?
5. Xershi 1565 12.08.15 15:29 Сейчас в теме
(4) monkbest, первое что приходит в голову это передаете на тонкий клиент, то что нельзя передавать. Тут уже справку откройте и проверьте вызовы на доступность в тонком клиенте.
7. monkbest 114 12.08.15 15:30 Сейчас в теме
(5) Xershi, на это проверил уже вроде сто раз
10. Follower 12.08.15 15:41 Сейчас в теме
(4) monkbest, отладчиком проверяете в файловом варианте? Потому что в серверном пока на клиент не вернется, ошибку не выдаст.

Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресМакета)

Ошибка не с вот этим связана случайно?

И самое главное - зачем выносить отборы табчасти на отдельную произвольную форму?
12. monkbest 114 12.08.15 15:46 Сейчас в теме
(10) Follower, это не отборы таб части это её заполнение, заполнение результатами работы схемы компановки данных. В ней у меня запрос к регистру сведений. Не хотел, городить это в той же форме. Честно говоря я пробовал все это реализовать в одной форме - результат тот же.
13. monkbest 114 12.08.15 15:47 Сейчас в теме
(10) Follower, я толкьо в файловом варианте пока и работаю и ошибка именно на выходе из процедуры. Все операторы на сервере отрабатывают удачно, результат корректный.
14. Follower 12.08.15 15:54 Сейчас в теме
(13) monkbest, а вот что вы делаете со "СтрокамиТаблицы"? В коде в (1) обработки результата не видно. Если передаете на клиент, то это не очень хорошо - на клиенте нет ТаблицЗначений. Может, в этом дело?
15. monkbest 114 12.08.15 16:05 Сейчас в теме
(14) Follower, да нормально я с ними все делаю :) на клиенте адрес временного хранилища передается в метод формы закрыть. Форма открыта модально и адрес уходит на форму документа открывшую эту, там вызывается серверная процедура, которая читает из хранилища и заполняет таб часть. Это все работает и вообще я для эксперимента все закоментил в плане передачи и обработки ТЗ, ошибка остается.

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


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	МакетСКД=Документы.УстановкаКоэффициентовРасходаМатериалов.ПолучитьМакет("МакетСКД");
	АдресМакета = ПоместитьВоВременноеХранилище(МакетСКД);
	НастройкиЗаполнения.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресМакета));
	НастройкиЗаполнения.ЗагрузитьНастройки(МакетСКД.НастройкиПоУмолчанию);
	СсылкаНаДокумент = Параметры.СсылкаНаДокумент;
	
КонецПроцедуры

&НаКлиенте
Процедура ПринятьОтбор(Команда)
	ПринятьОтборНаСервере();
	Закрыть();//(Адрес);
КонецПроцедуры
Показать
6. ditp 94 12.08.15 15:29 Сейчас в теме
http://devtrainingforum.v8.1c.ru/forum/thread.jsp?id=586423#586423

суть: попробовать
Адрес = ПоместитьВоВременноеХранилище(СтрокиТаблицы, УНикальныйИдентификатор);

вместо
Адрес = ПоместитьВоВременноеХранилище(СтрокиТаблицы);
8. monkbest 114 12.08.15 15:33 Сейчас в теме
(6) ditp, точно мимо

вторую строку меняю вот так
Настройки = МакетСКД.НастройкиПоУмолчанию;//НастройкиЗаполнения.Настройки;

т.е. беру не те настройки, что пользователь задал на форме в компановщике настроек, то отрабатывает на ура. Но задача состоит именно в том, чтобы пользователь мог задать любой отбор
9. ditp 94 12.08.15 15:35 Сейчас в теме
(8) monkbest, я пишу не о
Настройки = МакетСКД.НастройкиПоУмолчанию;//НастройкиЗаполнения.Настройки;

а о последней строчке процедуры ПринятьОтборНаСервере().
В
Адрес = ПоместитьВоВременноеХранилище(СтрокиТаблицы);

добавить вторым параметром УникальныйИдентификатор:
Адрес = ПоместитьВоВременноеХранилище(СтрокиТаблицы, УНикальныйИдентификатор);
11. monkbest 114 12.08.15 15:44 Сейчас в теме
Я имел в виду то, что проблема не в помещении таблицы значений во временное хранилище. Проблема в том, что если я использую настроки указанные на форме - падает с ошибкой, если я компановщикНастроекКомпановкиДанных не трогаю, то не падает с ошибкой, в результат лезет все без указанных отборов, нормально помещается во временное хранилище, нормально читается в форме документа.
Я пробовал просто убрать строку (закоментил):
Адрес = ПоместитьВоВременноеХранилище(СтрокиТаблицы);

т.е. никуда результат не помещать и не обрабатывать его, все равно ошибка.
16. ditp 94 12.08.15 16:07 Сейчас в теме
Удалось повторить ошибку у себя на аналогичной процедуре.

Было
АдресСхемы	= ПоместитьВоВременноеХранилище(СхемаКД, УникальныйИдентификатор);

После того, как переделал на
АдресСхемы	= ПоместитьВоВременноеХранилище(СхемаКД);

получил ошибку.

Так что.
marku; Rus1k; movled; AntonH851; KPAMOP; TimkoNzt; Kutuzov; vitaliy1911; julia96_07; Vad1m; unichkin; nbeliaev; _root; rayastar; Dmitriy41; +15 Ответить
17. monkbest 114 12.08.15 16:08 Сейчас в теме
(16) ditp, если я указываю идентьификатор, то хранилище чистится после закрытия формы и форма владелец не получит результат
18. ditp 94 12.08.15 16:10 Сейчас в теме
(17) monkbest, ну и черт с ним, через параметры можно передать.
Или адрес таблицы-результата передавать в параметры формы с отбором.

Вопрос-то с ошибкой я закрыл )
20. monkbest 114 12.08.15 16:13 Сейчас в теме
Я(16) ditp, сорри я криво читаю с первого раза. Помогло)!!!!!!!!!!!!!!!!!!!!!!!!!
19. ditp 94 12.08.15 16:12 Сейчас в теме
На самом то деле, достаточно не извращаться с адресами и сохранением макетов, а в процедуре ПринятьОтборНаСервере() вместо
МакетСКД = ПолучитьИзВременногоХранилища(АдресМакета);

тупо сделать
МакетСКД=Документы.УстановкаКоэффициентовРасходаМатериалов.ПолучитьМакет("МакетСКД");


Результат не изменится, и реквизит формы сэкономим.
21. monkbest 114 12.08.15 16:17 Сейчас в теме
Резюме:

УникальныйИдентификатор надо было указать при сохранении макета СКД во временное хранилище. При сохранении результатов (ТЗ) его указывать конечно не надо.

Спасибо ditp
Дмитрий74Чел; +1 Ответить
22. jmi 2 25.11.20 18:48 Сейчас в теме
URLСхемы = ПоместитьВоВременноеХранилище(скдДанные, Новый УникальныйИдентификатор());
ИсточникНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(URLСхемы);

КД = Вычислить("кд"+ИмяОтбора);
КД.Инициализировать(ИсточникНастроек);
КД.ЗагрузитьНастройки(скдДанные.НастройкиПоУмолчанию);

тут важно URLСхемы = ПоместитьВоВременноеХранилище(скдДанные, Новый УникальныйИдентификатор()); передать свой уид адреса
23. abasovit 6 07.11.21 11:00 Сейчас в теме
Еще по теме sozdaniye-istochnika-dostupnykh-nastroyek
Разработчики платформы рекомендуют для управляемых форм применять такой способ – поместить схему во временное хранилище и инициализировать источник доступных настроек полученным адресом:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)   
    СКД = РеквизитФормыВЗначение("Объект").ПолучитьМакет("Макет");
    АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(СКД, УникальныйИдентификатор);   
    ИсточникНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресВоВременномХранилище);
    КомпоновщикНастроек.Инициализировать(ИсточникНастроек);
    КомпоновщикНастроек.ЗагрузитьНастройки(СКД.НастройкиПоУмолчанию);   
КонецПроцедуры
user1559729; +1 Ответить
24. itmind 309 21.08.23 03:10 Сейчас в теме
Данная ошибка возникает когда есть внешний отчет добавленный в "Дополнительные отчеты и обработки" (БСП) и для отладки запускаем измененный отчет через Файл-Открыть.

Для решения проблемы в модуле отчета добавляем следующие процедуры:

Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, НастройкиОтчета) Экспорт
	НастройкиОтчета.События.ПриСозданииНаСервере = Истина;
КонецПроцедуры                          

Процедура ПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка) Экспорт 
	
        //определяем, что отчет запущен через Файл-Открыть
	Если Прав(ЭтотОбъект.ИспользуемоеИмяФайла,3) = "erf" Тогда
		Форма.НастройкиОтчета.Внешний = Истина;  
	КонецЕсли;
	
КонецПроцедуры
Показать
25. user1559729 08.11.23 23:09 Сейчас в теме
Столкнулся с подобной ошибкой. В моем случае проблема была в неправильной функции СведенияОВнешнейОбработке(). Подробнее ТУТ.
26. marku 63 02.05.24 09:48 Сейчас в теме
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот