1с путькданнымподвала установить программно
Приветствую всех читателям infostart’a. Данная статья будет посвящена вопросу создания произвольной таблицы значений на форме управляемого приложения программным способом.
Особенности задачи.
Каждый, кто программировал в обычном приложении, часто сталкивался с задачей получения произвольной таблицы значений на форме. Под произвольной таблицей значений понимается таблица, количество и тип колонок которой наперед не известно. То есть колонок может быть 3, а может 6, а может 8. В обычном приложении все просто: можно было на форме обработки разместить элемент «ТаблицаЗначений»,и затем передать в этот элемент созданную таблицу значений программным способом. Потом простой командой:
получить готовую таблицу значений на форме. Казалось бы, что может быть проще.
Это все было в обычном приложении. В управляемом приложении все изменилось. Так просто произвольную таблицу не создать. Теперь нужно либо жестко параметризировать таблицу значений на форме, либо создавать ее программным способом (описывать,ну, в этом, собственно, и суть самого управляемого приложения). Это мы и попробуем сделать: программными средствами создать произвольную таблицу значений на управляемой форме.
Решение задачи.
Первое, что мы должны сделать, это определить, как таблица появится на форме. Главное, что никакого элемента формы в обработке создавать не нужно. Мы его создадим программным способом, как и всю таблицу. То есть таблица будет описана, и создаваться в момент открытия формы или с помощью кнопки – это кому как нужно.
Создание таблицы на форме происходит через описание таблицы значений как реквизита:
Теперь мы должны создать программную таблицу значений, которая содержит данные. Если таблица значений будет получена из запроса, то все более - менее порядок. Если таблица создается вручную, то значение колонок, которые будут содержать числа или даты могут быть созданы через «ОписаниеТипов». Суть в том, что колонки в таблице значений обязательно должны иметь какой-то тип. Если, например,предполагается, что пользователь будет заполнять данные в этих колонках интерактивно, то нельзя добавлять колонку таблицы значений просто с именем, она должна иметь тип. Имейте ввиду – это очень важно т.к. эти типы мы передадим в таблицу на форме.
Создаем таблицу, которая содержит несколько колонок:
Далее мы заполним нашу программную таблицу ТЗ нужными данными. Получаем таблицу ТЗ, которая содержит необходимые значения и готова к передаче в созданный реквизит формы.
Вот такая нехитрая комбинация и наша таблица готова.
Далее укажем путь к данным и, например, можем установить ширину колонок:
Условное оформление, если нам нужно мы также пишем вручную,командное меню – вручную. Обработчики таблицы также пишутся руками. Например,что бы добавить обработчик события таблицы «Выбор»:
Для обработки данного события в форме процедуры прописывается отдельная процедура:
Обратите внимание, что обработчики таблицы срабатывают на клиенте и поэтому должны иметь команду указатель компилятора
Ну, и последнее что хотелось добавить, что после всех этих действий обязательно не забываем передать готовую таблицу в реквизит формы:
Вот что имеем в результате:
А вот обработка события "Выбор":
Послесловие.
Надеюсь, статья окажет помощь тем программистам 1С, которые начинают создавать таблицы на форме программным способом.
Вы можете скачать обработку, которая программным способом создает таблицу значения и выводит на управляемую форму с комментариями,которые помогут Вам создавать свои таблицы.
Типовой алгоритм добавляет программно колонки для ТЧ документа.
Если для добавляемого поля на форме сделать:
, то вываливается ошибка установки значения.
- работает в типовом коде.
Каким образом можно вывести итог по такой колонке в подвал?
(11) Да даже если бы были, таблица формы вроде бы авто итог умеет считать только реквизитам метаданных.
(11) Ага) Итого в подвале считаются только по реквизитам ТЧ. Реквизиты данных форм автоматом не рассчитываются, над руками
Для сч = 1 По 12 Цикл
Элементы["НачисленияЗначение" + сч].ТекстПодвала = Объект.Начисления.Итог("Значение" + сч);
Напиши процедуру обновления итогов подвала и вперед)
(15)
Изменение любой добавленной колонки - ПриИзмненении
Изменение самой таблицы. потому что могут удалить строку - ПриИзмненении
При программном заполнении/Очистке самой ТЧ - по коде над пройтись
(15) ПриИзменении таблицы покрывает все прочие обработчики, но не покроет программный подбор или заполнение. Учитывайте также, что прямое изменение текста подвала на клиенте будет делать неявный серверный вызов, поэтому лучше использовать обновление значений итогов через реквизиты формы.
В общем, в моем случае решилось вот таким образом.
Что делать в случае заполнения ТЧ дополнительной обработкой - остается вопросом.
При этом ПутьКДанным = "Объект.Начисления", НомерПоказателя = от 1 до 12
(4)Т.е. нужно создать еще один реквизит формы, в него каким-то образом присваивать значение итога и сделать
А это когда происходит?
(7) Странно. Я внешку выше приложил. В ней 1 элемент руками создан, и 2 программно. У всех итоги рассчитываются
(10)По всей видимости это не работает, потому что в ТЧ изначально нет колонок Значение1. ЗначениеN, они добавляются так же программно.
(11) Да даже если бы были, таблица формы вроде бы авто итог умеет считать только реквизитам метаданных.
(11) Ага) Итого в подвале считаются только по реквизитам ТЧ. Реквизиты данных форм автоматом не рассчитываются, над руками
Для сч = 1 По 12 Цикл
Элементы["НачисленияЗначение" + сч].ТекстПодвала = Объект.Начисления.Итог("Значение" + сч);
Напиши процедуру обновления итогов подвала и вперед)
(14)Ага, спасибо. Еще надо бы придумать, в какой момент ее вызывать.
По всей видимости, при обновлении отображения, ну или в каждом обработчике "ПриИзмненении" для Элементы.НачисленияЗначениеN
(15)
Изменение любой добавленной колонки - ПриИзмненении
Изменение самой таблицы. потому что могут удалить строку - ПриИзмненении
При программном заполнении/Очистке самой ТЧ - по коде над пройтись
(15) ПриИзменении таблицы покрывает все прочие обработчики, но не покроет программный подбор или заполнение. Учитывайте также, что прямое изменение текста подвала на клиенте будет делать неявный серверный вызов, поэтому лучше использовать обновление значений итогов через реквизиты формы.
В общем, в моем случае решилось вот таким образом.
Что делать в случае заполнения ТЧ дополнительной обработкой - остается вопросом.
Многие задаются вопросами расчета итогов динамических списков в управляемых формах. Здесь мы не будем претендовать на академичность, оставим споры, что мол это не нужно, что это все равно что считать бородатых мужиков на движущемся эскалаторе, что это дополнительная нагрузка. Все это понимают, Кто не понимает - поймет на практике. Поэтому основываемся на. "снегопад, снегопад, если женщина просит. " или "..а мня плевать - мне очень хочется.." Я попытался решить практические проблемы при расчете и выводе итогов. В приложении примеры расчета итогов в иерархическом справочнике и журнале документов.
Рассмотрим на примере неких колонок Поступило и Списано в динамическом списке
1. Размещаем реквизиты итогов
На форму добавляем числовые реквизиты ИтогиПоступилоПодвал и ИтогиСписноПодвал и назначаем их в подвал таблицы к полям Поступило и Списано в качестве ПутьКДаннымПодвала
2. Отлавливаем изменения на клиенте
Т.к. не существует событий, связанных с изменение отбора и с поиском в динамическом списке, попробуем реализовать свою систему слежения. Для отслеживания изменений в отборе периодически нужно контролировать пользовательские настройки компоновщика списка, период списка (для журналов и документов), а так же использовать событие ПриСменеТекущегоРодителя ддля иерархического справочника.
Пока нерешенной проблемой остается изменение поиска. Стоит заметить, что если поиск выполняется средствами СУБД (не через индекс полнотекстового поиска), то настройки компоновки содержат отбор, соответствующий поиску. Поэтому, если использоватья явный вызов расчета на сервере, то итоги будут рассчитаны с учетом поиска. Но вот отследить на клиенте когда нужно вызвать сервер при поиске пока у меня не получилось.
Добавляем на форме строковый реквизит НастройкаСписка, который и будет нашим флагом. Запускаем обработчик ожидания и следим за изменениями. Если что-то поменялось - обращаемся на сервер за расчетом итогов
3. Расчитываем реквизиты итогов на сервере
Тут нужно сказать спасибо разработчикам за предоставленные фунуции для динамических списков ПолучитьИсполняемуюСхемуКомпоновкиДанных() и ПолучитьИсполняемыеНастройкиКомпоновкиДанных(). Изначально эти функции предназначены для вывода списков в отчет, но, немного подправив полученую схему компоновки и настройки, получем в результате таблицу значений с одной строкой, содержащей итоги по нужным нам полям.
Вот пример для журнала банковских выписок:
Для иерархичеких списков выявилась одна особенность: СКД не содержит отбора по текущему родителю (ну может я его не нашел). Поэтому в случае со справочником можно доработать настройки типа так:
Продолжаем изучать программирование в системе 1С Предприятие. Сегодня поговорим о том, как подсчитать итоги по колонке в табличной части. Нам нужно чтобы итог подсчитывался автоматически.
В предыдущих статья я рассказывал, как создать новый документ потом мы с вами написали пару процедур для автоматического подсчета суммы в табличной части. Теперь сделаем итог для этой колонки. Сегодня в примере я буду использовать тот же документ, который мы создали ранее. Поэтому советую вам ознакомиться с предыдущими статья, Создание документа, Подсчет итогов в строке табличной части.
Авто подсчёт итогов по колонке в табличной части 1С
И так преступим, запускаем 1С в режиме конфигуратора. Далее переходим в созданный ранее документ. Открываем его и переходим на вкладку формы и открываем её.
В окне формы нужно кликнуть два раза на табличную часть справа должно появиться окно свойств таблицы. В нем ищем пункт Подвал и ставим галочку.
После чего на форме в табличной части снизу должен появиться подвал.
Теперь на нужно чтобы в колонке Сумма подсчитывался итого. Для этого на вкладке Элементы ищем пункт с Название МатериалыСумма и кликаем на нем два раза. Справа появиться свойства поля в них ищем пункт
ТекстПодвала и вписываем Итого. А в пункте ПутьКДаннымПОдвала кликаем на три точечки.
В открывшемся окне нужно выбрать ИтогоСумма.
Теперь запускаем отладку и проверяем считается ли итог по колонке в табличной части документа.
Вот мы и сделали автоматический подсчет итогов по колонке. Таким образом можно подсчитать итого во всех колонках и в любых документах.
Скриншоты, опубликованные в данной статье, являются цитатами и иллюстрациями программного продукта «1C:Предприятие», авторское право на который принадлежит ЗАО 1С.
Продолжаем изучать программирование в системе 1С Предприятие. Сегодня поговорим о том, как подсчитать итоги по колонке в табличной части. Нам нужно чтобы итог подсчитывался автоматически.
В предыдущих статья я рассказывал, как создать новый документ потом мы с вами написали пару процедур для автоматического подсчета суммы в табличной части. Теперь сделаем итог для этой колонки. Сегодня в примере я буду использовать тот же документ, который мы создали ранее. Поэтому советую вам ознакомиться с предыдущими статья, Создание документа, Подсчет итогов в строке табличной части.
Автоподсчёт итогов по колонке в табличной части 1С
И так преступим, запускаем 1С в режиме конфигуратора. Далее переходим в созданный ранее документ. Открываем его и переходим на вкладку формы и открываем её.
В окне формы нужно кликнуть два раза на табличную часть справа должно появиться окно свойств таблицы. В нем ищем пункт Подвал и ставим галочку.
После чего на форме в табличной части снизу должен появиться подвал.
Теперь на нужно чтобы в колонке Сумма подсчитывался итого. Для этого на вкладке Элементы ищем пункт с Название МатериалыСумма и кликаем на нем два раза. Справа появиться свойства поля в них ищем пункт
ТекстПодвала и вписываем Итого. А в пункте ПутьКДаннымПОдвала кликаем на три точечки.
В открывшемся окне нужно выбрать ИтогоСумма.
Теперь запускаем отладку и проверяем считается ли итог по колонке в табличной части документа.
Вот мы и сделали автоматический подсчет итогов по колонке. Таким образом можно подсчитать итого во всех колонках и в любых документах.
Скриншоты, опубликованные в данной статье, являются цитатами и иллюстрациями программного продукта «1C:Предприятие», авторское право на который принадлежит ЗАО 1С.
Отображение ИТОГа в Подвале таблицы
Похожие FAQ
Еще в этой же категории
Как на управляемой форме разместить список регистра сведений с отбором? 15
Решение рассмотрено для элемента справочника (Контрагент и регистр КонтактнаяИнформация) 1. Создание реквизита: Добавляем новый реквизит формы (. не путать с реквизитом справочника . ) с типом " ДинамическийСписок" В поле " Основная табли Поле выбора
Заполнение списка значений в элементе поле выбора на форме 10
//Заполнение списка перебором данных // Элемент формы МетаданныеВыбор имеет тип – Произвольный, Использование – Режим выбора из Списка, кнопка списка Для Каждого Метаданное из Метаданные.РегламентныеЗадания Цикл ЭлементыФормы.МетаданныеВыбор.Спи Как установить параметр динамического списка? 9
Когда используете для вывода данных динамический список и произвольный запрос, то бывают ситуации когда надо указать параметр используемый в этом запросе. Ниже пример вывода данных регистра сведений в карточке клиента Для вывода используется исп Как обновить динамический список или реквизит на форме клиента? 7
Если вы, открыв форму справочника или документа, выполнили некоторое действие, код который должен изменить состояние данных в динамических списках или значение реквизита. Данные изменены, но в открытой форме осталось все как было, можно конечно закр Форма
Программное создание таблицы значений с условным оформлением 6
Как создать на форме таблицу и сделать для нее подсветку содержимого колонки в строке по условию? Итак для начала нам надо добавить реквизиты в форму. Для этого у нас есть метод: ИзменитьРеквизиты(). Перед тем как его использовать мы сформируем ма Посмотреть все в категории Работа с Формой (Диалог) и её элементами
В управляемых формах существует возможность вывода итоговой суммы по колонке табличной части, без программирования. Путем настроек свойств колонки табличной части в конфигураторе. Порядок действий следующий:
- Открыть конфигуратор;
- Открыть форму документа, где присутствует табличная часть, по которой будем выводить итоги;
- Открыть свойства колонки, по которой необходимо вывести итого (нажать правой кнопкой мыши -> свойства);
- Заполнить свойства в соответствии в соответствии со скриншотом;
При этом как видно из скриншота есть возможность выбрать сумму по колонке, либо количество строк в документе.
После этого обновляем программу (f5), переходим из конфигуратора в пользовательский режим, внизу таблицы появятся рассчитанные итоги.
Читайте также: