Изучаю 8.2. Нужно удалить строку табличной части. Выдает ошибку #583732


#1 by ZanderZ
ошибка то где ? скорее всего надо данные формы в значение получить, потом обратно в данные формы
#2 by GROOVY
Объект.ТабличнаяЧасть1.Удалить(Элементы.ТабличнаяЧасть1.ТекущаяСтрока);
#3 by GROOVY
На клиенте
#4 by GROOVY
Поправка, там вроде индекс надо передавать: Объект.ТабличнаяЧасть1.Удалить(Элементы.ТабличнаяЧасть1.ТекущаяСтрока-1);
#5 by Drew
ошибка:{Документ.ПродажаТоваров.Форма.ФормаДокумента.Форма}: Ошибка при вызове метода контекста (Удалить)    ТабЧасть.Удалить(ТекСтрока); по причине: Недопустимое значение параметра (параметр номер '1')
#6 by GROOVY
минусАдин добавь.
#7 by GROOVY
И ни в коем случае контекстный вызов сервера делать не надо, а то могут руки оторвать.
#8 by Drew
Если -1 делаю он пытается удалить 0 строку и тоже ошибку пишет
#9 by GROOVY
Ну вот... придется запускать комп с 1с....
#10 by mikeA
что, Чебурашка, не спится? (с) :)
#11 by 8vC1
Может так ?
#12 by Drew
тоже ошибка {Документ.ПродажаТоваров.Форма.ФормаДокумента.Форма}: Ошибка при вызове метода контекста (Получить)    Запись = Объект.Товары.Получить(ИндексСтроки); по причине: Недопустимое значение параметра (параметр номер '1')
#13 by Морозов Александр
блин... я фигею... как сложно удалить строчку
#14 by 8vC1
ИндексСтроки должно быть число. Попробуй прописать
#15 by GROOVY
Объект.ТабличнаяЧасть1.Удалить(Объект.ТабличнаяЧасть1[Элементы.ТабличнаяЧасть1.ТекущаяСтрока]);
#16 by GROOVY
Стормозил, там же данныеФормыКоллекция, и передавать надо элемент коллекции.
#17 by GROOVY
Совсем не смешно. Что сложного то?
#18 by Drew
Спасибо большое за помощь
#19 by ZanderZ
можно и по индексу Объект.Товары.Удалить(Элементы.Товары.ТекущиеДанные.НомерСтроки-1);
#20 by GROOVY
В УФ? Ну попробуй... Думаешь я не проверил?
#21 by GROOVY
Я тебе даже алгоритм теста скажу: Нужна ТЧ с реквизитом число или строка. Делаешь 3 строки и обязательно в реквизит пишешь номер строки. Потом по твоему алгоритму попробуй грохнуть строки. Посмотри что получится. Особенно приятно грохать первую строку... Или второй раз вторую...
#22 by ZanderZ
ТекущаяСтрока <> ТекущиеДанные.НомерСтроки
#23 by GROOVY
Гарантируешь что номер строки всегда на клиенте доступен будет?
#24 by ZanderZ
проверь
#25 by GROOVY
Я понимаю что можно извернуться как угодно и грохнуть строку. Не забывайте что это УФ.
#26 by GROOVY
Проверяю: в настройках формы нет элементов с "галкой использовать всегда"/прав на чтение номера строки/установлена функциональная опция/пользователь отключил видимость колонки и сочетание всего этого => не отображается "НомерСтроки" и на клиенте нет этого реквизита. Система падает с ошибкой "четотам не найден".
#27 by ZanderZ
"Я понимаю что можно извернуться как угодно и НЕ грохнуть строку"
#28 by GROOVY
"Сударь" методист по системе 1С:Предприятие в целом и по управляемым формам в частности. Тема у нас "Изучаю", учить надо как правильно, а не как быстро. :) В реальности конечно все иначе, а жаль.
#29 by ilpar
Индекс почему-то нигде нет в предыдущих постах
#30 by GROOVY
Точно! Можно индекс еще получить! Из коллекции данных формы, передав туда элемент коллекции! В чем смысл?
#31 by ZanderZ
просто необходимость в в практике не нужна, даже если убрать "галкой использовать всегда", то номерстроки доступен, а установка ФО на колонку номер строки - это что-то ...
#32 by GROOVY
(я счаз не придираюсь, так разговор подержать) а если юзер скроет при этом номер строки? Ну мешает он ему! А это золотой и капризный клиент...
#34 by GROOVY
+32 кстати УФ обычно менеджеры среднего звена сами настраивают...
#35 by ZanderZ
если просто скроет из "Изменить форму" - то все равно доступен  ТекущиеДанные.НомерСтроки
#36 by ilpar
Индекс  НайтиПоИдентификатору  ТекущаяСтрока
#37 by GROOVY
Неверно, Нужно передавать "ДанныеФОрмыЭлементКоллекции" в метод "Индекс". и если у реквизита будет снят флаг "ИспользоватьВсегда" то реквизита на стороне клиента не будет.
#38 by 8vC1
Все что я написал в доступно на сервере.
#39 by GROOVY
Сначала в СП загляните, потом комментируйте: Синтаксис: Индекс(<Элемент>) Параметры: Тип: ДанныеФормыЭлементКоллекции. Элемент коллекции, индекс которого требуется получить. Возвращаемое значение: Тип: Число. Описание: Получает индекс элемента коллекции. Доступность: Тонкий клиент, веб-клиент, сервер, толстый клиент. ДанныеФормыКоллекция.Удалить (FormDataCollection.Delete) ДанныеФормыКоллекция (FormDataCollection) Удалить (Delete) Вариант синтаксиса: По индексу Синтаксис: Удалить(<Индекс>) Параметры: Тип: Число. Индекс элемента в коллекции. Вариант синтаксиса: По элементу Синтаксис: Удалить(<Элемент>) Параметры: Тип: ДанныеФормыЭлементКоллекции. Удаляемый элемент. Описание: Удаляет элемент из коллекции. Доступность: Тонкий клиент, веб-клиент, сервер, толстый клиент.
#40 by GROOVY
И что траффик гонять? Контекст передавать? А если строк дофига? А если тяжелые данные на форме? Интерактивно удалять строки надо только, _исключительно_ на  клиенте.
#41 by ilpar
раскидав вроде получаете правильно. У меня работает. На клиенте получаем индекс и передаем для удаления на сервер
#42 by ZanderZ
не поверишь - доступно, даже со снятой галкой ...
#43 by GROOVY
Удачи! GPRS модем в руки с тонким клиентом и удаляйте строки! Я посмотрю через сколько дней Ваш заказчик вернет обработку.
#44 by GROOVY
Это глюк :) Не должно быть доступно.
#45 by GROOVY
Хотя вот галку снять можно с номера строки... А как оно синхронизировать строки между клиентом и сервером будет? По какому ключу? Надо в парсер залезть..
#46 by ilpar
имея индекс мы не можем внеконтекстно удалить строку(или не знаю =) ? не помню просто. Остальное типовое
#47 by GROOVY
Уточню и галка снята и на форме не отображается и все равно программно доступно? Да?
#48 by GROOVY
Внеконтекстно мы ничего с объектом сделать не могем.
#49 by 8vC1
Вообще то все зависит от задачи. Если удалять строку интерактивно, то на клиенте, а если из документов то на сервере.
#50 by GROOVY
Конечно. Я сейчас рассуждаю в контексте поставленной задачи.
#51 by ZanderZ
точно
#52 by GROOVY
Ну либо глюк, либо . Надо проверять... В общем делайте как я написал и будет счастье при условии что все глюки в платформе починят :) Проверю сегодня на низком уровне что передается гарантированно на клиент из формы с ТЧ.
#53 by ZanderZ
отпишись - интересно
#54 by GROOVY
Самому интересно, но это будет только к вечеру.
#55 by Escander
у сэра есть доступ к коду матрицы?!!!
#56 by 8vC1
В СП  метод Индекс есть в тонком клиенте, значит передается.
#57 by GROOVY
Да не, есть просто снифер html траффика. Там все видно если шифрование не ставить. Метод "Индекс" есть у любой коллекции у которой определен итератор. В том числе и для коллекций УФ. Про "Передается" не понял, что передается?
#58 by 8vC1
Спор про что ? Как удалить строку ТЧ в УФ через индекс ? У текущий строки индекс есть ? Значит удалить строку через индекс не проблема.
#59 by GROOVY
Кто спорит? Чтобы удалить строку через индекс его надо получить. Чтобы получить интекс удаляемого элемента коллекции надо его получить. При этом можно удалить строку указав просто удаляемый элемент коллеции. Вопрос: нафига это делать через получение индекса? Вариант без индекса: Объект.ТЧ.Удалить(Объект.ТЧ[Элементы.ТЧ.ТекущаяСтрока]) Вариант с индексом Объект.ТЧ.Удалить(Объект.ТЧ.Индекс(Элементы.ТЧ.ТекущаяСтрока)) Второй вопрос: Это то о чем Вы пишете?
#60 by 8vC1
Началось с того что я предложил удалять через индекс, хотя правильнее передавать Элемерт коллекции, продолжилось с по По второму вопросу: Вариант без индекса: Объект.ТЧ.Удалить(Объект.ТЧ[Элементы.ТЧ.ТекущаяСтрока]) А Вы о чем ?
#62 by GROOVY
Ох... Перечитайте ветку. Я все уже сказал. СОВСЕМ ВСЕ и повторять не буду. В ветке отпишусь после экспериментов с данными сеанса передаваемых при открытии формы.
#63 by Defender aka LINN
Какая гадость...
#64 by nddru
так можно попробовать
#65 by Raps
М.Радченко об этом скажите
#66 by Defender aka LINN
facepalm.jpg
#67 by Defender aka LINN
Это Радченко предлагает делать 2 вызова сервера там, где можно обойтись одним и удалять строки при изменении реквизитов? Что-то я сомневаюсь.
#68 by Raps
Ну основной кусок процедуры взят у ТС, вопрос то был про ошибку удаления.
#69 by Escander
ну если сделать так: ИдентификаторСтроки = Элементы.ПереченьНоменклатуры.ТекущаяСтрока; все отрабатывает на клиенте.
#70 by Escander
ну про ошибку писали уже, если кратко: набей 3 строки, удали их, сделай ещё 1 строку для неё значение Элементы.ПереченьНоменклатуры.ТекущаяСтрока будет равно 4. Хотя визуально будет только она одна
#71 by Defender aka LINN
см.
#72 by Escander
ну у меня почти то-же, только вместо ИдентификаторСтроки = Элемент.ТекущаяСтрока; пишу: где там 2 обращения к серверу?
#73 by Defender aka LINN
Пля, товарищи, ну вы читать умеете? 2 обращения к серверу в . В , блеать, 2 обращения к серверу.
#74 by Escander
не вижу 2 обращений, поэтому и спрашиваю где они там? Читать не умеете, не вижу где их 2!
#75 by Defender aka LINN
Плохо смотришь. СтрокаТЧ.ЕдиницаИзмерения = ПолучениеОсновнойЕдиницыИзмерения(СтрокаТЧ.Номенклатура); <- 1 На клиенте поциент этих данных не получит, как ни бейся. Я еще и готов на пиво поспорить, что там контекстные вызовы идут.
#76 by 0xFFFFFF
Под сотню постов - удаляем строку. Жесть какая то, товарищи.
#77 by Escander
стоп! но это-же не из на который вы указывали, а из ! Тот код вообще не самый компот!
#78 by Defender aka LINN
В это тоже есть. И именно про эти строки я и говорил
#79 by GROOVY
Недоступно. Проверил. Собственно просто отладчиком. Следовательно ориентироваться на данные строки при ее удалении мы не можем, так как при стечении обстоятельств этих данных может не быть. Хотя вряд ли кто то номер строки из формы уберет, да еще и в конфигураторе снимет галку "Использовать всегда".
#80 by 8vC1
Причем тут номер строки ? Речь шла про индекс строки, а не про номер.
#81 by 8vC1
Понятно что получать индекс как советуют некоторые ИндексСтроки = НомерСтроки-1; как минимум некорректно.
#82 by GROOVY
Это не по вашу тему... По вашу тему комментарий: Чтобы получить индекс элемента коллекции нужно получить элемент коллекции. При этом имея элемент коллекции мы и так его можем удалить. Нафига получать индекс?
#83 by 8vC1
Согласен. Поэтому подводя итоги темы. единственный правильный вариант удаления текущей строки из ТЧ УФ формы это Объект.ТЧ.Удалить(Объект.ТЧ[Элементы.ТЧ.ТекущаяСтрока-1])
#84 by 8vC1
Или же кто не хочет связываться с индексами Объект.ТЧ.Удалить(Объект.ТЧ.ТекущиДанные)
#85 by Defender aka LINN
Я рыдаю...
#86 by Escander
в коде орфографическая ошибка, да и если её пофиксить - не будет как надо! ну проведите тест из а потом расскажите как оно отрабатывает.
#87 by 8vC1
Какая орфографическая ошибка ? - ТекущиДанные понимать как ТекущиеДанные это опечатка. Конечно же будет так: Соттветственно с индексами строк лучше не связываться.    Объект.ТабличнаяЧасть1.Удалить(Элементы.ТабличнаяЧасть1.ТекущиеДанные.НомерСтроки-1); Правильный вариант соответсвено будет: Объект.ТабличнаяЧасть1.Удалить(Элементы.ТабличнаяЧасть1.ТекущиеДанные);
#88 by 8vC1
Специально дописал в контекст автора, чтобы закрыть тему окончательно:
#89 by GROOVY
Может до сотни дотянем? :) Как еще можно грохнуть ТЧ. Предлагайте правильные варианты. :)
#90 by Новиков
Хороши вопросы по 8.2 сегодня. Прямо вспоминаю начало 2005-ого года ;) зы: до ста осталось 9...
#91 by GROOVY
Дык политику то отключили..
#92 by Escander
тест указанный в попробуйте, а потом говорите что это правильно! Вариант с текущей строкой его просто не проходит! а каким снифером пользуетесь? Ваш снифер умеет ловить трафик когда всё выполняется в пределах 1 компа?
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С