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

11.03.22

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

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

Скачать файл

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

Наименование По подписке [?] Купить один файл
Редактирование данных в ячейках СКД (простая реализация)
.erf 9,98Kb
13
13 Скачать (1 SM) Купить за 1 850 руб.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

См. также

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

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

10000 руб.

02.09.2020    152702    836    398    

846

Запросы СКД Программист Стажер Система компоновки данных Россия Бесплатно (free)

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

15.05.2024    7347    implecs_team    6    

46

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

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

3 стартмани

05.02.2024    6517    51    obmailok    21    

79

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

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

1 стартмани

31.01.2024    2999    3    Yashazz    0    

34

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

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

2 стартмани

11.12.2023    10355    23    John_d    25    

124

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

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

05.12.2023    7335    PROSTO-1C    14    

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

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

p.s. Безумству храбрых поём мы песню
22. sanek_gk 104 18.09.24 14:08 Сейчас в теме
(11)
элемент двойным кликом
- щёлкать в нужную ячейку на форме эл

а ещё избавляемся от контроля заполнения реквизитов ))
3. brunet 40 14.03.22 15:22 Сейчас в теме
Как альтернативу можно использовать и типовую обработку "Изменить выделенные"
12. Flashill 1006 16.03.22 12:00 Сейчас в теме
(3)
Как альтернативу можно использовать и типовую обработку "Изменить выделенные"

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

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

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

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

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

Чисто на расшифровке так-то да, легко.
23. sanek_gk 104 18.09.24 14:10 Сейчас в теме
(9) зачем эти извращения с напихиванием параметров в макет если проще прописать код получения элементов из стандартной расшифровки отчета СКД
24. qwinter 683 18.09.24 16:12 Сейчас в теме
13. rusrus 50 16.03.22 18:09 Сейчас в теме
Сначала получать объект, а потом думать будем его записывать или нет это немного не гуд. Хотя в таком случае получение через точку реквизита уже не выглядит сильно преступно.
14. rpgshnik 3785 17.03.22 10:57 Сейчас в теме
Инструмент интересный и я понимаю из чего родилась такая задача, заказчик хотел в одном окне изменять прямо интерактивно значения номенклатуры в виде плоской таблицы. Вполне жизненная задача, но полностью противоречит всей концепции интерфейса продуктов 1С (да там нужно нажать минимум пять добрых кликов!), по этому дальше заказчик захочет так менять и другие НСИ и Документы, балуете. Не стоит этого того, потом начинаются Инфостарта и нас заставят :)
15. dehro 7 17.03.22 12:43 Сейчас в теме
(14)
...в одном окне изменять прямо интерактивно значения ... в виде плоской таблицы...


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

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


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