Включить редактирование табличного документа 1с
Тема не нова - похожие решения были и на 8.0. К написанию статьи меня подтолкнул коллега, т.к. я это чудом не считаю. Несколько раз я видел тонны сложнейшего, и посему нерабочего кода, целью которого было сделать нечто похожее средствами, которые для этого не предназначены. В статье дан простейший пример, показывающий, как можно применять средства СКД для редактирования сложной структуры данных, например, табличных частей документов. В частности, рассмотрена работа с набором данных типа "Объект" и событием "Обработка расшифровки"
Описание проблемы и предпосылки
Периодически приходится решать задачи удобного ввода информации пользователем по образу Excel, например, самый простой "План продаж" по месяцам, в котором горизонтально по колонкам расположены месяцы, а вертикально - некая аналитика. Раньше в типовых конфигурациях 1С данная задача не была решена вообще никак. Пользователю предлагалось заполнить обычную табличную часть вручную, добавляя строки и заполняя их датами и необходимой аналитикой. Весь ужас такого ввода объяснять не нужно. Потом разработчики отраслевых решений в "доэскадэшную" эпоху догадались использовать всю мощь макета табличного документа и в "Подрядчик строительства" от "Импульс ИВЦ" уже можно было наблюдать весьма недурное решение в блоке Бюджетирование. Но код был неуниверсальный, сложный и крайне тяжело переносился на другие похожие задачи. В данной статье я постараюсь показать, как решить эту задачу быстро, красиво и с минимальными затратами по времени. Также код, который вы напишете, используя этот пример, вы сможете легко переносить на другие свои решения.
Реализация задачи
Описана для обычных форм, но обработка содержит и УФ без использования модальности.
Нам понадобится: сам объект редактирования (в данном случае табличная часть), макет СКД, компоновщик настроек компоновки данных, элемент управления "поле табличного документа", обработчик "Обработка расшифровки".
Макет СКД представляет собой соединение двух наборов данных, каждый из которых имеет тип "Набор данных - объект":
Настройки вывода просты и примитивны - это обычная таблица с итогами:
В форме необходимо разместить следующие реквизиты:
В обработчике расшифровки должен быть размещен отказ от стандартной обработки, а также описание набора действий, которые необходимо совершить, когда пользователь кликает по ячейке двойным кликом.
Данный код позволяет определить по какой именно ячейке кликнул пользователь. Далее, зная значение Номенклатуры и Периода можно найти соответствующую строку в табличной части и присвоить в ней реквизиту "Сумма" нужное значение, после можно программно нажать на кнопку "Обновить".
Производительность
Существует 2 способа непосредственного ввода значения при двойном клике по ячейки:
1) Через диалоговое окно методами ВвестиЗначение() или ВвестиЧисло()
- этот способ применен в данном примере.
Преимущества: не усложняет код, высокая производительность.
Недостатки: вылетает дополнительное окно ввода.
При таком способе ввода в каждой ячейке, как и при формировании обычного отчета на СКД, содержится лишь некий объект типа "ИдентификаторРасшифровкиКомпоновкиДанных", который по сути представляет собой число.
2) Непосредственно в ячейку, как в Excel.
Данный способ с применением СКД можно увидеть в ERP 2.0.
Преимущества: очень красиво, у неискушенных вызывает мгновенный вау-эффект, окон не вылетает.
Недостатки: низкая производительность, усложняет код. Нужно понимать, что при таком способе ввода в каждую ячейку придется помещать элемент управления "Поле ввода". Ячеек в поле табличного документа может быть несколько тысяч, т.е. несколько тысяч полей ввода. Вывод этого всего в поле табличного документа не будет быстрым даже в толстом клиенте.
Особенности работы в тонком клиенте без использования режима модальности.
Для работы в тонком клиенте необходимо помещать схему СКД и Данные расшифровки во временное хранилище. Хранить полученные адреса удобно в реквизитах формы.
Записываем адреса хранилищ в обработчике ПриСозданииНаСервере()
Обработчики событий Поля табличного документа и асинхронные вызовы
Обратите внимание, что во все конструкторы объектов СКД передаются сохраненные адреса АдресДанныеРасшифровки, АдреcМакетСКД. И почти все процедуры работают на клиенте. Но к сожалению не только лишь все могут работать на клиенте на клиенте реализованы не все объекты СКД. Иногда придется нырнуть на сервер, например для работы с объектом типа ДанныеРасшифровкиКомпоновкиДанных.
Обработчик ПолеТабличногоДокументаПредставлениеПриАктивизацииОбласти необходим для того, чтобы редактировать число(показатель) можно было непосредственно в ячейке, без использования дополнительных диалоговых окон.
Что еще?
UPD 07.07.2021 Добавлена реализация для тонкого клиента на управляемой форме без использования модальности.
1) Никто не запрещает размещать на форме стандартные настройки компоновщика настроек.
2) Можно добавлять в схему СКД любую другую информацию (с помощью других наборов данных), которая не содержится в табличной части редактируемого объекта, но которая необходима для принятия решения при вводе данных (например свойства номенклатуры).
3) Группировка данных в таблице также может быть сколь угодно сложной, в зависимости от решаемой задачи.
4) Можно и нужно использовать всю мощь СКД и возможностей условного оформления.
Использование элементов управления в табличном документе
В данном разделе рассмотрены варианты использования элементов управления, которые могут быть расположены в табличном документе и поле табличного документа.
Поле ввода для изменения текста ячейки
В случае если ячейка табличного документа или поля табличного документа не содержит значения (подробней о значениях в ячейках табличного документа будет рассказано ниже), для редактирования текста ячейки используется встроенное в ячейку системное поле ввода. Это поле ввода настраивается автоматически на основе свойств ячейки и не поддается дополнительной настройке, т.е. его свойства и поведение нельзя изменить ни программным способом, ни через палитру свойств.
Для входа в режим редактирования ячейки достаточно нажать клавишу "Enter", или нажать клавишу "F2", или произвести двойной щелчок левой клавишей мыши над ячейкой, или непосредственно начать ввод. Для завершения редактирования содержимого ячейки необходимо нажать клавишу "Enter", либо произвести щелчок мышью за пределами поля ввода. Для отмены редактирования следует воспользоваться клавишей "Esc".
В случае если редактирование начато при непосредственном вводе (пользователь нажал на клавиатуре любой печатаемый символ), элемент управления для редактирования текста ячейки перейдет в режим ввода, и если пользователь нажмет на одну из клавиш перемещения курсора, то редактирование ячейки будет завершено и выделение текущей ячейки будет перемещено в сторону, соответствующую нажатой клавиши. Например, при нажатии на клавишу "Влево", активной станет ячейка, расположенная слева, а при нажатии клавиши "Вниз" - ячейка, расположенная под редактируемой ячейкой. Данная возможность полезна в случае, если необходимо заполнить несколько ячеек подряд в некотором направлении.
Если редактирование ячейки было активизировано любым другим способом, нажатие клавиш перемещения курсора не приведет к завершению редактирования, а приведет перемещению курсора в редактируемом тексте.
При необходимости изменения режима поведения клавиш курсора, при редактировании ячейки, следует нажать клавишу "F2". При этом режимы будут циклически переключаться
Элемент управления для редактирования значения ячейки
Каждая ячейка табличного документа имеет свойство СодержитЗначение , в котором находится признак того, что в данной ячейке будет храниться не просто текст, а значение определенного типа ( Число , Строка , Дата и т.д.).
Если редактируемая ячейка содержит значение, то возможно указание элемента управления, который будет использован для редактирования значения ячейки, а также, настройка параметров выбранного элемента управления. Тип элемента управления указывается в свойстве ячейки ЭлементУправления . Выбор элемента управления зависит от типа значения, которое содержится в ячейке. Например, для числа можно установить в качестве элемента управления поле ввода и флажок, для строки - только поле ввода.
После того, как тип элемента управления выбран, можно осуществить его настройку. Для того чтобы открыть свойства элемента управления, необходимо в поле выбора, расположенного в верхней части палитры свойств ячейки табличного документа, выбрать название элемента управления. После этого в палитре свойств будут отображены все свойства выбранного элемента управления. Если работа происходит в режиме конфигуратора, при редактировании элемента управления ячейки, содержащей значение, расположенной в поле табличного документа, то в свойствах элемента управление возможна настройка обработчиков событий. Например, для поля ввода возможна настройка обработчиков событий При изменении данных , Начало выбора и т.п.
Редактирование содержимого ячейки, содержащей значение, происходит так же, как и редактирование обычной ячейки.
Элемент управления формы, расположенный на поле табличного документа
При редактировании формы в режиме конфигуратора, на поле табличного документа, расположенного в форме, можно размещать любые элементы управления формы. То, что элемент управления располагается на поле табличного документа, влияет только на его положение. Остальное поведение элемента управления остается неизменным. Т.е. разработчик может связать элемент управления с данными, настроить обработчики, настроить свойства и т.д.
Возможны два режима работы элемента управления формы, расположенного на поле табличного документа:
- Элемент управления, расположенный поверх ячеек. Данный режим является режимом "по умолчанию". При расположении элемента управления формы на поле табличного документа, он будет "привязан" к ячейкам табличного документа и будет изменять свое положение и размер вместе с ячейками, над которыми он расположен.
- Встроенный в ячейку элемент управления. Для того чтобы "встроить" элемент управления в ячейку, следует установить палитре свойств элемента управления свойство Встроен в ячейку . При этом элемент управления будет строго размещен в ячейке, в которой был расположен левый верхний угол элемента. После встраивания ячейку, элемент управления становится как бы частью табличного документа. Теперь, для того чтобы отредактировать свойства такого элемента управления, следует выделить ячейку, в которой он расположен, и найти его в верхнем поле выбора палитры свойств.
ВАЖНО!
При встраивании элемента в ячейку поля табличного документа, у элемента управления автоматически сбрасывается свойство Видимость . При сброшенном свойстве Видимость , элемент управления, встроенный в ячейку будет показываться пользователю только при входе в режим редактирования ячейки. Если не войти в режим редактирования ячейки, ячейка будет отображать значение, которое связано с данным элементом управления. Если же свойство Видимость установлено, элемент управления будет виден пользователю всегда.
Работа в режиме 1С:Предприятие с элементом управления, встроенным в ячейку поля табличного документа и элементом управления, расположенным на поле табличного документа не отличается от работы с элементами управления, расположенными в панели формы.
Все печатные формы в программах 1С Предприятие формируются в формате табличного документа, напоминающего Excel, из строк и столбцов, у каждого из которых есть свой уникальный номер, им можно присвоить имя, оформить их, выбрав цвет текста, фона, а также рамок, и пр. Рассмотрим принципы работы с табличным документом на примере «1С:Бухгалтерия».
Создание табличного документа в 1С
В программе 1С, кроме работы с имеющимися печатными формами документов или отчетов, можно сформировать табличный документ с нуля, для чего надо зайти вменю «Файл-Новый».
Рис.1 Создание табличного документа
В открывшемся окне выбираем характеристику и жмем «Ок».
Рис.2 Выбор вида документа
Открыть табличный документ уже имеющийся в базе можно также в «Файле», выбрав команду «Открыть».
Оформление ячейки табличного документа
Создавая таблицу, мы можем установить характеристики шрифта, оформить ячейки рамками различного вида, а также выбрать цвет из палитры для всех объектов. Для этого, выделив ячейки и нажав правой кнопкой мышки, надо открыть окно «Свойства», где можно задать параметры к выделенным ячейкам – цвет, шрифт, границы и т.п.
Рис.3 Свойства таблицы
Обработка табличной части также может быть сделана через меню «Файл-Таблица». Выбрав пункт «Форматирование», мы также можем настроить шрифт, выравнивание, границы.
Рис.4 Форматирование таблицы
Примечания и работа с ячейками
Заполнение табличного документа в 1С 8.3 предусматривает создание примечаний для ячейки или их группы. Они буду помечены треугольничком в правом верхнем углу, при наведении мышки на который будет всплывать окошечко с текстом, поясняющим данные ячеек. Чтобы их создать, надо вызвать нажатием правой кнопки мышки команду контекстного меню – «Вставить примечание» или через пункт меню «Файл-Таблица-Примечание».
Рис.5 Вставить примечание
Выглядеть это будет так:
Рис.6 Примечание
Мы можем выполнять с ячейками любые действия, как с обычными таблицами в Excel или таблицами в документах Word – вставлять и удалять строки, объединять ячейки, скрывать и пр. («Файл-Таблица-Ячейки»).
Рис.7 Работа с ячейками
Для удобства при работе с табличным документом можно пользоваться контекстным меню, нажав на ячейке или выделенному фрагменту правой кнопкой мышки. Например, выбрав команду «Раздвинуть», мы добавляем строки выше текущего положения. Здесь же мы можем объединить или разбить ячейки, удалить, очистить, настроить высоту строк, выбрав соответствующие команды.
Рис.8 Команда «Раздвинуть»
Группировка элементов
Формируя структуру нашей таблицы, мы можем сгруппировать строки или удалить группировку при необходимости («Файл-Таблица-Группы»).
Рис.9 Объединение в группы
Это дает возможность объединить информацию из отчетов, применяя некоторое число вложенных группировок.
Рис.10 Группировка элементов
Их можно сделать горизонтальными или вертикальными, регулируя при этом расположение итогов в группировке: для первых – сверху или снизу, для вторых, соответственно – справа или слева.
Рис.11 Виды группировок
Используя эти принципы, созданы все табличные формы в программе, например, отчет Оборотно-сальдовая ведомость по счету. С помощью редактора табличных документов в 1С можно создавать как небольшие табличные документы, так и документы, имеющие сложную структуру.
Рис.12 Группировка в Оборотно-сальдовой ведомости
Макет печатной формы документа
Табличные документы формируются на основе макета, который представляет собой шаблон для формирования печатной формы. В него можно добавлять рисунки, логотипы, диаграммы, сводные таблицы.
В каждом документе имеется макет его печатной формы. Открыв печатную форму, нажав кнопку «Еще» и выбрав команду «Изменить макет», мы самостоятельно можем внести в него коррективы, не прибегая к помощи программиста. Теперь такая возможность доступна в пользовательском режиме 1С.
Рис.13 Макет печатной формы документа
Макет печатной формы документа «Счет». Мы видим, что в одних ячейках содержится только текст, в других – имена параметров, которые необходимо будет задать при заполнении документа.
Рис.14 Макет печатной формы документа «Счет»
С помощью кнопки на панели инструментов и «Еще», выбрав нужный раздел, мы можем произвести изменение табличного документа 1С 8.3.
Рис.15 Изменение табличного документа
Ввод данных
В наш документ информацию можно внести руками, как в обычный Excel. Это могут быть текстовые или числовые данные, которые могут использоваться при исчислении в других ячейках, например, при заполнении некоторых форм отчетности.
Рис.16 Ввод данных
Сохранение
Сформировав документ, его можно сохранить в файл на диске для отправки по электронной почте, переноса на другой компьютер или флешку и т.д. Для этого выберем команду «Сохранить» в пункте меню «Файл».
Рис.17 Сохранение
При сохранении табличного документа можно выбрать различные форматы, как в собственном формате – 1С-mxl, так и экспортировать в другие форматы – лист Excel, документ PDF или формат mxl-табличный документ v7.7 (для совместимости с версией платформы 7.7) и другие форматы.
Рис.18 Выбор формата сохранения
В некоторых печатных формах документа имеется кнопка «Сохранить».
Рис.19 Сохранение из формы документа
Табличный документ в 1С 8.3 - это объект встроенного языка, который используется для создания печатных форм документов и отчетов. Является электронной таблицей, так как состоит из строк и столбцов и имеет функциональность, определенную следующими методами: ввод данных, группировка элементов, расшифровка, примечание в ячейках, оформление ячеек, форматирование, сохранение. Табличный документ использоваться как сам по себе, и может входить в состав любой из форм и служит для отображения информации.
✔ Создание печатной формы из табличного документа
&НаКлиенте
Процедура СозданиеПечатнойФормыИзТабличногоДокумента ( Команда )
НастройкаКолонтитуловПечатнойФормы ( ФормаПечати );
НастройкаПараметровПечатиТабличногоДокумента ( ФормаПечати );
ФормаПечати . Показать ( "Отчет по долгам" );
// Сохранение "Отчета по долгам"
ФормаПечати . Записать ( "D:\Storage\data\ОтчетПоДолгам.xls" , ТипФайлаТабличногоДокумента . XLS );
// Печать "Отчета по долгам" сразу на принтер
ФормаПечати . Напечатать ( РежимИспользованияДиалогаПечати . НеИспользовать );
&НаСервере
Функция СозданиеПечатнойФормыИзТабличногоДокументаНаСервере ()
Макет = ЭтотОбъект . ПолучитьМакет ( "Макет_Табл" );
// Изменение табличного макета после его создания.
ПрограммноеИзменениеТабличногоДокумента ( Макет );
ФормаПечати = Новый ТабличныйДокумент ;
// Получение области и макета по имени
Шапка = Макет . ПолучитьОбласть ( "Шапка" );
// Заполнение параметров
Шапка . Параметры . Дата = ТекущаяДата ();
Шапка . Параметры . Номер = 2020 ;
// Вывод шапки в документ
ФормаПечати . Вывести ( Шапка );
// Заголовок табличной части.
ЗаголовокТ = Макет . ПолучитьОбласть ( "ТЧ_Заголовок" );
ФормаПечати . Вывести ( ЗаголовокТ );
ТЧ_Строка = Макет . ПолучитьОбласть ( "ТЧ_Строка" );
SSDIntelOptaneDC = Справочники . Номенклатура . НайтиПоНаименованию ( "SSD Intel Optane DC P4800X 1.5TB" );
// Группировка строк таблицы в сворачивающийся блок
ФормаПечати . НачатьГруппуСтрок ( "Номенклатура" , Истина);
Для Х = 1 По 100 Цикл
ТЧ_Строка . Параметры . Номенклатура = SSDIntelOptaneDC ;
ТЧ_Строка . Параметры . Количество = Х ;
// Параметр расшифровки "РасшифровкаНоменклатуры" - для открытия формы номенклатуры из макета по клику
ТЧ_Строка . Параметры . РасшифровкаНоменклатуры = SSDIntelOptaneDC ;
ФормаПечати . Вывести ( ТЧ_Строка );
КонецЦикла;
В 8.2 эту возможность убрали из целей производительности, Максим Радченко пишет в своей книге:
В версии 8.2 не поддерживается режим редактирования ссылочных данных информационной базы в списке. Данные можно редактировать только в форме.
При работе в режиме управляемого приложения свойство объекта конфигурации Способ редактирования игнорируется, и данные редактируются всегда в отдельной форме.
Это относится ко всем таблицам, источником данных которых является динамический список.
Если же таблица имеет другой источник данных (табличная часть, дерево значений и т.д.), то ее данные редактируются непосредственно в списке
В обычных формах, программно можно установить режим редактирования в списке
Для Регистра Сведений или Справочника - открыть палитру Свойства - закладка - представление - установить способ редактирования В Списке
Похожие FAQ
Еще в этой же категории
Как в форме списка реализовать сортировку по своему реквизиту? 12
Если реквизит примитивного типа, то достаточно установить для свойства реквизита «Индексировать» значение «Индексировать» или «Индексировать с доп. упорядочиванием» (не доступно для реквизитов типа ХранилищеЗначения). Если же реквизит ссылочного типа Сортировка списка по произвольной колонке? 7
В процедуру ПриОткрытии или в конец модуля добавить: ЭлементыФормы.РегистрСведенийСписок.НастройкаПорядка.НомерСоглашения.Доступность=Истина; Где НомерСоглашения - Колонка в списке регистра сведений по которой нужно сортировать! Далее щелкнув Оформление строки в ПриПолученииДанных или ПриВыводеСтроки 7
Событие ПриПолученииДанных использется для оформления ячеек строк данных, отображаемых табличным полем. Обработчик данного события вызывается табличным полем в тех же случаях, что и обработчик ПриВыводеСтроки , т.е. при обновлении данных, отображ Табличное поле ~ Как получить строки табличного поля, отобранные отбором? 4
ОтборСтрок = ТабличнаяЧастьИсточник.ОтборСтрок ; ПостроительЗапроса = Новый ПостроительЗапроса; ПостроительЗапроса.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТабличнаяЧастьИсточник); // Добавляются необходимые отборы, такие же как в отбор Отбор по списку значений 3
СозданныйСписок = Новый СписокЗначений; СозданныйСписок.Добавить(Перечисления.СтатусЗаявки.Выполнено); СозданныйСписок.Добавить(Перечисления.СтатусЗаявки.ЗакрытиеЗаявки); СозданныйСписок.Добавить(Перечисления.СтатусЗаявки.ОтклоненаРукОтдЗакупок); Посмотреть все в категории Список Справочника, Документов, Регистров
Читайте также: