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





Если не ошибаюсь эта задача решаема через временное хранилище, вот например получение данных (присвоение делается в обратном порядке, под рукой примера сейчас нет, но тоже через АдресХранилища — ПоместитьВоВременноеХранилище):
Показать
Задача решаема через временное хранилище для реквизитов объекта
Показать
Для реквизита табличной части, по идеи, тоже должно быть так, но на самом деле после выхода из процедуры помещения в реквизит именно табличной части значение «ПрикрепленныйФайл» не сохраняется.
Показать
Брекпоинт перед записью на сервере:
А почему
1с v8.2.13
для других версий 8.2 и под 8.3 может не работать???
(3) yuraos,
Может, потому что год 2011?
Мне кажется, преемственность здесь будет соблюдаться..
не могу понять что Это СправочникОбъект.ПрикрепленныеФайлы
СправочникОбъект.ПрикрепленныеФайлы — Это табличная часть справочника?