gifts2017

Редактирование данных прямо в отчете СКД (как в Excel). Теперь с пересчетом итогов!

Опубликовал Михаил Кащенко (Visitizer) в раздел Программирование - Практика программирования

Вам не подходит обычная форма ввода данных
Клиент хочет прямо в отчете изменять цифры
Тогда этот шаблон поможет вам быстро добавить в ваш отчет СКД механизм редактирования данных

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

Во вложении конфигурация с демо данными  и отчетом "Планирование затрат"

Я смоделировал пример - необходимо планировать затраты по подразделениям

Все описание работы механизма в видеопрезентации. Теперь работает пересчет итогов по группировкам!

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

Наименование Файл Версия Размер Кол. Скачив.
Шаблон конфигурации с отчетом
.dt 36,16Kb
07.12.12
389
.dt 36,16Kb 389 Скачать
Видео презентация механизма редактирования ячеек СКД
.mp4 15,79Mb
21.11.12
36
.mp4 15,79Mb 36 Скачать

См. также

Вознаграждение за ответ
Сумма: 0 $m
Добавили:
kanat1 (kanat1) (1.00 $m)
Подписаться Добавить вознаграждение

Комментарии

1. Konstantin Konstantin (KonstB) 21.11.12 15:36
Т.е. Итоги сами пересчитываются?
2. Михаил Кащенко (Visitizer) 21.11.12 16:23
Нет, итоги сейчас не пересчитываются автоматом
только при повторном обновлении отчета после внесения данных
3. Михаил Кащенко (Visitizer) 21.11.12 18:30
(1) KonstB, если отчет небольшой, то после каждого внесения данных можно вызвать повторное формирование отчета
4. Николай Николай (Николай) 22.11.12 09:27
Еще можно обойтись без регистров:

СохранитьЗначение("Значение и Номер Ячейки и Имя Пользователя и Вариант отчета", ТабличаЗначенийОтчета);
ТабличаЗначенийОтчета = ВосстановитьЗначение("Значение и Номер Ячейки и Имя Пользователя и Вариант отчета");

Обрабатывать Таблицу Значений Отчета, а при окончании расшифровки заменять значения ячейк в отчете.
5. Александр Чемезов (chemezov) 22.11.12 09:39
всмысле как макет чтоли?
6. Кирилл (kiros) 22.11.12 10:28
За идею "+", но универсальность здесь, именно идеи, применение на практике геморно, но идея очень интересна.
7. Михаил Кащенко (Visitizer) 22.11.12 11:38
(6) kiros, Не согласен - вполне универсально
я применил к разным задачам
копи пасте и замена имен переменных
на то он и шаблон
8. Михаил Кащенко (Visitizer) 22.11.12 11:39
(4) Николай, Можно и без регистра - можно и в таблицу и в массив, и куда угодно - это же пример
9. Юрий Зайцев (Yury1001) 22.11.12 17:29
10. Борис Скворцов (gaglo) 23.11.12 09:42
Все описание работы механизма в видеопрезентации

Однако сижу на работе, не могу открыть видео... Хоть бы пояснение в пару фраз могли бы в статье и поместить. А то "редактирование как в Excel" - слишком расплывчато. Могу только строить домыслы. Например:
"Имеется отчет, построенный по регистру. К нему предлагается механизм, позволяющий набрать прямо в ячейках новые значения реквизитов, а затем сохранить их в записи регистра."
Ну вот насколько я угадал?
11. Михаил Кащенко (Visitizer) 23.11.12 11:18
(10) gaglo, А вот мне чтобы мануал написать - так надо было бы в 3 раза больше времени потратить, а так - дома посмотришь :)
12. г. Казань Рустем Гумеров (Rustig) 23.11.12 20:44
Супер! Интересно как реализованы регламентированные отчеты в бухгалтерии 2.0? Ведь в них тоже можно редактировать данные в ячейках.
13. адуырщдв (адуырщдв) 24.11.12 23:13
Хорошая идея однозначно +
14. Евгений Рачковский (eugen91) 25.11.12 01:31
Хорошая разработка) Респект
15. Максим Евсенкин (tehas) 26.11.12 09:53
16. А Р (p1l1gr1m) 26.11.12 22:31
Хорошая идея, стоит отметить как ужасно неудобно реализован в скд механизм расшифровок и сколько действий нужно совершить чтобы сделать банальны вещи.
17. KV1s (KroVladS) 28.11.12 09:16
Плюс за идею.

Использовал несколько иной механизм, в расшифровку засовывал открытие формы для редактирования (выбор из списка и комментарий) из которой и вносил изменения в регистр по которому строился отчёт, после записи отчёт переформировывал.

Хотелось бы всё таки чтобы менялись итоги без переформирования отчёта.
18. Mottor (svcoopers) 28.11.12 13:23
19. Михаил Кащенко (Visitizer) 04.12.12 14:59
(17) KV1s,
Использовал несколько иной механизм, в расшифровку засовывал открытие формы для редактирования (выбор из списка и комментарий) из которой и вносил изменения в регистр по которому строился отчёт, после записи отчёт переформировывал.

Хотелось бы всё таки чтобы менялись итоги без переформирования отчёта.

Эта задача совсем другого порядка - ее можно решить, но это уже другие трудозатраты
20. Михаил Кащенко (Visitizer) 07.12.12 12:48
ГОСПОДА, Теперь работает пересчет итогов!
Правда не совсем мега супер универсально, но в 90% случаях подойдет
В модуле формы добавил рекурсивную процедуру ПересчетИтоговВТаблице
valarrus1234; BoBaH; DmitriyDI; KroVladS; Odinas; +5 Ответить
21. EfiopReal (Созинов) 13.12.12 20:56
Спасибо - просто отличная вещь. Сейчас глядя на свое решение даже немного стыдно :-( Воспользуюсь вашей идеей, чтобы переписать свой код.
22. Александр Федоров (Sasha255n) 18.12.12 14:03
Да от себя должен отметить что и идея достаточно свежая и оригинальая От меня атору большое спасибо
23. krein (krein) 12.01.13 19:58
Идея не новая, но реализация гораздо лучше, чем у меня получилось сделать в свое время
Чаще всего используется для планирования и тут же оперативного просмотра, что и видно на скриншотах
24. KV1s (KroVladS) 12.02.13 19:29
Попробовал на реальной задаче 20 столбцов, 500+ строк(с группировками) после формирования отчёта ТЧ для расчёта итогов заполняется 4 минуты, сам отчёт формируется 10 сек.
надо оптимизировать.
25. KV1s (KroVladS) 12.02.13 19:32
90% времени зависает вот тут:
ОбработкаРасшифровки = Новый ОбработкаРасшифровкиКомпоновкиДанных(ДанныеРасшифровки, Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));	
РезультатРасшифровки = ОбработкаРасшифровки.Расшифровать(Расшифровка, новый полеКомпоновкиДанных(ПолеРасшифровки));
26. Михаил Кащенко (Visitizer) 12.02.13 19:33
это жесть - зачем такой большой файл, что же вы будете там смотреть 500 * 20 = 10 тыс. ячеек(24) KV1s,
и что - будут редактировать 10 тыс. ячеек?
я вообще не понимаю зачем пользовователям такие большие простыни
27. KV1s (KroVladS) 12.02.13 19:55
(26) Visitizer,
в данный момент их заполняют в экселе, хотели перенести в 1с чтобы у пользователя интерфейс был похож на эксель.
Заполняется не каждая ячейка (в строках номенклатура), но отображаться должны все.
28. Евгений Васильев (avtomatchik) 31.05.13 01:52
а как редактировать в обычных формах, неуправляемых? не пересчитываются итоги(
29. Евгений Васильев (avtomatchik) 31.05.13 03:21
разобрался, спасибо за отчет= )
30. Юрий П (nano1c) 21.08.13 10:40
Господа, а почему у меня в веб-клиенте редактируемое поле смещено? А в тонком - все нормально!
31. alegshzhkka (Odinas) 11.10.13 15:36
Отличная идея, для моей ситуации экономит массу времени и сил! Спасибо за разработку, как будут стартмани, обязательно скачаю.
32. alegshzhkka (Odinas) 16.10.13 16:13
Наконец скачал отчет, появился небольшой вопрос.
В своем отчете не использую группировки, возможно ли как то "отловить" содержимое ячейки, относительно выделенной изменяемой области? (Вместо статей затрат у меня колонка с номенклатурой, в конечном итоге в регистр сведений нужно писать Номенклатуру+ Значение выделенной ячейки)
33. alegshzhkka (Odinas) 17.10.13 12:04
Все, разобрался, еще раз спасибо за разработку.
34. Lena Lesnik (lelusha) 06.02.14 22:13
Хорошая идея, экономит кучу времени. но доработка очевидна нужна.
Спасибо разработчику.
35. Дмитрий Дорин (DmitriyDI) 12.05.14 14:46
идея класс!!! пошел разбираться)!

Спасибо Вам большое замечательный отчет.
36. Дмитрий Дорин (DmitriyDI) 13.05.14 15:27
Один вопрос, пытаюсь сделать, чтобы при редактировании ячейки пересчитывались значения в соседнем столбце по формуле РедактируемаяЯчейка*СоседнююЯчейку, что-то не могу понять как это сделать пытаюсь смещать тут


ЭлементыФормы.Результат.Область(текСтрокаСвязи.Ряд, текСтрокаСвязи.Колонка+1, текСтрокаСвязи.Ряд, текСтрокаСвязи.Колонка+1), 


но не получается, пишет что значение недоступно для чтения.

Есть какие-нибудь идеи как это реализовать?
37. Дмитрий Дорин (DmitriyDI) 13.05.14 16:59
(36) DmitriyDI, вроде получилось сделать!
38. Дмитрий Дорин (DmitriyDI) 14.05.14 11:22
(25) KV1s, да согласен, а если данных еще больше, то по часу заполняется идеи по оптимизации, есть какие-нибудь?
39. Дмитрий Дорин (DmitriyDI) 14.05.14 11:35
(38) DmitriyDI,
Функция ПолучитьЗначенияГруппировокОтчета(знач ДанныеРасшифровки, Расшифровка, ПолеРасшифровки, ЗначенияГруппировок,ОбработкаРасшифровки)
	
	//ОбработкаРасшифровки = Новый ОбработкаРасшифровкиКомпоновкиДанных(ДанныеРасшифровки, Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
	
	РезультатРасшифровки = ОбработкаРасшифровки.Расшифровать(Расшифровка, новый полеКомпоновкиДанных(ПолеРасшифровки));
	
	для каждого текСтрокаОтбора из РезультатРасшифровки.Отбор.Элементы цикл
		для каждого текГруппировка из ЗначенияГруппировок цикл
			если текСтрокаОтбора.ЛевоеЗначение = новый ПолеКомпоновкиДанных(текГруппировка.Ключ) и текСтрокаОтбора.Использование=Истина Тогда
				ЗначенияГруппировок[текГруппировка.Ключ] = текСтрокаОтбора.ПравоеЗначение;
			КонецЕсли;
		КонецЦикла;
	КонецЦикла;
	
	Возврат ЗначенияГруппировок;
КонецФункции
...Показать Скрыть

Сделал так отчет стал работать в разы быстрее, т.е. не создавать каждый раз обработку расшифровки а передавать 1 раз!
40. Дмитрий Дорин (DmitriyDI) 14.05.14 11:41
Теперь 70% времени тут
	ПолеКомпоновки = новый полеКомпоновкиДанных(ПолеРасшифровки);
	РезультатРасшифровки = ОбработкаРасшифровки.Расшифровать(Расшифровка, ПолеКомпоновки);

Надо подумать как тут оптимизировать.
41. Дмитрий Дорин (DmitriyDI) 15.05.14 10:16
(40) DmitriyDI, и еще:
ЗначенияГруппировок = ПолучитьЗначенияГруппировокОтчета(ДанныеРасшифровки, ТекущаяОбласть.Расшифровка, "СуммаПлан", Новый Структура("Сотрудник, Контрагент, ТорговаяМарка"),ОбработкаРасшифровки);

надо внести в это если:
Если ЗначенияРасшифровки.Свойство("СуммаПланСКР") Тогда

Тогда и расшифровки норм останутся все и побыстрее еще будет работать!
42. Andrey (kentavr27) 01.07.14 10:48
(40) DmitriyDI, Что бы еще ускорится, нужно немного изменить порядок обхода. Сначала обходить колонки, внутри -- строки (а не наоборот). И кроме того
ЗначенияГруппировок = ПолучитьЗначенияГруппировокОтчета()
можно перенести во внутренний цикл. Тем самым те колонки, которые для редактирования не интересны, не будут прогоняться, соответственно времени на прогонку затрачено будет в 2 или >2 раз меньше
Для кол = ДокументРезультат.ФиксацияСлева+1 по ДокументРезультат.ШиринаТаблицы цикл
		Для ряд = ДокументРезультат.ФиксацияСверху+1 по ДокументРезультат.ВысотаТаблицы цикл
			ТекущаяОбласть = ДокументРезультат.Область(ряд, кол, ряд, кол);
			если ТекущаяОбласть.Расшифровка = Неопределено Тогда Продолжить; КонецЕсли;
			
			ЗначенияРасшифровки = ПолучитьВсеЗначенияРасшифровки(ДанныеРасшифровки.Элементы[ТекущаяОбласть.Расшифровка]);
			Если ЗначенияРасшифровки.Свойство("КолонкаДляРедактирования") Тогда
				ТекущаяОбласть.Защита=ложь;
				ЗначенияГруппировок = ПолучитьЗначенияГруппировокОтчета(ДанныеРасшифровки, ТекущаяОбласть.Расшифровка, "КолонкаДляРедактирования", Новый Структура("Товар, Клиент"),ОбработкаРасшифровки);
				.
				.
				.
			Иначе
				// !Добавить прерывание цикла для неинтересных колонок
				Прервать;
			КонецЕсли;
		КонецЦикла;
	КонецЦикла;
...Показать Скрыть
DmitriyDI; Sean1s; +2 Ответить
43. (Baibolaika) 14.11.14 12:50
Visitizer, добрый день! Скажите, пожалуйста, существует ли версия для НЕ управляемых форм?
Пытаюсь подстроить, не могу понять как формируется значение реквизита ДанныеРасшифровки?
44. kanat1 (kanat1) 05.10.16 09:07
Спасибо. Очень пригодилось
45. Дмитрий Моргунов (Stalker27) 21.10.16 10:08
Скачал, взял часть функционала для своей задачи (для начала просто нужно редактировать ячейки в табдоке). Получилось около 20 минут на выполнение (при количестве минимальных колонок для моей задачи около 20шт. и около 400 строк. Это данные просто для тестовой проверки. В реальности таблица получается намного больше (около 200-300 колонок и намного большего числа строк).
В общем очень очень очень тормознутый метод для больших объемов информации. У меня мой метод работал мгновенно, но там были некие проблемы другого плана, поэтому подумал что ваша обработина мне поможет. Не помогла.
Но некоторые методы пригодятся в доработке моего решения (хотя уже было принято решение делать обработкой, а не отчетом). В общем нафига потратил стартмани - непонятно 0_о
Ну надо же их куда-то тратить, а то лежат и лежат уже года 2-3))
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа