Имя: Пароль:
1C
 
создание и заполнение таблицы значений на форме обработки
0 NIGHTHUNTER
 
01.10.20
09:25
Решил спросить. А то долго уже сижу. Буду по шагам.
Есть обработка. Мне нужно создать таблицу значений на ее форме, и динамически создавать ее колонки и заполнять значениями.
Все есть но вот с само таблицей на форме что то не идет.

Первый вопрос, я разместить для этого на форме должен Табличное Поле?
1 NIGHTHUNTER
 
01.10.20
09:59
у внешней обработки нет таблицы значений

таблица значений лежит на форме обработки, без колонок

создаются программно и заполняются

ВОПРОС. Я заполнил таблицу, создались колонки и заполнились строки. Потом нажимаю ещё раз. Нужно ее очистить, но идет ошибка.
Как правильно очищать?

    //
    // ОЧИСТКА ВСЕГО
    ТаблицаЗагрузки.Очистить();
    ТаблицаЗагрузки.Колонки.Очистить();
    ЭлементыФормы.ТаблицаЗагрузки.Очистить();
    ЭлементыФормы.ТаблицаЗагрузки.Колонки.Очистить();
    //
2 Ёпрст
 
гуру
01.10.20
10:01
(0) ё...
3 Ёпрст
 
гуру
01.10.20
10:01
ТаблицаЗагрузки.Очистить();

всё
4 Ёпрст
 
гуру
01.10.20
10:02
ЭлементыФормы.ТаблицаЗагрузки.ОбновитьСтроки() если очень надо еще потом
5 NIGHTHUNTER
 
01.10.20
10:14
(4)

Я делаю вот так

    //
    // ОЧИСТКА ВСЕГО
    ТаблицаЗагрузки.Очистить();
    ТаблицаЗагрузки.Колонки.Очистить();
    ЭлементыФормы.ТаблицаЗагрузки.Значение.Очистить();
    ЭлементыФормы.ТаблицаЗагрузки.Значение.Колонки.Очистить();
    //


Но вот при повторном выполнении, когда все должно быть тоже самое, вылетает ошибка

{ВнешняяОбработка.ЗагрузкаИзБП_0_2.Форма.Форма.Форма(102)}: Ошибка при вызове метода контекста (Добавить)
        КолонкаТаблицыНаФорме           = ЭлементыФормы.ТаблицаЗагрузки.Колонки.Добавить(ИмяКолонки, ИмяКолонки);
по причине:
Недопустимое значение параметра (параметр номер '1')


Но если вот это выполняется ОЧИСТКА ВСЕГО, то загрузка идет как и при первом нажатии, от чего такая ошибка ????
6 NIGHTHUNTER
 
01.10.20
10:17
Что вот это за ошибка, как ее исключить? Срабатывает при повторном выполнении!

{ВнешняяОбработка.ЗагрузкаИзБП_0_2.Форма.Форма.Форма(104)}: Ошибка при вызове метода контекста (Добавить)
        КолонкаТаблицыНаФорме           = ЭлементыФормы.ТаблицаЗагрузки.Колонки.Добавить(ИмяКолонки, ИмяКолонки);
по причине:
Недопустимое значение параметра (параметр номер '1')


Первый раз таблица формируется на форме. При повторном выполнении, то есть при пересоздании этой таблицы, идет ошибка, эта.
7 NIGHTHUNTER
 
01.10.20
10:18
Полный код. При повторном нажатии идет ошибка ...


//
Процедура ЗагрузитьДанныеНажатие(Элемент)
    //
    Если Не ЗначениеЗаполнено(ЭтотОбъект.ФайлЗагрузки) Тогда
        Предупреждение("Необходимо выбрать файл для загрузки!",2,"ЗАГРУЗКА НЕ ВОЗМОЖНА!");
        Возврат;
    КонецЕсли;
    //
    // ОПИСЧАНИЕ ТИПОВ
    //
    КЧК    = Новый КвалификаторыЧисла(15,3);
    КЧЦ    = Новый КвалификаторыЧисла(15,2);    
    КС     = Новый КвалификаторыСтроки(200);
    КД     = Новый КвалификаторыДаты(ЧастиДаты.Дата);
    //
    Массив = Новый Массив;
    Массив.Добавить(Тип("Строка"));
    ОписаниеТиповС = Новый ОписаниеТипов(Массив, , КС);
    //
    // ОЧИСТКА ВСЕГО
    ТаблицаЗагрузки.Очистить();
    ТаблицаЗагрузки.Колонки.Очистить();
    ЭлементыФормы.ТаблицаЗагрузки.Значение.Очистить();
    ЭлементыФормы.ТаблицаЗагрузки.Значение.Колонки.Очистить();
    //
    ЭлементыФормы.ТаблицаЗагрузки.ОбновитьСтроки();
    //
    ТаблицаЗагрузки2 = Новый ТаблицаЗначений;
    // ЭтотОбъект.ФайлЗагрузки;
    // ЭлементыФормы.ФайлЗагрузки.Значение;
    ЗагружаемыйФайл = Новый ТекстовыйДокумент;
    ЗагружаемыйФайл.Прочитать(ЭтотОбъект.ФайлЗагрузки);
    Шапка         = ЗагружаемыйФайл.ПолучитьСтроку(1);
    МассивКолонок = РазложитьСтрокуВМассивПодстрок(Шапка,Разделитель);
    Для Каждого ИмяКолонки Из МассивКолонок Цикл
        Если ИмяКолонки = "" Тогда
            Прервать;
        КонецЕсли;
        ИмяБезПробелов = СтрЗаменить(ИмяКолонки," ",""); // убираем из имени колонок пробелы
        ТаблицаЗагрузки2.Колонки.Добавить(ИмяБезПробелов,,ИмяКолонки);         
        //
        ИмяКолонки                      = ИмяБезПробелов;
        КолонкаТаблицы                  = ТаблицаЗагрузки.Колонки.Добавить(ИмяКолонки, ОписаниеТиповС, ИмяКолонки, 30);
        КолонкаТаблицыНаФорме           = ЭлементыФормы.ТаблицаЗагрузки.Колонки.Добавить(ИмяКолонки, ИмяКолонки);
        КолонкаТаблицыНаФорме.Данные    = ИмяКолонки;
        КолонкаТаблицыНаФорме.Положение = ПоложениеКолонки.НоваяКолонка;
    КонецЦикла;
    //
    // 1. Номер    
    // 2. Дата    
    // 3. ВидОперации    
    // 4. Организация    
    // 5. Склад    
    // 6. Контрагент    
    // 7. ДоговорКонтрагента    
    // 8. СпособЗачетаАвансов    
    // 9. ТипЦен    
    // 10. КурсВзаиморасчетов    
    // 11. КратностьВзаиморасчетов    
    // 12. СуммаВключаетНДС    
    // 13. СчетНаОплатуПокупателю    
    // 14. Грузоотправитель    
    // 15. Грузополучатель    
    // 16. АдресДоставки    
    // 17. БанковскийСчетОрганизации    
    // 18. СуммаДокумента    
    // 19. Ответственный    
    // 20. Комментарий    
    // 21. Руководитель    
    // 22. Номенклатура    
    // 23. Количество    
    // 24. Цена    
    // 25. Сумма    
    // 26. СтавкаНДС    
    // 27. СуммаНДС    
    // 28. СчетУчета    
    // 29. СчетДоходов    
    // 30. Субконто    
    // 31. СчетУчетаНДСПоРеализации    
    // 32. СчетРасходов    
    // 33. КонтрагентИНН    
    // 34. НоменклатураАртикул    
    //
    Для НомерСтроки = 2 по ЗагружаемыйФайл.КоличествоСтрок() Цикл
        Строка        = ЗагружаемыйФайл.ПолучитьСтроку(НомерСтроки);
        Если Не ЗначениеЗаполнено(Строка) Тогда
            Продолжить;
        КонецЕсли;
        МассивКолонок = РазложитьСтрокуВМассивПодстрок(Строка,Разделитель);
        //        
        НоваяСтрока    = ТаблицаЗагрузки.Добавить();
        //
        НоваяСтрока2   = ТаблицаЗагрузки2.Добавить();
        //
        //Если МассивКолонок.Количество() <> ЭлементыФормы.ТаблицаЗагрузки.Колонки.Количество() - 1 Тогда
        //    Продолжить;
        //КонецЕсли;
        Для НомерКолонки = 1 по МассивКолонок.Количество() Цикл
            ТекущееЗначение         = МассивКолонок[НомерКолонки - 1];
            //
            ИмяКолонки              = ТаблицаЗагрузки.Колонки[НомерКолонки - 1].Имя;             
            НоваяСтрока[ИмяКолонки] = ТекущееЗначение;            
            //
            ИмяКолонки              = ТаблицаЗагрузки2.Колонки[НомерКолонки - 1].Имя;             
            НоваяСтрока2[ИмяКолонки] = ТекущееЗначение;            
            //
        КонецЦикла;           
    КонецЦикла;  
    
КонецПроцедуры
//
8 NIGHTHUNTER
 
01.10.20
10:19
и я вижу что визуально

после вот этого колонки так же есть на форме, очищаются только строки

    // ОЧИСТКА ВСЕГО

    ТаблицаЗагрузки.Очистить();
    ТаблицаЗагрузки.Колонки.Очистить();
    ЭлементыФормы.ТаблицаЗагрузки.Значение.Очистить();
    ЭлементыФормы.ТаблицаЗагрузки.Значение.Колонки.Очистить();
    //
9 NIGHTHUNTER
 
01.10.20
10:24
никто не подскажет? проблему описал в (7)(6)
10 Ёпрст
 
гуру
01.10.20
11:08
(9) см.(3)
11 NIGHTHUNTER
 
01.10.20
11:09
(10) это сделано
там программно создаются же колонки и строки
12 NIGHTHUNTER
 
01.10.20
11:10
(10) вот же

    // ОЧИСТКА ВСЕГО

    ТаблицаЗагрузки.Очистить();
    ТаблицаЗагрузки.Колонки.Очистить();
    ЭлементыФормы.ТаблицаЗагрузки.Очистить();
    ЭлементыФормы.ТаблицаЗагрузки.Колонки.Очистить();
    //
13 Ёпрст
 
гуру
01.10.20
11:10
ёё.. ну выкинь добавление колонок у табличного поля, достаточно, ЭлементыФормы.ТвоёТабПоле.СоздатьКолонки() и всё
14 Ёпрст
 
гуру
01.10.20
11:10
+13
//   ЭлементыФормы.ТаблицаЗагрузки.Очистить();
  //  ЭлементыФормы.ТаблицаЗагрузки.Колонки.Очистить();
15 Ёпрст
 
гуру
01.10.20
11:11
// КолонкаТаблицыНаФорме           = ЭлементыФормы.ТаблицаЗагрузки.Колонки.Добавить(ИмяКолонки, ИмяКолонки);
       // КолонкаТаблицыНаФорме.Данные    = ИмяКолонки;
       // КолонкаТаблицыНаФорме.Положение = ПоложениеКолонки.НоваяКолонка;
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший