1с программно добавить табличную часть на форму
Итак для начала нам надо добавить реквизиты в форму. Для этого у нас есть метод: ИзменитьРеквизиты(). Перед тем как его использовать мы сформируем массив добавляемых реквизитов, который будет называться МассивДобавляемыхРеквизитов.
Код 1C v 8.2 УП
Обратите внимание, что элементы массива у нас типа РеквизитФормы. Дальше помимо таблицы значений, нам надо добавить колонки таблицы, например будем добавлять три колонки:
Код 1C v 8.2 УП
Во время добавления колонок в МассивДобавляемыхРеквизитов обязательно надо указать путь к создаваемому реквизиту, в нашем случае это «План», который был добавлен в массив ранее. Обратите внимание, что путь к создаваемому реквизиту не включает в себя сам реквизит. После того, как массив сформирован, можно вызывать изменение реквизитов:
Код 1C v 8.2 УП
После изменения реквизитов у нас уже есть нужный нам реквизит формы «План» типа ТаблицаЗначений с тремя колонками. Если вам надо будет обратиться к значению реквизита, то вы можете это сделать используя ЭтаФорма["План"]. Можно приступать к созданию элементов формы, для отображения данных. Сначала создадим элемент формы типа ТаблицаФормы.
Код 1C v 8.2 УП
Как вы видите из приведенного когда, во время создания элемента мы тут же определяем действия на события. После создания элемента План типа ТаблицаФормы создадим подчиненные ему элементы типа ПолеФормы, которые будут отвечать у нас за вывод данных в колонки таблицы. Для этого в цикле перебора колонок таблицы необходимо выполнить следующий код (на примере одной из итераций цикла):
Код 1C v 8.2 УП
Обратите внимание, что во время добавления элемента мы указываем родителя Элементы.План. Так же путь к данным у нас состоит из наименования реквизита типа ТаблицаЗначений и имени колонки, разделенные точкой. После того, как вы в цикле создадите все элементы для колонок форма будет готова к выводу и вводу данных в таблицу.
Теперь можно перейти ко второй части задачи про подсветку цветом колонки Номенклатура. Например условие у нас будет накладываться на колонку Разница и когда она будет равно 100 строку надо будет подсвечивать колонку Номенклатуры серым цветом.
Похожие FAQ
10060 (0x0000274C): Попытка установить соединение была безуспешной 19
Установили новый терминальный сервер, на нем подняли 1С, терминальные пользователе неописуемо довольны, все просто летает :) И вот же надо было такому случиться, главному бухгалтеру не понравилось работать через терминал, а еще у нее свой ноутбук и 17 правил для составления оптимального ЗАПРОСа к данным базы 1С 44
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ 1C и Google Maps 21
была поставлена задача отображения на географической карте медицинских учреждений. После обзора предлагаемых решений был выбран сервис google. Но так же подобного рода подход будет работать и с картами сервиса yandex. Во время решения задачи было реш 1C медленно работает по сети с базой на SQL Server 20
Данное обстоятельство может быть обусловлено многими причинами. Одна из них - неоптимальная настройка MS SQL . Перечислим неоптимальности в настройке: 1) Неправильно указанный сетевой протокол, используемый для взаимодействия 1С с SQL Server. П 1C: Enterprise Development Tools 50
И вот случилось долгожданное: Вышел 1C: Enterprise Development Tools - это среда для разработки конфигурации в IDE Eclipse. С сайта 1С: « 1C:Enterprise Development Tools » – это инструмент нового поколения для разработчиков бизнес-приложений систем Посмотреть все результаты поиска похожих
Еще в этой же категории
Как обновить динамический список или реквизит на форме клиента? 22
Если вы, открыв форму справочника или документа, выполнили некоторое действие, код который должен изменить состояние данных в динамических списках или значение реквизита. Данные изменены, но в открытой форме осталось все как было, можно конечно закр Динамический список ~ Как на управляемой форме разместить список регистра сведений с отбором? 18
Решение рассмотрено для элемента справочника (Контрагент и регистр КонтактнаяИнформация) 1. Создание реквизита: Добавляем новый реквизит формы (. не путать с реквизитом справочника . ) с типом " ДинамическийСписок" В поле " Основная табли Как установить параметр динамического списка? 16
Когда используете для вывода данных динамический список и произвольный запрос, то бывают ситуации когда надо указать параметр используемый в этом запросе. Ниже пример вывода данных регистра сведений в карточке клиента Для вывода используется исп Поле выбора ~ Заполнение списка значений в элементе поле выбора на форме 10
//Заполнение списка перебором данных // Элемент формы МетаданныеВыбор имеет тип - Произвольный, Использование - Режим выбора из Списка, кнопка списка Для Каждого Метаданное из Метаданные.РегламентныеЗадания Цикл ЭлементыФормы.МетаданныеВыбор.Спи Поле выбора ~ Как ограничить список выбора? 8
Ограничим список элементов, установив отбор в открываемой форме //Пример 1 Процедура СтатьяПДРНачалоВыбора(Элемент, СтандартнаяОбработка) ФормаВыбора = Справочники.ПрочиеДоходыИРасходы.ПолучитьФормуВыбора(, Элемент); ЭлементОтбораВидПДР = Форма Посмотреть все в категории Работа с Формой (Диалог) и её элементами
Как вывести результат запроса в таблицу на управляемую форму, ведь здесь нет метода "СоздатьКолонки()"? Как добавить поле ввода в табличную часть документа, если нет желания менять документ? Разбираемся.
Сегодня предлагаю дамам и господам из Парижу разобраться с тем, как программно управлять управляемыми формами. Как создать таблицу значений, как создать колонки, как ее заполнить, как вывести ее на форму, как разрешить или запретить изменение, как расширить колонки уже имеющейся на форме таблицы. Ну,
поехали!
Итак, унас есть форма и запрос, результат которого выгружен в таблицу. Например, так:
Выведем таблицу на управляемую форму
Наша основная задача номер РАЗ - вывести результат запроса на управляемую форму.
Для этого нам нужно:
- Создать реквизит типа "ТаблицаЗначений".
- Создать реквизиты с типом значения, соответствующим типу колонки таблицы, для каждой колонки, подчиненные таблице.
- Создать элемент формы типа "ТаблицаФормы" для таблицы.
- Создать элементы формы для колонок типа "ПолеФормы".
Таким образом код у нас будет такой:
Здесь мы создаем реквизиты, содержащие таблицу и колонки таблицы. Далее создаем элементы и прописываем для них путь к реквизитам формы. Т.е. у нас всегда создается и реквизит формы, который хранит значение, и элемент формы, который это значение отображает. В этом вся суть. При этом если Вы хотите создать группу формы, то реквизит формы вам не нужен - достаточно создать элемент формы типа "ГруппаФормы", после чего в поле "Вид" прописать соответствующтий вид элемента (Группа, Закладка, . ).
Данный код выводит на управляемую форму результат запроса. Но если вдруг в результате запроса у Вас будут элементы, типы которых не могут быть выведены на форму, то 1С будет ругаться. К таким элементам относятся хранилища значений, уникальные идентификаторы и, на сколько я знаю, другие таблицы значений (т.е. при выборке табличных частей у нас возникнут проблемы). Это нужно учитывать при создании реквизитов. При этом, если реквизит таблицы имеет тип "ТаблицаЗначений", то для его тоже нужно будет создать колонки. Также следует иметь ввиду, что имена элементов формы должны быть уникальными, при этом имена реквизитов должны быть уникальны внутри своих родителей (т.е. может существовать две разные таблицы с одинаковыми наименованиями колонок, но в пределах одной таблицы имена колонок должны отличаться).
Добавим колонку в таблицу документа
Теперь давайте посмотрим, как можно расширить уже имеющуюся таблицу формы.
Допустим, мы хотим добавить колонку в таблицу выданных авансов авансового отчета как-нибудь так:
Для этого просто напишем в процедуре ПриСозданииНаСервере такой вот код:
Следует, однако, иметь ввиду, что заполнять данную колонку придется при каждом открытии документа, а данные для нее сохранять в отдельном хранилище, например, регистре сведений с документом и номером строки в качестве измернеий, и значением в ресурсе.
ЭлементыФормы (Controls) . Добавить (Add) - Добавляет элемент управления на форму.
Синтаксис: Код 1C v 8.х
Параметры:
(обязательный)
Тип: Тип. Тип добавляемого элемента управления:
Индикатор; ПолеКалендаря; Кнопка; КоманднаяПанель; Надпись; Панель; Переключатель; ПолеТабличногоДокумента; ПолеHTMLДокумента; ПолеТекстовогоДокумента; ПолеВвода; ПолеВыбора; ПолеСписка; ПолеКартинки; ПолосаРегулирования; Разделитель; РамкаГруппы; ТабличноеПоле; Флажок; ПолеГрафическойСхемы; ПолеГеографическойСхемы.
(обязательный)
Тип: Строка. Имя создаваемого элемента управления. Имя должно быть указано в соответсвии с правилами написания имен системы 1С:Предприятие 8. В противном случае выполнение метода вызовет исключение.
(необязательный)
Тип: Булево. Определяет, создавать новый элемент управления формы видимым или нет. Истина - элемент создается видимым.
Значение по умолчанию: Истина
(необязательный)
Тип: Панель; ПолеТабличногоДокумента. Определяет, какой панели формы или какому табличному документу принадлежит создаваемый элемент. Если указана панель, то добавляемый элемент размещается на текущей странице панели. Если не указан, создаваемый элемент будет принадлежать непосредственно форме.
Код 1C v 8.х
Похожие FAQ
Еще в этой же категории
Как обновить динамический список или реквизит на форме клиента? 22
Если вы, открыв форму справочника или документа, выполнили некоторое действие, код который должен изменить состояние данных в динамических списках или значение реквизита. Данные изменены, но в открытой форме осталось все как было, можно конечно закр Динамический список ~ Как на управляемой форме разместить список регистра сведений с отбором? 18
Решение рассмотрено для элемента справочника (Контрагент и регистр КонтактнаяИнформация) 1. Создание реквизита: Добавляем новый реквизит формы (. не путать с реквизитом справочника . ) с типом " ДинамическийСписок" В поле " Основная табли Как установить параметр динамического списка? 16
Когда используете для вывода данных динамический список и произвольный запрос, то бывают ситуации когда надо указать параметр используемый в этом запросе. Ниже пример вывода данных регистра сведений в карточке клиента Для вывода используется исп Форма ~ Программное создание таблицы значений с условным оформлением 12
Как создать на форме таблицу и сделать для нее подсветку содержимого колонки в строке по условию? Итак для начала нам надо добавить реквизиты в форму. Для этого у нас есть метод: ИзменитьРеквизиты(). Перед тем как его использовать мы сформируем ма Поле выбора ~ Заполнение списка значений в элементе поле выбора на форме 10
//Заполнение списка перебором данных // Элемент формы МетаданныеВыбор имеет тип - Произвольный, Использование - Режим выбора из Списка, кнопка списка Для Каждого Метаданное из Метаданные.РегламентныеЗадания Цикл ЭлементыФормы.МетаданныеВыбор.Спи Посмотреть все в категории Работа с Формой (Диалог) и её элементами
Как заполнить табличную часть формы программно? 8
Нужно по кнопке Заполнить - сформировать данные для заполнения табличных частей и заполнить их. Форма имеет вид: Рядом с кнопкой Записать и закрыть добавлена кнопка Заполнить документ , код ее команды: // Код заполнения ТЧ НаСервере П 1C и Google Maps 21
была поставлена задача отображения на географической карте медицинских учреждений. После обзора предлагаемых решений был выбран сервис google. Но так же подобного рода подход будет работать и с картами сервиса yandex. Во время решения задачи было реш 1С 7.x : Как получить курсы валют с сайта НБУ http://www.bank.gov.ua/ за любую дату ? 6
Функция ПолучитьТаблицуКурсовНБУ(ДатаКурса, Ежедневно = 1) // если в качестве второго параметра указать число отличное от 1 - получем валюты, которые котируются на ежемесячной основе Перем Reader, Url, Точки, HtmlTab, Строк, Р, НомСтроки, НомЯче COM-подключение к базе 7.7 из 8.2 1С 6
Если код выполняется на стороне клиента, то необходимо наличие базы 7.7 на локальной машине. Пример (На форме объекта присутствует реквизит Таблица(ТаблицаЗначений)): НаКлиенте Процедура Загрузки() ПутьКБазе=" D: ВашаБаза 1с77 " ; Пользователь= Google maps : вывод точек на карту и режим панорамы 7
В отличие от яндекс карт в GMaps можно использовать панорамы - за что им большой плюс! Надеюсь в яндексе прочитают этот пост и тоже когда-нибудь это сделают! Для клиента нужно было сделать вывод объектов на карту С возможностью просмотра панора Посмотреть все результаты поиска похожих
Еще в этой же категории
Как обновить динамический список или реквизит на форме клиента? 22
Если вы, открыв форму справочника или документа, выполнили некоторое действие, код который должен изменить состояние данных в динамических списках или значение реквизита. Данные изменены, но в открытой форме осталось все как было, можно конечно закр Динамический список ~ Как на управляемой форме разместить список регистра сведений с отбором? 18
Решение рассмотрено для элемента справочника (Контрагент и регистр КонтактнаяИнформация) 1. Создание реквизита: Добавляем новый реквизит формы (. не путать с реквизитом справочника . ) с типом " ДинамическийСписок" В поле " Основная табли Как установить параметр динамического списка? 16
Когда используете для вывода данных динамический список и произвольный запрос, то бывают ситуации когда надо указать параметр используемый в этом запросе. Ниже пример вывода данных регистра сведений в карточке клиента Для вывода используется исп Форма ~ Программное создание таблицы значений с условным оформлением 12
Как создать на форме таблицу и сделать для нее подсветку содержимого колонки в строке по условию? Итак для начала нам надо добавить реквизиты в форму. Для этого у нас есть метод: ИзменитьРеквизиты(). Перед тем как его использовать мы сформируем ма Поле выбора ~ Заполнение списка значений в элементе поле выбора на форме 10
//Заполнение списка перебором данных // Элемент формы МетаданныеВыбор имеет тип - Произвольный, Использование - Режим выбора из Списка, кнопка списка Для Каждого Метаданное из Метаданные.РегламентныеЗадания Цикл ЭлементыФормы.МетаданныеВыбор.Спи Посмотреть все в категории Работа с Формой (Диалог) и её элементами
В связи с развитием системы расширений многие разработчики 1С сталкиваются с проблемой: если форма захвачена и на ней произведены изменения, то после обновления в основной конфигурации формы, эти изменения не будут отражены на захваченной форме. Получается, что форму после обновления надо каждый раз проверять. Это трудно и "убивает" все плюсы расширения. Но из любой непростой ситуации есть выход, если знать, где его искать. Можно захватить форму в расширение и не изменять её, а все новые реквизиты добавить программно. Тогда при обновлении формы в основной конфигурации 1С 8.3, форма измениться в расширении, и добавленные реквизиты будут корректно отображаться в ней.
В этой статье я постараюсь собрать все основные методы создания реквизитов на форме.
1. Добавляем реквизит
Начнем с самого простого. Мы добавили реквизит "МоеРасширение_НаименованиеНаАнглийском" в справочник контрагентов.
Для того, чтобы вывести его на форму програмно, пишем код процедуры "МоеРасширение_ПриСозданииНаСервереПосле" (Отказ, Стандартная Обработка).
НовыйЭлемент = Элементы.Добавить ("МоеРасширение_НаименованиеНаАнглийском", Тип("ПолеФормы"));
НовыйЭлемент.ПутьКДанным = "Объект. МоеРасширение_НаименованиеНаАнглийском";
Теперь мы добавим на форму реквизит, которого нет в конфигурации. Например, выведем на форму текущую задолженность: реквизит "МоеРасширение_ТекущаяЗадолженность".
Сначала создадим реквизит:
ДобавляемыеРеквизиты = Новый Массив;
НовыйРеквизит = Новый РеквизитФормы("МоеРасширение_ТекущаяЗадолженность"), Новый ОписаниеТипов ("Число", "Текущая задолженность");
Затем выведем его на форму таким же образом, как и добавленный в конфигурацию реквизит, разница только в поле "ПутьКДанным" – здесь мы пишем наименование только что созданного реквизита:
НовыйЭлемент = Элементы.Добавить("МоеРасширение_НаименованиеНаАнглийском", Тип("ПолеФормы"));
Теперь переместим наши реквизиты под поле "Полное наименование". Для этого надо определить на форме место добавления, в нашем случаем – над группой "ГруппаКолонки":
Для того, чтобы отрабатывались процедуры событий для этих реквизитов, можем указать действия:
Элементы. МоеРасширение_ТекущаяЗадолженность.УстановитьДействие("ПриИзменении", "МоеРасширение_РасшифроватьЗадолженность").
2. Добавление кнопки
Для того, чтобы произвести добавление кнопки на форму, сначала надо програмно добавить команду.
НоваяКоманда.Заголовок = "Показать ОСВ".
ВАЖНО!! В поле действие пишется имя процедуры.
Теперь добавляем саму кнопку:
НоваяКнопка = Элементы.Добавить("МоеРасширение_Кнопка_ПоказатьОСВ", Тип("КнопкаФормы"));
3. Добавление группы
Для добавления группы переместим кнопку к полю "Текущая задолженность". На этом этапе нам надо создать группу и переместить в нее уже созданные наши элементы.
Создаем группу и помещаем ее под наименованием. Затем переносим в нее реквизит "Текущая задолженность" и кнопку "Показать ОСВ":
НоваяГруппа =Элементы.Добавить("МоеРасширение_ГруппаЗадолженность", Тип("ГруппаФормы"));
4. Добавляем табличную часть 1С
Добавим к контрагенту табличную часть 1С "МоеРасширение_Номенклатура" с реквизитом "Номенклатура" и выведем ее на форму.
Сначала мы добавляем табличную часть на форму, после чего описываем все колонки, которые должны отображаться на форме.
ВАЖНО! При создании реквизитов таблицы родителем указывается реквизит формы "Табличная часть".
НоваяТабличнаяЧасть = Элементы.Добавить("МоеРасширение_ТаблицаНоменклатура", Тип("ТаблицаФормы"));
НовыйРеквизитТабличнойЧасти = Элементы.Добавить("МоеРасширение_Номенклатура", Тип("ПолеФормы"),НоваяТабличнаяЧасть);
Используя этот базовый набор, можно изменить любую форму программно. И при обновлениях форма всегда будет подстраиваться под выбранный алгоритм. Если форма поменяется глобально, то расширение выдаст ошибку. Тогда, переписав несколько строчек кода, мы снова получим рабочую форму. Это быстрее и проще, чем каждый раз анализировать диалоговую форму.
Специалист компании «Кодерлайн»
Вас могут заинтересовать следующие статьи:
Читайте также: