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

07.02.18

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

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

Скачать файлы

Наименование Файл Версия Размер
Обработка ввода данных используя СКД
.epf 10,68Kb
29
.epf 10,68Kb 29 Скачать
Обработка ввода данных используя сгенерированную СКД
.epf 24,98Kb
23
.epf 24,98Kb 23 Скачать

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

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

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

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

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

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

 

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

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

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

 

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

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

См. также

SALE! 20%

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

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

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

13000 10400 руб.

02.09.2020    122177    670    389    

714

SALE! 25%

Infostart PrintWizard

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

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

18000 15300 руб.

06.10.2023    7297    21    6    

39

SALE! 20%

Infostart УДиФ: Управление данными и формами

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

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

10000 8000 руб.

10.11.2023    3544    11    1    

34

SALE! 30%

PowerTools

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

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

3600 2520 руб.

14.01.2013    177758    1073    0    

849

Многопоточность. Универсальный «Менеджер потоков» 2.1

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

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

5000 руб.

07.02.2018    99348    239    97    

296

[ЕХТ] Фреймворк для Расширений 1С

Инструментарий разработчика Платформа 1С v8.3 Управляемые формы Платные (руб)

"Фреймворк для Расширений 1С" это универсальное и многофункциональное решение, упрощающее разработку и поддержку создаваемых Расширений. Поставляется в виде комплекта из нескольких Расширений с открытым исходным кодом. Работает в любых Конфигурациях в режиме Управляемого приложения с режимом совместимости 8.3.12 и выше без необходимости внесения изменений в Конфигурацию.

3000 руб.

27.08.2019    18116    6    8    

39

1С HTML Шаблоны / HTML Templates

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

Быстрая и удобная обработка для работы с шаблонами HTML. Позволяет легко и быстро формировать код HTML.

2040 руб.

27.12.2017    28111    3    10    

15

Выполнение произвольного кода или запроса с параметрами через Web-сервис (замена COM-подключений)

Инструментарий разработчика Обмен между базами 1C Платформа 1С v8.3 Платные (руб)

В процессе работы в 1С часто возникает потребность получить данные из другой базы.  Обычно это делается через COM-соединение, и время выполнения запроса при этом оставляет желать лучшего. В данной публикации представлено универсальное решение, позволяющее практически моментально выполнить произвольный код или запрос с параметрами в другой информационной базе через Web-сервис.

2400 руб.

24.09.2019    23605    15    15    

32
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
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 Сейчас в теме
Оставьте свое сообщение