Как заполнить колонку реквизита в табличной части 1с

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

Иногда возникает необходимость вывода в табличное поле документа (или любого другого объекта, имеющего табличную часть) дополнительных колонок с данными, которые не содержатся непосредственно в табличной части. Реализовать это на платформе 1С: Предприятие 8.1 или 8.2 в режиме обычного приложения (без использования управляемых форм) было достаточно просто, чего не скажешь об управляемых формах в 1С 8.2.

Быстрый переход

  • Реализация на платформе 1С: Предприятие 8.1 (или в обычном приложении)
  • Реализация на платформе 1С: Предприятие 8.2 (8.3 управляемое приложение)
  • Как добавить реквизит объекта в таблицу формы

Реализация на платформе 1С: Предприятие 8.1 (или в обычном приложении)

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

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

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

// обработчик события «ПриПолученииДанных» табличного поля «Товары»
Процедура ТоварыПриПолученииДанных(Элемент, ОформленияСтрок)
    Для Каждого ОформлениеСтроки Из ОформленияСтрок Цикл
        Номенклатура = ОформлениеСтроки.ДанныеСтроки.Номенклатура;
        Если ЗначениеЗаполнено(Номенклатура) Тогда
            ОформлениеСтроки.Ячейки.Цена.ОтображатьТекст = Истина;
            ОформлениеСтроки.Ячейки.Цена.Текст = Формат(Номенклатура.Цена,«ЧЦ=15; ЧДЦ=2»);
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры

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

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

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

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

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

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

kontargentinn-dobalvenie-v-polya-tablitsy

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

// служебная функция получения значения реквизита объекта (выполняется на сервере)
&НаСервере
Функция ЗначениеРеквизита(Объект,ИмяРеквизита);
    Возврат Объект[ИмяРеквизита];
КонецФункции

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

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

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

// служебная процедура для заполнения колонки «ИНН» табличного поля «Контрагенты»
&НаСервере
Процедура ОбновитьДанныеКолонкиИНН()
    Запрос = Новый Запрос(
    «ВЫБРАТЬ РАЗРЕШЕННЫЕ
    |    Контрагенты.Ссылка КАК Контрагент,
    |    Контрагенты.ИНН
    |ИЗ
    |    Справочник.Контрагенты КАК Контрагенты
    |ГДЕ
    |    Контрагенты.Ссылка В(&СписокКонтрагентов)»
    );
    Запрос.УстановитьПараметр(«СписокКонтрагентов»,Объект.Контрагенты.Выгрузить().ВыгрузитьКолонку(«Контрагент»));
    Выборка = Запрос.Выполнить().Выбрать();
    Для Каждого Стр Из Объект.Контрагенты Цикл
        Если Выборка.НайтиСледующий(Стр.Контрагент,«Контрагент») Тогда
            Стр.ИНН = Выборка.ИНН;
        Иначе
            Стр.ИНН = «»;
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры

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

&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
    ОбновитьДанныеКолонкиИНН();
КонецПроцедуры

&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
    ОбновитьДанныеКолонкиИНН();
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
    ОбновитьДанныеКолонкиИНН();
КонецПроцедуры 

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

primer-dopolnitelnoj-kolonki-v-spiske

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

Как добавить реквизит объекта в таблицу формы

dobavit-rekvizit-obekta-v-spisok-tablitsy-formy

Никогда не пишите рекламное объявление, которое вы не хотели бы предложить прочесть собственной семье. Вы не стали бы лгать собственной жене. Не лгите и моей.

Табличные части существуют у многих объектов в 1С:

  • Справочники
  • Документы
  • Отчеты и обработки
  • Планы счетов
  • Планы видов характеристик
  • Планы видов расчета
  • Бизнес-процессы и задачи

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

Рассмотрим некоторые приемы работы с табличными частями.

Как обойти табличную часть

Для обхода табличной части можно использовать цикл Для каждого

Для каждого Строка из ТабличнаяЧасть Цикл

Сообщить(Строка.РеквизитТабличнойЧасти);

КонецЦикла;

На каждой итерации в переменную Строка передается очередная строка табличной части. Значения реквизитов строки можно получить выражением Строка.ИмяРеквизита.

Как получить и обойти выделенные строки табличной части

Для вывода информации из табличной части объекта служит элемент формы Табличное поле. Для включения возможности выделения нескольких строк на табличном поле нужно установить значение Множественный у его свойства Режим выделения.

Работа с табличной частью объектов в 1СДля получения перечня выделенных строк используется следующий код:

ВыделенныеСтроки=ЭлементыФормы.ИмяТабличногоПоля.ВыделенныеСтроки;

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

ВыделенныеСтроки=ЭлементыФормы.ИмяТабличногоПоля.ВыделенныеСтроки;

Для каждого Строка из ВыделенныеСтроки Цикл

//содержимое цикла

КонецЦикла;

Как программно выделить строки табличной части (табличного поля) и снять выделение

Чтобы программно снять выделение строк табличного поля:

ЭлементыФормы.ИмяТабличногоПоля.ВыделенныйСтроки.Очистить();

Чтобы программно выделить все строки табличного поля:

Для каждого ТекущаяСтрока Из ТабличнаяЧасть Цикл
ЭлементыФормы.ИмяТабличногоПоля.ВыделенныеСтроки.Добавить(ТекущаяСтрока);
КонецЦикла;

Как очистить табличную часть

ТабличнаяЧасть.Очистить();

Как получить текущую строку табличной части

Текущая строка — это срока, в которой у пользователя в данный момент находится курсор. Чтобы ее получить, нужно обратиться к элементу управления на форме, который связан с табличной частью.

Для обычных форм код будет выглядеть так:

ЭлементыФормы.ИмяТабличногоПоля.ТекущиеДанные;

Для управляемых форм:

Элементы.ИмяТабличногоПоля.ТекущиеДанные;

Как добавить новую строку в табличную часть

Добавление новой строки в конец табличной части:

НоваяСтрока=ТабличнаяЧасть.Добавить();
НоваяСтрока.Реквизит1=«Значение»;

Добавление новой строки в любое место табличной части (последующие строки будут сдвинуты):

НоваяСтрока=ТабличнаяЧасть.Вставить(Индекс)
//Индекс — номер добавляемой строки. Нумерация строк начинается с нуля.

НоваяСтрока.Реквизит1=«Значение»;

Как программно заполнить реквизиты строки табличной части

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

Создаваемая обработчиком процедура имеет три параметра:

  • Элемент — содержит элемент управления ТабличноеПоле.
  • НоваяСтрока — булево. Содержит значение Истина, если добавляется новая строка табличной части, и Ложь, если пользователь начал редактировать уже существующую строку.
  • Копирование — булево. Содержит значение Истина, если пользователь копирует строку, и Ложь в остальных случаях.

Рассмотрим пример. Допустим, нам нужно заполнить реквизит табличной части СчетУчета, в случае, когда добавляется новая строка. При редактировании существующей строки изменять счет учета не нужно.

Процедура ТабличнаяЧастьПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)

//Если пользователь редактирует существующую строку, то ничего не делаем
Если НЕ НоваяСтрока Тогда
Возврат;
КонецЕсли;

//Если же строка новая, устанавливаем счет учета
ТекСтрока = Элемент.ТекущиеДанные; //Получили текущую строку табличной части
ТекСтрока.СчетУчета = ПланыСчетов.Хозрасчетый.НужныйСчетУчета;
КонецПроцедуры

Заполнение колонки табличной части

Я
   MistaEr

21.01.14 — 11:16

Доброго дня!

Обычная форма. Нужно заполнить колонку табличной части нажатием кнопки. Вовсе не хочется хранить эту колонку как реквизит табличной части, она нужна не всегда и должна заполняться только при нажатии кнопки. ОформлениеСтрок работает только в процедурах события табличной части, а мое событие — НажатиеМояКнопка.

  

Партнерская программа EFSOL Oblako

   Godofsin

1 — 21.01.14 — 11:20

ЭлементыФормы

   MistaEr

2 — 21.01.14 — 11:24

ЭлементыФормы.Товары.Колонки.МояКолонка.Данные не работает по индексу. хорошо бы всю колонку заполнить из выборки или из массива.

   Михаил Козлов

3 — 21.01.14 — 11:32

Заведите таблицу значений, как реквизит формы (не отображая). По кнопке — заполняйте данными. При ПолученииСтроки выводите значение из этой ТЗ.

   Godofsin

4 — 21.01.14 — 11:35

(3) +1. Ну или у ТП данные ставишь созданную ТЗ.

   zak555

5 — 21.01.14 — 11:36

что за секретная колонка ?

   MistaEr

6 — 21.01.14 — 11:38

(3) А что передавать параметром ОформлениеСтроки в процедуру ПриВыводеСтроки? Ведь я эту процедуру уже вызываю из своего события?

   MistaEr

7 — 21.01.14 — 11:39

(5) Да ничего секретного. Процент наценки. Я еще буду его изменять при редактировании суммы.

   MistaEr

8 — 21.01.14 — 11:41

Вроде все так легко и просто, но я не хочу хранить эти данные и это не должно заполняться при открытии документа, поэтому это просто колонка табличного поля.

   Godofsin

9 — 21.01.14 — 11:42

(8) Ну и не храни! Кто заставляет-то? Не хочешь как в (3), тогда циклом.

   MistaEr

10 — 21.01.14 — 11:45

(9) — (6)

   MistaEr

11 — 21.01.14 — 11:46

(10) При нажатии моей кнопки не произойдет событие ПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)

   zladenuw

12 — 21.01.14 — 11:46

(6) зачем передавать. нажимаешь свою кнопку. проставляешь флаг процент наценки, и вызываешь обновить ТЧ. где пишешь условие если флагпн то выводишь процент наценки. если ложь то не делаешь нечего

   MistaEr

13 — 21.01.14 — 11:49

(3) (12) Спасибо, попробую!!

  

MistaEr

14 — 21.01.14 — 14:51

Заполняю в цикле, в процедуре ТоварыПриПолученииДанных(), в типовых конфигурациях заполняется тоже в цикле.

Быстрый старт в Python для 1С Разработчиков | 1s-to-python.ru

Опытные программисты 1С в основном добавляют какие либо реквизиты на форму программно, это касается в первую очередь типовых конфигураций в которые вносятся изменения. Так как в этом случае гораздо проще потом производить обновление, сравнивать конфигурации. Поэтому это должен уметь каждый даже самый начинающий 1С -ник. Тем более что сделать это достаточно просто, в предыдущих статьях я уже затрагивал эту тему, рассказывал про программное добавление команд, сегодня же попробуем поработать с табличной частью документа, а именно добавить новый реквизит ТЧ программно, использовать будем управляемые формы.

Программное добавление колонок в ТЧ управляемой формы

Что бы на первых порах не запутаться я возьму в качестве примера простенький созданный мной документ «Поступление» у которого есть табличная часть, со следующими реквизитами «Номер», «Наименование», Количество» и «Цена».

1С Добавление колонок в ТЧ

Давайте программно добавим еще один реквизит скажем «Комментарий». Для этого необходимо через конфигуратор открыть событие «При создании на сервере».

Как программно добавить реквизит табличной части управляемой форм

И в эту процедуру добавить следующий код.

// добавим реквизит в табличную часть
	МассивРеквизитов = Новый Массив;
	МассивРеквизитов.Добавить(Новый РеквизитФормы("Комментарий", Новый ОписаниеТипов("Строка"), "Объект.Товары", "Комментарий", Ложь));
	ИзменитьРеквизиты( МассивРеквизитов );
	
	Эл = Элементы.Добавить("Колонка1", Тип("ПолеФормы"), Элементы.Товары);
	Эл.Вид = ВидПоляФормы.ПолеВвода;
	Эл.ПутьКДанным = "Объект.Товары.Комментарий"; 

Программное добавление колонок в ТЧ управляемой формы

Сохраняем изменения и проверяем что получилось, и видим что в табличной части появился еще один реквизит.

1С как программно добавить реквизит табличной части

Это программный реквизит который создается в момент создания документа, в конфигураторе вы его не увидите.

1С как программно добавить колонку в табличную часть любого документа

Таким образом можно добавить реквизит табличной части в любой конфигурации 1С.

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

В предыдущей статье мы узнали, как настраивать и конфигурировать табличные части объектов 1С 8.3. В этой статье мы изучим некоторые вопросы программной работы с табличными частями 1С.

Заполнение табличной части 1С 8.3

Очень часто встречается задача заполнить табличную часть какими-нибудь  значениями, например результатом выполнения запроса.  Для демонстрации реализуем пример, в котором выполняется заполнение табличной части. Сделаем небольшую учебную задачу: будем заполнять табличную часть документа всей номенклатурой, которая не помечена на удаление. Количество при этом будет равно 1. Для заполнения табличной части документа нам необходимо работать с  одноименной таблицей реквизита Объект, который является основным реквизитом управляемой формы.

Табличная часть реквизита Объект

Поскольку по условиям задачи, необходимо отобрать всю не помеченную на удаление номенклатуру, то оптимально это сделать при помощи запроса, в котором я буду получать все не помеченные элементы справочника номенклатура. Я создал команду, при выполнении которой будет заполняться табличная часть, и разместил её на форме.

Команда 1С и размещение её на форме

Исполнение команды будет выполняться в серверном контексте, поскольку объект Запрос не работает в клиентском контексте на тонком клиенте.

&НаСервере
Процедура ЗаполнитьТоварамиНаСервере()

    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |    Товары.Ссылка КАК Товар,
                   |    1 КАК Количество
                   |ИЗ
                   |    Справочник.Товары КАК Товары
                   |ГДЕ
                   |    НЕ Товары.ПометкаУдаления";
    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
        НовСтр = Объект.СписокТоваров.Добавить();
        ЗаполнитьЗначенияСвойств(НовСтр,Выборка);
    КонецЦикла;

КонецПроцедуры

&НаКлиенте
Процедура ЗаполнитьТоварами(Команда)
    ЗаполнитьТоварамиНаСервере();
КонецПроцедуры

При обходе запроса, я использую метод Добавить табличной части объекта (вообще это метод объекта, который имеет тип ДанныйФормыКоллекция, именно в этот тип преобразуется табличная часть документа-объекта, при создании на сервере). Данный метод является функцией, которая создаёт и возвращает новую строку.

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

Очистка табличной части документа 1С 8.3

Если  мы реализуем данный код, то он будет не совсем корректен: каждый раз при выполнении этого кода будут добавляться новые строки, а вполне возможно, что пользователю старые строки не нужны. Поэтому, будем очищать имеющиеся строки,  перед добавлением новых строк. Для этого воспользуемся методом Очистить объекта СписокТоваров, который имеет тип  ДанныйФормыКоллекция.

Объект.СписокТоваров.Очистить();

После выполнения этого метода вся табличная часть будет очищена.

Текущая строка табличной части 1С 8.3

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

Текущая строка табличной части 1С 8.3

Например, может возникать ситуация, что мы редактируем какое-нибудь поле текущей строки таблицы на форме, и нам нужно, чтобы было пересчитано другое поле  (или несколько полей) этой текущей строки. Например, мы изменяем цену (или количество) нашей табличной части, и необходимо, чтобы сумма автоматически была пересчитана.

Для решения данной задачи нужно воспользоваться свойством ТекущиеДанные элемента с типом ТаблицаФормы, который соответствует нужной табличной части. Свойство ТекущиеДанные возвращает значение полей текущей строки.

Возврат полей свойством ТекущиеДанные

Для того, чтобы отработать изменение текущего поля цены, создадим обработчик события ПриИзменении этого поля.

Обработчик ПриИзменении поля таблицы формы

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

&НаКлиенте
Процедура СписокТоваровЦенаПриИзменении(Элемент)
	ТекДанные = Элементы.СписокТоваров.ТекущиеДанные;
	Если ТекДанные = Неопределено Тогда
		Возврат; //если пустая таблица
	КонецЕсли;
	ТекДанные.Сумма = ТекДанные.Количество * ТекДанные.Цена;
КонецПроцедуры

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

&НаКлиенте
Процедура УмножитьНа2(Команда)
    ТекДанные = Элементы.СписокТоваров.ТекущиеДанные;
    Если ТекДанные = Неопределено Тогда
        Возврат; //если пустая таблица
    КонецЕсли;
    ТекДанные.Количество = ТекДанные.Количество * 2;
    ТекДанные.Сумма = ТекДанные.Количество * ТекДанные.Цена;
КонецПроцедуры

Теперь доработаем этот пример: после увеличения текущей строки будем сдвигать текущую строку на строку вниз. Для этого допишем предыдущий код:

Идентификтор = Элементы.СписокТоваров.ТекущаяСтрока;
ИдентификторСлед = Идентификтор + 1;

Если ИдентификторСлед < Объект.СписокТоваров.Количество() Тогда
    Элементы.СписокТоваров.ТекущаяСтрока = ИдентификторСлед;
КонецЕсли;

В этом коде мы получаем идентификатор текущий строки при помощи свойства таблицы управляемой формы ТекущаяСтрока, и если мы не выходим за приделы таблицы, то сдвигаем нашу текущую строку на один шаг вниз.

Также при помощи текущей строки можно находить аналогичную строку в соответствующей табличной части основного реквизита формы Объект, которую также можно изменять (строка на форме тоже изменится автоматически). Мы ранее сделали пересчет суммы при изменении цены, теперь сделаем пересчет суммы при изменении количества, но напрямую через реквизит Объект.

&НаКлиенте
Процедура СписокТоваровКоличествоПриИзменении(Элемент)
    Идентификтор = Элементы.СписокТоваров.ТекущаяСтрока;
    Если Идентификтор = Неопределено Тогда
        Возврат;
    КонецЕсли;
    ТекСтрока = Объект.СписокТоваров.НайтиПоИдентификатору(Идентификтор);
    Если ТекСтрока = Неопределено Тогда
        Возврат;
    КонецЕсли;
    ТекСтрока.Сумма = ТекСтрока.Цена * ТекСтрока.Количество;
КонецПроцедуры

В этом коде мы используем метод НайтиПоИдентификатору переменной Объект.СписокТоваров, которая имеет типа ДанныйФормыКоллекция, этот метод получает элемент коллекции по указанному идентификатору. Если этот элемент найден, то мы можем с ними работать, причем данные на форме изменяться автоматически.

Обход табличной части 1С

Часто возникают задачи обойти табличную часть и изменить какие-либо значения в столбцах. В предыдущих примерах мы изменяли текущую стоку таблицы, теперь реализуем пример, когда нужно изменить все строки. В этом случае нет необходимости обращаться к элементам формы, можно работать напрямую с основным реквизитом Объект.

&НаКлиенте
Процедура УмножитьВсеНа2(Команда)

    ТабОбх = Объект.СписокТоваров;
    Для Каждого стрТабл из ТабОбх Цикл
        стрТабл.Количество = стрТабл.Количество * 2;
        стрТабл.Сумма = стрТабл.Цена * стрТабл.Количество;
    КонецЦикла;

КонецПроцедуры

Остальные статьи по теме конфигурирования в 1С:

Конфигурирование табличный частей объектов 1С

Справочники в 1С 8.3

Документы в 1С 8.3

Предопределенные элементы справочников 1С

Формы справочников в 1С 8.3

Более подробно и основательно конфигурирование в 1С дается в моей книге:

Книга «Программировать в 1С за 11 шагов»

Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»

  1. Книга написана понятным и простым языком — для новичка.
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Научитесь понимать архитектуру 1С;
  4. Станете писать код на языке 1С;
  5. Освоите основные приемы программирования;
  6. Закрепите полученные знания при помощи задачника;

О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»

Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.

  1. Очень доступный и понятный язык изложения
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Поймете идеологию управляемого приложения 1С
  4. Узнаете, как разрабатывать управляемое приложение;
  5. Научитесь разрабатывать управляемые формы 1С;
  6. Сможете работать с основными и нужными элементами управляемых форм
  7. Программирование под управляемым приложением станет понятным

Промо-код на скидку в 15% — 48PVXHeYu

Вступайте в мои группы:

Вконтакте: https://vk.com/1c_prosto
Фейсбуке: https://www.facebook.com/groups/922972144448119/
ОК: http://ok.ru/group/52970839015518
Твиттер: https://twitter.com/signum2009

1

2

Показывать по
10
20
40
сообщений

Новая тема

Ответить

Максим Гринюк

Дата регистрации: 05.09.2016
Сообщений: 43

Всем здравствуйте.
В табличную часть Товары документа Заказ покупателя добавил новую колонку. Источника данных у неё нет. Нужно при открытии документа заполнить колонку данными. Только никак не получается «увидеть» это поле. Если обращаться через Товары.ИмяКолонки, система не видит её. Через ЭлементыФормы и ЭтаФорма то же самое. Получается только если использовать стандартную процедуру ПриИзменении, но этот вариант мне не подходит.
Не добавил в табличную часть новую колонку как реквизит, потому что данные в ней необходимы лишь при открытии документа, и то не каждого, а на который сработает условие. В базу их нет смысла записывать.
Подскажите, как заполнить построчно новую колонку.

Prikum

активный пользователь

офлайн

Дата регистрации: 18.02.2002
Сообщений: 20842

Максим Гринюк, добавили именно в ТЧ или на форму?

Максим Гринюк

Дата регистрации: 05.09.2016
Сообщений: 43

Prikum, в ТЧ, правой кнопкой мыши — добавить колонку.

Prikum

активный пользователь

офлайн

Дата регистрации: 18.02.2002
Сообщений: 20842

Максим Гринюк, один из моих ранних быдло кодов:

Код
&НаСервере
Процедура ОбновитьПроцентыНадбавки()
      Для Каждого СтрокаТЧ ИЗ Объект.Фармация Цикл
            //Вычислим надбавку                        //(СтрокаТЧ.ЦенаИзготовителя*(ДопустимаяНаценка/100))
            Если СтрокаТЧ.Номенклатура.ТипЛекарства=Перечисления.ТипыЛекарств.ДетскоеПитание Тогда
                  Если Объект.СуммаВключаетНДС Тогда
                        СтрокаТЧ.Надбавка = ((СтрокаТЧ.ЦенаВрознице -СтрокаТЧ.Цена)/СтрокаТЧ.Цена)*100;
                  Иначе
                        СтрокаТЧ.Надбавка = ((СтрокаТЧ.ЦенаВрознице -СтрокаТЧ.Цена-(СтрокаТЧ.СуммаНДС/СтрокаТЧ.Количество))/СтрокаТЧ.Цена)*100;
                  КонецЕсли;
                  
            Иначе
                  Если Объект.СуммаВключаетНДС Тогда
                        СтрокаТЧ.Надбавка = ((СтрокаТЧ.ЦенаВрознице -СтрокаТЧ.Цена)/СтрокаТЧ.ЦенаИзготовителя)*100;
                  Иначе
                        СтрокаТЧ.Надбавка = ((СтрокаТЧ.ЦенаВрознице -СтрокаТЧ.Цена-(СтрокаТЧ.СуммаНДС/СтрокаТЧ.Количество))/СтрокаТЧ.ЦенаИзготовителя)*100;
                  КонецЕсли;
            КонецЕсли;
            
      КонецЦикла;
      //Сумма документа общая с НДС
      Объект.СуммаДокумента = Объект.Фармация.Итог("Сумма")+Объект.Фармация.Итог("СуммаНДС");
      
КонецПроцедуры
 

Надбавка это колонка добавленная на форму, своего источника не имеет, в процедуре «ПриОткрытии» идет вызов данной процедуры в которой заполняется данная колонка.

Максим Гринюк

Дата регистрации: 05.09.2016
Сообщений: 43

Prikum, я пробовал проходить циклом, конфигуратор не видит добавленную колонку. Вылетает с ошибкой.

Prikum

активный пользователь

офлайн

Дата регистрации: 18.02.2002
Сообщений: 20842

Максим Гринюк, код покажите! и картинку с ТЧ , потому как непонятно, что и где Вы там добавили.

Максим Гринюк

Дата регистрации: 05.09.2016
Сообщений: 43

