1С 8.2, обход табличной части формы в цикле
Добрый день!
Подскажите как обойти табличную часть формы обработки в цикле.
Объясняю подробно, есть форма обработки, на данной форме имеется табличная часть ТабСотр, я пытаюсь обойти данную табличную часть в цикле
- 01.03.2011
- #2
puh14
- 01.03.2011
- #3
- 01.03.2011
- #4
puh14
- 01.03.2011
- #5
SaschaL
- 01.03.2011
- #6
Всем спасибо решение проблемы нашел сам.
А вот метод ЭлементыФормы.ТабСотр.ТекущиеДанные возвращает значение, только одно и тоже причем количество раз возвращаемого значения соответствует количеству строк в таблице. Причем значение которое программа возвращает он берет из строки в которой стоит курсор.
Всем спасибо, вопрос можно считать закрытым
puh14
- 01.03.2011
- #7
Эхх, не догадался — достаточно было Сообщить(Стр.Сотрудник);
Стр — это по сути строка табличной части, нафига еще строки кода ваять?
unknown181538
- 01.03.2011
- #8
SaschaL
- 01.03.2011
- #9
unknown181538
- 01.03.2011
- #10
Можно так :
Для каждого Тек Из ТабСтр Цикл
Сообщить(Тек.Сотрудник);
КонецЦикла;
можно так:
Для каждого тек Из ЭлементыФормы.ТабСтр Цикл
Сообщить(Тек.ТекущиеДанные.Сотрудник);
КонецЦикла;
обход данных табличной части формы в УФ
Нужно обойти данные табличной части формы в управляемом приложении. Как это сделать?
МояТаблица = ДанныеФормыВЗначение(ЭтаФорма.Товары, Тип("ТаблицаЗначений"));
так преобразовать не удается, не воспринимается ЭтаФорма.Товары
ФормаОбъекта = Объект.Ссылка.ПолучитьФорму();
Для Каждого Элемент Из ФормаОбъекта.Элементы Цикл
Если Тип(Элемент) = Тип("ТабличноеПоле") Тогда //элемент формы — табличное поле
Если Элемент.Имя = "Товары" Тогда
Сообщить("Это табличное поле!! " + Элемент.Имя );
//ТабПоле = ФормаОбъекта.ЭлементыФормы.Товары.Значение;
ТабПоле = Элемент.Значение;
Колво = ТабПоле.Количество();
Сообщить("Количество строк: " + Колво);
Для Каждого ТекущаяСтрока Из ТабПоле Цикл
Имя = ТекущаяСтрока.Номенклатура;
Сообщить(Имя);
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЦикла; // <-
так тоже не улавливает табличную часть товары
Для Каждого СтрокаТЧ Из Объект.Товары Цикл
(0) табличной части формы или табличной части объекта отображаемую на форме?
А попробовать ЭтаФорма.Элементы.Товары религия запрещает?
на клиенте ты можно обойти элементы, которые получены клиентов (не все, которые есть на сервере — если ты читаешь данные с сервера)
для обхода на клиенте можно использовать конструкцию вида
Для каждого стр Из ТЧ Цикл
(50) я уже при загрузке это делаю, загружается только строка
Вроде при создании нового элемента он прописывается, а при его нахождении, когда есть его ссылка, в поле встает все равно строка
(55) СправочникСсылка.УпаковкаНоменклатурыКлиента, сейчас только поправил, убрав строку и составной тип сам убрался потом
все равно присваивается как строка
НоменклатураКлиента = Док.Sheets(1).Cells(ДанныеНачинаютсяС, 3).Value;
Пока СокрЛП(НоменклатураКлиента) <>"" Цикл
НоваяСтрока = Объект.Товары.Добавить();
// 2015_06_08 LivingStar ->
Номенклатура = Неопределено;
НоваяСтрока.НоменклатураКлиента= ПолучитьНоменклатуруКлиентаНаСервере(НоменклатураКлиента,Номенклатура, ОбъектСсылка);
Если ЗначениеЗаполнено(Номенклатура) Тогда // И Не ЗначениеЗаполнено(Стр.Номенклатура) Тогда
НоваяСтрока.Номенклатура = Номенклатура;
КонецЕсли;
// <- LivingStar
НоваяСтрока.Наименование = Док.Sheets(1).Cells(ДанныеНачинаютсяС, 3).Value;
НоваяСтрока.ЕдиницаИзмерения = Док.Sheets(1).Cells(ДанныеНачинаютсяС, 5).Value;
//XXX_23-04-14++
//НоменклатураВБазе = Справочники.НоменклатураКлиента.НайтиПоНаименованию(Док.Sheets(1).Cells(ДанныеНачинаютсяС, 3).Value. Параметры.ОбъектСсылка.Партнер);
Если ЗначениеЗаполнено(НоваяСтрока.Наименование) Тогда
НоменклатураВБазе = ПолучитьНоменклатуруВБазе(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Параметры.ОбъектСсылка, "Партнер"), НоваяСтрока.Наименование);
Иначе
НоменклатураВБазе = ПредопределенноеЗначение("Справочник.НоменклатураКлиента.ПустаяСсылка");
КонецЕсли;
//—
Если НоменклатураВБазе = ПредопределенноеЗначение("Справочник.НоменклатураКлиента.ПустаяСсылка") Тогда
НоваяСтрока.НоменклатураКлиента = Док.Sheets(1).Cells(ДанныеНачинаютсяС, 3).Value;
//НоваяСтрока.Упаковка = Справочники.УпаковкиНоменклатуры.НайтиПоНаименованию(Док.Sheets(1).Cells(ДанныеНачинаютсяС, 5).Value);
НоваяСтрока.ВидРеквизитаНоменклатураКлиента = Ложь;
// LivingStar 2015_07_08 ->
//НоваяСтрока.Упаковка = ВернутьУпаковкуНаСервере(НоваяСтрока.Номенклатура, "УпаковкаНоменклатуры", Док.Sheets(1).Cells(ДанныеНачинаютсяС, 5).Value);
// <- LivingStar
// XXX++
Если НоваяСтрока.Свойство("УпаковкаКлиента") тогда
Новаястрока.УпаковкаКлиента = Док.Sheets(1).Cells(ДанныеНачинаютсяС, 5).Value;
КонецЕсли;
//—
// LivingStar 2015_07_08 -> ТипЗнч(НоваяСтрока.УпаковкаКлиента) = Тип("Строка")
Новаястрока.УпаковкаКлиента = ВернутьУпаковкуНаСервере(НоваяСтрока.НоменклатураКлиента, "УпаковкаНоменклатурыКлиента", ?(ТипЗнч(НоваяСтрока.УпаковкаКлиента) = Тип("Строка"), НоваяСтрока.УпаковкаКлиента, НоваяСтрока.УпаковкаКлиента.Наименование));
// <- LivingStar
Иначе
НоваяСтрока.НоменклатураКлиента = НоменклатураВБазе;
НоваяСтрока.Номенклатура = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(НоменклатураВБазе, "Номенклатура");
//НоваяСтрока.Упаковка = Справочники.УпаковкиНоменклатуры.НайтиПоНаименованию(Док.Sheets(1).Cells(ДанныеНачинаютсяС, 5).Value. НоменклатураВБазе.Номенклатура);
// LivingStar 2015_07_08 ->
//НоваяСтрока.Упаковка = ВернутьУпаковкуНаСервере(НоваяСтрока.Номенклатура, "УпаковкаНоменклатуры", Док.Sheets(1).Cells(ДанныеНачинаютсяС, 5).Value);
// <- LivingStar
НоваяСтрока.ВидРеквизитаНоменклатураКлиента = Истина;
//XXX++
Если НоваяСтрока.Свойство("УпаковкаКлиента") тогда
//УпаковкаКлиента = Справочники.УпаковкиНоменклатурыКлиентов.НайтиПоНаименованию(Док.Sheets(1).Cells(ДанныеНачинаютсяС, 5).Value. НоменклатураВБазе);
УпаковкаКлиента = ЭлементСправочникаПоискПоНаименованию("УпаковкиНоменклатурыКлиентов",Док.Sheets(1).Cells(ДанныеНачинаютсяС, 5).Value, НоменклатураВБазе);
// LivingStar 2015_07_25 ->
//ОписаниеТипа = Новый ОписаниеТипов("СправочникСсылка.УпаковкиНоменклатурыКлиентов");
//Новаястрока.УпаковкаКлиента.ОграничениеТипа = ОписаниеТипа;
//Новаястрока.УпаковкаКлиента.Значение = ОписаниеТипа.ПривестиЗначение();
//Новаястрока.УпаковкаКлиента.ВыбиратьТип = Ложь; //это на всякий случай
// <-
Если УпаковкаКлиента = ПредопределенноеЗначение("Справочник.УпаковкиНоменклатурыКлиентов.ПустаяСсылка") Тогда
//ЕдиницаИзмерения = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию(Док.Sheets(1).Cells(ДанныеНачинаютсяС, 5).Value);
//Если НЕ ЕдиницаИзмерения = Справочники.ЕдиницыИзмерения.ПустаяСсылка() Тогда
// НоваяУпаковкаКлиента = Справочники.УпаковкиНоменклатурыКлиентов.СоздатьЭлемент();
// НоваяУпаковкаКлиента.ЕдиницаИзмерения = ЕдиницаИзмерения;
// НоваяУпаковкаКлиента.Коэффициент = 1;
// НоваяУпаковкаКлиента.Владелец = НоменклатураВБазе;
// НоваяУпаковкаКлиента.Наименование = Справочники.УпаковкиНоменклатуры.СформироватьНаименование(НоваяУпаковкаКлиента.ЕдиницаИзмерения, НоваяУпаковкаКлиента.Коэффициент, НоменклатураВБазе.Номенклатура.ЕдиницаИзмерения);
// НоваяУпаковкаКлиента.Записать();
// НоваяСтрока.УпаковкаКлиента = НоваяУпаковкаКлиента.Ссылка;
//Иначе
//НоваяСтрока.УпаковкаКлиента = Док.Sheets(1).Cells(ДанныеНачинаютсяС, 5).Value;
//КонецЕсли;
// LivingStar 2015_07_08 ->
Новаястрока.УпаковкаКлиента = ВернутьУпаковкуНаСервере(НоваяСтрока.НоменклатураКлиента, "УпаковкаНоменклатурыКлиента", Док.Sheets(1).Cells(ДанныеНачинаютсяС, 5).Value);
// <- LivingStar
Иначе
НоваяСтрока.УпаковкаКлиента = ПредопределенноеЗначение("Справочник.УпаковкиНоменклатурыКлиентов.ПустаяСсылка");
НоваяСтрока.УпаковкаКлиента = УпКл(Док.Sheets(1).Cells(ДанныеНачинаютсяС, 5).Value,НоваяСтрока.НоменклатураКлиента);
НоваяСтрока.УпаковкаКлиента = УпаковкаКлиента.Ссылка;
// LivingStar 2015_07_08 ->
НоваяСтрока.УпаковкаКлиента = ВернутьУпаковкуНаСервере(НоваяСтрока.НоменклатураКлиента, "УпаковкаНоменклатурыКлиента", Док.Sheets(1).Cells(ДанныеНачинаютсяС, 5).Value);
// <- LivingStar
КонецЕсли;
КонецЕсли;
//—
Документы в 1С 8. Примеры работы средствами встроенного языка
В статье приводятся практические примеры работы с документами в языке 1С. Рассматриваются приемы работы с объектной моделью – создание, редактирование, удаление документов, а также типовые запросы для выборки документов по различным условиям. Для удобства пользуйтесь оглавлением.
Содержание
Немного о документах
Документы – краеугольный камень в построении большинства учетных систем средствами платформы 1С Предприятие. Они предназначены преимущественно для отражения совершенных хозяйственных операций, а также для последующего просмотра и редактирования.
Виды документов, которые создаются в конфигураторе на этапе проектирования прикладного решения, в основном соответствуют своим бумажным аналогам – приходным накладным, документам продажи или актам об оказании услуг, и др. Для каждой отрасли и вида учета набор таких документов и их реквизитный состав может отличаться.
Помимо записи о произошедшей хозяйственной операции, документы используются для фиксации изменений в учетных регистрах (т.н. проведение), а также позволяют сформировать печатные формы. Вообще, спектр применения документов в платформе 1С очень обширный, и позволяет реализовывать самые различные механизмы – биллинг, учет коммунальных платежей, сложные расчеты, учет ценных бумаг и активов, и многое другое.
Документы описываются в системе 1С двумя стандартными реквизитами – Номер и Дата. Использование номера не является обязательным – можно указать длину номера 0, и в этом случае платформа отключит механизм нумерации документов. В этом случае разработчик может сам предусмотреть реквизиты для формирования представления документа и для проверки уникальности. Но на практике чаще всего номер не отключается.
Как обойти табличную часть документа 1с?
Обход строк табличной части проще всего реализуется с помощью цикла «Копировать в буфер обменаДля Каждого СтрокаТЧ Из ТабЧасть Цикл». При этом переменной цикла будет являться не номер строки, а вся строка как объект.
Как открыть табличную часть 1с?
Первый способ, используя конструктор документа. Второй способ, посредством окна метаданных (нужно выделить мышкой табличную часть). После добавления, откроется палитра свойств, где можно выбрать нужный тип реквизита табличной части 1С (по умолчанию реквизиту присваивается тип строка).
Как получить строки табличной части 1с?
Как получить и обойти выделенные строки табличной части Для вывода информации из табличной части объекта служит элемент формы Табличное поле. Для включения возможности выделения нескольких строк на табличном поле нужно установить значение Множественный у его свойства Режим выделения.
Что такое табличная часть в 1с?
Составная часть многих прикладных объектов. Предназначена для хранения информации, структура которой одинакова для всех элементов прикладного объекта, но количество такой информации может быть различным.
Сколько строк можно добавить в табличную часть 1с?
Одним из существующих ограничений платформы 1С 8.3 является ограничение на количество строк табличной части. Табличная часть документа не может содержать более 99 999 строк.
Как выгрузить табличную часть в таблицу значений 1С?
Для того чтобы выгрузить табличную часть (документа, справочника, обработки и т. д.) в таблицу значений необходимо использовать метод Выгрузить(). При использовании его будет создана таблица значений с таким же набором колонок (тех же типов данных) и с теми же данными, что и в табличной части.
Как добавить табличную часть 1С?
Самый простой способ добавления табличной части в форму – это перетаскивание из раздела редактора формы Реквизиты. Зацепим мышью табличную часть Оплаты и бросим в раздел Элементы. Если вы не промахнулись, то платформа предложит вам автоматически создать колонки будущей таблицы.
Как выгрузить табличную часть в таблицу значений?
Для того чтобы выгрузить табличную часть (документа, справочника, обработки и т. д.) в таблицу значений необходимо использовать метод Выгрузить(). При использовании его будет создана таблица значений с таким же набором колонок (тех же типов данных) и с теми же данными, что и в табличной части.
Как выгрузить табличную часть документа?
Для того чтобы выгрузить табличную часть (документа, справочника, обработки и т. д.) в таблицу значений необходимо использовать метод Выгрузить(). При использовании его будет создана таблица значений с таким же набором колонок (тех же типов данных) и с теми же данными, что и в табличной части.
Как скопировать таблицу значений 1с?
Для копирования данных из одной таблицы значения в другую в типовых конфигурациях 1с 8 существует процедура модуля ОбщегоНазначения. ЗагрузитьВТаблицуЗначений. Она добавляет в таблицу значений строки из другой таблицы значений, наименования колонок должны совпадать.