|
|
|
Как сохранить таб. часть в настройках отчета? | ☑ | ||
|---|---|---|---|---|
|
0
lirt82
25.09.25
✎
12:30
|
Всем привет, есть самописный отчет (не СКД) в отчете на форме есть закладка "НастройкиВыгрузки" в ней расположена таб. часть "СписокКлиентовДляВыгрузки" эта таб. часть реквизит объекта отчета. Пользователь ее (таб. часть заполняет) и сохраняет по кнопке "СохранитьНастройкиВыгрузки". Необходимо реализовать сохранение данных таб. части отчета и при открытии восстановить данные в таб. части. Код из формы отчета.
&НаКлиенте
Процедура СохранитьНастройкиВыгрузки(Команда)
СохранитьНастройкиВыгрузкиНаСервере();
КонецПроцедуры
&НаСервере
Процедура СохранитьНастройкиВыгрузкиНаСервере()
//СписокКлиентовВыгрузки = ЗначениеВСтрокуВнутр(Отчет.СписокКлиентовДляВыгрузки.Выгрузить());
ОтчетОбъект = РеквизитФормыВЗначение("Отчет");
ОтчетОбъект.СохранитьНастройкиВыгрузки(Отчет.АдресДляВыгрузки, Отчет.СписокКлиентовДляВыгрузки); //.Выгрузить());
КонецПроцедуры
&НаСервере
Процедура ВосстановитьНастройкиВыгрузкиНаСервере()
ОтчетОбъект = РеквизитФормыВЗначение("Отчет");
ОтчетОбъект.ВосстановитьНастройкиВыгрузки(Отчет.АдресДляВыгрузки, Отчет.СписокКлиентовДляВыгрузки);
КонецПроцедуры
Код модуля объекта отчета. Процедура СохранитьНастройкиВыгрузки(ПутьДляСохранения, СписокКлиентов) Экспорт
Ключ = ПолучитьКлючОбъекта();
НастройкиВыгрузки = Новый Структура;
НастройкиВыгрузки.Вставить("ПутьДляСохранения", ПутьДляСохранения);
НастройкиВыгрузки.Вставить("СписокКлиентов", СписокКлиентов);
УстановитьПривилегированныйРежим(Истина);
ОбщегоНазначения.ХранилищеОбщихНастроекСохранить(Ключ, ПолучитьКлючНастроекВыгрузки(), НастройкиВыгрузки,, Ключ);
УстановитьПривилегированныйРежим(Ложь);
КонецПроцедуры
Процедура ВосстановитьНастройкиВыгрузки(ПутьДляСохранения, СписокКлиентов) Экспорт
Ключ = ПолучитьКлючОбъекта();
УстановитьПривилегированныйРежим(Истина);
НастройкиВыгрузки = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(Ключ, ПолучитьКлючНастроекВыгрузки(),,, Ключ);
УстановитьПривилегированныйРежим(Ложь);
Если НастройкиВыгрузки <> Неопределено Тогда
ПутьДляСохранения = НастройкиВыгрузки.ПапкаДляСохранения;
СписокКлиентов = НастройкиВыгрузки.СписокКлиентов; //ЗначениеИзСтрокиВнутр(НастройкиВыгрузки.СписокКлиентов);
КонецЕсли;
КонецПроцедуры
при таком коде выходит ошибка: Ошибка при установке значения атрибута контекста (СписокКлиентовДляВыгрузки) по причине: Нельзя изменять поле, содержащее объект данных формы |
|||
|
1
Asmody
25.09.25
✎
08:04
|
Потому что нельзя присвоить значение таб.части.
Загрузить() можно |
|||
|
2
lirt82
25.09.25
✎
08:20
|
(1) СписокКлиентов = НастройкиВыгрузки.СписокКлиентов.Загрузить();
Метод объекта не обнаружен (Загрузить) Хотя тип НастройкиВыгрузки.СписокКлиентов ТаблицаЗначений |
|||
|
3
Chameleon1980
25.09.25
✎
08:31
|
Список.загрузить
|
|||
|
4
Мультук
гуру
25.09.25
✎
08:32
|
(2)
Кэп имел в виду ПутьДляСохранения = НастройкиВыгрузки.ПапкаДляСохранения; СписокКлиентов.Загрузить(НастройкиВыгрузки.СписокКлиентов); |
|||
|
5
Chameleon1980
25.09.25
✎
08:33
|
(4) не вник в название метода :)
|
|||
|
6
lirt82
25.09.25
✎
12:21
|
(4) Ошибка при вызове метода контекста (Загрузить)
по причине: Несоответствие типов (параметр номер '1') |
|||
|
7
Волшебник
25.09.25
✎
12:29
|
СписокКлиентов.Загрузить(НастройкиВыгрузки.СписокКлиентов.Выгрузить());
|
|||
|
8
Мультук
гуру
25.09.25
✎
12:35
|
(7)
ТС утверждает что ТипЗнч(НастройкиВыгрузки.СписокКлиентов) = Таблица значений |
|||
|
9
Волшебник
25.09.25
✎
12:44
|
(8) это вряд ли... Как говорит Доктор Хаус, все врут.
|
|||
|
10
lirt82
25.09.25
✎
13:21
|
(7) Значение не является значением объектного типа (Выгрузить)
|
|||
|
11
Мультук
гуру
25.09.25
✎
13:35
|
(10)
1) Вы выгружаете из НастройкиВыгрузки.СписокКлиентов.Выгрузить() Но показываете не эту переменную, а вовсе другую 2) показываете вы СписокКлиентов (который Процедура ВосстановитьНастройкиВыгрузки(ПутьДляСохранения, СписокКлиентов) ) Эта переменная ожидаемо должна быть табличной частью, а у вас неопределено. Что вы собираетесь загрузить в неопределено я без понятия 3) Зачем нужно передавать туда (в ВосстановитьНастройкиВыгрузки) табличную часть я не знаю. Я бы просто вернул из ВосстановитьНастройкиВыгрузки(..) "НастройкиВыгрузки" и дальше в форме рассовал был всё по своим местам |
|||
|
12
Fish
гуру
25.09.25
✎
13:50
|
(2) "Хотя тип НастройкиВыгрузки.СписокКлиентов ТаблицаЗначений"
А на картинке (10) тип Неопределено. |
|||
|
13
Chameleon1980
25.09.25
✎
16:28
|
при сохранении
НастройкиВыгрузки.Вставить("СписокКлиентов", СписокКлиентов.Выгрузить()); |
|||
|
14
Chameleon1980
25.09.25
✎
16:29
|
расскоментируй тут
ОтчетОбъект.СохранитьНастройкиВыгрузки(Отчет.АдресДляВыгрузки, Отчет.СписокКлиентовДляВыгрузки); //.Выгрузить()); |
|||
|
15
Ivanich
26.09.25
✎
09:30
|
Делал так:
Сохранение: ТЧ -> ТЗ -> СтрокаВнутр -> Двоичн.данные -> ХранилищеЗначений -> Файл на диске &НаКлиенте Процедура Команда2_ЗаписатьФайл(Команда) //тчИД - табличная часть на форме обработки. Если Объект.тчИД.Количество()=0 Тогда ПоказатьПредупреждение(,"НЕ заполнена табл. часть! Нажмите [Подготовить]",5) Иначе Команда2_ЗаписатьФайлНаСервере(); ИмяФайла = "ID_TovarOzon.dat"; АдресФайлаДанныхВХранилище = Объект.АдресВремФайла; НачатьПолучениеФайлаССервера(АдресФайлаДанныхВХранилище, ИмяФайла,); //Файл на диске КонецЕсли; КонецПроцедуры &НаСервере Процедура Команда2_ЗаписатьФайлНаСервере() ОбъектОбр = РеквизитФормыВЗначение("Объект",); стрТаб = ЗначениеВСтрокуВнутр(ОбъектОбр.тчИД.Выгрузить()); //ТЧ -> ТЗ -> СтрокаВнутр стрТ64 = ПолучитьДвоичныеДанныеИзСтроки(стрТаб, "windows-1251"); //Двоичн.данные АдресФайлаДанных = ПоместитьВоВременноеХранилище(стрТ64, УникальныйИдентификатор); //ХранилищеЗначений ОбъектОбр.АдресВремФайла = АдресФайлаДанных; ЗначениеВРеквизитФормы(ОбъектОбр,"Объект"); КонецПроцедуры |
|||
|
16
Ivanich
26.09.25
✎
09:31
|
Восстанавливал в обратном порядке.
&НаКлиенте Процедура Команда3_ПрочитатьФайл(Команда) ОписаниеОповещения = Новый ОписаниеОповещения("ВыбратьФайлID_TovarOzon", ЭтотОбъект); НачатьПомещениеФайлаНаСервер(ОписаниеОповещения,,,,, УникальныйИдентификатор); //Файл на диске -> ХранилищеЗначений КонецПроцедуры &НаКлиенте Процедура ВыбратьФайлID_TovarOzon(Результат, ДополнительныеПараметры) Экспорт Если Результат = Неопределено Тогда Возврат; КонецЕсли; Команда3Х_ПрочитатьФайлНаСервере(Результат.Адрес); КонецПроцедуры &НаСервере Процедура Команда3Х_ПрочитатьФайлНаСервере(пИмяФайла) ПолученноеДвоичД = ПолучитьИзВременногоХранилища(пИмяФайла); //ХранилищеЗначений -> Двоичн.данные Строка64 = ПолучитьСтрокуИзДвоичныхДанных(ПолученноеДвоичД, "windows-1251"); //Двоичн.данные -> СтрокаВнутр ПолученноеЗначение = ЗначениеИзСтрокиВнутр(Строка64); //СтрокаВнутр -> ТЗ Если ТипЗнч(ПолученноеЗначение) = Тип("ТаблицаЗначений") Тогда // обработка значения ОбъектОбр = РеквизитФормыВЗначение("Объект",); ОбъектОбр.тчИД.Загрузить(ПолученноеЗначение); //ТЗ -> ТЧ ЗначениеВРеквизитФормы(ОбъектОбр,"Объект"); Иначе // Формат файла не опознан Сообщить("НЕизвестный тип значения в файле: "+пИмяФайла+", "+ТипЗнч(ПолученноеЗначение)); КонецЕсли; КонецПроцедуры |
|||
|
17
Ivanich
26.09.25
✎
09:37
|
У меня "затык" был в том, что не сразу сообразил: строка хранится в виде двоичных данных (в хранилище значений и, соответственно на диске). И при обратном преобразовании требуется сначала получить строку из двоичных данных
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |