8.х Заполнение табличной части документа (8.3 УФ) через ОткрытиеФормы

Тема в разделе "Отчеты и обработки для "1С:Предприятие 8"", создана пользователем belbuh, 22 янв 2016.

  1. TopicStarter Overlay
    belbuh
    Offline

    belbuh Новичок в 1С

    Регистрация:
    18 июл 2013
    Сообщения:
    46
    Симпатии:
    2
    Баллы:
    4
    Всем привет!

    Перестала работать обработка ЗТЧ для Бухгалтерии 3.0. Мне кажется платформа обновилась и что-то пошло не так...

    Обработка заполняет остатками ТМЦ табличную часть документа ТребованиеНакладная.

    Как известно, ЗТЧ можно сделать двумя способами - через ОткрытиеФормы или ВызовКлиентскогоМетода.
    Мне нужно сделать через ОткрытиеФормы, так как я должен предоставить юзеру возможность на форме задать счета, по которым надо получить остатки.

    Только не срабатывает процедура заполнения.
    Хотя запрос на получение остатков корректен, проверял в консоли.

    Помогите, пожалуйста. Что я сделал не так?

    модуль обработки
    Код:
    Функция СведенияОВнешнейОбработке() Экспорт
       
        МассивНазначений = Новый Массив;
        МассивНазначений.Добавить("Документ.ТребованиеНакладная");
       
        ПараметрыРегистрации = Новый Структура;
       
        ПараметрыРегистрации.Вставить("Вид", "ЗаполнениеОбъекта");
        //ПараметрыРегистрации.Вставить("Назначение", ПолучитьНазначениеОбработки());
        ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
       
        ПараметрыРегистрации.Вставить("Наименование", НСтр("ru = 'Заполнить документ ТребованиеНакладная'"));
        ПараметрыРегистрации.Вставить("Версия", "1.0");
        ПараметрыРегистрации.Вставить("БезопасныйРежим", Истина);
        ПараметрыРегистрации.Вставить("Информация", НСтр("ru = 'Обработка заполнения документа ТребованиеНакладная'"));
       
        ТаблицаКоманд = ПолучитьТаблицуКоманд();
       
        ДобавитьКоманду(ТаблицаКоманд,
                        "Заполнить табличную часть документа ТребованиеНакладная",
                        "ЗаполнитьТЧТребованиеНакладная",
                        "ОткрытиеФормы",
                        Истина
        );
      
        ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
       
        Возврат ПараметрыРегистрации;
       
    КонецФункции
    
    а вот фрагменты кода модуля формы
    Код:
    &НаКлиенте
    Процедура ЗаполнитьДокумент()
       
        ОбъектыНазначенияМассив = Параметры.ОбъектыНазначения;
       
        Для каждого ЭлементОбъектовНазначения из ОбъектыНазначенияМассив Цикл
    
            КлючПоиска = Новый Структура("Ключ", ЭлементОбъектовНазначения);
    
            Окна = ПолучитьОкна();
    
            Для каждого Окно из Окна Цикл
                Если НЕ Окно.Основное
                    И Найти(Окно.Заголовок, ЭлементОбъектовНазначения) Тогда
                    Форма = ОткрытьФорму("Документ.ТребованиеНакладная.Форма.ФормаДокумента",КлючПоиска,,,Окно);
                    НовыйОбъект = Форма.Объект;
                    ЗаполнитьДокументНаСервере(НовыйОбъект);
                    КопироватьДанныеФормы(НовыйОбъект, Форма.Объект);
                КонецЕсли;
            КонецЦикла;
               
            ЭтаФорма.Закрыть();
        КонецЦикла;
    
    
    КонецПроцедуры
    
    

    Код:
    &НаСервере
    Процедура ЗаполнитьДокументНаСервере(НовыйОбъект) Экспорт
       
        Если НЕ ЗначениеЗаполнено(НовыйОбъект.Склад) Тогда
            ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Укажите склад!");
            Возврат;
        КонецЕсли;
       
        МассивСчетов = ПолучитьФильтрСчетов();
       
        Запрос = Новый Запрос;
        Запрос.УстановитьПараметр("Склад",                НовыйОбъект.Склад);
        Запрос.УстановитьПараметр("МассивСчетов",        МассивСчетов);
        Запрос.УстановитьПараметр("ДатаОстатков",        НовыйОбъект.Дата);
        Запрос.УстановитьПараметр("Организация",        НовыйОбъект.Организация);
       
        Запрос.Текст = "ВЫБРАТЬ
        |    ХозрасчетныйОстатки.Субконто1 КАК Номенклатура,
        |    ХозрасчетныйОстатки.Счет КАК Счет,
        |    ХозрасчетныйОстатки.КоличествоОстаток КАК Количество
        |ИЗ
        |    РегистрБухгалтерии.Хозрасчетный.Остатки(&ДатаОстатков, Счет В ИЕРАРХИИ (&МассивСчетов), ,Организация=&Организация) КАК ХозрасчетныйОстатки
        |ГДЕ 
        |    ХозрасчетныйОстатки.Субконто3 = &Склад
        |АВТОУПОРЯДОЧИВАНИЕ";
       
       
        РезультатЗапроса = Запрос.Выполнить();
        Если не РезультатЗапроса.Пустой() Тогда
           
            Выборка = РезультатЗапроса.Выбрать();
            НовыйОбъект.Материалы.Очистить();
            Пока Выборка.Следующий() Цикл
               
                СтрокаТабличнойЧасти = НовыйОбъект.Материалы.Добавить();
               
                СтрокаТабличнойЧасти.Номенклатура   = Выборка.Номенклатура;
                СтрокаТабличнойЧасти.Количество    = Выборка.Количество;
                СтрокаТабличнойЧасти.Счет            = Выборка.Счет;
                           
            КонецЦикла;
        иначе
            ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Запрос остатков вернул пустой результат!");
        КонецЕсли;
       
    КонецПроцедуры
    
    

    Вложения:

Поделиться этой страницей