Версия для печати темы (https://pro1c.org.ua/index.php?s=cc1de830e21295e8462e538b03fb1b08&showtopic=63942)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование обычных форм 1С 8.2 и не интерфейсной логики _ Не получается создать форму обработки и заполнить её табличную часть данными

Автор: Lamozavrik 11.01.21, 15:48

Здравствуйте всем, уважаемые форумчане. Заранее прошу прощения и не кидаться камнями, потому что знаю что задача плёвая, но не могу решить, так как в программировании 1С совсем чайник. Собственно сама задача. Мне нужно создать форму обработки, заполнить её табличную часть данными в цикле и открыть её модально. Вроде всё просто, но не выходит заполнить табличную часть.
1С 8.2.19.130, Форма обработки обычная. Создал я эту форму с названием ФормаСпецификации. В этой форме есть табличная часть (Спецификация). Далее создаю табличную часть, называю её Спецификация, там всего 2 реквизита (НомерЯщика и НеттоЯщика), и в свойствах формы в табличной части, в поле "Данные" выбираю её. Необходимо при нажатии кнопки чтобы эта форма вывелась модально и заполнились данные табличной части. Вот процедура при нажатии кнопки.

Процедура СформироватьСпецификацию(Элемент)
        
        ФормаСпецификации = Обработки.ИнтерфейсМаркировки.ПолучитьФорму("ФормаСпецификации");
    
    Для каждого ТекСтрока из Товары Цикл
        СтрокаТабличнойЧасти = Спецификация.Добавить();
        СтрокаТабличнойЧасти.НомерЯщика = Число(ТекСтрока.ПорядковыйНомер);
        СтрокаТабличнойЧасти.НеттоЯщика = Число(ТекСтрока.КоличествоNetto);
    КонецЦикла;
    
    ФормаСпецификации.ОткрытьМодально();

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


Форма открывается, но табличная часть пустая. Не понимаю что не так. Заранее спасибо!

Автор: denis84 11.01.21, 16:16

Lamozavrik @ Сегодня, 15:48 * ,
Добрый день! У Вас нет объекта из которого получать данные(т.е. документа из которого необходимо прочитать табличную часть).

   Док = СсылкаНаОбъект;  // реквизит обработки - ссылка на документ из которого надо прочитать табличную часть
  
   Для каждого Стр Из Док.Товары Цикл // Цикл обработки табличной части "Товары"
       НоваяСтр = Форма.Спецификация.Добавить();
       НоваяСтр.НомерСтроки = Стр.НомерСтроки;
       НоваяСтр.Номенклатура = Стр.Номенклатура.Наименование;
       НоваяСтр.Кво = 0;
       НоваяСтр.КвоДокумент = Стр.Количество;
   КонецЦикла;
   Форма.Открыть();


Если я Вас правильно понял

Автор: Lamozavrik 11.01.21, 16:23

denis84 @ Сегодня, 16:16 * ,
Простите, не совсем понимаю. Данные у меня берутся с другой формы. Если формировать документ с макета, то всё ок.
Товары - это тоже табличная часть. Если выводить в цикле через "Сообщить", то всё нормально выводится. Я просто её строки перебираю в цикле и хочу этими данными заполнить табличную часть другой формы.

Автор: denis84 11.01.21, 16:28

Lamozavrik @ Сегодня, 16:23 * ,
"Товары" табличная часть этой формы? Попробуйте написать "Форма.Товары"

Автор: Lamozavrik 11.01.21, 16:35

denis84 @ Сегодня, 16:16 * ,
Сиситема такая: оператор взвешивает товар, вес и номер ящика заполняются в табличную часть "Товары", и эти данные выводятся в форме "Товары". Далее я беру эти данные с табличной части "Товары" и перебираю в цикле. И вот "ТекСтрока" - Это одна строка этих данных. Мне этими данными нужно заполнить другую табличную часть (Спецификация) и вывести эти данные в форме "ФормаСпецификации". Только вот при открытии эта табличная часть пустая. Не заполняется

Цитата(denis84 @ 11.01.21, 16:28) *
"Товары" табличная часть этой формы? Попробуйте написать "Форма.Товары"

Данные оттуда берутся, всё нормально. Выводятся в цикле через "Сообщить". Проблема в том, что не выходит заполнить этими данными другую таблицу
ФормаСпецификации = Обработки.ИнтерфейсМаркировки.ПолучитьФорму("ФормаСпецификации"); //Получаю новую форму
    
    Для каждого ТекСтрока из Товары Цикл //В цикле перебираю данные из табличной части "Товары". В "ТекСтрока" всё присутствует
        СтрокаТабличнойЧасти = Спецификация.Добавить(); //Добавляю строку в табличную часть "Спецификации"
        СтрокаТабличнойЧасти.НомерЯщика = Число(ТекСтрока.ПорядковыйНомер); //Заполняю значения реквизитов
        СтрокаТабличнойЧасти.НеттоЯщика = Число(ТекСтрока.КоличествоNetto);
    КонецЦикла;

ФормаСпецификации.ОткрытьМодально(); //Вывожу форму, но табличная часть пустая


При этом ошибок никаких нет

Автор: denis84 11.01.21, 16:43

Lamozavrik @ Сегодня, 16:35 * ,

ФормаСпецификации = ЭтотОбъект.ПолучитьФорму("ФормаСпецификации"); //Получаю новую форму
    
    Для каждого ТекСтрока из Товары Цикл //В цикле перебираю данные из табличной части "Товары". В "ТекСтрока" всё присутствует
        СтрокаТабличнойЧасти = ФормаСпецификации.Спецификация.Добавить(); //Добавляю строку в табличную часть "Спецификации"
        СтрокаТабличнойЧасти.НомерЯщика = Число(ТекСтрока.ПорядковыйНомер); //Заполняю значения реквизитов
        СтрокаТабличнойЧасти.НеттоЯщика = Число(ТекСтрока.КоличествоNetto);
    КонецЦикла;

ФормаСпецификации.ОткрытьМодально();

Автор: Lamozavrik 11.01.21, 16:48

denis84 @ Сегодня, 16:43 * ,
Пишет что Поле объекта не найдено (НомерЯщика), хотя реквизиты формы есть, реквизиты табличной части есть...

Автор: denis84 11.01.21, 16:53

Lamozavrik @ Сегодня, 16:48 * ,
Надо смотреть обработку! Может мы разговариваем о разных вещах (не понимаем друг друга). Киньте мне на почту в личку написал адрес

Автор: Lamozavrik 11.01.21, 17:08

denis84 @ Сегодня, 16:53 * ,
Сейчас выгружу и кину

denis84 @ Сегодня, 16:53 * ,
Спасибо. Кинул

Автор: denis84 12.01.21, 9:30

Lamozavrik @ Вчера, 17:08 * ,

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


Вот такой вариант у меня работает

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua