Страницы: 1
RSS
1С:ДО как добавить строку в табличную часть документа
 

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

Как можно быстро добавить строки в табличную часть? Можно поделиться и прямым путем, и решением задачи в обход. Заранее спасибо!

 
Цитата
Стас написал:
Коллеги, здравствуйте. Есть текущий документ с таблицей. В процессе работы потребовались дополнительные строки для внесения новых данных по поступающим товарам.   Как можно быстро добавить строки в табличную часть? Можно поделиться и прямым путем, и решением задачи в обход. Заранее спасибо!

Ну вообще самый простой вариант сделать вот так.

// Док - ссылка на документ

ОбъектДок = Док.ПолучитьОбъект();

НоваяСтрока = ОбъектДок.Товары.Добавить();

// Заполнить значения реквизитов.

НоваяСтрока.Количество = 13;

НоваяСтрока.Цена = 5500;

// Записать документ.

ОбъектДок.Записать();

Имейте в виду, что если вы потом захотите удалить строки из табличной части документа, то действуйте вот так:

// Товары табличная часть документа

ОбъектДокумента = Документ.ПолучитьОбъект();

ОбъектДокумента.Товары.Очистить();

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

Второй вариант: непосредственно в окне редактирования метаданных. Для этого нужно мышкой выделить ветвь дерева документа, вызвать контекстное меню и выполнить единственную команду «Добавить».

 

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

Чтобы добавить строку, нужно вызвать у коллекции метод Добавить(). Метод возвращает объект - добавленный элемент коллекции. В случае с табличной частью это будет строка табличной части:

СтрокаСостава = ДокументОбъект.Состав.Добавить();

СтрокаСостава.Количество = 10;

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

После добавления, откроется палитра свойств, где можно выбрать нужный тип реквизита табличной части 1С (по умолчанию реквизиту присваивается тип строка). Количество колонок вы можете создавать практически неограниченное количество в зависимости от вашей прикладной задачи.

 
Цитата
Андрей написал:
Мы работали в своем время несколько с другим вариантом. Во встроенном языке существуют общие принципы работы с коллекциями. Каждая табличная часть является коллекцией строк.  Чтобы добавить строку, нужно вызвать у коллекции метод Добавить(). Метод возвращает объект - добавленный элемент коллекции. В случае с табличной частью это будет строка табличной части:  СтрокаСостава = ДокументОбъект.Состав.Добавить();  СтрокаСостава.Количество = 10;  Коллега выше говорил о вариантах создания табличной части. Но само по себе ее формирование не имеет смысла, поскольку информация должна храниться в разрезе колонок. Создать колонку можно посредством окна метаданных.  После добавления, откроется палитра свойств, где можно выбрать нужный тип реквизита табличной части 1С (по умолчанию реквизиту присваивается тип строка). Количество колонок вы можете создавать практически неограниченное количество в зависимости от вашей прикладной задачи.

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

НоваяСтрока=ТабличнаяЧасть.Добавить();

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

А если строку нужно добавить в абсолютно любое место табличной части, хоть в начале, хоть в конце, то воспользуйтесь такой формулой (при этом имейте в виду, что последующие строки будут сдвинуты):

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

//Индекс - номер добавляемой строки. Нумерация строк начинается с нуля.

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

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

 

Коллеги, спасибо всем за ответы! А вот еще такой момент. Есть док заказа покупателя. Выбирая среди реквизитов необходимость доставки, в табличной части автоматически (по идее же так) должна появляться данная услуга и ее стоимость. Сама услуга с ценой создана в справочнике «Номенклатура».

Как в этом случае автоматически добавить строку в табличную часть документа из справочника?

 
Цитата
Стас написал:
Коллеги, спасибо всем за ответы! А вот еще такой момент. Есть док заказа покупателя. Выбирая среди реквизитов необходимость доставки, в табличной части автоматически (по идее же так) должна появляться данная услуга и ее стоимость. Сама услуга с ценой создана в справочнике «Номенклатура».   Как в этом случае автоматически добавить строку в табличную часть документа из справочника?

Для начала найдите в справочнике «Номенклатура» нужную вам услугу (сделать этом можно по коду). При установке флага "НеобходимостьДоставки" добавляете эту услугу

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

В этой строчке Строка.Цена = НужнаяУслуга.РеквизитЦеныТовара; вместо "РеквизитЦеныТовара" впишите название реквизита справочника номенклатуры, где у вас хранится цена.

Может это и не самый лучший способ решения данного вопроса, так как если удалить из справочника номенклатуры Услуги Доставка или поменять ее код, программа будет искать код данной услуги, а такого кода либо нет, либо там будет другая услуга. Но мы работали с таким методом. Поэтому и предложил его.

Страницы: 1