Имя: Пароль:
1C
1С v8
Заполнение формы документа РТУ из внешней обработки в 1С 8.3.
0 maxikat
 
20.01.15
18:19
Столкнулась с ситуацией, когда из внешней обработки нужно создать и заполнить документ Реализация товаров и услуг. Но в нем данные по итогам заполняются в обработчиках формы документа. Как обратиться к ним или как еще можно получить итоги?
Если в загрузчике вызывать Документ.ПолучитьФорму("ФормаДокумента"), то система ругается, что интерактивные операции недоступны.
1 НП
 
20.01.15
18:23
При создании любого документа из обработки никакие формы документа не открываются из обработки не используются. Создаётся документ менеджером и заполняются все его реквизиты и табличные части. Итоги не заполняются, поскольку их не существует
2 maxikat
 
20.01.15
18:30
Возможно, я неправильно выразилась. Документ я создала и заполнила, с этим проблем нет. Но если я его открываю, что внизу есть поля Итоговая сумма и Итоговая скидка. Которые заполняются, когда ручками что-то вбиваешь в форме Товары. Как вызвать эти процедуры из внешней обработки? Или что нужно сделать, чтобы прописались Итоговая сумму и Итоговая скидка?
3 НП
 
20.01.15
18:31
(2) Когда Вы его открываете, там все делается штатно. Если нет итогов по какой-либо табличной части, то она не заполнена.
4 maxikat
 
20.01.15
18:35
В каком смысле штатно? То есть самой руками править каждую строчку?
Там Итоги обновляются после изменения, например, значения поля Количество. Что же мне все строчки руками перебивать? Причем там не достаточно поправить только одну строчку, нужно именно все.
5 Maniac
 
20.01.15
18:38
ищи процедуры обрабьотки табличных часйте
6 maxikat
 
20.01.15
18:38
Поправлюсь, что это не итоги табличной части! Это текстовое значение под табличной частью. Типа "Всего" или "СуммаВсего", как в других документах такого типа.
7 Maniac
 
20.01.15
18:39
неужели сложно типовую открыт, документ и посмотреть процедуры какие там.
У меня впечатление что вы неучи. такие простые вещи разрыть не можете
8 Maniac
 
20.01.15
18:39
(6) повторюсь - конфигуратор в зубы и вперед.
9 maxikat
 
20.01.15
18:40
(5) Я и спрашиваю, как к ним обратиться из внешней обработки. Потому что через ПолучитьФорму система не дает мне к ним пробиться. Тем более, что они не экспортные. Но даже, если это было и так, что все равно из внешней обработки форма не вызывается.
(7) Так научите же нас неучей!
10 maxikat
 
20.01.15
18:42
Поясняю еще раз. Из внейшей обработки я создаю документ Реализация товаров и услуг, заполняю ТЧ Товары. Все чудесно. НО! Под ТЧ есть текстовые поля с вычисляемыми итогами. И эти поля заполняются в модуле формы. Как мне из внешней обработки обратиться к этим процедурам и функциям?
11 maxikat
 
20.01.15
18:43
Заполняется все в :
Процедура РассчитатьИтоговыеПоказателиРеализации(Док)
12 maxikat
 
20.01.15
20:03
Так кто-нибудь знает, как обратиться к модулю формы из Обработки?
13 FIXXXL
 
20.01.15
21:12
(12) да выдерни эту процедуру в свою обработку
14 maxikat
 
20.01.15
21:40
А как я определю параметр "ЭтаФорма"?
15 FIXXXL
 
20.01.15
21:45
(14) мне отсюда плохо видно, но подозреваю, что эта суперпроцедура заполняет реквизиты документа, откуда потом происходит вывод на форму
Выдерни процедуру и перепиши без обращения к форме
16 maxikat
 
20.01.15
21:48
(15) Не совсем. Она работает не с реквизитами, а с элементами формы, поэтому без формы никак.


Процедура РассчитатьИтоговыеПоказателиРеализации(Форма)
    
    Форма.СуммаВсего = ?(Форма.Объект.ТребуетсяЗалогЗаТару,
        Форма.Объект.Товары.Итог("СуммаСНДС"),
        Форма.Объект.Товары.Итог("СуммаСНДСБезВозвратнойТары"));
    Форма.СуммаНДС = ?(Форма.Объект.ТребуетсяЗалогЗаТару,
        Форма.Объект.Товары.Итог("СуммаНДС"),
        Форма.Объект.Товары.Итог("СуммаНДСБезВозвратнойТары"));
    Форма.СуммаАвтоСкидки = ?(Форма.Объект.ТребуетсяЗалогЗаТару,
        Форма.Объект.Товары.Итог("СуммаАвтоматическойСкидки"),
        Форма.Объект.Товары.Итог("СуммаАвтоматическойСкидкиБезВозвратнойТары"));
    Форма.СуммаРучнойСкидки = ?(Форма.Объект.ТребуетсяЗалогЗаТару,
        Форма.Объект.Товары.Итог("СуммаРучнойСкидки"),
        Форма.Объект.Товары.Итог("СуммаРучнойСкидкиБезВозвратнойТары"));
    Форма.СуммаСкидки       = Форма.СуммаАвтоСкидки + Форма.СуммаРучнойСкидки;
    
    Форма.СуммаСверхЗаказа = Форма.Объект.Товары.Итог("СуммаСверхЗаказа");

    Если Форма.СуммаВсего > 0 Тогда
        
        Форма.ПроцентАвтоСкидки   = Форма.СуммаАвтоСкидки * 100 / (Форма.СуммаВсего + Форма.СуммаСкидки);
        Форма.ПроцентРучнойСкидки = Форма.СуммаРучнойСкидки * 100 / (Форма.СуммаВсего + Форма.СуммаСкидки);
        Форма.ПроцентСкидки       = Форма.ПроцентАвтоСкидки + Форма.ПроцентРучнойСкидки;
        
    ИначеЕсли Форма.СуммаСкидки > 0 Тогда
        
        Форма.ПроцентАвтоСкидки   = Форма.СуммаАвтоСкидки * 100 / Форма.СуммаСкидки;
        Форма.ПроцентРучнойСкидки = Форма.СуммаРучнойСкидки * 100 / Форма.СуммаСкидки;
        Форма.ПроцентСкидки       = 100;
        
    Иначе
        
        Форма.ПроцентАвтоСкидки   = 0;
        Форма.ПроцентРучнойСкидки = 0;
        Форма.ПроцентСкидки       = 0;
        
    КонецЕсли;
    
    Если Форма.Объект.НалогообложениеНДС = ПредопределенноеЗначение("Перечисление.ТипыНалогообложенияНДС.ПродажаНеОблагаетсяНДС")
     Или Форма.Объект.НалогообложениеНДС = ПредопределенноеЗначение("Перечисление.ТипыНалогообложенияНДС.ПродажаОблагаетсяЕНВД") Тогда
        Форма.Элементы.ГруппаСтраницыНДС.ТекущаяСтраница   = Форма.Элементы.СтраницаБезНДС;
        Форма.Элементы.ГруппаСтраницыВсего.ТекущаяСтраница = Форма.Элементы.СтраницаВсегоБезНДС;
    Иначе
        Форма.Элементы.ГруппаСтраницыНДС.ТекущаяСтраница   = Форма.Элементы.СтраницаСНДС;
        Форма.Элементы.ГруппаСтраницыВсего.ТекущаяСтраница = Форма.Элементы.СтраницаВсегоСНДС;
    КонецЕсли;
    
    Если Форма.Объект.РеализацияПоЗаказам Тогда
        Форма.Элементы.ГруппаСтраницыСверхЗаказа.ТекущаяСтраница                  = Форма.Элементы.СтраницаСуммаСверхЗаказа;
    Иначе
        Форма.Элементы.ГруппаСтраницыСверхЗаказа.ТекущаяСтраница                  = Форма.Элементы.СтраницаБезЗаказа;
    КонецЕсли;

КонецПроцедуры
17 maxikat
 
20.01.15
21:50
И это лишь одна из требуемых процедур. Их всего три.
18 FIXXXL
 
21.01.15
09:18
(17) ты в курсе, что реквизиты формы "живут" только когда форма открыта?
при закрытии они не сохраняются (я надеюсь твой документ без извратов написан)

ПриОткрытии() формы процедуры пересчета итогов вызываются?
19 maxikat
 
21.01.15
11:19
(17) Конечно в курсе! Бьюсь уже об стенку, видимо...
В какой раз дублирую вопрос!
Как обратиться из внешней обработке к модулю формы???
Это не мой документ, это типовой документ. Моя только внешняя обработка. Создает документ и загружает данные из внешнего источника. Остается только дорисовать бантики в виде итогов.
Ломать программу, чтобы дописать модуль формы при открытии не вариант.
20 maxikat
 
21.01.15
11:38
На этой картинке выглядит форма сейчас при открытии:
http://s40.radikal.ru/i087/1501/db/3a59d7d9769c.jpg

А так должно быть. Сейчас так получается, только если руками перебить количество:
http://s61.radikal.ru/i171/1501/f3/34782a7983bf.jpg
21 Mankubus
 
21.01.15
11:42
(20) ответьте на второй вопрос из (18)
22 FIXXXL
 