Prikum,я писал выше как и куда добавлял. Не как реквизит ТЧ, а правой кнопкой на ТЧ — Добавить колонку. Источника данных у колонки нет.

Код
Для Каждого Строка Из ЭтотОбъект.Товары Цикл

      Строка.НоменклатураПоставщика = Отбор.Номенклатура;

КонецЦикла
 

Пробовал вместо ЭтотОбъект ещё ЭтаФорма, ЭлементыФормы и просто Товары. Всё равно не видит.

Prikum

активный пользователь

офлайн

Дата регистрации: 18.02.2002
Сообщений: 20842

Максим Гринюк, мне в принципе все равно что и куда Вы там добавляли, проблема то не у меня! В реквизиты формы добавьте эту колонку, а потом выведите ее на саму форму.

Максим Гринюк

Дата регистрации: 05.09.2016
Сообщений: 43

Prikum, перед тем как отвечать на сообщения, прочитай внимательно проблему. Я по-русски написал почему я не хочу добавить колонку как реквизит. Теперь понятно, откуда у тебя столько звездочек репутации. Пишешь всякую ересь не по делу и советуешь то, что уже написано выше.

Tanya

Дата регистрации: 03.12.2001
Сообщений: 8412

Максим Гринюк,

Цитата
я не хочу добавить колонку как реквизит

А вы не путаете реквизит формы и реквизит документа ?

Заполнить столбец табличной части одним и тем же значением из регистра сведений

Автор balanarchik, 10 мая 2017, 23:20

0 Пользователей и 1 гость просматривают эту тему.

Здравствуйте!
Имеется регистр сведений с измерением «Категория» и ресурсом «Сумма». Так же имеется запись в этом регистре с категорией «Продуктивно» и Суммой «100»
Есть документ с табличной частью и столбцом Стоимость продуктивности.
Как для всех строчек автоматически заполнить столбец Стоимость продуктивности значением 100 из регистра сведений?


Цитата: balanarchik от 10 мая 2017, 23:20
Здравствуйте!
Имеется регистр сведений с измерением «Категория» и ресурсом «Сумма». Так же имеется запись в этом регистре с категорией «Продуктивно» и Суммой «100»
Есть документ с табличной частью и столбцом Стоимость продуктивности.
Как для всех строчек автоматически заполнить столбец Стоимость продуктивности значением 100 из регистра сведений?

//можно при открытии формы
Запрос = Новый Запрос;
Запрос.Текст = «Выбрать Категория, Сумма из РегистрыСведений.ВашРегистрСведений где Категория = &Категория»;
//здесь нужно определить что у вас будет в качестве параметра — какое значение
Запрос.УстановитьПараметр(«Категория», КатегорияПродуктивности);
Выборка = Запрос.Выполнить().Выбрать();
Для каждого стр из ВашаТабличнаяЧасть цикл
    стр.СтоимостьПродуктивности = Выборка.Сумма;
КонецЦикла
Примерно как-то так.


а можно сразу

Для Каждого Стр Из ТЧ Цикл
    Стр.СтоимостьПродуктивности = 100;
КонецЦикла;


Цитата: Gennadiyy от 12 мая 2017, 09:52
а можно сразу
Для Каждого Стр Из ТЧ Цикл
    Стр.СтоимостьПродуктивности = 100;
КонецЦикла;

Конечно, можно. Но вдруг он запись в регистре поменяет. И будет не 100, а 200 например…


Теги:

  • Форум 1С

  • Форум 1С — ПРЕДПРИЯТИЕ 8.0 8.1 8.2 8.3 8.4

  • Конфигурирование, программирование в 1С Предприятие 8

  • Заполнить столбец табличной части одним и тем же значением из регистра сведений

Похожие темы (5)

Рейтинг@Mail.ru

Rambler's Top100

Поиск

Понравилась статья? Поделить с друзьями:
  • Как заполнить платежку по новым реквизитам налоговой
  • Как оплатить счет в сбер бизнес онлайн по реквизитам
  • Как заполнить реквизиты для перечисления в налоговую
  • Как оплатить счет на оплату в сбербанк бизнес онлайн
  • Как запросить банковские реквизиты в сбербанк онлайн