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

11.03.22

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

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

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

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

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

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С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

12000 руб.

02.09.2020    102210    565    385    

613

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

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

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

05.12.2023    2260    ProgrammingStore    13    

49

Модель СКД

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

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

1 стартмани

15.11.2023    4181    10    kalyaka    4    

82

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

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

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

01.09.2023    3269    KVIKS    15    

76

Гибкие отборы через СКД на управляемых формах. Демо-обработка

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

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

2 стартмани

07.06.2023    4641    26    quazare    7    

46

Вывод элементов иерархии верхнего уровня на СКД

СКД Платформа 1С v8.3 Абонемент ($m)

Как получить родителя первого уровня иерархического справочника с помощью СКД.

1 стартмани

06.06.2023    4288    echo77    6    

72

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

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

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

07.02.2023    5594    quazare    8    

38
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. ovasiliev 6 12.03.22 12:32 Сейчас в теме
У отчетов есть одна непререкаемая фишка - их можно наделать для пользователей сколько угодно и каких угодно, не боясь, что они что-нибудь сломают, ибо отчёты - только для чтения данных...
Tatitutu; Jimbo; user1559729; +3 Ответить
4. sapervodichka 6602 14.03.22 15:50 Сейчас в теме
(1) это да, но не всегда, например регламентированные отчеты сохраняются в документ и редактирются. Или у меня например есть документ в который в табличный документ выводится результат произвольного отчета, а затем дозаполняется пользователем (с примерно таким же выбором значений из списка, либо произвольной установке текста или числа в ячейках содержащих значение. А затем табличный документ сохраняется в хранилище значений, утверждается и далее его данные выгружаются в общую Excel книгу отчетности. Т.е. как бы отчет скрестил с документом, и получил возможность записи скорректированных данных отчета
Прикрепленные файлы:
SagittariusA; user1433102; mrChOP93; Flashill; +4 Ответить
5. kser87 2403 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 4629 15.03.22 13:36 Сейчас в теме
(2) я три раза перечитал, прежде чем прийти к такому же выводу. Похоже на лютую дичь, да.
11. Flashill 982 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 982 16.03.22 12:00 Сейчас в теме
(3)
Как альтернативу можно использовать и типовую обработку "Изменить выделенные"

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

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

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

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

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

Чисто на расшифровке так-то да, легко.
13. rusrus 50 16.03.22 18:09 Сейчас в теме
Сначала получать объект, а потом думать будем его записывать или нет это немного не гуд. Хотя в таком случае получение через точку реквизита уже не выглядит сильно преступно.
14. rpgshnik 3545 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 набрала, не понимаю.
16. rpgshnik 3545 17.03.22 12:48 Сейчас в теме
(15) есть у некоторых решений и на управляемых формах, из чего помню сходу УАТ, но вызывает много проблем)
Но там редактирование идёт прямо в ТаблицеФормы, что вроде да и проще и ограничивает конечного пользователя от хулиганства)
17. Flashill 982 17.03.22 18:05 Сейчас в теме
(14)
заказчик хотел в одном окне изменять прямо интерактивно значения номенклатуры в виде плоской таблицы


Не угадали ) Задача для заказчика совсем другая и отчёт сложнее, но используется этот принцип изменения значений в ячейках отчёта СКД.
В статье показал как это можно сделать, а для примера взял справочник "Номенклатура" и парочку его реквизитов, чтобы не нагромождать статью нюансами конкретной реализации. Цель статьи - дать понять принцип, а усложнить каждый сам сможет по своей реализации.
EliasShy; +1 Ответить
19. Yashazz 4629 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". Надо уметь делать просто, а не нести чушь про расшифровки.
Оставьте свое сообщение