Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
25 июл 2021, 06:24

Проблема с индексами в табличной части документа

Автор Yazon_DA, 12 окт 2020, 13:42

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

Yazon_DA

Программист я начинающий, столкнулся с проблемой впервые. Погуглил, но решения проблемы не нашел :dfbsdfbsdf:
Проблема:
УФ, УП 8.3 В документе есть ТЧ. Удаляю строки в ТЧ путем выделения всех через SHIFT и нажатия на кнопку Delete. После чего программно вставляю в ТЧ новые строки. В результате при определении Индекса текущей строки (Элементы.ТЧ.ТекущаяСтрока) Индекс оказывается за пределами массива. Получается, Таблица на форме еще хранит в себе память об удаленных строках. Попытка решить проблему через записать/прочитать форму оказалась глупой.
Что делать?

Геннадий ОбьГЭС

после чего перед программной вставкой надо бы записать объект

Yazon_DA

Добавлено: 12 окт 2020, 14:30


Цитата: Геннадий ОбьГЭС от 12 окт 2020, 14:14
после чего перед программной вставкой надо бы записать объект
Сделал через ЭтотОбъект.Записать() и ЭтотОбъект.Прочитать()
НЕ помогло
При этом, если форму закрыть и открыть заново - все ок. Что за нафиг?! Почему тогда не работает при ЭтаФорма.Прочитать()?

IL2016

Цитата: Yazon_DA от 12 окт 2020, 13:42Удаляю строки в ТЧ путем выделения всех через SHIFT и нажатия на кнопку Delete.
так, это Вы делаете в пользовательском режиме.
а в чем состоит ваша задача?

Использую учебную платформу 1С:Предприятие 8.3

Геннадий ОбьГЭС

 Запись происходит только в оперативной памяти, а на жесткий диск - потом

Надо поискать - как форсировать сброс файлов кэша 1С программно

Yazon_DA

Цитата: IL2016 от 12 окт 2020, 16:34
Цитата: Yazon_DA от 12 окт 2020, 13:42Удаляю строки в ТЧ путем выделения всех через SHIFT и нажатия на кнопку Delete.
так, это Вы делаете в пользовательском режиме.
а в чем состоит ваша задача?

Задача состоит в определении текущей строки ТЧ при обработке действия пользователя в определенной колонке. Стандартное решение - ИндексСтроки = Элементы.ТЧ.ТекущаяСтрока. Проблема в том, что при указанной последовательности действий Данный метод возвращает значение, равное сумме текущего индекса и количества удаленных строк, что в свою очередь приводит к ошибке "Индекс находится за пределами массива"
Добавлено: 12 окт 2020, 16:56


Цитата: Геннадий ОбьГЭС от 12 окт 2020, 16:36
Запись происходит только в оперативной памяти, а на жесткий диск - потом

Надо поискать - как форсировать сброс файлов кэша 1С программно
Проблема в том, что Объект.ТЧ.Количество() дает правильное значение количества строк в ТЧ, а Элементы.ТЧ.ТекущаяСтрока возвращает индекс, равный сумме текущего индекса и количества удаленных строк. Таким образом, объект на сервере все удалил и индексы пересчитал, а Форма на клиенте - нет. При этом шаманство  в виде ЭтаФорма.Прочитать() не помогает от слова совсем. Волос на голове всё меньше :(((

IL2016

касательно индексов строк ТЧ:
до действий пользователя ТЧ содержит строки, каждая имеет свой индекс. При удалении любой строки сверху  индексы ниже-находящихся строк смещаются на тоже число удаленных строк. Поэтому система и сообщает что индекс выходит за пределы...   
Использую учебную платформу 1С:Предприятие 8.3

Yazon_DA

Цитата: IL2016 от 12 окт 2020, 17:08
касательно индексов строк ТЧ:
до действий пользователя ТЧ содержит строки, каждая имеет свой индекс. При удалении любой строки сверху  индексы ниже-находящихся строк смещаются на тоже число удаленных строк. Поэтому система и сообщает что индекс выходит за пределы...
Я, наверное, тупой, но эта теория мне не помогает ибо:
1. В пользовательском режиме пользователь в ТЧ выделяет строки и удаляет их.
2. В пользовательском режиме пользователь нажимает кнопку, по которой программно вставляются новые строки.
3. ПОСЛЕ этих действий пользователь тыкает на ячейку ТЧ и вызывается обработчик "ПриИзменении" в котором я вызываю метод Элементы.ТЧ.ТекущаяСтрока, который возвращает неверное значение (см выше). Что не так я делаю? И главное: что НУЖНО мне сделать?

IL2016

ну наконец-то описание задачи. :D
Добавлено: 12 окт 2020, 17:42


Цитата: Yazon_DA от 12 окт 2020, 17:15вызываю метод Элементы.ТЧ.ТекущаяСтрока
надо брать Элементы.ТЧ.ТекущиеДанные. Совсем непонятно для решения какой подзадачи вы ищете индекс строки?

Использую учебную платформу 1С:Предприятие 8.3

Yazon_DA

Цитата: IL2016 от 12 окт 2020, 17:37
ну наконец-то описание задачи. :D
Добавлено: 12 окт 2020, 17:42


Цитата: Yazon_DA от 12 окт 2020, 17:15вызываю метод Элементы.ТЧ.ТекущаяСтрока
надо брать Элементы.ТЧ.ТекущиеДанные. Совсем непонятно для решения какой подзадачи вы ищете индекс строки?
Спасибо. Пошел пробовать.
Чтобы в зависимости от значения данных из других ячеек текущей строки правильно обработать нажатие пользователя
PS Всё работает! Спасибо!!! Этот способ сильно лучше того, что использовал ранее. :zebzdr:

Теги:

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

Рейтинг@Mail.ru Rambler's Top100

Поиск