Редактирование данных в ячейках СКД (простая реализация)

11.03.22

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

На примере справочника "Номенклатура" рассмотрим, как в отчёте можно редактировать его реквизиты, и изменения мгновенно будут записываться в элемент справочника.

Скачать исходный код

Наименование Файл Версия Размер
Редактирование данных в ячейках СКД (простая реализация)
.erf 9,98Kb
12
.erf 1.0.0 9,98Kb 12 Скачать

Можете скачать обработку, либо реализовать её самостоятельно по следующей инструкции.

1. В конфигураторе создаем внешний отчёт

2. В отчёте создаем схему компоновки данных, добавляем набор данных "Запрос" с текстом:

ВЫБРАТЬ ПЕРВЫЕ 1000
	Номенклатура.Ссылка КАК Ссылка,
	Номенклатура.Артикул КАК Артикул,
	Номенклатура.ВидНоменклатуры КАК ВидНоменклатуры,
	Номенклатура.Производитель КАК Производитель
ИЗ
	Справочник.Номенклатура КАК Номенклатура
ГДЕ
	НЕ Номенклатура.ПометкаУдаления
	И НЕ Номенклатура.ЭтоГруппа

3. В СКД на последней вкладке добавляем "Детальные записи", выбираем все колонки запроса в последовательности: Ссылка, Артикул, ВидНоменклатуры, Производитель

4. В модуле объекта прописываем код:

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

&НаСервере
Функция ПолучитьВсеЗначенияРасшифровки(Данные)

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

5. Создаем форму отчёта, в модуле формы прописываем код:

&НаКлиенте
Процедура РезультатПриИзменении(Элемент)
	ИзменитьДанныеНоменклатуры();
КонецПроцедуры

&НаСервере
Процедура ИзменитьДанныеНоменклатуры()
	
	НомерСтроки = Элементы.Результат.ТекущаяОбласть.Верх;
	НомерКолонки = Элементы.Результат.ТекущаяОбласть.Лево;
	
	СоответствиеКолонок = Новый Соответствие;
	СоответствиеКолонок.Вставить(2, "Артикул");
	СоответствиеКолонок.Вставить(3, "ВидНоменклатуры");
	СоответствиеКолонок.Вставить(4, "Производитель");
	
	НовоеЗначение = Результат.ПолучитьОбласть(НомерСтроки, НомерКолонки).ТекущаяОбласть.Значение;
	
	Номенклатура = ПолучитьНоменклатуру();
	НоменклатураОбъект = Номенклатура.ПолучитьОбъект();
	ЕстьИзменения = Ложь;
	
	ИмяПоля = СоответствиеКолонок[НомерКолонки];
	
	Если НоменклатураОбъект[ИмяПоля] <> НовоеЗначение Тогда
		НоменклатураОбъект[ИмяПоля] = НовоеЗначение;
		ЕстьИзменения = Истина;
	КонецЕсли; 
	
	Если ЕстьИзменения Тогда
		Попытка
			НоменклатураОбъект.Записать();
		Исключение
			Сообщение = Новый СообщениеПользователю;
			Сообщение.Текст = ОписаниеОшибки();
			Сообщение.Сообщить(); 
		КонецПопытки;
	КонецЕсли; 
	
КонецПроцедуры

&НаСервере
Функция ПолучитьНоменклатуру()
	
	Номенклатура = Неопределено;
	НомерСтроки = Элементы.Результат.ТекущаяОбласть.Верх;
	Область = Результат.ПолучитьОбласть(НомерСтроки, 0);
	ТекОбласть = Область.ТекущаяОбласть;
	
	Если ТекОбласть.СодержитЗначение Тогда
		Номенклатура = ТекОбласть.Значение;
	КонецЕсли;
	
	Возврат Номенклатура;
	
КонецФункции

6. Привязываем событие "ПриИзменении" поля "Результат" формы к добавленной в модуль формы процедуре "РезультатПриИзменении"

7. Запускаем отчёт в режиме 1С Предприятие и проверяем его работу.

Обратите внимание в коде на переменные "ИзменяемыеПоля" и "СоответствиеКолонок", они определяют какие колонки будут редактироваться.

Тестировал на платформе 8.3.20.1710.

редактирование данные отчет СКД изменение реквизит ячейка

См. также

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

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

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

10000 руб.

02.09.2020    124974    683    389    

732

Генератор схемы компоновки данных (СКД), написание кода схемы программно

Инструментарий разработчика СКД Платформа 1С v8.3 Конфигурации 1cv8 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

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

3 стартмани

05.02.2024    4376    31    obmailok    19    

69

Набор-объект для СКД по тексту или запросу

Запросы СКД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Есть список полей в виде текста, или запрос - закидываем в набор СКД.

1 стартмани

31.01.2024    2149    2    Yashazz    0    

31

СКД на JavaScript в 1С

СКД WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Долгое время поддерживаю web-портал, в котором появилась необходимость создавать отчеты. Просмотрев различные фреймворки на js, я решил сделать свое решение, которое позволяло бы быстро разрабатывать и добавлять новые отчеты на web-портал.

2 стартмани

11.12.2023    8381    20    John_d    25    

123

Использование менеджера временных таблиц в СКД

СКД Платформа 1С v8.3 Система компоновки данных Конфигурации 1cv8 Бесплатно (free)

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

05.12.2023    4932    PROSTO-1C    13    

63

Модель СКД

Инструментарий разработчика СКД Платформа 1С v8.3 Система компоновки данных Абонемент ($m)

DSL для работы с СКД.

1 стартмани

15.11.2023    6014    15    kalyaka    5    

87

Пользовательские настройки отчетов 1С. Часть 1. Простые и расширенные настройки

СКД Инструкции пользователю Платформа 1С v8.3 Конфигурации 1cv8 1С:Бухгалтерия 3.0 Россия Бесплатно (free)

Простые приемы работы с отчетами на СКД. Что нужно знать пользователю про настройку отчетов, чтобы использовать их на полную катушку.

18.09.2023    7363    accounting_cons    7    

29

Разрыв страницы в СКД. Легко!

СКД Платформа 1С v8.3 Система компоновки данных Бесплатно (free)

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

01.09.2023    4771    KVIKS    15    

80
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. ovasiliev 6 12.03.22 12:32 Сейчас в теме
У отчетов есть одна непререкаемая фишка - их можно наделать для пользователей сколько угодно и каких угодно, не боясь, что они что-нибудь сломают, ибо отчёты - только для чтения данных...
Tatitutu; Jimbo; user1559729; +3
4. sapervodichka 6799 14.03.22 15:50 Сейчас в теме
(1) это да, но не всегда, например регламентированные отчеты сохраняются в документ и редактирются. Или у меня например есть документ в который в табличный документ выводится результат произвольного отчета, а затем дозаполняется пользователем (с примерно таким же выбором значений из списка, либо произвольной установке текста или числа в ячейках содержащих значение. А затем табличный документ сохраняется в хранилище значений, утверждается и далее его данные выгружаются в общую Excel книгу отчетности. Т.е. как бы отчет скрестил с документом, и получил возможность записи скорректированных данных отчета
Прикрепленные файлы:
SagittariusA; user1433102; mrChOP93; Flashill; +4
5. kser87 2441 14.03.22 16:16 Сейчас в теме
(1) у СКД гораздо больше вариантов применения, чем просто отчеты. А на введении данных в ячейки табличного документа построено бюджетирование в ERP, например.
A7758735; mrChOP93; Flashill; maraty; +4
2. Jimbo 9 14.03.22 14:54 Сейчас в теме
Лютая дичь, то есть расшифровка по ссылке с открытием элемента справочника с формой элемента уже (не кошерно) не устраивает ?
zqzq; qwinter; dehro; +3 3
7. Yashazz 4723 15.03.22 13:36 Сейчас в теме
(2) я три раза перечитал, прежде чем прийти к такому же выводу. Похоже на лютую дичь, да.
qwinter; +1 1
11. Flashill 994 16.03.22 11:55 Сейчас в теме
(2)
расшифровка по ссылке с открытием элемента справочника с формой

В этой реализации мы избавляемся от необходимости:
- открывать элемент двойным кликом
- щёлкать в нужную ячейку на форме элемента
- нажимать "Записать и закрыть" на открытой форме элемента
SagittariusA; marku; mrChOP93; rpgshnik; +4
18. Jimbo 9 18.03.22 12:54 Сейчас в теме
(11) открывая элемент и нажимая кнопку сохранить юзер хотя бы понимает , что он делает, а не случайно букву зацепил или мышкой смахнул.

p.s. Безумству храбрых поём мы песню
+
3. brunet 39 14.03.22 15:22 Сейчас в теме
Как альтернативу можно использовать и типовую обработку "Изменить выделенные"
+
12. Flashill 994 16.03.22 12:00 Сейчас в теме
(3)
Как альтернативу можно использовать и типовую обработку "Изменить выделенные"

Обработка "Изменить выделенные" работает по-другому. Она - инструмент чтобы на много элементов установить одинаковые значения. Статья же о том как по-простому добавить в отчёт возможность изменять значения единичных элементов.
+
6. dehro 5 14.03.22 16:22 Сейчас в теме
Идея выглядит красиво.

К сожалению, практического смысла не вижу: в динамическом списке справочника номенклатуры можно указать любой порядок колонок, а редактировать открывая карточки. Если нужно отредактировать группу элементов: есть "Групповое изменение реквизитов".

Реализация тоже слабая: это же СКД, пользователь может менять настройки - удалил или переместил колонку ссылка - номенклатура не найдена)) Иногда, конечно, бывают дырки, через которые пользователь может "перехитрить" программиста. А тут всё одна большая дыра)) Чтобы заткнуть нужно от всех плюшек СКД отказываться.

