значение из табличной части документа в форму списка |
Я |
23.04.07 — 18:29
Добрый день. подскажите как в 1с8 вытянуть значение из табличной части документа и присвоить его полю в форму списка этих документов
1 — 23.04.07 — 18:31
Самое простое — сделать соответствующий реквизит документа. Не красиво, но эффективно.
2 — 23.04.07 — 18:34
спасибо, попробую.
3 — 24.04.07 — 12:51
реквизит я создал. но как передать ему значение из таблицы?
Возможно ли сделать через Запрос, а не через реквизит.
4 — 24.04.07 — 13:10
(0) Для чего это нужно?
Для отбора?
5 — 24.04.07 — 13:15
нет. просто вывести
6 — 24.04.07 — 13:31
(0) В событии ПриВыводеСтроки Табличного поля типа ДокументСписок :
ДанныеСтроки.ТвояКолонка = ДанныеСтроки.Ссылка.ТабЧасть.НужныйРеквизит
Для того чтобы твоя колонка имела данные создай реквизит формы на закладке реквизиты и поставь его в данные твоей колонки.
7 — 24.04.07 — 13:37
6 + такой вывод крайне нерацционален, «жрёт» много времени, но штатных средств для вывода значений табчастей, вроде, нет
8 — 24.04.07 — 15:16
Процедура СписокПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
ДанныеСтроки.ПолеЗаказПокупателя = ДанныеСтроки.Ссылка.Заказы.ЗаказПокупателя;
КонецПроцедуры
Заказы — табличная часть
ЗаказПокупателя — нужный реквизит
Выдает ошибку: Поле объекта не обнаружено (ЗаказПокупателя)
Может сначала нужно через какуюто функцию достать этот реквизит
9 — 24.04.07 — 15:22
Вообще текст ставится через ОформлениеСтроки.Ячейки.<ТвоёПоле>.УстановитьТекст(
А если в ТЧ несколько строк, что должно попадать?
10 — 24.04.07 — 15:25
(0) угу сначала в поле списка реквизитТЧ пихни, потом сделай быстрый отбор по нему, сортировку. Плавали…Знаем…
Делай этот реквизит реквизитом шапки сразу и не мудри.
11 — 24.04.07 — 15:26
ОформлениеСтроки.Ячейки.ПолеЗаказПокупателя.УстановитьТекст(ДанныеСтроки.Ссылка.Заказы.ЗаказПокупателя);
Таже ошибка.
В таблице «Заказы» одна строка.
12 — 24.04.07 — 15:28
(8) Извини насчёт реквизита формы, который можно сделать данными колонки я погорячился. Убери «данные» колонки, оставь только элемент управление! И в этом же обработчике пиши:
Ячейка = ОформлениеСтроки.Ячейки.ИмяКолонки;
Ячейка.УстановитьТекст(ДанныеСтроки.Ссылка.Заказы.Получить(0).ЗаказПокупателя);
Это во-первых!
Во-вторых: в какой именно строке табличной части ты получаешь значение? В моём примере 1я строка.
13 — 24.04.07 — 15:39
Заработало. Строка у меня одна.
Всем огромное спасибо.
14 — 24.04.07 — 15:45
(12) Вот чует мое сердце, что следущей темой у merlin_o будет:
как сортировать в списке доков по реквизиту ТЧ?
15 — 24.04.07 — 15:48
(14) )ну тут ничего не поделаешь…реквизит ТЧ в поле списка не пихнёшь
16 — 24.04.07 — 15:54
(15) ну ты же подсказал как пихнуть его туда — теперь готовься….
17 — 24.04.07 — 15:54
все может быть. я только начинаю изучать 1с8 и многие подводные камни мне не видны. Но yalex предложил вариант который у меня заработал. С резвизитов я чето не понял как ему передать значение, задал только тип.
yalex
18 — 24.04.07 — 16:13
(17) И правильно сделал что не понял! Эта фишка с реквизитами в табПоле не проходит, если реквизит не реквизит табчасти или не реквизит Объекта, который ты выводишь в список.
(16) Я в в (12) исправился), уже во 2й раз на теже грабли наступаю
Опубликовано ср, 18/04/2012 — 00:07 пользователем guru
1. Создаём Критерий отбора.
2. Выбираем тип данных, по которому будет производиться отбор в списке документов.
3. Выбираем справочники и документы, в которых будет применяться отбор.
4. Создаём новую форму списка копированием.
5. Добавляем реквизит формы с типом данных как и в критерии отбора.
6. Добавляем на форму поле ввода. (Данные – реквизит формы, созданный в п.5. Выбор групп и элементов – Элементы.)
7. Создаём обработчик события ПриИзменении.
//Отбор по номенклатуре
Процедура НоменклатураПриИзменении(Элемент)
Если ЗначениеЗаполнено(Номенклатура) Тогда
Отбор.ОтборПоНоменклатуре.Установить(Номенклатура);
Иначе
Отбор.ОтборПоНоменклатуре.Использование = Ложь;
КонецЕсли;
КонецПроцедуры
8. Устанавливаем созданную форму в качестве основной формы списка.
© При копировании материалов сайта ссылка на оригинал обязательна.
[Практика программирования] Управляемые формы 1С 8: как программно добавить поле флажка в форму объекта и форму списка
Программное добавление элементов на управляемую форму отличается от добавления на форму обычного интерфейса. При этом синтакс-помощник не очень то изобилует конкретикой и примерами в некоторых вопросах.
Общее условие, что все элементы формы программно добавляются на стороне сервера, а не на клиенте, как можно решить изначально, учитывая архитектуру платформы 1С: Предприятие 8.2 и 8.3. Да, «&НаСервере» и преимущественно в процедуре «ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)» формы документа или элемента справочника или формы списка.
Например, при программном добавлении флажка на управляемую форму, важно понимать, что в терминах нового интерфейса флажок исходно является полем ввода. И уже потом у этого поля ввода определяется вид.
Просто и понятно об это в синтакс-помощнике не написано. Но аксакалы сразу с вопросом «как создать программно флажок на управляемой форме» стабильно «отправляют» в помощник, в котором для методов «Добавить» или «Вставить» коллекции «ЭлементыФормы» написано короток и ни одного примера того, как программно определить, чтобы элемент формы был флажком.
По старой привычке, но уже понимая разницу типов можно по ошибке указать Тип(«ПолеФлажкаФормы») второго параметра метода, но это будет неправильно и вызовет ошибку:
Нажатие на изображении увеличит его
Недопустимое значение параметров
{ЗаказКлиента.Форма.ФормаДокумента.Форма(16)}: ФлажокДеньгиПолучены = Элементы.Добавить(«_ДеньгиПолучены», Тип(«ПолеФлажкаФормы»), ГруппаСтатусПриоритет);
по причине:
Недопустимое значение параметров
Поэтому надо учесть, что во второй параметр помещается «Тип(«ПолеФормы»)». А потом определяется «Вид» — «ВидПоляФормы.ПолеФлажка». Не забыть связать флажок с реквизитом объекта конфигурации через свойство «ПутьКДанным».
1 | | | ФлажокДеньгиПолучены = Элементы.Добавить(«_ДеньгиПолучены», Тип(«ПолеФормы»), ГруппаСтатусПриоритет); |
2 | | | ФлажокДеньгиПолучены.Вид = ВидПоляФормы.ПолеФлажка; |
3 | | | ФлажокДеньгиПолучены.ПутьКДанным = «Объект.ДопМФ_ДеньгиПолучены»; |
Так же справочно добавлю код по тому, как программно разместить на управляемой форме колонку с флажком в табличной части формы. Где «Таблицаформы» — табличная часть, в которую добавляется программно новая колонка. Для колонки исходно тип определяется как «ПолеФормы», потом через свойство вид определяется «ПолеФлажка». «ПутьКДанным» — указывается с учетом названия табличной части объекта (справочник или документ) конфигурации, в примере название табличной части «Табличная часть».
1 | | | ТаблицаФормы = Форма.Элементы.ТаблицаФормы; |
2 | | | КолонкаВставки = ТабЧасть.ПодчиненныеЭлементы.Найти(«ТабличнаяЧастьТовары»); |
3 | | | КолонкаФлажок = Форма.Элементы.Вставить(«_Флажок», Тип(«ПолеФормы»), ТаблицаФормы, КолонкаВставки); |
4 | | | КолонкаФлажок.Вид = ВидПоляФормы.ПолеФлажка; |
5 | | | КолонкаФлажок.Заголовок = «Ф.»; |
6 | | | КолонкаФлажок.ПутьКДанным = «Объект.ТабличнаяЧасть._Флажок»; |
И еще пример вывода колонки с флажком для реквизита документа типа «Булево» формы списка. Колонка вставляется передо колонкой «Номер», которая на форме носит имя «СписокНомер». Так же как и в предыдущем примере — при добавлении элемента формы определяется кодом, что флажок — это «поле формы», потом с помощью свойства уточняется вид поля формы. Связь через свойство «ПутьКДанным», где «Список» — название основного реквизита управляемой формы.
1 | | | ТаблицаФормы = Элементы.Список; |
2 | | | КолонкаВставки = ТаблицаФормы.ПодчиненныеЭлементы.Найти(«СписокНомер»); |
3 | | | |
КолонкаДеньгиПолучены = Элементы.Вставить(«_ДеньгиПолучены», Тип(«ПолеФормы»), ТаблицаФормы, КолонкаВставки); |
4 | | | КолонкаДеньгиПолучены.Вид = ВидПоляФормы.ПолеФлажка; |
5 | | | КолонкаДеньгиПолучены.Заголовок = «Д.»; |
6 | | | КолонкаДеньгиПолучены.Подсказка = «Деньги получены»; |
7 | | | КолонкаДеньгиПолучены.ПутьКДанным = «Список.ДопМФ_ДеньгиПолучены»; |
Так же может возникнуть задача для программного вывода колонки реквизита объекта в управляемую форму списка, у которой основной реквизит — это динамический список. И порядок действий немного отличается. Отличие описано в другой публикации, раскрывающей вопрос о том как в 1С 8 разместить колонку реквизита динамического списка, в которой попутно рассматривается вопрос того, как программно изменить запрос динамического списка.
Оцените, оказалась ли эта публикация полезна для Вас?
© www.azhur-c.ru 2013-2020. Все права защищены. Использование текстов и изображений с данной страницы без письменного разрешения владельца запрещено. При использовании материалов с данной страницы обязательно указание ссылки на данную страницу.
04-10-2021
Журавлев А.С.
(Сайт azhur-c.ru)
Назад
На чтение 5 мин Просмотров 2.8к. Опубликовано 02.11.2021
Содержание
- Остатки в списке документов
- Неверный путь
- Оптимальное решение
- Обращайте внимание
Рассмотрим задачу, когда нужно вывести дополнительные реквизиты и сведения в общем списке элементов. Рассмотрим на примере конфигурации УТ 11, в справочник Номенклатура добавлен дополнительный реквизит Артикул клиента.
Открываем список элементов справочника Номенклатура, выбираем меню Все действия – Изменить форму… (рис. 1):
Рис. 1. Все действия – Изменить форму…
В открывшемся окне Настройка формы у Списка номенклатуры находим поле Ссылка, выделяем его и нажимаем Добавить поля (рис. 2):
Рис. 2. Добавление полей
Далее в открывшемся окне Выберите поля для размещения в форме выбираем нужный дополнительный реквизит Артикул клиента и нажимаем ОК (рис. 3):
Рис. 3. Выбор дополнительного реквизита
Поле Артикул клиента появляется на форме Настройка формы, можно переместить его, нажимая на стрелочки Вверх, Вниз. После выбора позиции нажимаем ОК (рис. 4):
Рис. 4. Дополнительный реквизит в списке полей
В списке Номенклатуры появилась колонка с дополнительным реквизитом Артикул клиента (рис. 5):
Рис. 5. Новая колонка в списке
Можно выгрузить в файл получившийся список, меню Все действия – Вывести список… (рис. 6):
Остатки в списке документов
Решим следующую задачу: в списке документов «Заказы поставщику» нам необходимо добавить новую колонку «Остаток по заказу», которая будет отображать остаток для документа в регистре накопления «Заказы поставщику» на текущую дату.
Реализовать это нужно в конфигурации «Управление производственным предприятием» версии 1.3.
Неверный путь
Рассмотрим самый «очевидный» путь, он же самый простой. Большинство начинающих программистов делают именно так. У табличного поля формы, которое привязано к реквизиту формы с типом «ДокументСписок» есть событие «ПриВыводеСтроки». В нем напишем Запрос к остаткам по заказу для выводимой строки и полученный результат присвоим ячейке текущей строки в колонке «Остаток». Вот так будет выглядеть код обработчика события «ПриВыводеСтроки»:
Дело сделано! Задача решена! Но! Событие «ПриВыводеСтроки» вызывается для каждой строки отдельно. То есть, если в список выводится 30 строк, то запрос будет формироваться столько же раз! Может есть другой путь?
Оптимальное решение
Другой путь есть. Оптимальное решение кроется в использовании события «ПриПолученииДанных». Это событие вызывается один раз, когда происходит получение порции данных списком документов. В контексте этого события нам доступны данные, которые получила платформа. Поэтому мы можем их обработать одним запросом. Вот программный код обработчика «ПриПолученииДанных» для решения этой задачи:
Результат работы такой же, как и для варианта с использованием события «ПриВыводеСтроки», но есть одно НО.
Обращайте внимание
Самое главное отличие заключается в скорости работы. Вот сравнение времени выполнения для обоих вариантов решения задачи:
При использовании «ПриВыводеСтроки» время формирования списка выполняется дольше практически в четыре раза! Не смотря на это, не рекомендую добавлять подобные поля в список документов, поскольку, в любом случае, это потребует дополнительных ресурсов серверной машины. Лучше используйте отчеты.
Искала приемлемое решение для идентификации графика работы сотрудников при оформлении кадровых документов, в условиях когда одной позиции штатного расписания могут относиться несколько различных графиков работы.
Задача:
Производство. Вахтовый метод работы, сменные графики, когда вахтовый цикл составляет 1 месяц, 2 месяца и 3 месяца. Территория — местность приравненная к районам крайнего севера (МСК), со всеми вытекающими последствиями для учета. По спец. оценке условий труда (СОУТ) количество дней отпуска будет изменяться в зависимости от класса «вредности». Этот факт мы также обязаны предусмотреть при составлении графика. А именно будет изменяться количество дней оплачиваемого отдыха за работу сверх нормы. Итак, условий много. Было решено создавать графики с учетом всех условий, максимально приближено к реальным. Ежемесячные особенности, к примеру изменения дат и количества дней в пути, корректировать индивидуальными.
На выходе получили более 50 графиков работ. Встал вопрос как их идентифицировать при приеме и переводе сотрудников. Заказчик поставил задачу разработать внутренние нормативные документы для упрощения работы кадровой службы. Начали описывать. Договорились что для информативности унифицируем названия графиков. Но по факту этого оказалось недостаточно. Очень хотелось иметь ещё и номер. Структура элемента справочника Графики работы сотрудников к нашему разочарованию не имеет нумерации.
Я пошла искать подобные темы. Форумчане в голос твердили что без снятия конфигурации с поддержки не обойтись. Вот пример такой темы: https://buh.ru/forum/forum18375/topic80453/
Но на моем проекте жёсткое условие, конфигурацию с поддержки не снимать. Подумав пару часов, нашла решение. Применила дополнительные реквизиты и настройки списка.
Решение:
1. Создаем дополнительный реквизит к справочнику Графики работы сотрудников
Как видно на рисунке выше, дополнительный реквизит самый простой, тип строка.
2. Для удобства переместила доп. реквизит на форме элемента справочника вверх
3. В форме списка справочника — Все действия (или «Ещё», если работаете в режиме Такси) — Изменить форму. Добавим на форму поле «Ссылка»
4. Теперь идем в Настроить список (там же, во «Все действия») Условное оформление — Добавим текст, но выберем не Строка, а Поле компоновки данных — ДополнительныеРеквизиты.Значение
5. В качестве оформляемого поля выбираем Ссылка
6. Сохраняем настройки. При необходимости, передаем свои настройки другим пользователям. И радуемся обновленному списку справочника
Буду рада если кому-нибудь пригодится такое решение.
- Распечатать
Оцените статью:
- 5
- 4
- 3
- 2
- 1
(0 голосов, среднее: 0 из 5)
Поделитесь с друзьями!