Расшифровка табличного документа, сформированного СКД

29.06.17

Разработка - СКД

Функция делает постобработку табличного документа, чтобы можно было открыть поля ссылочного типа, не имея данных расшифровки (например, после сохранения в mxl)

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Консоль отчетов СКД+
.erf 55,05Kb
11 3 000 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

При стандартном формировании отчета на СКД  в расшифровке хранится идентификатор расшифровки, при этом объекты ссылочного типа не открываются. Таким образом, если сохранить табличный документ в формате mxl, а затем его снова открыть, то при клике в ячейку открывается идентификатор расшифровки(просто число), а не сам объект, ссылка на который была сохранена

Чтобы победить эту проблему, необходимо заменить значение расшифровки в ячейках табличного документа просто на объекты ссылочного типа

Процедура ОбработатьРасшифровкиОтчетаНаСКД(ТабДок, ДанныеРасшифровки)
	
	Если ТабДок.ШиринаТаблицы * ТабДок.ВысотаТаблицы > 10000 Тогда
		Ответ = Вопрос("You are about to save document " + ТабДок.ШиринаТаблицы + " x " + ТабДок.ВысотаТаблицы + " in dimensions.
		|This will take at least " + Цел(ТабДок.ШиринаТаблицы * ТабДок.ВысотаТаблицы/700) + " sec. Are you sure?", РежимДиалогаВопрос.ДаНет,,, Метаданные().Синоним);
		Если Ответ = КодВозвратаДиалога.Нет Тогда
			Возврат
		КонецЕсли;
	КонецЕсли;
	
	Состояние("Окучиваем табличный документ...");
	ПрошлоВремени = ТекущаяДата();
	
	ТипВсеСсылкиСправочники = Справочники.ТипВсеСсылки();
	ТипВсеСсылкиДокументы = Документы.ТипВсеСсылки();
	
	КэшНужныхТипов = Новый Соответствие;
	Для Каждого Тип Из ТипВсеСсылкиСправочники.Типы() Цикл
		КэшНужныхТипов.Вставить(Тип, Истина);
	КонецЦикла;
	
	Для Каждого Тип Из ТипВсеСсылкиДокументы.Типы() Цикл
		КэшНужныхТипов.Вставить(Тип, Истина);
	КонецЦикла;
	
	Для Row = 1 По ТабДок.ВысотаТаблицы Цикл
		Для Col = 1 По ТабДок.ШиринаТаблицы Цикл
			
			Ячейка = ТабДок.Область(Row, Col);
			
			Если ТипЗнч(Ячейка.Расшифровка) <> Тип("ИдентификаторРасшифровкиКомпоновкиДанных") Тогда
				Продолжить;
			КонецЕсли;
			
			// Так же из данных расшифровки возьмем ссылку на номенклатуру
			//МассивПолейРасшифровки = ТиповыеОтчеты.ПолучитьМассивПолейРасшифровки(Ячейка.Расшифровка, ДанныеРасшифровки);
			ЭлементРасшифровки = ДанныеРасшифровкиКонсоли.Элементы[Ячейка.Расшифровка];
			Если ЭлементРасшифровки.ОсновноеДействие = ДействиеОбработкиРасшифровкиКомпоновкиДанных.ОткрытьЗначение Тогда
				МассивПолейРасшифровки = ЭлементРасшифровки.ПолучитьПоля();
				Для Каждого ЭлементМассива Из МассивПолейРасшифровки Цикл
					
					ТипЗначения = ТипЗнч(ЭлементМассива.Значение);
					
					Если ТипЗнч(ЭлементМассива) = Тип("ЗначениеПоляРасшифровкиКомпоновкиДанных")
						И (КэшНужныхТипов.Получить(ТипЗначения) = Истина)
						И	 ЭлементМассива.Иерархия = Ложь Тогда
						
						Ячейка.Расшифровка = ЭлементМассива.Значение;
						Прервать;
						
					КонецЕсли;
				КонецЦикла;
			КонецЕсли;
			
			ОбработкаПрерыванияПользователя();
			
		КонецЦикла;
	КонецЦикла;
	
	ПрошлоВремени = ТекущаяДата()-ПрошлоВремени;
	Сообщить("Затрачено времени на выполнение процесса: "+Формат('00010101'+ПрошлоВремени,"ДЛФ=T; ДП=0")+" сек");
	
КонецПроцедуры

После того как расшифровка табличного документа будет доработана, его можно будет сохранить в формате mxl и впоследствии открыть в этой же базе, при этом сохранится возможность открывать объекты ссылочного типа.

Про расшифровку табличного документа на сайте ИТС

В качестве примера доработанная Консоль отчетов СКД+ (обычное приложение).

Вступайте в нашу телеграмм-группу Инфостарт

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта 1С:Предприятие 8 Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

16500 руб.

02.09.2020    259282    1431    421    

1165

Инструментарий разработчика СКД Программист 1С 8.3 Бесплатно (free)

В этой статье представлен СКДБилдер — общий модуль-обёртка над объектной моделью СКД, который сокращает код в 3-4 раза и делает его читаемым.

29.01.2026    6923    360    shapa_pro    27    

69

СКД Программист 1С:Предприятие 8 Бесплатно (free)

Статья написана по результатам проведенного внутреннего обучающего вебинара для разработчиков ГК «СофтБаланс». Если осилить 25 000 знаков - задача для вас непосильная, где-то на бескрайних просторах интернета видео есть (или будет). Но здесь информация точнее. Разберем, чем запрос для СКД принципиально отличается от обычного запроса и как модифицируется в зависимости от настроек. Изучим «базовый рецепт» написания запроса для СКД, сформируем чек-лист. Полезно будет всем – от стажеров до тех. лидов. Всем, кто не снимает галку «автозаполнение» и пишет запросы для отчетов в консоли запросов – читать (вдумчиво) обязательно.

29.10.2025    19980    ovetgana    112    

114

СКД Программист 1С:Предприятие 8 Бесплатно (free)

Описан способ заполнения списка доступных значений для полей наборов данных и параметров в схеме компоновки данных для любых конфигураций (с использованием БСП или без).

01.07.2025    11509    krasnoshchekovpavel    7    

68

СКД Программист Стажер 1С:Предприятие 8 Россия Бесплатно (free)

Несколько способов управления формами выбора параметров и отборов СКД.

10.04.2025    11060    Neti    0    

41

СКД Программист 1С:Предприятие 8 Бесплатно (free)

Хорошая отчетная форма - сродни искусству. Есть какое-то невероятное эстетическое удовольствие в том, чтобы разобраться в логике учета и анализируемых показателях, спроектировать архитектуру хранения данных так, чтобы оптимально собрать эти показатели вместе с аналитическими разрезами в запросе, а затем настроить отображение так, чтобы, глядя на результат, сразу было понятно, что это за отчет и какие задачи он призван решать. Система компоновки данных - это моя первая, главная и, наверное, единственная "рабочая" любовь. Ее я использую везде, где только можно и где нельзя тоже. Хочу поделиться с вами некоторыми практическими приемами в работе с отчетами на СКД, которые, надеюсь, будут полезны.

27.02.2025    16836    ovetgana    50    

93

СКД Программист 1С:Предприятие 8 Бесплатно (free)

СКД – инструмент, на базе которого в современных конфигурациях реализованы практически все отчеты. СКД используется в динамических списках, печатных формах и универсальных механизмах. Если построить простейший отчет может каждый разработчик, то с нюансами знакомы далеко не все. Расскажем о неочевидных на первый взгляд приемах, способных значительно повысить качество отчетов.

24.12.2024    14555    Akcium    17    

46

СКД Механизмы типовых конфигураций Запросы Программист 1С:Предприятие 8 1С:Зарплата и кадры государственного учреждения 3 1С:Зарплата и Управление Персоналом 3.x Россия Бесплатно (free)

Работая с типовыми отчетами в конфигурациях «Зарплата и управление персоналом, редакция 3», «Зарплата и кадры государственного учреждения, редакция 3» и подобных, в схемах компоновки данных можно встретить конструкции запросов, которые обращаются к некоторым виртуальным таблицам.

20.08.2024    11493    AlexeyPROSTO_1C    1    

32
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. ixijixi 2150 29.06.17 10:57 Сейчас в теме
Тогда уж
Состояние("Spuding spreadsheet document...");
=)
А вообще, неплохо бы добавить очистку ячеек от элементов расшифровки типа ДействиеОбработкиРасшифровкиКомпоновкиДанных.Расшифровать и т.п.
2. SITR-utyos 1438 29.06.17 19:48 Сейчас в теме
(1) Дельная мысль, спасибо. Доработаем
3. Aurius 30.06.17 12:08 Сейчас в теме
Спасибо, интересно. Возьму на заметку.
4. chipolini 05.09.18 11:07 Сейчас в теме
Делал печатную форму документа используя СКД. Расшифровка выдавала цифры. Эта процедура решила проблему. Спасибо.
native-api; +1 Ответить
5. serpanik 03.12.19 15:21 Сейчас в теме
Именно этот вопрос сейчас и интересовал. Пытаюсь вернуть на мобильную платформу с помощью HTTP-сервиса табличный документ и вместо расшифровки были цифры. Спасибо автору.
Вот как бы вообще отключить в табличном документе все реакции, кроме как открытие/закрытие группировок? (СтандартнаяОбработка в Ложь изменял, не получилось добиться результата)
6. 028 09.12.20 15:11 Сейчас в теме
У меня ошибка Переменная не определена (ДанныеРасшифровкиКонсоли)
ЭлементРасшифровки = <<?>>ДанныеРасшифровкиКонсоли.Элементы[Ячейка.Расшифровка]; (Проверка: Толстый клиент (обычное приложение))
7. echo77 1938 09.12.20 15:15 Сейчас в теме
(6) Скачайте отчет - там нет ошибки :-)
Видимо, автор намеренно привнес ошибку в код, чтобы не копировали бездумно. Её легко исправить :-)
native-api; 028; +2 Ответить
8. 028 10.12.20 08:31 Сейчас в теме
(7) Спасибо уже исправил))
11. user1508952 04.05.23 14:38 Сейчас в теме
(6) Добрый день! А как все таки исправить данную ошибку?
9. folo 226 15.04.21 09:58 Сейчас в теме
Большое человеческое спасибо. Помогло даже через несколько лет
10. user1544628 22.06.21 11:29 Сейчас в теме
Большое спасибо. Мне тоже помогло через несколько лет.
12. native-api 30 24.03.25 16:37 Сейчас в теме
Убрал интерактивный код для пакетного использования, добавил удаление расшифровок СКД у полей нессылочных типов, для проверки на ссылку использую функцию БСП, которая поддерживает все типы ссылок, не только справочники и документы.

// Преобразовать в табличном документе данные расшифровки, сгенерированные СКД, в их реальные значения
// чтобы расшифровка работала без обработчика событий ОбработкаРасшифровки из ФормаОтчета БСП
//
// Параметры:
//  ТабличныйДокумент	 - ТабличныйДокумент
//  ДанныеРасшифровки	 - ДанныеРасшифровкиКомпоновкиДанных 
//
// На основе https://infostart.ru/1c/reports/639758/
Процедура ПреобразоватьРасшифровкуСКД(ТабличныйДокумент, ДанныеРасшифровки) Экспорт
	
	Перем НомерСтроки, НомерСтолбца, Ячейка, ЭлементРасшифровки, МассивПолейРасшифровки, ЭлементМассива;
	
	Для НомерСтроки = 1 По ТабличныйДокумент.ВысотаТаблицы Цикл
		Для НомерСтолбца = 1 По ТабличныйДокумент.ШиринаТаблицы Цикл
			Ячейка = ТабличныйДокумент.Область(НомерСтроки, НомерСтолбца);

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