Remontnouta.ru

ПК Ремонт техники
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Дополнительная вычисляемая колонка в табличной части

Дополнительная вычисляемая колонка в табличной части

В начале коротко о том, как добавить дополнительную колонку в табличное поле на платформе 1С 8.1.

Предположим, что у нас есть некий документ с табличной частью “Товары” (с колонками “Номенклатура” и “Количество”) и нам нужно вывести дополнительную колонку “Цена”, которая бы содержала данные реквизита “Цена” элементов справочника “Номенклатура”, выбранных в строках табличной части.

Для этого нам достаточно добавить в форме документа новую колонку “Цена” в табличное поле, содержащее данные табличной части документа и написать следующий код в обработчике события “ПриПолученииДанных” этого табличного поля:

Хочу обратить внимание на то, что строки табличного поля обрабатываются порциями, по мере прокрутки списка.

Реализация на платформе 1С: Предприятие 8.2 (8.3 управляемое приложение)

На платформе 8.2 с использованием управляемых форм решение данной задачи потребует бóльших усилий. Это связано с тем, что за счет своей клиент-серверной ориентированности в платформе 8.2 в управляемом режиме отсутствуют некоторые привычные возможности — например, у табличного поля отсутствуют обработчики событий «ПриПолученииДанных» и «ПриВыводеСтроки», которые мы могли бы использовать для этих целей в 1С 8.1 или 8.2 в обычных формах.

Пусть в нашей конфигурации есть документ «ВводОстатковДолга» с табличной частью «Контрагенты» (с колонками «Контрагент» и «Сумма»). В свою очередь у справочника «Контрагенты» есть реквизит «ИНН», значение которого необходимо выводить в строках табличного поля.

[qu_spoiler title=»Примечание от ‘Капитально:» open=»yes» icon=»chevron-circle»]в статье взят неудачный пример т.к. реквизиты вынести можно получить гораздо проще, но тем не менее статья полезна для рассмотрения в учебных целях[/qu_spoiler]

Откроем управляемую форму документа, добавим новую колонку «ИНН» реквизита «Контрагенты» и перенесём её на закладку «Элементы» (для отображения в форме).

Читайте так же:
Блютуз адаптер в прикуриватель для автомобиля

Откроем палитру свойств поля «КонтрагентыКонтрагент» и добавим обработчик события «ПриИзменении»

// обработчик события «ПриИзменении» поля «Контрагент» в табличном поле «Контрагенты»
&НаКлиенте
Процедура КонтрагентыКонтрагентПриИзменении ( Элемент )
ТекДанные = Элементы . Контрагенты . ТекущиеДанные ;
ТекДанные . ИНН = ЗначениеРеквизита ( ТекДанные . Контрагент , «ИНН» ) ;
КонецПроцедуры

Это обеспечит нам изменение значения поля «ИНН» при выборе контрагента в строке табличного поля.
Теперь необходимо предусмотреть заполнение колонки «ИНН» при открытии формы документа, а так же после записи и при чтении на сервере.

Обновление данных после записи и при чтении на сервере необходимо в связи с тем, что иначе значения колонки «ИНН» будут очищаться каждый раз при возникновении этих событий. Для заполнения колонки «ИНН» опишем в модуле формы служебную серверную процедуру:

Затем добавим в модуль формы документа обработчики событий «ПриОткрытии», «ПриЧтенииНаСервере» и «ПослеЗаписиНаСервере», в каждой из которых будем вызвать описанную ранее служебную процедуру «ОбновитьДанныеКолонкиИНН»

Всё готово. Можно посмотреть на результат.

Статья найдена на просторах интернета

1С просто и понятно

Нажмите, чтобы связаться со мной:

Отсортировать табличную часть по колонке, которая не является реквизитом ,невозможно, используя метод «Сортировать».

Использование данного метода вернет вам ошибку: «Неверное имя колонки 1с».

1с сортировка табличной части управляемые формы

Табличная часть 1С

Для того чтобы отсортировать табличную часть по вычисляемой колонке, можно использовать следующий код, который, в данном примере, прописан в процедуре нажатия кнопки:

ТабЧасть=Товары.Выгрузить(); // создаем временную таблицу
ТабЧасть.Колонки.Добавить(«Артикул»); // добавляем в нее нужную колонку

Для каждого Стр из ТабЧасть цикл
Стр.Артикул=Стр.Номенклатура.Артикул; // переписываем информацию из расчетной колонки во временную таблицу
КонецЦикла;

ТабЧасть.Сортировать(«Артикул»); // Сортируем временную таблицу по нужной колонке
Товары.Загрузить(ТабЧасть); // Загружаем временную таблицу в табличную часть

Надеюсь, эта статья была вам полезна. Если у вас остались вопросы вы можете задать их в комментариях.)

Читайте так же:
Для чего нужен сервер печати

Что делать, если Ваш клиент не смог выйти из каменного века и вместо вменяемой часто модифицируемой под нужды современного мира конфигурации, у него неподъемный мамонт, который пережил несколько ледниковых эпох, такой неуклюжий, умирающий, но близкий к бизнесу и родной сердцу? Проблемы начинаются тогда, когда у этого мамонта отваливаются зубья, или его обладатель поглядывает на современные конфигурации и начинает желать новшеств в виде весоподъемности и скорости самолета. Да вообще и чтобы все, что должно работать, работало в конце концов, как, например, внезапно умерший сервис 1С:Контрагент! А у некоторых мамонтов, он, совершенно точно, провонял и усох. И вот как положить этот артефакт в микроволновку времени и вернуть к работоспособному состоянию.

12.05.2020 4257 0 G.Shatrov 6

Работа с табличной частью объектов в 1С : 7 комментариев

Приветствую!
Только начал изучать 1С.
Кое что уже знаю, но мало и опыта практически ноль.
Создал свою конфигурацию, пока только для тестов.
В данной конфигурации есть документ, назовем его «Заявка».
В данной заявке, есть табличная часть, в которой есть реквизит «Стоимость».
Получается, что таких документов много и мне нужно сложить все реквизиты «Стоимость» из всех документов «Заявка».
Вопрос.
Как мне это сделать?
Предполагаю, что нужно использовать функцию с экспортом, в которой будет цикл «Для Каждого ……»
Но как это оформить, пока не могу понять…

Сделать это можно по-разному. Цикл Для каждого, на мой взгляд, не очень подходящий вариант, т.к. будет работать слишком долго. Да и надо еще где-то список документов брать.

Я бы порекомендовал сделать запрос к табличной части документа (именно к табличной части, а не к документу). Выбрать там ваш столбец Стоимость и другие столбцы, если нужно. И применить функцию СУММА к этому столбцу. Подробнее и с примерами смотрите в статье Группировки в запросах 1С http://chel1c.ru/querry_group/

Читайте так же:
Добавление базы 1с в sql сервер

Спасибо!
Буду пробовать.

А может это подойдет?

Табличная часть (Tabular section)
Итог (Total)
Синтаксис:

Тип: Число; Строка.
Индекс либо имя колонки, по которой подсчитывается итог.
Возвращаемое значение:

Тип: Число; Неопределено.

Суммирует значения всех строк в указанной колонке.
Если в колонке установлен тип и он единственный, то при суммировании будет предприниматься попытка преобразования значения к типу Число.
Если колонке не присвоены типы, то в процессе суммирования будут принимать участие только значения, имеющие тип Число, значения других типов будут игнорироваться.
Если в колонке несколько типов и среди них есть тип Число, то в процессе суммирования будут принимать участие только значения, имеющие тип Число, значения других типов будут игнорироваться.
Если в колонке несколько типов и среди них нет типа Число, то результатом будет значение Неопределено.

Сервер, толстый клиент, внешнее соединение.
Пример:

Это подошло бы, если бы нужно было суммировать колонку в одном документе. А Юрию нужно суммировать колонку Стоимость всех документов.

Добрый день!
Достаточно ли будет обратиться в модуле формы к текущей строке табличной части или в модуле менеджера тоже нужно будет что-то прописать?

Не совсем понял, о чем конкретно вопрос.
Если о том, как получать и работать с текущей строкой табличной части, то в модуле менеджера ничего писать не нужно.

Как получить имя реквизита табличной части, а именно выбранной колонки.
Задача обойти все элементы табличной части по определенному реквизиту.

UPD #1 – Перефразировал
Как получить ИМЯ реквизита колонки ТЧ находясь в ячейке ТЧ.

  • Вопрос задан 09 апр. 2019
  • 294 просмотра

Пока буду использовать такой изврат.

Надеюсь что вскоре появится правильный ответ.

Ответ зависит от варианта разрабатываемого интерфейса.

Читайте так же:
Видеокарта amd radeon r9 290

Обычный интерфейс:
Элемент формы связанный с табличной частью "ТаблицаДанных" – ЭлементыФормы.ТаблицаДанных
Текущая колонка – ЭлементыФормы.ТаблицаДанных.ТекущаяКолонка
Имя реквизита формы для колонки – ЭлементыФормы.ТаблицаДанных.ТекущаяКолонка.Имя
Имя реквизита табличной части, который связан с колонкой – ЭлементыФормы.ТаблицаДанных.ТекущаяКолонка.Данные

Управляемый интерфейс
Элемент формы связанный с табличной частью "ТаблицаДанных" – Элементы.ТаблицаДанных
Текущая колонка – Элементы.ТаблицаДанных.ТекущийЭлемент
Имя реквизита формы для колонки – Элементы.ТаблицаДанных.ТекущийЭлемент.Имя
Имя реквизита табличной части, который связан с колонкой – Элементы.ТаблицаДанных.ТекущийЭлемент.ПутьКДанным (доступно только на сервере)

Имя реквизита формы для колонки – Элементы.ТаблицаДанных.ТекущийЭлемент.Имя

Элементы.ТаблицаДанных.ТекущийЭлемент.ПутьКДанным (доступно только на сервере)

Это имя элемента, но не реквизита.

Верно. В обоих блоках это именно имя элемента формы.

Но имя реквизита находится в конце данного пути, то есть необходимо разбить строку что бы получить имя реквизита. Другого варианта нет?

А в чем сложность? Однотипные строки типа Таблица.Реквизит – разбивать БСП-шной функцией на массив или самостоятельно сделать поиск точки и взять подстроку от следующего за точкой символа.

голоса
Рейтинг статьи
Ссылка на основную публикацию
Adblock
detector