Эту и другие технические статьи написали наши программисты 1С и получили за них премии. Если вы тоже работаете с 1С и любите делиться опытом, приходите разработчиком в Neti
Продолжаем рассматривать варианты размещения элементов на форме на примере вывода реквизитов документа на форму списка документов, состав документа представлен на рис. 1:
Рис. 1. Реквизиты документа
Добавим на форму списка документов колонку со значением статуса приходной, статус приходной находится в регистре сведений. Открываем форму списка документа пр_Приходная. Если формы списка еще нет, то нажимаем значок лупы на вкладке Формы окна свойств документа (рис. 2):
Рис. 2. Создание формы списка документа
В открывшемся окне Конструктор формы документа нажимаем Далее > и выбираем поля, которые хотим вывести на форму (поля — это реквизиты и табличные части документа), нажимаем Готово. Открывается окно формы списка документа.
В форме списка документа открываем свойства реквизита Список (правой кнопкой мышки — Свойства), в окне Свойства ставим галочку у свойства Произвольный запрос (рис. 3):
Рис. 3. Свойства реквизита формы Список
После установки свойства Произвольный запрос состав свойств раздела Объект изменится (рис. 4):
Рис. 4. Состав раздела Объект окна Свойства
Нажимаем на гиперссылку Открыть свойства Настройка списка (рис. 4). Открывается окно Динамический список (рис. 5):
Рис. 5. Окно Динамический список
Добавляем в запрос текст для получения статуса приходной из регистра сведений. В примере используется регистр сведений пр_СтатусПриходной со значением свойства Периодичность — В пределах дня, состав регистра представлен на рис. 6:
Рис. 6. Состав регистра с данными о статусе приходной
Изменить запрос в окне Динамический список можно нажав на кнопку Конструктор запроса… или можно сразу написать нужный текст в поле Запрос (рис. 7):
Рис. 7. Измененный запрос
Текст запроса:
ВЫБРАТЬ Документпр_Приходная.Ссылка, Документпр_Приходная.ПометкаУдаления, Документпр_Приходная.Номер, Документпр_Приходная.Дата, Документпр_Приходная.Проведен, Документпр_Приходная.Организация, Документпр_Приходная.ТипПриходной, Документпр_Приходная.Склад, Документпр_Приходная.Подразделение, Документпр_Приходная.Ответственный, Документпр_Приходная.Комментарий, пр_СтатусПриходнойСрезПоследних.Статус ИЗ Документ.пр_Приходная КАК Документпр_Приходная ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.пр_СтатусПриходной.СрезПоследних КАК пр_СтатусПриходнойСрезПоследних ПО пр_СтатусПриходнойСрезПоследних.Приходная = Документпр_Приходная.Ссылка
Важно проверить, что в поле Основная таблица окна Динамический список указан нужный документ (рис. 7), иначе, если поле будет не заполнено, то в форме списка документов не будет возможности добавлять новые документы и открывать существующие (и не будет привычных кнопок Создать, Создать копированием и т.п.). Нажимаем ОК. Теперь в составе реквизита Список те поля, которые были выбраны в запросе (рис. 8):
Рис. 8. Состав реквизита Список
Перетаскиваем новое поле Статус из вкладки Реквизиты на вкладку Элементы в состав элемента Список (рис. 8). И размещаем поле Статус на вкладке Элементы после полей Дата, Номер (рис. 9):
Рис. 9. Размещение поля Статус
У реквизитов (на вкладке Реквизиты) в составе динамического списка можно отметить свойство Использовать всегда (рис. 8). Это нужно, когда поля должны быть в составе динамического списка в любом случае, даже если они не будут добавлены на форму как элементы, например, будут использоваться в дальнейшем в коде модуля формы списка документа.
Проверяем работу формы списка документа в пользовательском режиме: появилась колонка Статус, содержащая значение статуса приходной из регистра сведений (рис. 10):
Рис. 10. Новая колонка формы списка
|
|||
D_Pavel
12.12.11 — 10:59 |
Есть форма списка документов, хочу создать колонку в списке чтобы отображать рассчитываемые данные, но когда добавляю в списке, она не отображается пока не укажу путь к данным, данные берутся только из реквизитов списка, а в реквизиты списка свой реквизит не добавляется. |
||
DrShad
1 — 12.12.11 — 11:04 |
на то они и управляемые |
||
D_Pavel
2 — 12.12.11 — 11:06 |
И что, колонку с рассчитываемыми данными нельзя сделать? |
||
DrShad
3 — 12.12.11 — 11:06 |
да наздоровье |
||
D_Pavel
4 — 12.12.11 — 11:09 |
Еще кто-нибудь модет помочь? |
||
DrShad
5 — 12.12.11 — 11:11 |
ЖКК? |
||
Dem1urg
6 — 12.12.11 — 11:17 |
Источник данных для формы списка документов — динамический список. Это можно настроить. Вплоть до того, что написать свой запрос. |
||
D_Pavel
7 — 12.12.11 — 11:22 |
(5) ДХЗ |
||
AllJoke
8 — 12.12.11 — 11:32 |
(7) На список щелкаешь и нажимаешь добавить реквизит списка. |
||
AllJoke
9 — 12.12.11 — 11:33 |
Точнее колонку реквизита. |
||
D_Pavel
10 — 12.12.11 — 12:32 |
Почему у меня надпись «Добавить колонку реквизита» не активна, серым цветом? |
||
D_Pavel
11 — 12.12.11 — 13:30 |
ап |
||
D_Pavel
12 — 12.12.11 — 13:42 |
хелп |
||
Defender aka LINN
13 — 12.12.11 — 13:46 |
(10) Потому что в динамическом списке колонки определяются запросом. |
||
D_Pavel
14 — 12.12.11 — 17:22 |
как сделать чтобы добавилась колонка? |
||
D_Pavel
15 — 12.12.11 — 20:32 |
ап |
||
Поручик
16 — 12.12.11 — 20:47 |
(15) Откройте для себя в свойствах динамического списка ПроизвольныйЗапрос. |
||
ProProg
17 — 12.12.11 — 20:55 |
5000 рублей |
||
Поручик
18 — 12.12.11 — 20:58 |
5049 рублей |
||
ProProg
19 — 12.12.11 — 20:59 |
(18) некрасивая цена. лучше уж 5999 рублей и в подарок суперхренорезка. |
||
D_Pavel
20 — 12.12.11 — 21:26 |
(16) Спасибо! |
||
ProProg
21 — 12.12.11 — 21:42 |
(20) спасибо в корман не положишь. Сам то насколько часто советы даешь? Я вот за 12 лет уже пару десятков тысяч советов дал. Только потом понял, а что толку их давать. задавальщики даже поиском не пользуются. |
||
Поручик
22 — 12.12.11 — 22:21 |
(20) Тебе дали такой же совет в посте (6), только в другой формулировке. Учи матчасть и читай ЖКК. |
||
D_Pavel 23 — 13.12.11 — 06:40 |
(21) Я всем помогаю когда могу, потому и сам не стесняюсь просить помощи. |
TurboConf — расширение возможностей Конфигуратора 1С
Допустим, вы завели новый дополнительный реквизит номенклатуры, заполнили его и теперь вам нужно добавить этот реквизит в список. Как это сделать не прибегая к программированию и изменению конфигурации? Рассмотрим в данной статье.
Добавление колонки с дополнительным реквизитом в форму списка справочника в 1С 8.3
Рассмотрим механизм добавления колонки с дополнительным реквизитом на примере конфигурации УТ 11 (подойдет также и для Бухгалтерия 3.0, Розница 2.2, 2.3 и др. конфигураций на управляемых формах).
У нас есть дополнительный реквизит под названием «Категория цветов».
Дополнительный реквизит номенклатуры
Нам требуется вывести его в список номенклатуры следующим образом:
Колонка с дополнительным реквизитом
Для этого в форме списка номенклатуры нажимаем кнопку «Еще»/ «Изменить форму».
Кнопка изменить форму
Попадаем в настройки формы, тут нам нужно найти таблицу и в ней поле «Ссылка», выделяем его и нажимаем кнопку «Добавить поля». Обратите внимание, что кнопка «Добавить поля» будет неактивна, пока выделены поля не ссылочного типа.
Кнопка добавить поля
После чего откроется окно в котором вы можете выбрать любые реквизиты номенклатуры, в том числе и дополнительные. Выбираем нужный реквизит и нажимаем «Ок».
Выбор реквизита
Выбранный реквизит появится в настройках формы. Отмечаем его галочкой и нажимаем «Применить».
Новая колонка
Вот мы и добавили новую колонку с нашим дополнительным реквизитом в форму списка номенклатуры.
Колонка с дополнительным реквизитом
Надеюсь, статья была вам полезна. Если что-то не получилось — вы всегда можете обратиться ко мне.
Рассмотрим задачу, когда нужно вывести дополнительные реквизиты и сведения в общем списке элементов. Рассмотрим на примере конфигурации УТ 11, в справочник Номенклатура добавлен дополнительный реквизит Артикул клиента.
Открываем список элементов справочника Номенклатура, выбираем меню Все действия – Изменить форму… (рис. 1):
Рис. 1. Все действия – Изменить форму…
В открывшемся окне Настройка формы у Списка номенклатуры находим поле Ссылка, выделяем его и нажимаем Добавить поля (рис. 2):
Рис. 2. Добавление полей
Далее в открывшемся окне Выберите поля для размещения в форме выбираем нужный дополнительный реквизит Артикул клиента и нажимаем ОК (рис. 3):
Рис. 3. Выбор дополнительного реквизита
Поле Артикул клиента появляется на форме Настройка формы, можно переместить его, нажимая на стрелочки Вверх, Вниз. После выбора позиции нажимаем ОК (рис. 4):
Рис. 4. Дополнительный реквизит в списке полей
В списке Номенклатуры появилась колонка с дополнительным реквизитом Артикул клиента (рис. 5):
Рис. 5. Новая колонка в списке
Можно выгрузить в файл получившийся список, меню Все действия – Вывести список… (рис. 6):
Рис. 6. Вывод списка в файл
Автор: Дина Королева
Подписывайтесь на канал
«Полезный 1С»
В телеграм канале — наш практический опыт, бизнес-кейсы и способы повышения эффективности компании, которые мы опробовали внутри группы Neti.
Возврат к списку
[Практика программирования] Управляемые формы 1С 8: как программно изменить запрос динамического списка и программно вывести колонку добавленного реквизита списка
Ранее уже описывалось в соответствующей статье то, как разместить программно в форме колонку реквизита объекта базы (например, документа или справочника). В этой статье будет рассмотрено как программно добавить колонку с флажком в список управляемой формы с динамическим списком, данные для которого выбираются произвольным запросом.
Для программного добавления элементов управляемой формы должно быть учтено условие о том, что добавление происходит на стороне сервера, а не на клиенте (не в процедуре «ПриОткрытии», как это было в обычном приложении). И так можно ошибочно подумать по старой привычке (если есть опыт программирования в обычном интерфейсе), учитывая архитектуру платформы 1С: Предприятие 8.2 и 8.3. Ведь процедура «ПриОткрытии» формы есть и в управляемом приложении, но через не создать программно и не разместить элементы для прикладной задачи. Поэтому «&НаСервере» и преимущественно в процедуре «ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)» формы документа или элемента справочника или формы списка теперь происходит программное добавление каких-либо элементов формы.
В общем информация о том, как программно изменить текст запроса динамического списка, использующего произвольный запрос можно найти на странице сайта ИТС 1С, если у Вас есть доступ. Но если доступа нет, то можете сильно не расстраиваться — информация на странице как и во многих случаях методологической информации от 1С носит условно практический характер. А это означает, что мелочи и нюансы, о которых бы было неплохо упомянуть на указанной странице ИТС, не упомянуты никак. И их понимание будет происходить на практике. Вот часть такой практики изложена ниже на прикладной задаче.
Нажатие на изображении увеличит его
Рис. 1. Пример теоретического кода для программного изменения текста произвольного динамического списка для управляемой формы в 1С 8.
Прикладная задача заключалась в том, чтобы выводить программно в управляемую форму списка документов «Реализация товаров и услуг» колонку добавленного реквизита документа. Реквизит с именем «ДопМФ_Отгружено» тип «Булево», в данном примере добавлен в расширении, но может быть и добавлен в основной конфигурации, если она на частичной поддержке. Как вывести программно элемент формы, содержащей флажок, добавленного реквизита, повторимся, можно изучить в соответствующей статье, о которой уже упоминалось в начале страницы.
Рис. 2. Пример добавленного реквизита объекта конфигурации (документа) в 1С 8 для дальнейшего программного вывода колонки в управляемую форму списка объекта.
Прежде чем перейти непосредственно к программному добавлению колонки элемента таблицы формы нужно добавить его выбор в текст запроса динамического списка. Таким образом подготовительный рабочий исполняемый код получается примерно следующим:
1 | | | СвойстваСписка = ОбщегоНазначения.СтруктураСвойствДинамическогоСписка(); |
2 | | | СвойстваСписка.ОсновнаяТаблица = «Документ.РеализацияТоваровУслуг»; |
3 | | | СвойстваСписка.ДинамическоеСчитываниеДанных = Истина; |
4 | | | ИсхТекстаЗапроса = СписокРеализацииТоваровУслуг.ТекстЗапроса; |
5 | | | |
СвойстваСписка.ТекстЗапроса = СтрЗаменить(ИсхТекстаЗапроса, «ВЫБРАТЬ», «ВЫБРАТЬ»+Символы.ПС+«РеализацияТоваровУслуг.ДопМФ_Отгружено КАК ДопМФ_Отгружено,»); |
6 | | | |
ОбщегоНазначения.УстановитьСвойстваДинамическогоСписка(Элементы.СписокРеализацииТоваровУслуг, СвойстваСписка); |
7 | | | //СписокРеализацииТоваровУслуг.Параметры.УстановитьЗначениеПараметра(«Параметр1», 42); |
Прокомментируем его основные моменты. В строке 1 происходит получение структуры через функцию «СтруктураСвойствДинамическогоСписка()» общего модуля «ОбщегоНазначения» для заполнения ее значений и передачи для заполнения свойств динамического списка. Для ключа «ОсновнаяТаблица» структуры в строке 2 указывается название основной таблицы, которая используюется для динамического списка, в примере это «Документ.РеализацияТоваровУслуг». Значение ключа структуры в строке 3 «ДинамическоеСчитываниеДанных» в значении «Истина». В строках 4 и 5 ведется произвольная модификация запроса.
Нажатие на изображении увеличит его
Рис. 3. Пример исходного текста произвольного запроса динамического списка реквизита управляемой формы списка документов.
Можно просто подготовить новый или измененный исходный текст запроса для указания его в ключе «ТекстЗапроса» структуры. В данном же случае была использована хитрость, чтобы минимизировать зависимость от изменений разработчиков. Происходит модификация исходного текста запроса, который определили разработчики, за счет замены подстроки «ВЫБРАТЬ», которая есть в любом запросе, на подстроку так же содержащее это обязательное слово текста запроса и текст для выборки значения добавленного реквизита документа «ДопМФ_Отгружено». Таким образом, доработка в расширении может сломаться тогда, когда разработчики существенным образом изменять исходный текст запроса. И на примере строки 5 помещаем новый вариант текста запроса в структуру. В данном примере получилось, что запрос содержит одну дополнительную строчку, чтобы выбирать значения добавленного реквизита. Порядок следования полей выборки в запросе для динамического списка не имеет значения.
Т.е. в практической задаче начало запроса программно изменялось:
С: |
ВЫБРАТЬ РеализацияТоваровУслуг.Ссылка, |
На: |
ВЫБРАТЬ РеализацияТоваровУслуг.ДопМФ_Отгружено КАК ДопМФ_Отгружено, РеализацияТоваровУслуг.Ссылка, |
Особенно обратим внимание на то, к каким объектам ведется обращение в строке 7, когда выполняется установка новой настройки для динамического списка с помощью процедуры «УстановитьСвойстваДинамическогоСписка» общего модуля «ОбщегоНазначения». В этом месте важно не перепутать, т.к. в типовой конфигурации названия элемента формы таблицы-списка и реквизита формы одинаковые. А важно, что первым параметром передается элемент управляемой формы — Таблица реквизита формы. Не перепутать его с названием реквизита формы, к которому ранее обращались для получения текста исходного запроса. Вторым параметром передается заполненная структура. Строка 7 в данном примере закомментирована, т.к. в данной прикладной задаче в тексте запроса не содержится параметров. Но, если параметр есть, то устанавливается через свойство «Параметры» и метод «УстановитьЗначениеПараметра» реквизита управляемой формы, а не элемента формы. Установка значения по имени параметра по коду как для классического запроса в 1С: первое значение — текстовое имя параметра, второе значение — собственно значение для параметра.
Нажатие на изображении увеличит его
Рис. 4. Сравнение одноименных реквизита и элемента управляемой формы 1С 8 для программного изменения текста произвольного запроса динамического списка этого реквизита формы.
После модификации текста произвольного динамического запроса реквизита управляемой формы 1С 8, становится возможным размещение колонки нового реквизита. И теперь рассмотрим код для программного вывода, размещения, добавления (как будет угодно) колонки в элемент-таблицу формы.
Нажатие на изображении увеличит его
Рис. 5. Пример кода в 1С 8 для программного вывода колонки нового реквизита объекта конфигурации, в частности документа, в элемент «Таблица» управляемой формы
По логике программного вывода в прикладной задачи новая колонка, напомним с флажком, должна выводиться сразу после колонки «Номер», содержащей данные номеров документов списка. Код на скриншоте содержит условие на то, что если колонка «Номер» по каким то причинам, например скрыта пользователем в управляемой форме, что вполне может быть (странно но может быть, ведь номер для документа является ключевым реквизитом для работы пользователей), то тогда новая колонка будет выведена самой первой в списке.
1 | | | ТаблицаФормы = Элементы.СписокРеализацииТоваровУслуг; |
2 | | | КолонкаВставки = ТаблицаФормы.ПодчиненныеЭлементы.Найти(«Номер»); |
3 | | | |
4 | | | КолонкаОтгружено = Элементы.Вставить(«_Отгружено», Тип(«ПолеФормы»), ТаблицаФормы, КолонкаВставки); |
5 | | | КолонкаОтгружено.Вид = ВидПоляФормы.ПолеФлажка; |
6 | | | КолонкаОтгружено.Заголовок = «О.»; |
7 | | | КолонкаОтгружено.Подсказка = «Отгружено»; |
8 | | | КолонкаОтгружено.ТолькоПросмотр = Истина; |
9 | | | КолонкаОтгружено.ШиринаЭлемента = 5; |
10 | | | КолонкаОтгружено.ПутьКДанным = «СписокРеализацииТоваровУслуг.ДопМФ_Отгружено»; |
Есть небольшие отличия от случая, который уже упоминался выше, добавления колонки для элемента формы Таблица динамического списка, как было описано смежной статье. В смежном случае был пример для таблицы, данными (ПутьКДанным) которой выступал «динамический список», но у которого основанием выступала таблица, а не произвольный запрос. Если отличия не учесть, то будут просто возникать ошибки. В данном же примере
Отличия заключаются в двух местах кода. Во-первых, это обращение к свойству «ШиринаЭлемента, а не просто «Ширина» как в случае, если колонка — это программно выводимая колонка динамического списка, но у которого указана «Основная таблица» и не используется произвольный запрос. Т.е. для программно добавляемой колонки динамического списка с произвольным запросом указывается свойство «ШиринаЭлемента».
Во-вторых, очень важно правильно указать значение свойства «ПутьКДанным», иначе можно получить ошибку:
Нажатие на изображении увеличит его
Рис. 6. Пример ошибки «Недопустимое значение» при указании неверного значения для свойства «ПутьКДанным» элемента управляемой формы .
{Документ.РеализацияТоваровУслуг.Форма.ФормаСписка.Форма(26)}: Ошибка при установке значения атрибута контекста (ПутьКДанным)
КолонкаОтгружено.ПутьКДанным = «Объект.СписокРеализацииТоваровУслуг.ДопМФ_Отгружено»;
по причине:
Недопустимое значение
Недопустимое значение
Конечно, подобную ошибку можно «поймать» и при других условиях. Но когда она касается свойства «ПутьКДанным», то это явно говорит о том, что указанное строковое значение попросту не верное. Следует тщательно проанализировать корректность ее составления, т.к. в реквизитах управляемых форм можно запутаться.
Нажатие на изображении увеличит его
Рис. 7. Демонстрация того, что данные элемента формы Таблица — это динамический произвольный запрос.
В текущей задаче реквизит формы (он не основной) носит имя «СписокРеализацийТоваровУслуг», а не так, как часто можно встретить в конфигурации, что основной реквизит формы носит имя «Объект». И значения для добавленной колонки берется из реквизита типа «ДинамическийСписок» и для элемента формы. Поэтому строка для «ПутьКДанным» — «СписокРеализацииТоваровУслуг.ДопМФ_Отгружено» с указанием через «.» имени нового реквизита.
Это все условия и нюансы, с которыми пришлось столкнуться на практике для программной модификации произвольного запроса динамического списка реквизита управляемой формы в 1С 8, чтобы потом программно вывести колонку нового реквизита объекта конфигурации базы в элемент «Таблица» формы .
Оцените, оказалась ли эта публикация полезна для Вас?
© www.azhur-c.ru 2013-2020. Все права защищены. Использование текстов и изображений с данной страницы без письменного разрешения владельца запрещено. При использовании материалов с данной страницы обязательно указание ссылки на данную страницу.
25-11-2021
Журавлев А.С.
(Сайт azhur-c.ru)
Назад
Любой документ в 1с имеет определенную форму. Если нам необходимо ее изменить, например добавить для видимости колонку, то сделать это можно следующим способом:
1) Заходим в документ и в правом верхнем углу нажимаем на кнопку «Еще».
2) В появившемся списке выбираем «Изменить форму».
3) В открывшейся окне настройки формы проверяем проставленные «V» — возможно у нужного поля галочка не стоит.
Если ее нет, то проставляем и нажимаем «Ок» (Для примера добавим в «Тип»).
Также можно расположить колонки в нужно порядке. Для этого повторно заходим в «Настройка формы» (п.1, 2) и воспользуемся синими стрелочками. Нужно выделить строчку, которую нужно переместить и нажимаем на нужную стрелочку («Вверх», «Вниз» в зависимости от того куда его нужно переместить колонку на форме- правее или левее).
Для примера переместим «Тип» сразу за колонкой «Номенклатура».
Если в списке нет нужного реквизита, то можно воспользоваться кнопкой «Добавить поля», но это работает не всегда — там где возможно кнопка будет активна.
Для примера выведем на форму «Вид номенклатуры». Для этого открываем «Настройка формы» (п.1, 2), выбираем строчку «Номенклатура» и нажимаем «Добавить поля».
В появившемся списке ставим галочку возле «Вид номенклатуры» и нажимаем «ОК».
В списке «Настройка формы» появится соответствующая строчка. Нажимаем «ОК».
Формы списка внутренних, входящих и исходящих документов позволяют пользователю самому настроить перечень колонок, которые будут отображаться в форме. В том числе в отдельные колонки можно выводить и дополнительные свойства, и дополнительные сведения документов.
Для настройки списка следует воспользоваться командой в форме списка: Все действия — Настройка — Изменить форму.
Для добавления колонки с дополнительным свойством следует в дереве настроек формы, в элементе формы «Список», выбрать поле «Ссылка» и нажать кнопку «Добавить поля».
При этом откроется окно со списком реквизитов документа для размещения в форме.
После выбора вами необходимого реквизита он появится в окне «Настройка формы» в составе элемента формы «Список», и будет добавлен в качестве дополнительной колонки в списке документов.
Так как не все документы (виды документов) в списке могут иметь данный дополнительный реквизит, то для документов, не имеющих его, в добавленной колонке будет выводиться значение по умолчанию для типа реквизита.