Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
29 мар 2024, 03:51

Проблема с сортировкой таблицы по НомеруСтроки

Автор Gennadiyy, 08 дек 2015, 00:40

0 Пользователей и 1 гость просматривают эту тему.

Gennadiyy

Здравствуйте! Я только начал изучать 1с, и возникли некоторые трудности:( Есть внешняя обработка, в ней есть форма, на форме присутствует табличная часть с двумя реквизитами - 1) НомерСтроки (стандартный реквизит) 2) Значение, так же на форме присутствует кнопка.
Так вот мне необходимо, что бы по нажатию по кнопке табличная часть сортировалась по номеру строки по убыванию, т.е. отсчет начинался не с 1, а к примеру с 10,9,8 и т.д., пишу так:

&НаКлиенте
Процедура ОтсортироватьСтроки(Команда)
Объект.ТабличнаяЧасть1.Сортировать("Значение Убыв");
КонецПроцедуры

Строки нормально сортируются, только по столбцу "Значение", мне же надо, что бы сортировка шла по номеру строки, пишу так:

Объект.ТабличнаяЧасть1.Сортировать("НомерСтроки Убыв");

И ничего не происходит, даже, если выделить столбец "НомерСтроки" и нажать по стандартной команде "Сортировать по убыванию", то так же ничего не происходит + в таблице ничего нельзя редактировать, хотя на всех столбцах стоит галка "Доступность" и не стоит галка "Только просмотр", скажите, в чем может быть причина того, что нельзя редактировать поля в таблице и возможно ли сделать сортировку по убыванию стандартного реквизита?

Luzer1C

Сортировку сделать можно, но немного другим способом.
А реквизит НомерСтроки - служебный. И редактировать его нельзя.
Для этого необходимо набрать в синтаксис-помощнике НомерСтроки и прочитать назначение данного реквизита. Т.к. Использование - Только Чтение(!!!).
Халамбалам.

cska-fanat-kz

номера строк всегда выстроены от 1 и до количества строк.
добавляйте еще одну колонку типа число и имитируйте СЛУЖЕБНУЮ колонку НомерСтроки.
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Luzer1C

А я придумал так:
1. Создать новую таблицу значений с такими же колонками
2. Загрузить туда данную таблицу с использованием метода Вставить(1)
3. Очистить данную таблицу
4. Загрузить значения из созданной.
Халамбалам.

Gennadiyy

Цитата: Luzer1C от 08 дек 2015, 08:25
А я придумал так:
1. Создать новую таблицу значений с такими же колонками
2. Загрузить туда данную таблицу с использованием метода Вставить(1)
3. Очистить данную таблицу
4. Загрузить значения из созданной.
Спасибо! Сегодня попробую так сделать)
Добавлено: 08 дек 2015, 10:14


Цитата: Gennadiyy от 08 дек 2015, 09:46
Цитата: Luzer1C от 08 дек 2015, 08:25
А я придумал так:
1. Создать новую таблицу значений с такими же колонками
2. Загрузить туда данную таблицу с использованием метода Вставить(1)
3. Очистить данную таблицу
4. Загрузить значения из созданной.
Спасибо! Сегодня попробую так сделать)
Так тоже нельзя:( Пишет, что "Поле объекта недоступно для записи (НомерСтроки)"

Luzer1C

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

Для каждого СтрТЧ Из Материалы Цикл
Стр = ТЗ.Вставить(0);
ЗаполнитьЗначенияСвойств(Стр, СтрТЧ);
КонецЦикла;

Материалы.Очистить();
Материалы.Загрузить(ТЗ);

Кнопка находится в самом документе. Код работает. Сам сейчас проверил.
Халамбалам.

Gennadiyy

Цитата: Luzer1C от 08 дек 2015, 11:17
Учись студент.
ТЗ = Новый ТаблицаЗначений; // Промежуточная таблица
Для каждого Колонка Из ЭлементыФормы.Материалы.Колонки Цикл // Таблица Материалы из документа
ТЗ.Колонки.Добавить(Колонка.Имя);
КонецЦикла;

Для каждого СтрТЧ Из Материалы Цикл
Стр = ТЗ.Вставить(0);
ЗаполнитьЗначенияСвойств(Стр, СтрТЧ);
КонецЦикла;

Материалы.Очистить();
Материалы.Загрузить(ТЗ);

Кнопка находится в самом документе. Код работает. Сам сейчас проверил.

У меня выдает "Тип не определен (ТаблицаЗначений)
   ТЗ = Новый <<?>>ТаблицаЗначений; // Промежуточная таблица (Проверка: Тонкий клиент)"
+ ЭлементыФормы не находит (т.е. не работает дополнение кода по нажатию ctrl+пробел)
Возможно из за того, что я делаю всё во внешней обработке?

Luzer1C

Это я написал для толстого клиента. Тебе теперь нужно адаптировать этот код для тонкого клиента.
Таблица значений используется только в толстом клиенте. Поэтому и ошибка.
ЭлементыФормы в толстом клиенте, Элементы - в тонком. Как-то так.
Халамбалам.

Gennadiyy

Цитата: Luzer1C от 08 дек 2015, 13:19
Это я написал для толстого клиента. Тебе теперь нужно адаптировать этот код для тонкого клиента.
Таблица значений используется только в толстом клиенте. Поэтому и ошибка.
ЭлементыФормы в толстом клиенте, Элементы - в тонком. Как-то так.

Я пытаюсь сделать так: Создал новую табличную часть во внешнем обработчике с реквизитами: 1) НомерСтроки (Стандартный реквизит) 2) НомерСтр (сюда будет передаваться номер строки из первой таблице, и по нему и будет происходить сортировка) 3) Значение

КоличествоСтрок = Объект.ТабличнаяЧасть1.Количество();
Счетчик = 0;
Пока Счетчик<КоличествоСтрок Цикл
СуществующаяСтрока = Объект.ТабличнаяЧасть1.Получить(Счетчик);
НоваяСтрока = Объект.ТабличнаяЧасть2.Добавить();
НоваяСтрока.НомерСтр = СуществующаяСтрока.НомерСтроки;
НоваяСтрока.Значение = СуществующаяСтрока.Значение;
Счетчик = Счетчик + 1;
КонецЦикла;
Объект.ТабличнаяЧасть2.Сортировать("НомерСтр Убыв");

Объект.ТабличнаяЧасть1.Очистить();
Счетчик = 0;
КоличествоСтрок = Объект.ТабличнаяЧасть2.Количество();

Пока Счетчик<КоличествоСтрок Цикл
СуществующаяСтрока = Объект.ТабличнаяЧасть2.Получить(Счетчик);
НоваяСтрока = Объект.ТабличнаяЧасть1.Добавить();
НоваяСтрока.НомерСтроки = СуществующаяСтрока.НомерСтр;
НоваяСтрока.Значение = СуществующаяСтрока.Значение;
Счетчик = Счетчик + 1;
КонецЦикла;


Во время выполнения программы появляется сообщение "{Форма.Форма.Форма(71)}: Поле объекта недоступно для записи (НомерСтроки) НоваяСтрока.НомерСтроки = СуществующаяСтрока.НомерСтр;"
Добавлено: 08 дек 2015, 14:23


Цитата: Gennadiyy от 08 дек 2015, 14:05
Цитата: Luzer1C от 08 дек 2015, 13:19
Это я написал для толстого клиента. Тебе теперь нужно адаптировать этот код для тонкого клиента.
Таблица значений используется только в толстом клиенте. Поэтому и ошибка.
ЭлементыФормы в толстом клиенте, Элементы - в тонком. Как-то так.

Я пытаюсь сделать так: Создал новую табличную часть во внешнем обработчике с реквизитами: 1) НомерСтроки (Стандартный реквизит) 2) НомерСтр (сюда будет передаваться номер строки из первой таблице, и по нему и будет происходить сортировка) 3) Значение

КоличествоСтрок = Объект.ТабличнаяЧасть1.Количество();
Счетчик = 0;
Пока Счетчик<КоличествоСтрок Цикл
СуществующаяСтрока = Объект.ТабличнаяЧасть1.Получить(Счетчик);
НоваяСтрока = Объект.ТабличнаяЧасть2.Добавить();
НоваяСтрока.НомерСтр = СуществующаяСтрока.НомерСтроки;
НоваяСтрока.Значение = СуществующаяСтрока.Значение;
Счетчик = Счетчик + 1;
КонецЦикла;
Объект.ТабличнаяЧасть2.Сортировать("НомерСтр Убыв");

Объект.ТабличнаяЧасть1.Очистить();
Счетчик = 0;
КоличествоСтрок = Объект.ТабличнаяЧасть2.Количество();

Пока Счетчик<КоличествоСтрок Цикл
СуществующаяСтрока = Объект.ТабличнаяЧасть2.Получить(Счетчик);
НоваяСтрока = Объект.ТабличнаяЧасть1.Добавить();
НоваяСтрока.НомерСтроки = СуществующаяСтрока.НомерСтр;
НоваяСтрока.Значение = СуществующаяСтрока.Значение;
Счетчик = Счетчик + 1;
КонецЦикла;


Во время выполнения программы появляется сообщение "{Форма.Форма.Форма(71)}: Поле объекта недоступно для записи (НомерСтроки) НоваяСтрока.НомерСтроки = СуществующаяСтрока.НомерСтр;" Т.е. как я понимаю в моем случае стандартный реквизит "НомерСтроки" изменить нельзя?


Luzer1C

НомерСтроки доступен только для чтения. Туда никак нельзя что-то записать. В синтаксис-помощнике это написано.ui;;t;
Халамбалам.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск