Имя: Пароль:
1C
1С v8
Не заполняется объект из обработки заполнения ТЧ
🠗 (Serg_1960 14.05.2018 09:54)
0 егаис
 
14.05.18
08:58
&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения) Экспорт
    Если ИдентификаторКоманды = "КорректировкаПени" Тогда
        Режим = РежимДиалогаВопрос.ДаНет;
        Оповещение = Новый ОписаниеОповещения("ПослеОтветаНаВопросОЗаполненииТЧ", ЭтаФорма, Параметры);
        ПоказатьВопрос(Оповещение, "Заполнить табличную часть?", Режим, 0);
    КонецЕсли;
КонецПроцедуры

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

&НаСервере
Процедура ВыполнитьРасчетИЗаполнениеНаСервере(ОбъектСТЧ)
    
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    УПЖКХ_НачисленияОбороты.Услуга КАК Услуга,
        |    УПЖКХ_НачисленияОбороты.ЛицевойСчет КАК ЛицевойСчет,
        |    УПЖКХ_НачисленияОбороты.Договор КАК Договор,
        |    УПЖКХ_НачисленияОбороты.СуммаНачисленияОборот КАК СуммаНачисленияОборот,
        |    УПЖКХ_НачисленияОбороты.МесяцНачисления КАК МесяцНачисления,
        |    УПЖКХ_НачисленияОбороты.ВидНачисления КАК ВидНачисления
        |ИЗ
        |    РегистрНакопления.УПЖКХ_Начисления.Обороты(
        |            &ДатаНачала,
        |            &ДатаОкончания,
        |            Период,
        |            Организация = &Организация
        |                И ЛицевойСчет = &ЛицевойСчет
        |                И РазделУчета = ЗНАЧЕНИЕ(Перечисление.УПЖКХ_РазделыУчета.Пени)) КАК УПЖКХ_НачисленияОбороты";
    
    Запрос.УстановитьПараметр("ДатаНачала", ОбъектСТЧ.ДатаНач);
    Запрос.УстановитьПараметр("ДатаОкончания", ОбъектСТЧ.ДатаКон);
    Запрос.УстановитьПараметр("ЛицевойСчет", ОбъектСТЧ.Объект);
    Запрос.УстановитьПараметр("Организация", ОбъектСТЧ.Организация);
    
    ТаблицаНачислений =  Запрос.Выполнить().Выгрузить();
    Для Каждого СтрокаНачисления Из ТаблицаНачислений Цикл
        НоваяСтрока = ОбъектСТЧ.Корректировки.Добавить();
        НоваяСтрока.Услуга = СтрокаНачисления.Услуга;
        НоваяСтрока.ЛицевойСчет = СтрокаНачисления.ЛицевойСчет;
        НоваяСтрока.МесяцНачисления = СтрокаНачисления.МесяцНачисления;
        НоваяСтрока.ВидНачисления = СтрокаНачисления.ВидНачисления;
        НоваяСтрока.СуммаПени = - СтрокаНачисления.СуммаНачисленияОборот;
    КонецЦикла;    

КонецПроцедуры    



вот здесь
    КопироватьДанныеФормы(НовыйОбъект, ВладелецФормы.Объект);
НовыйОбъект имеет заполненную табличную часть, проверил, но почему-то не передается в форму владельца
Что упустил?
1 DrShad
 
14.05.18
09:23
Окно упустил
2 DrShad
 
14.05.18
09:24
//Если пользователь дал разрешение на продолжение, то начнем перебирать все
        //документы, у которых мы планируем заполнить табличную часть
        Для каждого Элемент из ОбъектыНазначенияМассив Цикл

            //Зададим ключ поиска документа, из которого вызвана данная обработка,
            //чтобы получить ссылку на редактирумый документ в удобном виде для
            //функции ОткрытьФорму()
            КлючПоиска = Новый Структура("Ключ", Элемент);

            //Но нам не надо открывать новую форму (окно) для изменяемого документа, а
            //Нам надо все изменения показать в уже открытых у клиента окнах
            Окна = ПолучитьОкна();
            Для каждого Окно из Окна Цикл

                //Окно изменяемого документа будет точно не основным, а вспомогательным, поэтому
                //сразу пропускаем основное окно, а далее идем на не очень хороший способ поиска открытого окна
                //изменяемого документа. Мы просто переберем все окна, а в заголовке, которых будет встречаться
                //Наименование, номер и дата нужного документа - будем изменять
                Если НЕ Окно.Основное
                    И Найти(Окно.Заголовок, Элемент) Тогда
                    //Передадим ключ поиска (можно сказать ссылку на объект) и данные о найденном открытом окне
                    //в функцию ОткрытьФорму()
                    //Код находится в цикле на тот случай, если открытых окон изменяемого документа больше одного
                    Форма = ОткрытьФорму("Документ.ЗаказКлиента.Форма.ФормаДокумента",КлючПоиска,,,Окно);

                    //Далее мы получаем объект только, что повторно открытой формы и помещаем её в переменную
                    //В объекте содержатся все реквизиты (элементы) формы
                    НовыйОбъект = Форма.Объект;
                    НовыйОбъект.Товары.Очистить();

                    //Мы помещаем объект формы в переменную,
                    //так как должны передать её в процедуру на сервере,
                    //где нельзя изменять объект формы, зато можно править переменную содержащую его
                    ЗаполнитьОбъект(НовыйОбъект, ВыбранныЗнВ);

                    //После выполнения процедуры на сервере мы получаем изменную переменную НовыйОбъект,
                    //которую необходимо передать в уже полученную нами форму
                    КопироватьДанныеФормы(НовыйОбъект, Форма.Объект);
                    Форма.АвтоТест_ЗаполнитьЦеныПоСоглашению(Неопределено);
                КонецЕсли;
            КонецЦикла;

        КонецЦикла;
3 DrShad
 
14.05.18
09:25
у меня так работает
не помню уже где нашел, но комментарии в коде как нельзя кстати
4 Franchiser
 
гуру
14.05.18
09:30
Не владелецформы= неопределенно ???
5 Serg_1960
 
14.05.18
09:38
Понедельник, утро...

ВладелецФормы = ОткрытьФорму("Документ.КВП_КорректировкаНачислений.Форма.ФормаДокумента", Новый Структура("Ключ", Объект.Ссылка));
6 Serg_1960
 
14.05.18
09:53
(3) Если Вы не против, то перефразирую применительно к ветке автора:

Не помню уже где нашел, но комментарии к коду как нельзя кстати:
"Вчера асфальт поднялся вертикально и ударил по морде. Пришлось спать стоя".
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший