Как выгрузить табличное поле в таблицу значений? #528307


#0 by askharlov
Суть: Есть документ с табличным полем в форме документа. Необходимо выгрузить табличное поле в таблицу значений для дальнейшей обработки. Табличное поле связано с табличной частью документа, но состав его строк отличается от состава строк табличной части документа в связи с: 1. Наличием вычисляемых полей 2. Установленным отбором Колонки выгрузить могу через ТаблПоле.Колонки и обойти циклом "Для каждого". А как выгрузить строки?!?!?!?! Табличную часть документа тоже выгрузить могу. Но она, как написал, отличается от табличного поля составом строк и колонок.
#1 by askharlov
Господа! Задача все еще актуальна? есть идеи?
#2 by mikecool
Табличная часть (Tabular section) Выгрузить (Unload) Вариант синтаксиса: Выгрузить колонки Синтаксис: Выгрузить(<Строки>, <Колонки>)
#3 by 73
Вычисляемые колонки вычислить. Отобранные строки выгрузить Построителем. //Построителем
#4 by НЕА123
СП ОформлениеСтроки ?
#5 by askharlov
mikecool, ТабличнаяЧасть.Вsuhepbnm - это для табличной части (ТЧ) документа, а не для ТабличногоПоля. Табличное поле, конечно связано с ТЧ документа, но в нем (в табличном поле) присутствуют вычисляемые колонки, которых в ТЧ документа нет. В результате приходится или добавлять соответствующие реквизиты в ТЧ документа (не совсем красиво) или пересчитывать колонки (потеря производительности). На данный момент решил вопрос через добавление доп.реквизитов в ТЧ документа. 73, Решение реальное, но дополнительный пересчет - это потеря производительности. Предпочел добавить доп.реквизиты в табличную часть документа, как написал выше.
#6 by НЕА123
типа так(не проверял):
#7 by askharlov
НЕА123, что такое "СП"? ОформлениеСтроки : да, у табличного поля есть такой метод, но его синтаксис ТабличноеПоле.ОформлениеСтроки(<Строка>). А как программно перебрать все строки табличного поля, чтоб получить этот параметр <Строка>?
#8 by askharlov
Если не проверял, то могу рассказать: 1. про метод "ОформлениеСтроки уже написал выше. 2. "ОформлениЕСтроки" появляется в событии "ПриВыводеСтроки", но там оформление только одной строки 3. В событии "ПриПолученииДанных" появляется "ОформлениЯСтроки" (коллекция элементов "ОформлениЕСтроки"), но эта коллекция содержит только те элементы, которые в данный момент выведены на экран. Но все равно спасибо за ответ.
#9 by askharlov
Резюме: получается вроде как выгрузка ТабличногоПоля в 1С не предусмотрена, вероятно так как обычно оно жестко связано с табличной частью документа, а рассчетные поля обычно, если они в Табл.поле и присутствуют, то все они равно одноразовые и никому повторно не нужны или расчеты простые и можно пересчитать повторно.
#10 by НЕА123
нет слов... у меня уже вторая ветка сегодня... автор получает ответ, и говорит: НЕТ НЕПРАВДА!(ничего не читая и не проверяя). ладно, жду. как и в ветке пару часов.
#11 by 73
Почитай про ПроверитьСтроку и МЕТОД ОформлениеСтроки, который не имеет общего с созвучными параметрами процедур ПриВыводеСтроки/ПриПолученииДанных. В реальный алгоритм: Перебирается не поле, а ТЧ. Проверяется соответствие строки отбору и если да - запрашивается её(этой строки) - ОформлениеСтроки. ЗЫ. Имхо, перебирать всю ТЧ может оказаться накладнее, чем метод .
#12 by НЕА123
>ЗЫ. Имхо, перебирать всю ТЧ может оказаться накладнее, чем метод . не могу не согласиться. положительно в то, что отсутствуют обращения к БД, ну и не надо разбираться с алгоритмами расчета колонок. пусть автор выбирает или , программист вроде...
#13 by Lisica
Вычисляемые колонки вычислить. Отобранные строки выгрузить Построителем. //Построителем 73!!!!!!!!!!!!! СПАСИБО ОГРОМНОЕ ЗА ЭТО!!!!!!!!!!! ОЧЕНЬ-ОЧЕНЬ ПОМОГЛО!!!!!!!!!!
#14 by askharlov
Если ты прав, то извини. Может я где недоразобрался. Сейчас вопрос мною решен, так что потерял актуальность. А времени, естественно на все не хватает:-) Спасибо всем за ответы. П.С.: Я решил следующим образом: 1. В табличную часть документа добавил как реквизиты все свои расчетные поля). По здравому размышлению это оказалось даже полезным, один из моментов: так как расчетные поля идут также в печатную форму, и документ, сохраненный в базе всегда соответствует тому, который распечатан. А пересчет данных по документу организовал в виде отдельной кнопки, т.о. автоматом 1С не пересчитывает. 2. Когда необходимо обработать те строки, которые в данный момент выведены на экран, с учетом установленных отборов, то считываю данные из табличной части документа методом "НайтиСтроки", в который передаю структуру с параметрами установленного отбора. 2.1. Для формирования структуры отбора, которая передается в НайтиСтроки написал свою функцию обхода ЭлементовОтбора. Все. Решение меня на данном этапе устраивает, так что интерес касательно других методов обхода строк табличного поля формы на данный момент только спортивный. Будет свободное время - перечитаю последние ответы, попробую. Спасибо всем за ответы.
#15 by NewNick
топик стартер только только перешел с каких нить си или папаскакаля(он же дельфи) на 1С ?) ну очень похоже ) если так то совет, оценки эффективности методов тех или иных решений оценивать внимательно. "дополнительный пересчет" в данном случае не является критичным как потеря производительности. так как используется при интерфейсе.
#16 by НЕА123
.2 НайтиСтроки - это только для отбора на равенство.
#17 by askharlov
NewNick, спасибо за совет. Приму к сведению НЕА123 Абсолютно верно. Но смотри 2.1. - Извини написал, пожалуй кратко. Если расшифровать, то все выглядит так: 2.1. Методом НайтиСтроки получаю из ТЧ все строки для отборов с ВидСравнения.Равно 2.2. Обхожу все строки полученного массива найденных строк и обхожу все отборы с Использование = Истина. 2.3. На основе ВидовСравнения формирую соответствующие условия сравнения 2.4. Строки массива найденных строк, которые не соответствуют условиям отбора, помечаю на удаление. 2.5. Удаляю помеченные на удаление строки. Все
#18 by askharlov
Вот сама функция (сложного ничего, но все ж может кому сэкономит полчаса времени):            Если Не ЭлементОтбора.Использование Тогда Продолжить КонецЕсли;
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С