Собственно статья про то, как получить значение из ячейки табличного документа
mrChOP93; zqzq; rozer; Yashazz; +4
8. Yashazz 4723 15.03.22 13:37 Сейчас в теме
(6) Целиком согласен. Но, раз плюсят, значит, видимо, не задумываются о последствиях.

На самом деле можно было бы сделать гораздо надёжнее и почти независимо от изменений настроек СКД. Но, увы, чуда не произошло, и мы имеем очередной чудовищный кривой примитив, вышедший в топ ИС.
lunjio; EMelihoff; dehro; +3 1
9. qwinter 671 15.03.22 15:08 Сейчас в теме
(8) А почему почти? Можно и полностью независимую от настроек СКД сделать, достаточно вспомнить про возможность в расшифровку передавать массив значений. Код конечно не выдерживает никакой критики, работа с расшифровкой за гранью добра и зла.
dehro; +1
10. Yashazz 4723 15.03.22 18:21 Сейчас в теме
(9) Я в смысле именно сделать ячейки для ввода значений - это можно сделать, если поиграть с макетами таб.документа на этапе работы с макетом компоновки, после его сборки, но там есть подводные камни. Я, честно сказать, сперва подумал, публикация именно об этом, а не вот это вот ниже плинтуса...

Чисто на расшифровке так-то да, легко.
13. rusrus 50 16.03.22 18:09 Сейчас в теме
Сначала получать объект, а потом думать будем его записывать или нет это немного не гуд. Хотя в таком случае получение через точку реквизита уже не выглядит сильно преступно.
+
14. rpgshnik 3645 17.03.22 10:57 Сейчас в теме
Инструмент интересный и я понимаю из чего родилась такая задача, заказчик хотел в одном окне изменять прямо интерактивно значения номенклатуры в виде плоской таблицы. Вполне жизненная задача, но полностью противоречит всей концепции интерфейса продуктов 1С (да там нужно нажать минимум пять добрых кликов!), по этому дальше заказчик захочет так менять и другие НСИ и Документы, балуете. Не стоит этого того, потом начинаются Инфостарта и нас заставят :)
+
15. dehro 5 17.03.22 12:43 Сейчас в теме
(14)
...в одном окне изменять прямо интерактивно значения ... в виде плоской таблицы...


Было же в обычных формах: "Редактировать в списке/диалоге". https://its.1c.ru/db/metod8dev/content/2802/hdoc?
Смысл есть, иногда может и удобно.

Реализация ужасная. Как +28 набрала, не понимаю.
Jimbo; +1
16. rpgshnik 3645 17.03.22 12:48 Сейчас в теме
(15) есть у некоторых решений и на управляемых формах, из чего помню сходу УАТ, но вызывает много проблем)
Но там редактирование идёт прямо в ТаблицеФормы, что вроде да и проще и ограничивает конечного пользователя от хулиганства)
+
17. Flashill 994 17.03.22 18:05 Сейчас в теме
(14)
заказчик хотел в одном окне изменять прямо интерактивно значения номенклатуры в виде плоской таблицы


Не угадали ) Задача для заказчика совсем другая и отчёт сложнее, но используется этот принцип изменения значений в ячейках отчёта СКД.
В статье показал как это можно сделать, а для примера взял справочник "Номенклатура" и парочку его реквизитов, чтобы не нагромождать статью нюансами конкретной реализации. Цель статьи - дать понять принцип, а усложнить каждый сам сможет по своей реализации.
EliasShy; +1
19. Yashazz 4723 24.03.22 18:14 Сейчас в теме
Совершенно не понимаю, почему столь откровенная кривизна и жуть набрала больше, чем нормальные реализации. Смотрите и учитесь: https://infostart.ru/1c/articles/1307527/

Принцип-то откровенно лажовый... Ну ничего, нам за вами исправлять потом будет работа и денежка)
20. stepka1206 23.03.23 15:19 Сейчас в теме
Огромнейшее спасибо за статью.
Бала задача проставлять дату получения документа + установка в документ ответственного кто установил эту дату из отчета.

в отчет к сожалению не получилось "вписать" текущего пользователя в области он появляется (Значение и текст) и в расшифровку прописывается, но визуально не отображается, приходится переформировать отчет.

Так же следует использовать обработчик ПриИзмененииСодержимогоОбласти

если растянуть колонку отчета сработает обработчик ПриИзменении
+
21. yuha33 12.10.23 17:25 Сейчас в теме
Дичь, дичь. Если бы пробовали вводить большой массив данных, что бы видеть предыдущие и будущие, то не говорили бы так. Пользователи пищат от удовольствия при вводе данных "как в Excel". Надо уметь делать просто, а не нести чушь про расшифровки.
+
Оставьте свое сообщение