Имя: Пароль:
1C
 
Расшифровка в СКД по номеру
0 Andrey07070707
 
18.05.10
10:23
добрый день, подскажите пожалуйста возможно ли сделать расшифровку в отчете без инициализаци и вывода отчета вручную? если да то как?
Есть простой линейный отчет, в нем используются номера документов а не ссылки. писать для него процедуру формирования откровенно лень, но есть желание иметь рашифровку.
1 Kashemir
 
18.05.10
10:36
Все можно - пример своей расшифровки:

Процедура РеестрОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
   // Вставить содержимое обработчика.
   
   Перем ВыполненноеДействие;
   
   ИсточникДоступныхНастроек = Новый ИсточникДоступныхНастроекКомпоновкиДанных(ПолучитьМакет("Реестр"));
   СтандартнаяОбработка = Ложь;
   ОбработкаРасшифровки = Новый ОбработкаРасшифровкиКомпоновкиДанных(ДанныеРасшифровки, ИсточникДоступныхНастроек);
   
   ДоступныеДействия = Новый Массив();
   
   ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.ОткрытьЗначение);
   //ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.Упорядочить);
   //ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.Расшифровать);
   
   СписокДействий = Новый СписокЗначений;
   
   //ИндексРасшифровки = Число(Расшифровка) + 1;
   //
   Массив = ДанныеРасшифровки.Элементы[Расшифровка].ПолучитьПоля();
   Для каждого Эл из Массив Цикл
       Если Эл.Поле = "СсылкаДокумент" Тогда
             СписокДействий.Добавить("ДобавитьВСписокНаПерезагрузку", "Добавить в список перезагрузки");
           
           // Пробуем проанализировать возможность удаления документа
           // получаем родительскую группировку
           МассивРодителей = ДанныеРасшифровки.Элементы[Расшифровка].ПолучитьРодителей();
           Если МассивРодителей.Количество() = 1 Тогда
               МассивПолейРодителя = ДанныеРасшифровки.Элементы[МассивРодителей[0].Идентификатор].ПолучитьПоля();
               Для каждого ЭлРод из МассивПолейРодителя Цикл
                   Если ЭлРод.Поле = "НомерКонтекста" Тогда
                       Если СокрЛП(ЭлРод.Значение) = "" Тогда
                           Если    Метаданные.НайтиПоТипу(ТипЗнч(Эл.Значение)) <> Неопределено и
                                   Метаданные.Документы.Содержит(Метаданные.НайтиПоТипу(ТипЗнч(Эл.Значение))) и
                                   Эл.Значение.Проведен Тогда
                                   
                                   СписокДействий.Добавить("УдалитьДокумент", "Пометить документ на удаление");
                                   Прервать;
                           КонецЕсли;
                       КОнецЕсли;
                   КонецЕсли;
               КонецЦикла;
           КонецЕсли;
           Прервать;
       КонецЕсли;
   КонецЦикла;

   

   //КонецЕсли;

   
   Настройки = ОбработкаРасшифровки.Выполнить(Расшифровка, ВыполненноеДействие, ДоступныеДействия, СписокДействий);
   
   Если ВыполненноеДействие = "ДобавитьВСписокНаПерезагрузку" Тогда
       Массив = ДанныеРасшифровки.Элементы[Расшифровка].ПолучитьПоля();
       Для каждого Эл из Массив Цикл
           Если Эл.Поле = "СсылкаДокумент" Тогда
               Если ЗначениеЗаполнено(Эл.Значение) Тогда
                   НоваяСтрока = ДокументыПерезагрузки.Добавить();
                   НоваяСтрока.Документ    = Эл.Значение;
                   НоваяСтрока.Выставлен    = Ложь;
               КонецЕсли;
           КонецЕсли;
       КонецЦикла;
   ИначеЕсли ВыполненноеДействие = "УдалитьДокумент" Тогда
       //НомерКонтекста Не заполнено И СсылкаДокумент.Проведен Равно "істина"            
       Если ЗначениеЗаполнено(Эл.Значение) Тогда
           // Переспросим на всякий случай
           Если Вопрос("Вы действительно хотите удалить документ " + Эл.Значение + " ?", РежимДиалогаВопрос.ДаНетОтмена, 30, КодВозвратаДиалога.Отмена) = КодВозвратаДиалога.Да Тогда
               // собственно пробуем удалить
               Объект = Эл.Значение.ПолучитьОбъект();
               Объект.ДополнительныеСвойства.Вставить("ПрограммноеИзменение", Истина);

               Объект.ПометкаУдаления = Истина;
               Попытка
                   Если Объект.Проведен Тогда
                       Объект.Записать(РежимЗаписиДокумента.ОтменаПроведения);
                   Иначе
                       Объект.Записать();
                   КонецЕсли;
                   Сообщить("Документ " + Объект + " помечен на удаление", СтатусСообщения.Информация);
               Исключение
                   Сообщить("Возникла ошибки при попытке установки пометки на удаление (" + ОписаниеОшибки() + ")", СтатусСообщения.Важное);
               КонецПопытки;
           КонецЕсли;
       КонецЕсли;
       
   КонецЕсли;
КонецПроцедуры
2 Defender aka LINN
 
18.05.10
10:38
Что мешает выводить ссылку, а в качества ее представления задать номер?
3 Andrey07070707
 
18.05.10
10:44
DEfender aka LINN, Снова Спасибо, Также сделал.
4 Andrey07070707
 
18.05.10
11:25
И еще один маленький вопросик. При использовании своего макета стандартная расшифровка не отрабатывает?
5 Andrey07070707
 
18.05.10
11:27
Вопрос отпал. нашел.