Форум программистов, компьютерный форум, киберфорум
Наши страницы
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
MonoLog
0 / 0 / 0
Регистрация: 28.11.2012
Сообщений: 30
1

Работа с ТП

07.12.2012, 23:18. Просмотров 1354. Ответов 13
Метки нет (Все метки)

Вообщем проблема. Она заключается даже не в сложности задачи, а в её реализации.
Надо написать функцию "Добавить колонку". Но тут есть пару тонкостей. Надо добавить её, обозвать таким образом что бы она имела название аля Колонка№. После чего добавить Кнопку "Удалить колонку" которая удаляет выделенную колонку. Так же кнопку которая позволит переносить выделенную строку в другое ТП.
Сложность в том что бы все функции были максимально быстрыми и маленькими. Свои решения у меня есть, но для полноты картины хотел бы увидеть ваши варианты.
У табличных полей тип данных - Таблица значений.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.12.2012, 23:18
Ответы с готовыми решениями:

Нужна летиратура, в которой бы описывались работа с событиями, работа с элементами управления
Помогите пожалуйста найти летиратуру, в которой бы описывались работа с событиями,работа со всеми...

Работа - проведение обучающих семинаров по C#. Работа по выходным дням ( сб-вс - 32 часа). От 30 000р.
Обязанности - проведение обучающих семинаров по C# Базовый (начальный уровень). Опыт...

Работа с Меню. Сохранение, печать, создать новый. Работа с рисованием
В общем сабж. Делается программа, которая должная Сохранять, печатать и очищать поле (создать...

Работа формы в фоне, вне фокуса (работа с раскладкой клавиатуры)
Как заставить это работать в фоне? Даный код работает пока форма в фокусе, как только ее...

Количество подведенного и отведенного тепла, работа сжатия, работа расширения
Определить количество подведенного и отведенного тепла, работу сжатия, работу расширения, полезную...

13
fjay69
89 / 89 / 17
Регистрация: 26.10.2012
Сообщений: 248
08.12.2012, 20:19 2
Либо я не понимаю терминологию, либо вы что-то напутали. Вы имеете в виду табличную часть формы элемента или формы списка? В любом случае выделить колонку не получится. Только строку.
Расскажите поподробнее.
0
Dethmontt
Модератор
Эксперт 1С
2688 / 2455 / 429
Регистрация: 10.03.2011
Сообщений: 8,875
Записей в блоге: 1
Завершенные тесты: 1
09.12.2012, 04:22 3
1C
1
2
3
4
Процедура ДобавитьКолонку(Элемент) 
 
   ТП.Колонки.Добавить("К_"+(ТП.Колонки.Количество()+1),,"Колонка№"+(ТП.Колонки.Количество()+1));
КонецПроцедуры;
и т.д.
0
MonoLog
0 / 0 / 0
Регистрация: 28.11.2012
Сообщений: 30
09.12.2012, 10:05  [ТС] 4
1C
1
2
3
4
5
6
7
8
9
Функция тп_Колонка_Добавить(тп_Ссылка, Тип_Колонки) Экспорт
    Количество_Колонок=тп_Ссылка.Значение.Колонки.Количество();
    тп_Ссылка.Значение.Колонки.Добавить("Колонка_"+Формат(Количество_Колонок, "ЧГ=0"), Тип_Колонки, "Колонка "+Количество_Колонок);
    тп_Ссылка.СоздатьКолонки();
КонецФункции
 
Функция тп_Колонка_Удалить(тп_Ссылка) Экспорт
    тп_Ссылка.Колонки.Удалить(тп_Ссылка.ТекущаяКолонка);
КонецФункции
Пока как то так. Проблема с переносом строки в другую таблицу.
0
09.12.2012, 10:05
Dethmontt
Модератор
Эксперт 1С
2688 / 2455 / 429
Регистрация: 10.03.2011
Сообщений: 8,875
Записей в блоге: 1
Завершенные тесты: 1
09.12.2012, 20:53 5
Добавление, удаление и перетаскивание колонок Мышью или кнопкой
Делал на 8.3 обычные формы
Колонки.rar
0
MonoLog
0 / 0 / 0
Регистрация: 28.11.2012
Сообщений: 30
09.12.2012, 23:07  [ТС] 6
У меня немного другая задача стоит. Надо сделать смену колонок местами в одной таблице. Как со строками в обычной командной панели.

Добавлено через 9 минут
Точнее с колонками - даже не проблема. Проблема в переносе строки в другую таблицу

Добавлено через 24 минуты
Ах, да ещё с удалением незаполненных строк не могу определиться. Как лучше это сделать?
Под лучше понимаю несколько параметров: Количество строк кода, скорость обработки.
0
Dethmontt
Модератор
Эксперт 1С
2688 / 2455 / 429
Регистрация: 10.03.2011
Сообщений: 8,875
Записей в блоге: 1
Завершенные тесты: 1
09.12.2012, 23:21 7
В голову приходят два варианта.
1. При заполнении строки таблицы (интерактивно или программно) на момент заполнения отслеживать заполнение значений в строке, в дополнительную колонку типа Булево ставить признак строки (Заполнена\НеЗаполнена - Истина/Ложь) - при удалении проверять этот признак.
2. В цикле проверять каждое значение строки (допустим если есть пустое удаляем)
0
MonoLog
0 / 0 / 0
Регистрация: 28.11.2012
Сообщений: 30
10.12.2012, 11:57  [ТС] 8
Завис что то с кнопкой перемещения строки из тз1 в тз2 Есть какие либо варианты?
0
Dethmontt
Модератор
Эксперт 1С
2688 / 2455 / 429
Регистрация: 10.03.2011
Сообщений: 8,875
Записей в блоге: 1
Завершенные тесты: 1
10.12.2012, 11:59 9
Работа с ТП

Добавлено через 27 секунд
Тут же все есть и перемещение колонки и данных колонки.
0
MonoLog
0 / 0 / 0
Регистрация: 28.11.2012
Сообщений: 30
10.12.2012, 13:01  [ТС] 10
С колонкой я понял. Но не могу адаптировать это под строку.
0
Dethmontt
Модератор
Эксперт 1С
2688 / 2455 / 429
Регистрация: 10.03.2011
Сообщений: 8,875
Записей в блоге: 1
Завершенные тесты: 1
10.12.2012, 13:18 11
Для строки главное что бы колонки были одинаковыми...
Только не понятно ЗАЧЕМ это нужно вооообще!!!!!!???????
0
MonoLog
0 / 0 / 0
Регистрация: 28.11.2012
Сообщений: 30
10.12.2012, 14:05  [ТС] 12
У компании есть список покупателей и список должников. Необходимо нажатием кнопки перенести человека в список должников и обратно.
0
Dethmontt
Модератор
Эксперт 1С
2688 / 2455 / 429
Регистрация: 10.03.2011
Сообщений: 8,875
Записей в блоге: 1
Завершенные тесты: 1
10.12.2012, 14:46 13
1C
1
ТаблицаПриемник.Добавить()["ИмяКолонки"] = ТекущиеДанные["ИмяКолонки"];
0
MonoLog
0 / 0 / 0
Регистрация: 28.11.2012
Сообщений: 30
12.12.2012, 12:22  [ТС] 14
Получился в итоге код из "Много букаф".
Есть ли возможность его уменьшить?
Модуль Формы
Кликните здесь для просмотра всего текста
1C
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
35
36
37
38
39
Процедура Добавить_Колонку(Элемент);
    тп_Колонку_Добавить(ЭлементыФормы.тп_Первая);
КонецПроцедуры
 
Процедура Удалить_Колонку(Элемент)
    тп_Колонку_Удалить(ЭлементыФормы.тп_Первая);
КонецПроцедуры
 
Процедура Сместить_Колонку_Влево(Элемент)
    тп_Колонка_Сместить(ЭлементыФормы.тп_Первая, -1);
КонецПроцедуры
 
Процедура Сместить_Колонку_Вправо(Элемент)
    тп_Колонка_Сместить(ЭлементыФормы.тп_Первая, 1);
КонецПроцедуры
 
Процедура Удалить_Пустые_Строки(Элемент)
    тз_Пустые_Строки_Удалить(тз_Первая);
КонецПроцедуры
 
Процедура Перенести_Из_Первой(Элемент)
    тп_Строка_Переместить(ЭлементыФормы.тп_Первая, ЭлементыФормы.тп_Вторая);
КонецПроцедуры
 
Процедура Перенести_В_Первую(Элемент)
    тп_Строка_Переместить(ЭлементыФормы.тп_Вторая, ЭлементыФормы.тп_Первая, Истина);
КонецПроцедуры
 
Процедура Очистить_Вторую_Таблицу(Элемент)
    тз_Строки_Удалить_Неотмеченные(тз_Вторая, "Данные_Флажка");
КонецПроцедуры
 
Процедура Сохранить_Таблицу(Элемент)
    тз_Сохранить_в_Файл(тз_Вторая);
КонецПроцедуры
 
Процедура Загрузить_Таблицу(Элемент)
    тп_Загрузить_из_Файла(ЭлементыФормы.тп_Вторая);
КонецПроцедуры


Модуль Объекта
Кликните здесь для просмотра всего текста
1C
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
Перем Тип_Число, Тип_Булево;
 
Функция Число_В_Строку(Число_Для_Преобразования) Экспорт
    Возврат Формат(Число_Для_Преобразования, "ЧГ=0; ЧН=0");
КонецФункции
 
Функция тз_Колонку_Добавить(тз_Ссылка, Имя_Колонки, Заголовок_Колонки) Экспорт
    тз_Ссылка.Колонки.Добавить(Имя_Колонки, Тип_Число, Заголовок_Колонки);
КонецФункции
 
Функция тп_Колонку_Добавить(тп_Ссылка, Имя_Колонки=Неопределено, Заголовок_Колонки=Неопределено) Экспорт
    Если Имя_Колонки=Неопределено Тогда
        Строка_Номер_Колонки=Число_В_Строку(тп_Ссылка.Значение.Колонки.Количество()+1);
        Имя_Колонки="Колонка_"+Строка_Номер_Колонки;
        Заголовок_Колонки="Колонка "+Строка_Номер_Колонки;
    КонецЕсли;
    тз_Колонку_Добавить(тп_Ссылка.Значение, Имя_Колонки, Заголовок_Колонки);
    тп_Ссылка.Колонки.Добавить(Имя_Колонки, Заголовок_Колонки).Данные=Имя_Колонки;
КонецФункции
 
Функция тп_Колонку_Удалить(тп_Ссылка) Экспорт
    Количество_Колонок=тп_Ссылка.Колонки.Количество();
    Если Количество_Колонок=0 Тогда Возврат ""; КонецЕсли;
    тп_Ссылка_Колонка=тп_Ссылка.Колонки[Количество_Колонок-1];
    коллекция_Колонок=тп_Ссылка.Значение.Колонки;
    тз_Ссылка_Колонка=коллекция_Колонок.Найти(тп_Ссылка_Колонка.Данные);
    Если тз_Ссылка_Колонка<>Неопределено Тогда коллекция_Колонок.Удалить(тз_Ссылка_Колонка); КонецЕсли;
    тп_Ссылка.Колонки.Удалить(тп_Ссылка_Колонка);
КонецФункции
 
Функция тз_Пустая_Строка_Проверить(Проверяемая_Строка) Экспорт
    Для Каждого ъ_Поле Из Проверяемая_Строка Цикл
        Если ъ_Поле Тогда Возврат Ложь; КонецЕсли;
    КонецЦикла;
    Возврат Истина;
КонецФункции
 
Функция тз_Пустые_Строки_Удалить(тз_Ссылка) Экспорт
    Количество_Строк=тз_Ссылка.Количество();
    Для ъ=1 По Количество_Строк Цикл
        ъ_Индекс=Количество_Строк-ъ;
        Если тз_Пустая_Строка_Проверить(тз_Ссылка[ъ_Индекс]) Тогда тз_Ссылка.Удалить(ъ_Индекс); КонецЕсли;
    КонецЦикла;
КонецФункции
 
Функция тп_Строка_Переместить(тп_Источник, тп_Приемник, ф_Не_Копировать_Колонку_Флажок=Ложь) Экспорт
    тек_Строка=тп_Источник.ТекущаяСтрока;
    Если тек_Строка=Неопределено Тогда Возврат ""; КонецЕсли;
    тп_Отсутствующие_Колонки_Добавить(тп_Приемник, тп_Источник.Значение, ф_Не_Копировать_Колонку_Флажок);
    ЗаполнитьЗначенияСвойств(тп_Приемник.Значение.Добавить(), тек_Строка);
    тп_Источник.Значение.Удалить(тп_Источник.ТекущаяСтрока);
КонецФункции
 
Функция тп_Отсутствующие_Колонки_Добавить(тп_Приемник, тз_Источник, ф_Не_Добавлять_Колонку_Флажок=Ложь) Экспорт
    тз_Приемник=тп_Приемник.Значение;
    Для Каждого ъ_Колонка Из тз_Источник.Колонки Цикл
        Если тз_Приемник.Колонки.Найти(ъ_Колонка.Имя)=Неопределено Тогда
            Если ф_Не_Добавлять_Колонку_Флажок И ъ_Колонка.ТипЗначения=Тип_Булево Тогда Продолжить; КонецЕсли;
            тп_Колонку_Добавить(тп_Приемник, ъ_Колонка.Имя, ъ_Колонка.Заголовок);
        КонецЕсли;
    КонецЦикла;
КонецФункции
 
Функция тп_Колонка_Сместить(тп_Ссылка, Направление) Экспорт
    Если тп_Ссылка.ТекущаяКолонка=Неопределено Тогда возврат ""; КонецЕсли;
    тп_Ссылка.Значение.Колонки.Сдвинуть(тп_Ссылка.ТекущаяКолонка.Имя, Направление);
    тп_Ссылка.СоздатьКолонки();
КонецФункции
 
Функция тз_Строки_Удалить_Неотмеченные(тз_Ссылка, ИД_Колонки_Флажка) Экспорт
    Колонка_Флажка=тз_Ссылка.Колонки.Найти(ИД_Колонки_Флажка);
    Если Колонка_Флажка=Неопределено Тогда Возврат ""; КонецЕсли;
    Индекс_Колонки_Флажка=тз_Ссылка.Колонки.Индекс(Колонка_Флажка);
    Если Индекс_Колонки_Флажка=-1 Тогда Возврат ""; КонецЕсли;
    Количество_Строк=тз_Ссылка.Количество();
    Для ъ=1 По Количество_Строк Цикл
        ъ_Индекс=Количество_Строк-ъ;
        Если Не тз_Ссылка[ъ_Индекс][Индекс_Колонки_Флажка] Тогда тз_Ссылка.Удалить(ъ_Индекс); КонецЕсли;
    КонецЦикла;
КонецФункции
 
Функция Фаил_Выбрать(ф_Открытие=Истина) Экспорт
    Диалог_Выбора_Файла=Новый ДиалогВыбораФайла(?(ф_Открытие, РежимДиалогаВыбораФайла.Открытие, РежимДиалогаВыбораФайла.Сохранение));
    Диалог_Выбора_Файла.Фильтр="*.txt|*.txt";
    Возврат ?(Диалог_Выбора_Файла.Выбрать(), Диалог_Выбора_Файла.ПолноеИмяФайла, Неопределено);
КонецФункции
 
Функция тз_Сохранить_В_Файл(тз_Источник) Экспорт
    Полное_Имя_Файла=Фаил_Выбрать(Ложь);
    Если Полное_Имя_Файла=Неопределено Тогда Возврат ""; КонецЕсли;
    Если Не ЗначениеВФайл(Полное_Имя_Файла, тз_Источник) Тогда Сообщить("Ошибка при сохранении"); КонецЕсли;
КонецФункции
 
Функция тп_Загрузить_Из_Файла(тп_Ссылка) Экспорт
    Полное_Имя_Файла=Фаил_Выбрать();
    Если Полное_Имя_Файла=Неопределено Тогда Возврат ""; КонецЕсли;
    тз_Новая=ЗначениеИзФайла(Полное_Имя_Файла);
    Если ТипЗнч(тз_Новая)=Тип("ТаблицаЗначений") Тогда
        тп_Отсутствующие_Колонки_Добавить(тп_Ссылка, тз_Новая);
        тп_Ссылка.Значение=тз_Новая;
    Иначе Сообщить("Неверный формат");
    КонецЕсли;
КонецФункции
 
Функция тз_Сохранить(тз_Ссылка, Имя_Значения) Экспорт
    СохранитьЗначение(Имя_Значения, тз_Ссылка);
КонецФункции
 
Тип_Число=Новый ОписаниеТипов("Число");
Тип_Булево=Новый ОписаниеТипов("Булево");
0
12.12.2012, 12:22
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.12.2012, 12:22

Работа с файловой системой (системное название некоторых папок и работа со скрытыми документами)
Всем привет, подскажите каким образом можно из VBA сохранить документ txt в папке &quot;Общие...

Нужна книга, где рассматриваются работа с прерываниями, указатели, работа с памятью, ассемблерные вставки
Привет всем! Подскажите, пожалуйста, хорошую книгу по C (именно C, не C++). Интересует работа с...

Symfony2, работа с типом Collection, работа с базовой формой
Здравствуйте. Осваиваю создание CRUD приложения на Symfony 2, на примере. Однако, возникают...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.