Имя: Пароль:
1C
1С v8
Заполнение табличного поля
0 Joshim
 
03.10.11
15:43
Табличное поле выводит данные табличной части документа. На поле есть колонка, которой нет в табличной части документа. Как в эту колонку можно вывести данные?
1 Шапокляк
 
03.10.11
15:47
ПриВыводеСтроки(), ПриПолученииДанных()
2 shuhard
 
03.10.11
15:47
(0) в 8.2 или 8.1 ?
3 Joshim
 
03.10.11
15:48
(2) в 8.2
4 shuhard
 
03.10.11
15:49
(3) заполняй при создании на сервере и в событиях изменения/добавления строк ТЧ
5 Joshim
 
03.10.11
16:00
(4)
я и спрашиваю как заполнить ее?
например:
ЭлементыФормы.Товары.Колонки.Добавить("Колонка1");
   НовСтр = Товары.Добавить();
   НовСтр.Номенклатура = Номенкл;
   ...
   //Вывод значения в "Колонка1"
   //как вывести значение в "Колонка1" ?
6 Шапокляк
 
03.10.11
16:17
У табличного поля в свойствах есть обработчик. Объясню на примере
ПроцедураПриВыводеСтроки()
       ОформлениеСтроки.Ячейки.Колонка1.УстановитьТекст(ДанныеСтрок.Номенклатура.Артикул);
КонецПроцедуры
7 Шапокляк
 
03.10.11
16:22
8 shuhard
 
03.10.11
16:24
(5)ЭлементыФормы - это ж не управляемая форма,
кури (1)
9 Joshim
 
03.10.11
16:35
(6)(7)(8) у меня нет доступа к этим процедурам! Документ заполняется из модуля внешней обработки, которая создает и заполняет документ, затем открывает форму и добавляет колонку, затем в эту колонку необходимо вывести данные пользователю.
10 shuhard
 
03.10.11
16:36
(9) будь проще,
сделай ТЧ  в обработке и кнопку "Перенести в документ"
11 Шапокляк
 
03.10.11
16:40
(9) Да пофиг откуда документ заполняется. У документа есть форма, в которой размещено табличное поле - или форма как-то динамически строится и элементы на него программно добавляются?
12 Mort
 
03.10.11
16:41
(9) Без подпиливания формы никак.
13 Joshim
 
03.10.11
16:43
(10)(11)(12) а если перед заполнением формы назначить в модуле обработки обработчик события формы ПриВыводеСтроки() и затем заполнить форму? как думаете прокатит?
14 Joshim
 
03.10.11
16:44
(10) как вариант, если более быстрого решения не найдется
15 shuhard
 
03.10.11
16:48
(14) это идеологически верно,
зачем пользователю в документе данные, которые не хранятся в системе и не влияют на проведение и которые он ни когда потом не увидит ?

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

всё это обработки и результат их работы переносится в ТЧ документа
16 Joshim
 
03.10.11
17:32
Процедура ПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)

Элемент.ТекущиеДанные.Номенклатура
Элемент.ТекущаяСтрока.Номенклатура
в чем разница или что лучше использовать для доступа к данным?
17 Шапокляк
 
03.10.11
17:35
ДанныеСтроки?
18 Joshim
 
03.10.11
17:43
(6) Колонку добавил, но в ОформлениеСтроки.Ячейки ее нет! Как по другому вывести в колонку значение?
19 Шапокляк
 
03.10.11
17:45
(18) На вопрос в (11) как ответите?
20 Joshim
 
03.10.11
17:49
У документа есть форма, в которой размещено табличное поле. А колонка программно добавляется (нет на форме), в нее затем выводятся данные
21 Шапокляк
 
03.10.11
18:03
Ну так что мешает проверить наличие колонке в этом обработчике? Если ТабличноеПоле.Колонки.Найти("Колонка1") <> Неопределено Тогда
       ОформлениеСтроки.Ячейки.Колонка1.УстановитьТекст(ДанныеСтрок.Номенклатура.Артикул);
Конецесли;
22 Joshim
 
03.10.11
18:09
(21)
ТекКолонка = ЭлементыФормы.Товары.Колонки.Найти(ИмяКолонки);
Если ТекКолонка = Неопределено Тогда
ТекКолонка = ЭлементыФормы.Товары.Колонки.Добавить(ИмяКолонки));    
КонецЕсли;

А как теперь заполнить значение в колонке??
В ОформлениеСтроки.Ячейки этой колонки нет!!!!!
23 Шапокляк
 
03.10.11
18:16
(22) Дык ведь добавил же ты ее в (22)! Почему ее нету? Почему в обработчике ПриВыводеСтроки не написать как в (21)? Вот на клавиатуре набираем "ОформлениеСтроки.Ячейки." и не ждем, что нам программа предложит, а продолжаем: "Колонка1.УстановитьТекст(ДанныеСтроки.Номенклатура.Артикул)" или как там колонка называется и что там надо вывести.
24 shuhard
 
03.10.11
18:20
(22) ты отладчиком конечно смотрел ?
25 Joshim
 
03.10.11
18:20
(24) Форма.ПодготовкаТаблицПоступленияТоваровУслуг.Форма(464)}: Поле объекта не обнаружено (Колонка1)
           ОформлениеСтроки.Ячейки.Колонка1.УстановитьТекст(ЗначениеПараметра);
26 Joshim
 
03.10.11
18:21
(24) да
27 Шапокляк
 
03.10.11
18:27
(25) Как колонку назвал? В какой обработчик добавил строку? Весь текст Обработчика ПривыводеСтроки дай.
28 Joshim
 
03.10.11
18:30
Процедура ТоварыПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
   
   Если Не ВыводитьСвойстваПриходныхОрдеров Тогда
       Возврат;    
   КонецЕсли;
   
   СсылкаНаДокумент = Элемент.ТекущиеДанные.ПриходныйОрдер.Ссылка;
   
   Если Не ЗначениеЗаполнено(СсылкаНаДокумент) Тогда
       Возврат;    
   КонецЕсли;
   
   ОбрЗначенияСвойствОбъекта = Обработки.ЗначенияСвойствОбъекта.Создать();
   ОбрЗначенияСвойствОбъекта.НазначениеСвойств      = ОбщегоНазначения.ПолучитьСписокНазначенийСвойствКатегорийОбъектовПоСсылке(СсылкаНаДокумент);
   ОбрЗначенияСвойствОбъекта.ОбъектОтбораЗначений   = СсылкаНаДокумент;
   ОбрЗначенияСвойствОбъекта.ОбъектОтбораНазначений = СсылкаНаДокумент;
   ОбрЗначенияСвойствОбъекта.ПрочитатьЗаполнитьСвойстваИЗначения();
   
   Для Каждого ТекСтрока Из ОбрЗначенияСвойствОбъекта.СвойстваИЗначения Цикл
       Если (Не ТекСтрока.ПометкаУдаления) И ЗначениеЗаполнено(ТекСтрока.Значение) Тогда
                       
           Свойство = ТекСтрока.Свойство;
           КолонкаСвойства = ЭлементыФормы.Товары.Колонки.Найти(Свойство.Код);
           Если КолонкаСвойства = Неопределено Тогда
               КолонкаСвойства = ЭлементыФормы.Товары.Колонки.Добавить(СокрЛП(Свойство.Код), СокрЛП(Свойство.Наименование));    
           КонецЕсли;
           
           Если ТипЗнч(ТекСтрока.Значение) = Тип("Дата") Тогда
               Если НачалоДня(ТекСтрока.Значение) = ТекСтрока.Значение Тогда
                   ЗначениеПараметра = Формат(ТекСтрока.Значение, "ДФ=dd.MM.yyyy; ЧЧ=''");
               Иначе
                   ЗначениеПараметра = ТекСтрока.Значение;
               КонецЕсли;
           Иначе
               ЗначениеПараметра = СокрЛП(ТекСтрока.Значение);    
           КонецЕсли;

           
           //ОформлениеСтроки.Ячейки[КолонкаСвойства].УстановитьТекст(ЗначениеПараметра);
           ОформлениеСтроки.Ячейки.ВН.УстановитьТекст(ЗначениеПараметра);
       КонецЕсли;
   КонецЦикла;
   
КонецПроцедуры
29 Шапокляк
 
03.10.11
18:38
Если ЭлементыФормы.Товары.Колонки.Найти("ВН") <> Неопределено Тогда  

  Для Каждого ТекСтрока Из ОбрЗначенияСвойствОбъекта.СвойстваИЗначения Цикл
       Если (Не ТекСтрока.ПометкаУдаления) И ЗначениеЗаполнено(ТекСтрока.Значение) Тогда
                       
           Свойство = ТекСтрока.Свойство;
           КолонкаСвойства = ЭлементыФормы.Товары.Колонки.Найти(Свойство.Код);
           Если КолонкаСвойства = Неопределено Тогда
               КолонкаСвойства = ЭлементыФормы.Товары.Колонки.Добавить(СокрЛП(Свойство.Код), СокрЛП(Свойство.Наименование));    
           КонецЕсли;
           
           Если ТипЗнч(ТекСтрока.Значение) = Тип("Дата") Тогда
               Если НачалоДня(ТекСтрока.Значение) = ТекСтрока.Значение Тогда
                   ЗначениеПараметра = Формат(ТекСтрока.Значение, "ДФ=dd.MM.yyyy; ЧЧ=''");
               Иначе
                   ЗначениеПараметра = ТекСтрока.Значение;
               КонецЕсли;
           Иначе
               ЗначениеПараметра = СокрЛП(ТекСтрока.Значение);    
           КонецЕсли;

           
           //ОформлениеСтроки.Ячейки[КолонкаСвойства].УстановитьТекст(ЗначениеПараметра);

           ОформлениеСтроки.Ячейки.ВН.УстановитьТекст(ЗначениеПараметра);
       КонецЕсли;
   КонецЦикла;

КонецЕсли;

P.S. То, что в цикле делаешь...страшно это, все тормозить будет ппц
30 shuhard
 
03.10.11
18:39
(26) странно
не поленился залезть в древний 8.1
вот так работает
Процедура ПриОткрытии()
   ЭлементыФормы.Товары.Колонки.Добавить("Инна");
   СтрокаТЧ=Товары.Добавить();
   СтрокаТЧ.Цена=100;
   КонецПроцедуры

   Процедура ТоварыПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
       ОформлениеСтроки.Ячейки.Инна.ОтображатьТекст=Истина;
       ОформлениеСтроки.Ячейки.Инна.Текст="Пипец";
   КонецПроцедуры
31 Шапокляк
 
03.10.11
18:44
+(29) Да...все-таки поглядела на цикл, не удержалась. ПриВыводеСтроки - не то место, где колонки в табличное поле добавляют. Судя по всему, задача стоит вывести все свойства всех имеющихся товаров в ТЧ. К процедуре формирования табличной части лучше заблаговременно прикрутить вычисление состава всех этих свойств и присобачить соответствующие колонки, а уж в ПриВыводеСтроки организовать их заполнение. Да и в твоей проыцедуре колонки добавляешь, но не факт, что они все ВН называются :)
32 Joshim
 
03.10.11
19:22
(30) да так работает, только если колонки создавать не в ТоварыПриВыводеСтроки()

спасибо
33 Joshim
 
03.10.11
19:23
(31) а от Вас реальной помощи 0
34 Шапокляк
 
03.10.11
19:29
(33) Молодец, парень далеко пойдешь. Сказать гадость человеку, который потратил свое время, чтоб тебе помочь - это так круто!
35 shuhard
 
03.10.11
20:26
(34) кто людям помогает, тот тратит время зря ...

ты чё мать, собственную песню забыла ?
36 Joshim
 
03.10.11
21:54
(34) помочь это когда помощь пользу приносит. Сам бы я точно не разобрался. Спасибо!
(35) думаю этот форум исключение, тут все друг другу помогают )
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.