Задача:
При расшифровке ячейки в СКД выполнять некий код с использованием значений в других ячейках текущей строки и вывод результата в ту же ячейку.
Что нам для этого понадобится?
1. Закладка "Макет" СКД.
А именно возможность указать несколько значений в колонке "Имя поля" для расшифровки макета поля.
2. Форма.
Для использования обработчика "ОбработкаРасшифровки".
3. В обработке расшифровки пишем что-то вроде:
СтандартнаяОбработка = Ложь;
СтруктураДанныхДляПолучения = СтруктураДанныхДляПолучения(Расшифровка, ДанныеРасшифровки);
Если СтруктураДанныхДляПолучения = Неопределено Тогда
Возврат;
КонецЕсли;
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("Первый",СтруктураДанныхЗаказаПоставщику.Первый);
ПараметрыОтбора.Вставить("Второй",СтруктураДанныхЗаказаПоставщику.Второй);
ПараметрыЗакрытия = Новый Структура;
//Чтобы записать полученное значение текстом в ячейку после обработки
ПараметрыЗакрытия.Вставить("ТекущаяЯчейка", Элемент.ТекущаяОбласть.Имя);
ОповещениеПриЗакрытии = Новый ОписаниеОповещения("ПриЗакрытииСвоейФормы",ЭтотОбъект, ПараметрыЗакрытия);
ОткрытьФорму("Какая-то форма",ПараметрыОтбора,ЭтаФорма,,,,ОповещениеПриЗакрытии,РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
И серверные процедуры:
&НаСервере
Функция СтруктураДанныхДляПолучения(Расшифровка, ДанныеРасшифровки)
ДанныеРасшифровкиОбъект = ПолучитьИзВременногоХранилища(ДанныеРасшифровки);
Поля = ДанныеРасшифровкиОбъект.Элементы[Расшифровка].ПолучитьПоля();
Первый = Поля[0].Значение;
Второй = Поля[1].Значение;
Если НЕ(ЗначениеЗаполнено(Первый )) ИЛИ НЕ(ЗначениеЗаполнено(Второй)) Тогда
Возврат Неопределено;
КонецЕсли;
СтруктураВозврата = Новый Структура;
СтруктураВозврата.Вставить("Первый", Первый );
СтруктураВозврата.Вставить("Второй ", Второй );
Возврат СтруктураВозврата;
КонецФункции
И клиентскую:
&НаКлиенте
Процедура ПриЗакрытииСвоейФормы(РезультатЗакрытия, ДополнительныеПараметры) Экспорт
Если ТипЗнч(РезультатЗакрытия) = Тип("Структура") Тогда
УстановленноеЗначение = РезультатЗакрытия.УстановленноеЗначение;
АдресТекущейЯчейки = ДополнительныеПараметры.ТекущаяЯчейка;
Результат.Область(АдресТекущейЯчейки).Текст = УстановленноеЗначение;
КонецЕсли;
КонецПроцедуры
В итоге у нас в базе что-то произошло, а новое значение записалось в текущую ячейку.
Можно ли развить данный метод и заполнять данные сразу в нескольких выделенных ячейках?
Можно!
1. "ВыделенныеОбласти".Имя - получим диапазон выделенных ячеек
2. Возьмем из них идентификатор данных расшифровки.
3. Дальше развивать под техническое задание.