Имя: Пароль:
1C
1С v8
Как в БП программно изменить договор в "Поступлении на расчетный счет" и "Списании с
0 lukinskiy
 
20.02.21
20:02
Как в БП 3.0 программно изменить обработкой договор в "Поступлении на расчетный счет" и "Списании с расчетного счета"?
Для этого, как я понимаю, надо как-то правильно заполнить табличную часть РасшифровкаПлатежа.
Не подскажете, как взять это заполнение из модуля формы этих документов? (в восьмерке не силен)
Открываю процедуру РасшифровкаПлатежаДоговорКонтрагентаПриИзменении(), там вижу:

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

ЭтотОбъект, как я понимаю - это открытая форма. В моей обработке есть объект нужного документа, полученного запросом.

    ДокОбъект = Выборка.Ссылка.ПолучитьОбъект();

Но это не то. Как тут правильно действовать?
1 lukinskiy
 
20.02.21
20:03
Да, Элемент из строки "ПоступлениеНаРасчетныйСчетФормыКлиент.РасшифровкаПлатежаДоговорКонтрагентаПриИзменении(ЭтотОбъект, Элемент)" потом не используется, так что вопрос только про ЭтотОбъект в форме документа. Как его получить в обработке?
2 Бишбармак
 
20.02.21
20:05
Если делать НЕ регулярно, то встроенной обработкой "Групповое изменение реквизитов"
3 lukinskiy
 
20.02.21
20:06
Не, мне нужно из моей обработки это сделать, там хитрое изменение договоров.
4 ГдеСобака Зарыта
 
20.02.21
20:21
ДокОбъект.РасшифровкаПлатежа[0].ДоговорКонтрагента = ТвойДоговорСсылка;
5 lukinskiy
 
20.02.21
20:25
(4) Нет, этого мало, потом ошибки лезут.
6 ГдеСобака Зарыта
 
20.02.21
20:27
(5) Этого достачно, я считаю. Какие ошибки?
7 lukinskiy
 
20.02.21
20:39
Вот такая ошибка:

Преобразование значения к типу Булево не может быть выполнено
{ВнешняяОбработка.ИсправлениеДоговоров.Форма.Форма.Форма(720)}:    ДокОбъект.Записать(РежимЗаписиДокумента.Проведение);
{ВнешняяОбработка.ИсправлениеДоговоров.Форма.Форма.Форма(29)}:    ПолучитьИСравнитьДанныеНаСервере();

по причине:
Ошибка при выполнении обработчика - 'ОбработкаПроведения'
по причине:
Преобразование значения к типу Булево не может быть выполнено
{ОбщийМодуль.УчетВзаиморасчетов.Модуль(8722)}:    Если Параметры.РасчетыВУсловныхЕдиницах Тогда
{ОбщийМодуль.УчетВзаиморасчетов.Модуль(5094)}:        СчетаРасчетов = СчетаРасчетовПоОтгрузке(СтрокаПлатежа);
{ОбщийМодуль.УчетВзаиморасчетов.Модуль(1804)}:    ОстаткиЗадолженности = ПолучитьОстаткиЗадолженности(Параметры.РасшифровкаПлатежа, Реквизиты, Отказ);
{Документ.ПоступлениеНаРасчетныйСчет.МодульОбъекта(244)}:    ТаблицаВзаиморасчетов = УчетВзаиморасчетов.ПодготовитьТаблицуВзаиморасчетовПогашениеЗадолженности(
{ВнешняяОбработка.ИсправлениеДоговоров.Форма.Форма.Форма(720)}:    ДокОбъект.Записать(РежимЗаписиДокумента.Проведение);

Если не менять договор, а просто перепровести документ (изменив, допустим, комментарий), то все ок.
8 lukinskiy
 
20.02.21
20:44
Если же выбрать нужный договор и провести документ руками, то все ок.
9 ГдеСобака Зарыта
 
20.02.21
20:58
Создай новый документ копированием, замени на свой договор, проведи. В консоли запросов выбери все поля этих двух документов, потом все поля табличных частей. Сравни и найди разницу
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший