Форум программистов, компьютерный форум, киберфорум
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/117: Рейтинг темы: голосов - 117, средняя оценка - 4.83
22 / 22 / 0
Регистрация: 13.05.2011
Сообщений: 197
1

Программное изменение табличного поля

23.11.2011, 16:07. Показов 23309. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Товарищи, подскажите пожалуйста, возникла такая проблема. В обработке пытаюсь программно создать колонку в Табличном поле.
Делаю так:
1C
1
2
3
        ЭлементыФормы.ТабличноеПоле.Колонки.Добавить("Контрагент", "Контрагент");
    ЭлементыФормы.ТабличноеПоле.Колонки.Контрагент.Данные = "Контрагент";
    ЭлементыФормы.ТабличноеПоле.Колонки.Контрагент.УстановитьЭлементУправления(Тип("ПолеВвода"));
Запускаю обработку в режиме предприятия. В табличном поле создается колонка. Пытаюсь что нибудь напечатать, нифига не получается. При это в колонке которая была создана в конфигураторе всё нормально печатается, а в той, что создана программно нет.
Посмотрел в отладчике оказалось, что у меня не определён ТипЗначения этой колонки. Наверное дело в этом. Как его указать?

Добавлено через 12 минут
Так, нашёл решение сам
Надо ещё дописать вот такую строчку
1C
1
ЭлементыФормы.ТабличноеПоле.Значение.Колонки.Добавить("Контрагент", Новый ОписаниеТипов("Строка"));
Другой вопрос, как программно создаётся реквизит, табличной части?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.11.2011, 16:07
Ответы с готовыми решениями:

Программное заполнение табличного поля данными из справочника
Я пытаюсь заполнить табличное поле данными из таблицы, но в результате оно остается пустым. Я...

Отследить программное изменение поля на форме
Есть поле на форме Сумма(управляемые формы), которая рассчитывается как цена*количествоДней. Есть...

Автозаполнение Табличного Поля
Доброго времени суток! Подскажите как присвоить табличному полю значение реквизита справочника (1С...

Итог по столбцу табличного поля
Доброго времени, нужна помощь, 1С начал познавать совсем недавно, и не по своей воле) конфа 8.3 УТ...

17
309 / 309 / 1
Регистрация: 16.01.2011
Сообщений: 1,073
23.11.2011, 16:26 2
А.П. Габец, Д.И. Гончаров 1С:Предприятие 8.1 простые примеры разработки стр. 172
1
22 / 22 / 0
Регистрация: 13.05.2011
Сообщений: 197
23.11.2011, 17:09  [ТС] 3
Там описывается как открыть форму внешней обработки. Это как бы мне не надо =) Кстати я смотрел в этой книжке, то что нужно не нашёл.
0
309 / 309 / 1
Регистрация: 16.01.2011
Сообщений: 1,073
23.11.2011, 17:20 4
вот это
Миниатюры
Программное изменение табличного поля  
0
2955 / 1767 / 82
Регистрация: 03.11.2011
Сообщений: 8,280
24.11.2011, 11:56 5
Цитата Сообщение от RedPirate Посмотреть сообщение
Другой вопрос, как программно создаётся реквизит, табличной части?
Только в конфигураторе с последующими ритуальными плясками в монопольном режиме
посему он эмулируется через ТЗ, как правило. Т.е. здесь главное - алгоритм решения задачи "Зачем нужен этот реквизит?".

Добавлено через 5 минут
Цитата Сообщение от RedPirate Посмотреть сообщение
Так, нашёл решение сам
Надо ещё дописать вот такую строчку
C
1
ЭлементыФормы.ТабличноеПоле.Значение.Колонки.Добавить("Контрагент", Новый ОписаниеТипов("Строка"));
Совет: создать невидимую колонку в конфигураторе и программно её клонировать. (в этом объекте ещё есть всякие грабли...)
0
22 / 22 / 0
Регистрация: 13.05.2011
Сообщений: 197
24.11.2011, 12:03  [ТС] 6
У моего ТабличногоПоля источник данных ТабличнаяЧасть,а в примере ТаблицаЗначений. Так что он не подходит.
В принципе плевать бы на эту ТабличнуюЧасть, если бы значения которые я записываю в Колонку Табличного поля сохранялись.
Происходит так, я добовляю новую строку в Табличное поле:
C
1
2
ЭлементыФормы.ТабличноеПоле.Колонки.Добавить("Контрагент", Новый ОписаниеТипов("Строка"));       
    ЭлементыФормы.ТабличноеПоле.Колонки.Контрагент.УстановитьЭлементУправления(Тип("ПолеВвода"));
Печатаю что нибудь в колонке "Контрагенты", которую я программно создал, потом просто щёлкаю мышой в любом месте, что бы снять выделение с ячейки в которой только что печатал. И в ячейке ничего не сохраняется. Это как бы и понятно, данные то хранить негде вот и не сохраняется, что можно сделать в такой ситуации?
0
309 / 309 / 1
Регистрация: 16.01.2011
Сообщений: 1,073
24.11.2011, 12:14 7
кому то когда то лабал на коленке
Вложения
Тип файла: rar СозданиеПоступленийТоваров_1.rar (7.6 Кб, 200 просмотров)
1
2955 / 1767 / 82
Регистрация: 03.11.2011
Сообщений: 8,280
24.11.2011, 12:16 8
Цитата Сообщение от RedPirate Посмотреть сообщение
У моего ТабличногоПоля источник данных ТабличнаяЧасть,а в примере ТаблицаЗначений. Так что он не подходит.
В принципе плевать бы на эту ТабличнуюЧасть, если бы значения которые я записываю в Колонку Табличного поля сохранялись.
Происходит так, я добовляю новую строку в Табличное поле:
C
1
2
ЭлементыФормы.ТабличноеПоле.Колонки.Добавить("Контрагент", Новый ОписаниеТипов("Строка"));       
    ЭлементыФормы.ТабличноеПоле.Колонки.Контрагент.УстановитьЭлементУправления(Тип("ПолеВвода"));
Печатаю что нибудь в колонке "Контрагенты", которую я программно создал, потом просто щёлкаю мышой в любом месте, что бы снять выделение с ячейки в которой только что печатал. И в ячейке ничего не сохраняется. Это как бы и понятно, данные то хранить негде вот и не сохраняется, что можно сделать в такой ситуации?
Выгружать ТЧ в ТЗ. Добавлять колонки в ТЗ. Работать с ТЗ. При закрытии обработать левые колонки ТЗ. Загружать ТЧ из ТЗ.

СТОП! А ТЧ то где? В собственной обработке? Тогда зачем сложности?
0
309 / 309 / 1
Регистрация: 16.01.2011
Сообщений: 1,073
24.11.2011, 12:25 9
делал подобное на управляемых формах, могу поделиться если нужно будет
0
2955 / 1767 / 82
Регистрация: 03.11.2011
Сообщений: 8,280
24.11.2011, 13:00 10
Цитата Сообщение от fimbulwinter Посмотреть сообщение
кому то когда то лабал на коленке
Грамотно.
Есть ещё "ленивый путь": мастрячишь в конфигураторе пару сотен колонок, а программно врубаешь видимость по надобности и по любому плевку юзера.
0
22 / 22 / 0
Регистрация: 13.05.2011
Сообщений: 197
24.11.2011, 16:03  [ТС] 11
duk337, да табличная часть в собственной обработке.
0
2955 / 1767 / 82
Регистрация: 03.11.2011
Сообщений: 8,280
24.11.2011, 16:23 12
Цитата Сообщение от RedPirate Посмотреть сообщение
duk337, да табличная часть в собственной обработке.
Ну так лепи колонки в конфе прямо в ТЧ, они ж не в структуре БД, а виртуально. А в т. поле видимостью регулируй их состав.
0
22 / 22 / 0
Регистрация: 13.05.2011
Сообщений: 197
24.11.2011, 16:36  [ТС] 13
Да я бы с радостю прямо в самой обработке ручками лепил, одна ко же задача другая поставлена.
Кстати по поводу того что ты писал загружать в ТЧ из ТЗ.

C
1
2
3
4
5
6
7
8
9
10
        ТЗ = Новый ТаблицаЗначений;
    ТЗ.Колонки.Добавить("Артикул");
    ТЗ.Колонки.Добавить("Наименование");
    ТЗ.Колонки.Добавить("Контрагент");
    Новая = ТЗ.Добавить();
    Новая.Контрагент = "ООО МиР";
    Новая.Наименование = "Гитара 1";
    Новая.Артикул = "А11";
    ТабличнаяЧасть.Очистить();
    ТабличнаяЧасть.Загрузить(ТЗ);
Если так делать то колонка в табличном поле не отображается.

А задача поставлена программно добавить колонку и заполнить её.
Миниатюры
Программное изменение табличного поля  
0
2955 / 1767 / 82
Регистрация: 03.11.2011
Сообщений: 8,280
24.11.2011, 22:34 14
Цитата Сообщение от RedPirate Посмотреть сообщение
Да я бы с радостю прямо в самой обработке ручками лепил, одна ко же задача другая поставлена.
Кстати по поводу того что ты писал загружать в ТЧ из ТЗ.

C
1
2
3
4
5
6
7
8
9
10
        ТЗ = Новый ТаблицаЗначений;
    ТЗ.Колонки.Добавить("Артикул");
    ТЗ.Колонки.Добавить("Наименование");
    ТЗ.Колонки.Добавить("Контрагент");
    Новая = ТЗ.Добавить();
    Новая.Контрагент = "ООО МиР";
    Новая.Наименование = "Гитара 1";
    Новая.Артикул = "А11";
    ТабличнаяЧасть.Очистить();
    ТабличнаяЧасть.Загрузить(ТЗ);
Если так делать то колонка в табличном поле не отображается.

А задача поставлена программно добавить колонку и заполнить её.
Кем поставлена-то? Значит, главное создать тупо абстрактно? Ведь не не сохранить же .
А вообще, сохранить это значение можно тысячью способов, особенно, если в ТЧ есть лишние реквизиты типа "Число1...n", которые можно тупо прилинковать к созданной колонке. Или задача поставлена, что для программно добавленной колонки нельзя создать поле ни в одном объекте конфы? Пиши на диск. Или в текстовый файл. делается это по событию "При изменении" или "при окончании редактирования".

СохранитьЗначение (SaveValue)
Синтаксис:
СохранитьЗначение(<Имя>, <Значение>)
Параметры:
<Имя> (обязательный)
Тип: Строка.
Имя, с которым сохраняется значение, используется для идентификации сохраняемых значений.
<Значение> (обязательный)
Тип: Произвольный.
Сохраняемое значение.
Описание:
Сохраняет значение для использования не только в текущем, но и в последующих сеансах работы с программой. Значение хранится индивидуально для каждой пары информационная база - пользователь. Например, можно сохранять значения по умолчанию, используемые данным пользователем.
Доступность:
Толстый клиент.
Пример:
СохранитьЗначение("СрокИсполненияЗаказа", СрокИсполнения);
СохранитьЗначение("СкладПоУмолчанию", МестоХранения);

А если юмор сделать профессиональным - создай регистр сведений с периодичностью "секунда" измерение "Ключ"(строка), ресурсом "значение" (число или что там у тебя) и пиши туда "ПриИзменении" по "Ключ"=Имя новой колонки, "период" ТекущаяДата(), Значение - значение из колонки. Вывали этот регистр на отдельную панель, чтоб видно было... Вот смеху-то будет

См. также:
Глобальный контекст, метод ВосстановитьЗначение
0
22 / 22 / 0
Регистрация: 13.05.2011
Сообщений: 197
25.11.2011, 09:39  [ТС] 15
Цитата Сообщение от duk337 Посмотреть сообщение
Или задача поставлена, что для программно добавленной колонки нельзя создать поле ни в одном объекте конфы?
Да можно создать, только нужно это сделать программно!
Зачем на диск то писать или в текстовый документ? Зачем такое извращение? Что разве нельзя как то программно создать реквизит табличной части?
0
309 / 309 / 1
Регистрация: 16.01.2011
Сообщений: 1,073
25.11.2011, 09:44 16
красавцы... я вам и обработку кинул, и кусок кода из книги. какие еще трудности?
0
2955 / 1767 / 82
Регистрация: 03.11.2011
Сообщений: 8,280
25.11.2011, 10:26 17
Цитата Сообщение от RedPirate Посмотреть сообщение
Да можно создать, только нужно это сделать программно!
Зачем на диск то писать или в текстовый документ? Зачем такое извращение? Что разве нельзя как то программно создать реквизит табличной части?
Нельзя. А на хрена тебе реквизит объекта, который существоет столько же, сколько и форма объекта. Создай элемент формы, создай ТабЗн, массив, структуру, создай что хошь. Непонятно о чём вопрос.
0
22 / 22 / 0
Регистрация: 13.05.2011
Сообщений: 197
25.11.2011, 11:54  [ТС] 18
Цитата Сообщение от duk337 Посмотреть сообщение
Нельзя.
Вот сразу бы так. Что значит нахрена? Надо, значит надо. Зачем? Да просто потому что надо. Для чего? Просто тупо НАДО =) Вот НАДО и всё тут!

fimbulwinter, я же сказал, что там источник ТЗ, а у меня источник ТЧ. Всё равно спасибо за информацию. Тема закрыта.
0
25.11.2011, 11:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.11.2011, 11:54
Помогаю со студенческими работами здесь

Как изменить данные табличного поля?
1С 8.2. УПП 1.3 Всем доброго времени суток! Каким образом можно изменить данные табличного...

Ввод адреса в ячейку табличного поля
в табличный документ вводится адрес. Если вводить вручную через обработку ввода адреса, то все...

Привязки (обычная форма) табличного поля
Анамнез: Копированием типовой БП2.Документы.СчетНаОплатуПокупателя.ФормаДокумента создана форма...

проблема с обращением к свойству колонки из табличного поля
Кво=ЭлементыФормы.тпКомплектацияКомпьютера.Колонки.Количество(); Для к = 3 по Кво-1 цикл ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru