![]() |
![]() |
![]() |
|
Как сохранить таб. часть в настройках отчета? | ☑ | ||
---|---|---|---|---|
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
|
У меня "затык" был в том, что не сразу сообразил: строка хранится в виде двоичных данных (в хранилище значений и, соответственно на диске). И при обратном преобразовании требуется сначала получить строку из двоичных данных
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |