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

07.02.18

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

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

Файлы

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

Наименование Скачано Купить файл
Обработка ввода данных используя СКД
.epf 10,68Kb
30 2 500 руб. Купить
Обработка ввода данных используя сгенерированную СКД
.epf 24,98Kb
26 2 500 руб. Купить

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

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

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

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

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

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

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

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

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

 

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

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

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

 

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

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

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

См. также

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Программист Руководитель проекта 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

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

24900 руб.

20.08.2024    63788    334    162    

298

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

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

16500 руб.

02.09.2020    251681    1394    421    

1147

Инструментарий разработчика Нейросети Платные (руб)

Первые попытки разработки на 1С с использованием больших языковых моделей (LLM) могут разочаровать. LLMки сильно галлюцинируют, потому что не знают устройства конфигураций 1С, не знают нюансов синтаксиса. Но если дать им подсказки с помощью MCP, то результат получается кардинально лучше. Далее в публикации: MCP для поиска по метаданым 1С, справке синтакс-помошника и проверки синтаксиса.

15250 руб.

25.08.2025    48287    100    27    

113

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

Расширение для создания и редактирования печатных форм в системе 1С:Предприятие 8.3. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и прозрачность разработки, а также навести порядок в многообразии корпоративных печатных форм.

22570 руб.

06.10.2023    36600    96    40    

116

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

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

17000 руб.

10.11.2023    24343    92    42    

101

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

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

9500 руб.

17.05.2024    51250    181    63    

210

Мастера заполнения Поиск данных Инструментарий разработчика Подбор и обработка объектов 1С 8.3 1С 8.5 Платные (руб)

Infostart MagicInput улучшает подбор в полях ввода 1С: ищет по любой части названия и по нескольким ключевым фрагментам, распознаёт ввод в другой раскладке и показывает иконки/статусы объектов прямо в списке. Поддерживает вставку навигационной ссылки/представления документа для автоподбора; для разработчиков доступны поиск по GUID и полному имени предопределённого. Работает в управляемых формах и подключается в большинстве конфигураций 1С 8.3/8.5.

5000 руб.

25.02.2026    2604    10    1    

14
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. JaneP 17 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 Сейчас в теме
Спасибо пригодилось.
Для отправки сообщения требуется регистрация/авторизация