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

07.02.18

Разработка - Инструментарий разработчика

Если вам необходимо реализовать обработку по вводу данных с сохранением в регистр сведений, табличную часть либо как нибудь еще обработать, причём: 1. Структура данных должна настраиваться, 2. Данные могут быть разными, и может меняться их состав, 3. Должна иметься возможность производить всеразличные отборы. 4. Данных относительно не много (соотношение КоличествоИзмененийФормы/Производительность склоняется на КоличествоИзмененийФормы). То, как вариант можно использовать всю мощь СКД. При этом будет реализована большая функциональность при малом количестве кода... Представленные обработки/шаблоны можно запускать в любой базе, где есть справочник Организации.

Скачать файл

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

Наименование По подписке [?] Купить один файл
Обработка ввода данных используя СКД
.epf 10,68Kb
29
29 Скачать (1 SM) Купить за 1 850 руб.
Обработка ввода данных используя сгенерированную СКД
.epf 24,98Kb
23
23 Скачать (1 SM) Купить за 1 850 руб.

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

Ограничения данного подхода:

1. Все измерения, по которым нужно получить значения должны быть выведены в группировках. Если вы не вынесли измерение в группировку, его значения как и его самого вы получить не сможете

2. Детальные записи использовать не получится, ни одного измерения вы не получите.

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

4. Я не советую использовать данный метод, если вам нужно пересчитывать суммы в иерархии при изменении суммы ячейки.

 

В данной публикации представлены 2 обработки шаблона.

Первая обработка самая простая, в ней 1 МакетСКД, в котором реализован простейший запрос и настройки для ознакомления. Макет можно с легкостью подправить и использовать уже свои настройки. Так же в ней реализован отбор. При изменении ячейки выводится сообщение, в котором есть все значения измерений, имя изменяемой колонки и её значение.

Вторая обработка генерирует Элементы формы и МакетСКД, но для демонстрации использования настроек компоновки, использует встроенный МакетСКД (кроме 3-ей вкладки). Данный шаблон можно использовать, если вам необходимо выводить данные для ввода пользователям с разными Макетами СКД (запросами, настройками...), при этом данные выводятся в разные вкладки. На каждую вкладку будет приходится свой Табличный документ, КомпроновщикНастроек, СхемаКомпоновкиДанных, Кнопки... В данной обработке реализован весь тот же функционал, что и в первой обработке + возможность редактировать структуру выводимых данных.

 

Версия платформы, на которой тестировались обработки: 8.3.10.2299.

СКД ТабличныйДокумент Обработка ЗначениеПоляРасшифровкиКомпоновкиДанных редактирование ячеек СКД ПоляРасшифровкиКомпоновкиДанных Редактирование СКД получение расшифровки

См. также

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

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

12000 руб.

02.09.2020    170018    939    403    

906

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Программист Руководитель проекта Платформа 1С v8.3 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку сразу нескольких баз данных и выполнять их автоматически без непосредственного участия пользователя. Решение в Реестре отечественного ПО

8400 руб.

20.08.2024    13086    100    46    

104

Инструментарий разработчика Программист Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Инструмент для написания и отладки кода в режиме «1С:Предприятие». Представляет собой консоль кода с возможностью пошаговой отладки, просмотра значений переменных любых типов, использования процедур и функций, просмотра стека вызовов, вычисления произвольных выражений на встроенном языке в контексте точки останова, синтаксического контроля и остановки по ошибке. В консоли используется удобный редактор кода с подсветкой, контекстной подсказкой, возможностью вызова конструкторов запроса и форматной строки.

9360 руб.

17.05.2024    26753    90    48    

134

Пакетная печать Печатные формы Инструментарий разработчика Программист Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

Инструмент, позволяющий абсолютно по-новому взглянуть на процесс разработки печатных форм. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и "прозрачность" разработки, а также навести порядок в многообразии корпоративных печатных форм.

22200 руб.

06.10.2023    16936    41    15    

75

SALE! %

Инструментарий разработчика Инструменты администратора БД Системный администратор Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

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

4800 3840 руб.

14.01.2013    190718    1151    0    

918

Инструменты администратора БД Инструментарий разработчика Роли и права Программист Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

15000 руб.

10.11.2023    11457    40    27    

66

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 1С:ERP Управление предприятием 2 Платные (руб)

Разработка Конструктор автоматизированных рабочих мест "Конструктор АРМ" реализована в виде расширения и является универсальным инструментом для создания АРМ любой сложности в пользовательском режиме.

3600 руб.

27.12.2024    935    2    0    

5

Инструментарий разработчика Программист Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    103998    244    100    

306
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. JaneP 14 13.07.18 20:50 Сейчас в теме
Огромное спасибо за публикацию и за большой объем сэкономленного времени.
2. Team leader 12 09.04.19 03:26 Сейчас в теме
Модуль первой простой обработки:
(выкладываю чтобы открыть на работе - СБ epf не пропускает):


#Область ИнициализацияСКД

&НаСервере
Процедура ПриОткрытииНаСервере()
	
	ЭтаОбработка = РеквизитФормыВЗначение("Объект");
	СхемаКомпоновкиДанных	= ЭтаОбработка.ПолучитьМакет("МакетСКД");
	СКДАдрес1 = ПоместитьВоВременноеХранилище(СхемаКомпоновкиДанных, УникальныйИдентификатор);
	
	КомпоновщикНастроек1.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СКДАдрес1));
	КомпоновщикНастроек1.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
	
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	ПриОткрытииНаСервере();
КонецПроцедуры

#КонецОбласти

#Область ОбщиеПроцедурыИФункции

&НаСервере
Процедура ИтеративноеПолучениеРасшифровки(ЭлементРасшифровки, ДанныеРасшифровки, СтруктураРасшифровки)
	
	Если ТипЗнч(ЭлементРасшифровки) = Тип("ЭлементРасшифровкиКомпоновкиДанныхГруппировка") Тогда
		
	ИначеЕсли ТипЗнч(ЭлементРасшифровки) = Тип("ЭлементРасшифровкиКомпоновкиДанныхПоля") Тогда
		
		ПоляРасшифровки = ЭлементРасшифровки.ПолучитьПоля();
		
		Для Каждого ПолеРасшифровки Из ПоляРасшифровки Цикл
			СтруктураРасшифровки.Вставить(ПолеРасшифровки.Поле, ПолеРасшифровки.Значение);
		КонецЦикла;
		
	КонецЕсли;
	
	ПоляРасшифровки = ЭлементРасшифровки.ПолучитьРодителей();
	
	Для Каждого ПолеРасшифровки Из ПоляРасшифровки Цикл
		ИтеративноеПолучениеРасшифровки(ПолеРасшифровки, ДанныеРасшифровки, СтруктураРасшифровки);
	КонецЦикла;
	
КонецПроцедуры

&НаСервере
Функция ПолучитьСтруктуруЗначенийРасшифровки(Расшифровка, ДанныеРасшифровки, СтруктураРасшифровки = Неопределено)
	
	Если СтруктураРасшифровки = Неопределено Тогда
		СтруктураРасшифровки = Новый Структура;
	КонецЕсли;
	
	ЭлементРКД = ДанныеРасшифровки.Элементы[Расшифровка];
	
	ИтеративноеПолучениеРасшифровки(ЭлементРКД, ДанныеРасшифровки, СтруктураРасшифровки);
	
	Возврат СтруктураРасшифровки;
	
КонецФункции

&НаСервере
Функция ПолучитьИмяИзменяемойКолонки(Расшифровка, ДанныеРасшифровки)
	
	ИмяКолонки = "";
	
	ЭлементРКД = ДанныеРасшифровки.Элементы[Расшифровка];
	
	Если ТипЗнч(ЭлементРКД) = Тип("ЭлементРасшифровкиКомпоновкиДанныхПоля") Тогда
		ПоляРасшифровки = ЭлементРКД.ПолучитьПоля();
		ИмяКолонки = ПоляРасшифровки[0].Поле;
	КонецЕсли;
	
	Возврат ИмяКолонки;
	
КонецФункции

#КонецОбласти

#Область ОбновлениеДанныхВТабличномДокументе

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

&НаСервере
Процедура ОбновитьНаСервере()
	ТабличныйДокумент1.Очистить();
	ОбновитьДанныеВТабличномДокументе(ТабличныйДокумент1, КомпоновщикНастроек1, СКДАдрес1, ДанныеРасшифровкиАдрес1);
КонецПроцедуры

&НаКлиенте
Процедура Обновить(Команда)
	ОбновитьНаСервере();
КонецПроцедуры

#КонецОбласти

#Область ИзменяемЯчейкуТабличногоДокумента

&НаСервере
Процедура ЗаписатьИзменения(Расшифровка, ДанныеРасшифровкиАдрес, НовоеЗначение)
	
	ДанныеРасшифровки		= ПолучитьИзВременногоХранилища(ДанныеРасшифровкиАдрес);
	СтруктураРасшифровки	= ПолучитьСтруктуруЗначенийРасшифровки(Расшифровка, ДанныеРасшифровки);
	ИмяРесурса				= ПолучитьИмяИзменяемойКолонки(Расшифровка, ДанныеРасшифровки);
	
	Текст = "Расшифровка -" + Строка(Расшифровка) + ": " + Символы.ПС;
	Для Каждого Эл Из СтруктураРасшифровки Цикл
		Текст = Текст + Эл.Ключ + "= " + Эл.Значение + " | " + Символы.ПС;
	КонецЦикла;
	Текст = Текст + ИмяРесурса + "= " + НовоеЗначение;
	Сообщить(Текст);
	
КонецПроцедуры

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

&НаКлиенте
Процедура ТабличныйДокумент1ПриИзменении(Элемент)
	ОбработатьИзменениеЯчейкиТабличногоДокумента(Элемент, ДанныеРасшифровкиАдрес1);
КонецПроцедуры

#КонецОбласти
Показать
Прикрепленные файлы:
Модуль 1й варианта обработки - фиксированной формы.txt
3. Team leader 12 09.04.19 03:28 Сейчас в теме
Оставьте свое сообщение