Имя: Пароль:
1C
 
Передача контекста из внешней обработки
0 suram
 
21.10.04
09:27
Во внешнем отчете перебираю документ "РеализацияПродукции". Меняю цену. Хочу вызвать процедуру глобального модуля глПересчетТаблЧасти по аналогии расчета в Форме этого документа. Как передать контекст из внешней обработки? Пишу:
Док = СоздатьОбъект("Документ.РеализацияПродукции");
Док.ВыбратьДокументы()
Пока Док.ПолучитьДокумент() = 1 Цикл
   Док.ВыбратьСтроки();
   Пока Док.ПолучитьСтроку() = 1 Цикл
       Цена = Цена * 1.18;
       глПересчетТаблЧасти(Док.ТекущийДокумент(), "Цена");
   КонецЦикла;
   Записать();
суммы не считаются...
1 Rovan
 
гуру
21.10.04
09:36
Думаю, что глПересчетТаблЧасти работает только с диалоговой формой. Так что переписать треба.
2 427
 
21.10.04
09:44
попробуй
глПересчетТаблЧасти(Контекст, "Цена");

не пойдет - см (1)
3 suram
 
21.10.04
09:45
А можно как-то вызывать форму, через ОткрытьФорму()? Только тогда как заставить пересчитать суммы оттуда?
4 suram
 
21.10.04
09:48
через Контекст ругается: в глобальном модуле на строке    ДатаДок = Конт.ДатаДок;  Поле агрегатного объекта не обнаружено (ДатаДок)
5 427
 
21.10.04
09:50
тьфу, сам дурак... Не прочитал (0)
формируешь ТЗ с нужными ценами...
далее - ОткрытьФорму(НужныйДок,ТЗ)

в ПриОткрытии()
если типЗначенияСтр(форма.параметр)="ТаблицаЗначений" тогда
  установка цен
  Пересчет цен
  записать
  СтатусВозврата(0)
  возврат
конецЕсли
6 suram
 
21.10.04
09:52
а без изменений в конфигураторе никак?...
7 PGY
 
21.10.04
11:01
Затолкни эту функцию себе в обработку, переделай как нужно, если не хочешь ничего менять в конфигурации
8 427
 
21.10.04
11:51
Можно и без изменений.
9 virsy
 
22.10.04
09:22
наверное в (0) нужно было написать так:
...
  Док.ВыбратьСтроки();
  Пока Док.ПолучитьСтроку() = 1 Цикл
      Док.Цена = Док.Цена * 1.18;
      глПересчетТаблЧасти(Док, "Цена");
  КонецЦикла;
...

у меня так работает
10 virsy
 
22.10.04
16:00
и вместо "Записать()" нужно "Док.Записать()"
11 YF
 
22.10.04
16:12
На а если так
Перем конт;
Док = СоздатьОбъект("Документ.РеализацияПродукции");
Док.ВыбратьДокументы()
Пока Док.ПолучитьДокумент() = 1 Цикл
  Док.ВыбратьСтроки();
  Пока Док.ПолучитьСтроку() = 1 Цикл
      Цена = Цена * 1.18;
      глПересчетТаблЧасти(Док.ТекущийДокумент(), "Цена");
  КонецЦикла;
  Записать();
12 YF
 
22.10.04
16:14
Сории 11 недописал, вот как хотел:


Перем конт;
Док = СоздатьОбъект("Документ.РеализацияПродукции");
Док.ВыбратьДокументы()
Пока Док.ПолучитьДокумент() = 1 Цикл
 Док.ВыбратьСтроки();
 Пока Док.ПолучитьСтроку() = 1 Цикл
     Цена = Цена * 1.18;
     глПересчетТаблЧасти(Док.ТекущийДокумент(), "Цена");
 КонецЦикла;
 Записать();
ОткрытьФорму(Док.ТекущийДокумент(), конт,0);
глПересчетТаблЧасти(Конт, "Цена");
Конт.Закрыть();
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший