Имя: Пароль:
1C
1С v8
Заполнение таблицы при открытии
0 Ste1Z
 
31.10.11
18:40
Из формы документы открываю другую форму, созданную мной. Передаю в нее некоторые реквизиты. Тут все ок.

ФормаВвода = Документы.ЗаказПокупателя.ПолучитьФорму("ФормаВвода");
ФормаВвода.ЭлементыФормы.ЗаказПокупателя.Значение  = ЭтотОбъект.Ссылка;
ФормаВвода.Открыть();

Все открывается, поля заполнены как нужно. Также при открытии нужно заполнить таблицу запросом. Создаю процедуру ПриОткрытии().

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

Выдает ошибку: {Документ.ЗаказПокупателя.Форма.ФормаВвода.Форма(21)}: Значение не является значением объектного типа (ПланируемыеПоступления)
Если создаю кнопку и при ее нажатии выполняется данная процедура - все корректно отображается. Что делаю не так?
       ЭлементыФормы.ВведенныеПоступления.ТекущаяСтрока.ПланируемыеПоступления = Результат.ПланируемыеПоступления;
1 Kashemir
 
31.10.11
18:46
НоваяСтрока =  ЭлементыФормы.ВведенныеПоступления.ДобавитьСтроку();
НоваяСтрока.ПланируемыеПоступления = Результат.ПланируемыеПоступления;
НоваяСтрока.СуммаОплаты = Результат.СуммаОплаты;
2 Kashemir
 
31.10.11
18:48
+(1) Хотя и это не сработает, ибо добавлять строку надо не элементу формы, а его источнику.
3 Reset
 
31.10.11
18:50
(0) (1) Чтож вы так упорно ползете на кла... докопались до элементов формы? С данными нужно работать, а не с представлением их.


"ФормаВвода.ЭлементыФормы.ЗаказПокупателя.Значение  = ЭтотОбъект.Ссылка;"
Заменить на
"ФормаВвода.ЗаказПокупателя=ЭтотОбъект.Ссылка;"

Если на форме заведен ЗаказПокупателя без данных (реквизита напр) - казнить.

"ЭлементыФормы.ВведенныеПоступления.ДобавитьСтроку();
       ЭлементыФормы.ВведенныеПоступления.ТекущаяСтрока.ПланируемыеПоступления = Результат.ПланируемыеПоступления;
       ЭлементыФормы.ВведенныеПоступления.ТекущаяСтрока.СуммаОплаты = Результат.СуммаОплаты;"

Заменить на
НоваяСтрока=ВведенныеПоступления.ДобавитьСтроку();
НоваяСтрока.ПланируемыеПоступления = Результат.ПланируемыеПоступления;
НоваяСтрока.СуммаОплаты = Результат.СуммаОплаты;
4 Reset
 
31.10.11
18:52
(3) Не факт что поможет, ибо "другую форму, созданную мной" - там может быть что угодно.
5 Reset
 
31.10.11
18:54
"Результат.Следующий() > 0"
Песня. Не, я домой.
6 Ste1Z
 
31.10.11
19:00
Я только учусь еше, первая работа с формами такая серьезная. Реквизит вроде как сам создается. С реквизитами работал, с ними проблемы были, например как тут.

НоваяСтрока=ВведенныеПоступления.ДобавитьСтроку();

Нет такого метода у ТаблицыЗначений. Поэтому и делал через элементы формы.
Выводится только для информации пользователю, все равно нигде не используется.

{Документ.ЗаказПокупателя.Форма.ФормаВвода.Форма(20)}: Метод объекта не обнаружен (ДобавитьСтроку)
       НоваяСтрока=ВведенныеПоступления.ДобавитьСтроку();
7 Ste1Z
 
31.10.11
19:01
Результат.Следующий() > 0    
брал вообще в интернете в примерах, почти не глядя
8 Kashemir
 
31.10.11
19:03
(6) Значит элементом формы табличное поле "ВведенныеПоступления" ассоциирована с переменной / табличной части с отличным именем, которое известно тебе и неизвестно нам.

(7) Это не лучшая конструкция, поскольку требует лишнего неявного приведения типа числа к булеву.
9 Reset
 
31.10.11
19:06
(6)
НоваяСтрока=ВведенныеПоступления.Добавить();
Я скопипастил ДобавитьСтроку() с твоего кода; что является неявным дополнительным признаком, что "брать в интернете не глядя" - неправильно ;)
А правильно - открывать справку, и смотреть, какие методы Есть.
10 Ste1Z
 
31.10.11
19:07
У таблицы в свойствах даннных указано: ВведенныеПоступления.

В реквизитах формы ВведенныеПоступления есть. (Тип ТаблицаЗначений). Создался автоматически.
11 Reset
 
31.10.11
19:08
(10) С этой таблицей и работай
12 Ste1Z
 
31.10.11
19:08
Обычно там и смотрю. Тут просто искал как добавить результаты запроса в таблицу, скопировал заменил нужное.
13 Reset
 
31.10.11
19:08
Например ;)
ВведенныеПоступления=Запрос.Выполнить().Выгрузить();
14 Ste1Z
 
31.10.11
19:12
Делал так. Но это работалое сли выполнялось при изменении таблицы. Вот например другая моя обработка:

Процедура ПокупательПриИзменении(Элемент)
   ЭлементыФормы.ПланируемыеПоступленияТП.Значение.Очистить();
   Результат = Новый ТаблицаЗначений;
   Запрос1 = Новый Запрос;
   Запрос1.Текст = "ВЫБРАТЬ
   |ЗаказыПокупателей.Сделка КАК ЗаказПокупателя,
   |ЗаказыПокупателей.СуммаВзаиморасчетовКонечныйОстаток КАК ДолгПокупателя,
   |ЗаказыПокупателей.Контрагент КАК Контрагент
   |ИЗ
   |РегистрНакопления.РасчетыСКонтрагентами.ОстаткиИОбороты КАК ЗаказыПокупателей
   |ГДЕ
   |ЗаказыПокупателей.Сделка ССЫЛКА Документ.ЗаказПокупателя
   |И ЗаказыПокупателей.Контрагент = &Покупатель ";
   Запрос1.УстановитьПараметр("Покупатель", Покупатель);
   Результат = Запрос1.Выполнить();
   ТЗ = Результат.Выгрузить();
КонецПроцедуры
15 Reset
 
31.10.11
19:12

   |ИЗ
   |РегистрНакопления.ПланируемыеПоступленияДенежныхСредств.ОстаткиИОбороты КАК ПланируемыеПоступленияДС
   |ГДЕ
   |ПланируемыеПоступленияДС.Сделка = &ЗаказПокупателя

заменить на


   |ИЗ
   |РегистрНакопления.ПланируемыеПоступленияДенежныхСредств.ОстаткиИОбороты(,,,,ПланируемыеПоступленияДС.Сделка = &ЗаказПокупателя) КАК ПланируемыеПоступленияДС
16 Reset
 
31.10.11
19:13
точнее , ",,,,Сделка = &ЗаказПокупателя"
17 Ste1Z
 
31.10.11
19:13
А вот при активизации строки данной таблицы нужно было сделать запрос и вывести в другую таблицу, ВЫгрузить() не работал.
18 Ste1Z
 
31.10.11
19:14
Reset а почему ГДЕ так не нравится?
19 Kashemir
 
31.10.11
19:16
(17) Сложно понять что ты имеешь ввиду, с учетом различных методов у объектов Запрос, РезультатЗапрос, ТаблицаЗначений, ТабличноеПоле, ТабличнаяЧасть.
20 Reset
 
31.10.11
19:17
(18) в десятки и сотни раз медленней.
Почему? яндексируй "виртуальные таблицы"
21 Kashemir
 
31.10.11
19:17
(18) Если сделка является измерением - по скорости обычно выгоднее ограничение накладывать на уровне виртуальной таблицы.
22 Ste1Z
 
31.10.11
19:22
Да это уже не по теме сказал. Короче есть таблица с заказами покупателей. При активации строки в другом табличном поле формы должны отображать Планируемые поступления для данного заказа. Делаю запрос, присваиваю таблице значений, соответствующей этому табличному полю при помоши Запрос.Выполнить().Выгрузить() - не отображается. ОбновитьСтроки не помогает.
Поэтому пришлось циклом делать, добавлять строки.

(20) (21) Спасибо, просто в интернете и книжках, например Габеце ГДЕ используется. Там же не написано, что это медленно
23 vmv
 
31.10.11
20:56
(17) забудь про использование ПриАктивизацииСтроки() в расчетных целях.

В 8.1 - оно больше вреда приносило, чем пользы.

мастер-детали можно строить и не так топорно и слава богу, что эти методы-паразиты ушли в прошлое почти
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан