Имя: Пароль:
1C
1С v8
ОплатаПлатежнойКартой создать программно
0 1cLuser
 
01.02.18
16:13
1С:Предприятие 8.3 (8.3.11.2867)
Конфигурация (3.0.57.10)

Пытаюсь из своей обработки программно создать документ ОплатаПлатежнойКартой и открыть форму документа.
Документ создаётся, форма открывается, ошибок нет, но в табличной части формы нет тех данных которые записаны в объект.

Такое впечатление что при открытии формы данные в табличной части формируются и затирают те что записаны программно.

Как это исправить?


&НаСервере
Процедура СформироватьОплатаКартойНаСервере( ДанныеФормы)
    
    ДокументОбъект = Документы.ОплатаПлатежнойКартой.СоздатьДокумент();
    ДокументОбъект.РасшифровкаПлатежа.Очистить();
        
    ДокументОбъект.СуммаДокумента = ЭтотОбъект.Сумма;
    ДокументОбъект.Дата = ЭтотОбъект.Дата;
    ФормаОплаты.Объект.РасшифровкаПлатежа.Очистить();
        Строка = ДокументОбъект.РасшифровкаПлатежа.Добавить();
    Строка.СчетУчетаРасчетовСКонтрагентом = ЭтотОбъект.СчетУчетаРасчетовСКонтрагентом;
    
    ЗначениеВДанныеФормы( ДокументОбъект, ДанныеФормы);
    
КонецПроцедуры

&НаКлиенте
Функция СформироватьОплатаКартой( ДокументОснование)
    
    ФормаОплаты = ПолучитьФорму( "Документ.ОплатаПлатежнойКартой.Форма.ФормаДокументаОбщая");
    ДанныеФормы = ФормаОплаты.Объект;
    СформироватьОплатаКартойНаСервере( ДанныеФормы);
    КопироватьДанныеФормы( ДанныеФормы, ФормаОплаты.Объект);
    
    ФормаОплаты.Открыть();
              
КонецФункции
1 Otark
 
01.02.18
16:15
(0)А почему впечатление? Проанализировать табличную часть, до, после и во время открытия формы не получается? Заполняй табличную часть после открытия документа.
2 hhhh
 
01.02.18
16:16
(0) так вы только

Строка.СчетУчетаРасчетовСКонтрагентом

только счет пишете в строку тч. А остальное? НЕ хотите писать?
3 1cLuser
 
01.02.18
16:22
(2) Я пишу всё что нужно, просто код сократил для форума.
Большинство данных заполняется нормально, а вот счета в табличной части ни в какую. Не могу понять в чем дело.

Если данные заполнять после открытия формы, то как она их сможет отобразить?
4 Мимохожий Однако
 
01.02.18
16:27
(0) Вот эта строчка зачем?
ДокументОбъект.РасшифровкаПлатежа.Очистить();
5 dezss
 
01.02.18
16:27
(3) в отладке в Процедура СформироватьОплатаКартойНаСервере( ДанныеФормы)
глянь типы значений
Строка.СчетУчетаРасчетовСКонтрагентом
ЭтотОбъект.СчетУчетаРасчетовСКонтрагентом
может они не совпадают, вот и косяк...
6 1cLuser
 
01.02.18
16:32
(4) Эта строчка обычно очищает табличную часть.
Я сначала думал что данные не того типа поэтому не заполняются.
Решил очистить табличную часть перед заполнением и таким образом понял что табличная часть заполняется при открытии формы. Иначе она просто была бы пустой. Но она не пустая. Данные в ней ест, но счетов учета нет.
7 1cLuser
 
01.02.18
16:33
(5) Проверял. Все нормально с данными.
8 hhhh
 
01.02.18
16:36
(6) там наверно при записи документа запускается заполнение счетов учета. Поэтому вам наверно смириться надо. Как пользователи настроили заполнение счетов, так пусть и заполняется.
9 1cLuser
 
01.02.18
16:38
(8) Не запускается, без этих данных провести документ невозможно. А записывать его без проведения нет смысла.
10 hhhh
 
01.02.18
16:46
(9) вы просто по-нормальному создайте документ и запишите. Без всяких форм оплаты и форм переплаты, нахрена всякие фопрмы сюда подмешивать?
11 hhhh
 
01.02.18
16:48
(9) где  васс ДокументОбъект.Записать() ?? Чего-то не вижу. Вы вообще его записываете?
12 1cLuser
 
01.02.18
16:54
(10) Задача такая.
Обработка должна формиовать несколько документов на базе своих данных, при этом пользователь должен увидеть сформированные документы перед проведением.
13 1cLuser
 
01.02.18
18:39
Порылся в коде формы документа.
Есть там такая строчка в функции которая вызывается при изменении некоторых параметров формы.
Объект.РасшифровкаПлатежа.Очистить();

То есть записать данные в табличную часть объекта перед формированием формы документа невозможно, они стираются при создании формы.

Как это обойти не редактируя объект конфигурации?
Есть идеи?
14 Chameleon1980
 
01.02.18
18:48
что-то в духе ОткрытьФорму нового документа
и заполнить
не?
15 Chameleon1980
 
01.02.18
18:48
а не через СоздатьДокумент(
16 1cLuser
 
01.02.18
18:54
(14) А можно поподробнее.
17 1cLuser
 
01.02.18
19:58
Придумал решение

После открытия формы нужно из данных формы извлечь табличную часть и установить необходимые значения.
Это работает, но это жесть товарищи.

Форма.Открыть();
Для каждого Значение из Форма.Объект.РасшифровкаПлатежа цикл
Значение.СчетУчетаРасчетовСКонтрагентом = ЭтотОбъект.СчетУчетаРасчетовСКонтрагентом;
Значение.СчетУчетаРасчетовПоАвансам = ЭтотОбъект.СчетУчетаРасчетовПоАвансам;
КонецЦикла;