//////////////////////////////////////////////////////////////////////// /////////////////////// Обработчик событий на клиенте &НаКлиенте Процедура ПрикрепленныеФайлыПередУдалением(Элемент, Отказ) ТекущаяСтрока = Элементы.ПрикрепленныеФайлы.ТекущаяСтрока; ДанныеСтроки = Элементы.ПрикрепленныеФайлы.ДанныеСтроки(ТекущаяСтрока); УдалитьДанныеИзСоответствия(ДанныеСтроки.НомерСтроки); КонецПроцедуры //////////////////////////////////////////////////////////////////////// /////////////////////// Обработчик событий на сервере &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Хранилище = Новый ХранилищеЗначения(Новый Соответствие); Индекс = -1; Для Каждого Строка Из Объект.ПрикрепленныеФайлы Цикл Индекс = Макс(Индекс, Строка.ПолучитьИдентификатор()); КонецЦикла; КонецПроцедуры &НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) Соответствие = Хранилище.Получить(); Для Каждого Строка Из Объект.ПрикрепленныеФайлы Цикл ИндексТекущейСтроки = Строка.ПолучитьИдентификатор(); Если Не Соответствие[ИндексТекущейСтроки] = Неопределено Тогда // Записать файл ТекущийОбъект.ПрикрепленныеФайлы[Строка.НомерСтроки-1].Файл = Соответствие[ИндексТекущейСтроки]; // Удаление соответствия Соответствие.Удалить(ИндексТекущейСтроки); КонецЕсли; КонецЦикла; Хранилище = Новый ХранилищеЗначения(Соответствие); КонецПроцедуры //////////////////////////////////////////////////////////////////////// /////////////////////// Серверные процедуры и функции &НаСервере Процедура ПоместитьФайлыИзВременногоХранилищаВТЗ(МассивФайлов) СправочникОбъект = РеквизитФормыВЗначение("Объект"); // ... тело модуля Индекс = Индекс + 1; НоваяСтрокаВложения = СправочникОбъект.ПрикрепленныеФайлы.Добавить(); Соответствие = Хранилище.Получить(); Соответствие.Вставить(Индекс, Новый ХранилищеЗначения(Файл)); Хранилище = Новый ХранилищеЗначения(Соответствие); ЗначениеВРеквизитФормы(СправочникОбъект, "Объект"); КонецПроцедуры &НаСервере Процедура УдалитьДанныеИзСоответствия(ТекущаяСтрока); ИндексТекущейСтроки = Объект.ПрикрепленныеФайлы[ТекущаяСтрока-1].ПолучитьИдентификатор(); Соответствие = Хранилище.Получить(); Соответствие.Удалить(ИндексТекущейСтроки); Хранилище = Новый ХранилищеЗначения(Соответствие); КонецПроцедуры
суббота, 16 апреля 2011 г.
1с v8.2 ХранилищеЗначений в Табличной части объекта
В табличных частях объектов 8.2 имеется возможность создавать реквизиты типа ХранилищеЗначений но сохранеие этих реквизитов в тонком клиенте отрабатывается некорректно, разве что каждый раз после присваивания вызывать метод записи объекта Записать(), что не очень то удобно использовать каждый раз при изменении отдельной строки. Для корректной работы с реквизитами такого типа предлагаю сохранять значения в соответствия, которое в свой черед помещается в реквизит формы типа ХранилищеЗначения. Ключем соответствия является идентификатор строки табличной части.
Переменная не определена (Хранилище) Соответствие = <>Хранилище.Получить(); Скажите а хранилище это что за объект?
ОтветитьУдалить