21.01.15
11:49
(19) да никак не обратится, оно и не надо
надо понять почему у тебя не пересчитывает
мож флаг какой должен быть в документе? мож реквизит какой не заполняешь? не все реквизиты ТЧ могут быть отображены на форме, мож пропускаешь чего при заполнении

попробуй запросом в консоли выбрать два дока, свой и "нормальный" и посмотри-сравни реквизиты ТЧ
23 maxikat
 
21.01.15
11:54
(22) Поясните, зачем? Вы считаете, что при открытии документ пересчитывает итоги? Это не так. Или что именно Вы имеете в виду?
24 maxikat
 
21.01.15
11:56
(21) Отвечаю. При открытии не пересчиываются никакие итоги. Ни в заполненном документе, ни в незаполненном. Пересчет итогов происходит только при редактировании таблицы.
25 FIXXXL
 
21.01.15
12:12
(24) и где потом эти итоги хранятся при окончании редактирования таблицы и закрытии документа?
26 maxikat
 
21.01.15
12:41
(24) Как я понимаю, эта инфрмация хранится в реквизите СуммаВсего, который создан на форме. Поэтому к нему не удается обратиться извне. То есть обработка его не видит. Она видит только реквизиты объекта.
27 silent person
 
21.01.15
12:47
(26) у вас не правильное понимание терминологии. Форма не может содержать реквизиты объекта, форма содержит только элементы формы которые связаны с реквизитами объекта. Данные могут хранится только в реквизитах объекта, в элементах формы храниться ничего не может (при закрытии формы вся информация из элементов формы уничтожается). и тот кто у вас на форме документа РТУ нарисовал все эти красивости без связи с реквизитами объекта (документа) подложил вам большую свинью. пока не создана форма документа к элементам формы никак не обратиться.
28 silent person
 
21.01.15
13:03
(26) и вообще что у вас за конфигурация ? в типовой УТ 1 прроцедура РассчитатьИтоговыеПоказателиРеализации(Форма)
вызывается в предопределенной процедуре  ПриЧтенииНаСервере(ТекущийОбъект) и все эти элементы формы прекрасно заполняются по данным объекта.
29 silent person
 
21.01.15
13:03
*УТ 11.1
30 maxikat
 
21.01.15
13:10
(26) Это видимо Вы что-то не понимаете. Я конечно немного неверно изпользую терминологию. Но суть от этого не меняется. Есть реквизиты, созданные на закладке Данные, есть реквизиты, созданные в отдельной вкладке при создании формы.

УТ 11.1. Вы имеете в виду процедуру ПриЧтенииСозданииНаСервере()?
Да, вызывается. Осталось понять, как вызывать эту процедуру)))
31 silent person
 
21.01.15
13:20
в реквизиты формы без создания формы не существуют в принципе

Отладчиком пользоваться умеете ?

ПриЧтенииНаСервере() вызывает ПриЧтенииСозданииНаСервере() которая вызывает РассчитатьИтоговыеПоказателиРеализации()

ПриЧтенииНаСервере() - предопределенная процедура, она вызывается сама.

http://imglink.ru/show-image.php?id=fac04b6e9f55344b8a3d78e8af41bc28
32 maxikat
 
21.01.15
13:28
(31)А Вы попробуйте вызывать ее из обработки внешней. Получается?
При всем уважении, я все это прекрасно знаю. И про реквизиты формы и про риЧтенииНаСервере() и естественно я пользуюсь отладчиком. Как это отвечает на мой вопрос? У Вас запускается эта процедура сама?
Давайте попробуйте написать в обработке?
Док = Документы.РеализацияТоваровУслуг.СоздатьДокумент();
....
Товары = Док.Товары.Добавить();
...
Док.Записать();

И как? Лично у меня никуда не заходит.
33 maxikat
 
21.01.15
13:34
Вы все советуете отличные вещи, только тут все та же проблема. Все эти процедуры относятся к ФОРМЕ! И мы не можем к ним обратиться без обращения к форме!
34 silent person
 
21.01.15
13:49
В табличной части Товары значения БезВозвратнойТары = ИСТИНА и СуммаСНДС заполнены ?
35 maxikat
 
21.01.15
13:53
(34)Да, заполнены... не знаю даже, что еще?
36 silent person
 
21.01.15
13:58
значит что то еще не заполнено. все эти процедуры вызываются при открытии формы записанного документа, потому как тебе еще в (25) сказали. все что не является реквизитом объекта при закрытии формы удаляется и нигде не хранится после ее закрытия, и заполняется заново при создании формы.
37 silent person
 
21.01.15
13:59
(35) заполни документ программно и второй заполни руками. потом сделай запрос по ВСЕМ реквизитам этих документов и сравни что у тебя в "ручном заполнено а в "программном" нет
38 maxikat
 
21.01.15
14:01
(36) Я поняла, спасибо!
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн