8.х Строка табличной части

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем mhl, 23 окт 2007.

  1. TopicStarter Overlay
    mhl
    Offline

    mhl Опытный в 1С

    Регистрация:
    23 июн 2007
    Сообщения:
    418
    Симпатии:
    0
    Баллы:
    26
    Код:
    ТабРасх = Докум.РасходныеМатериалы;
    Для Каждого Стр Из ТабРасх Цикл
    ИндексТекСтроки = ТаблЧасть.Индекс(ЭлементыФормы.ТаблЧасть.ТекущаяСтрока);
    НС = ТаблЧасть.Вставить(ИндексТекСтроки+1);
    
    НС.Номенклатура = Стр.Материал;
    НС.НормаКолво = Стр.Количество;
    НС.НормаЕдИзм = Стр.ЕдИзм;
    НС.НормаЦена = Стр.Цена;
    НС.НормаСумма = Стр.Сумма;
    КонецЦикла;
    
    Данный код вставляет новые строки в ТЧ документа и заполняет их нужными значениями. Но при повторном использовании он, вместо того, чтобы переписать строки, добавляет их еще раз. Как сделать, чтобы при повторном использовании он удалял строку если реквизит НормаКолво<>пустому значению и только потом добавлял новую?
  2. TopicStarter Overlay
    mhl
    Offline

    mhl Опытный в 1С

    Регистрация:
    23 июн 2007
    Сообщения:
    418
    Симпатии:
    0
    Баллы:
    26
    Добавил такое условие:
    Код:
    ТабРасх = Докум.РасходныеМатериалы;
    Для Каждого Стр Из ТабРасх Цикл
    ИндексТекСтроки = ТаблЧасть.Индекс(ЭлементыФормы.ТаблЧасть.ТекущаяСтрока);
    Для Каждого ТекСтр Из ТаблЧасть Цикл
    Если ПустоеЗначение(ТекСтр.НормаКолво) = Ложь Тогда
    ТаблЧасть.Удалить(ИндексТекСтроки+1);
    КонецЕсли;
    КонецЦикла;
    НС = ТаблЧасть.Вставить(ИндексТекСтроки+1);
    
    НС.Номенклатура = Стр.Материал;
    НС.НормаКолво = Стр.Количество;
    НС.НормаЕдИзм = Стр.ЕдИзм;
    НС.НормаЦена = Стр.Цена;
    НС.НормаСумма = Стр.Сумма;
    КонецЦикла;
    
    На строку ТаблЧасть.Удалить(ИндексТекСтроки+1);
    выводит ошибку значение индекса выходит за границы диапазона
  3. Prospero
    Offline

    Prospero Опытный в 1С

    Регистрация:
    13 сен 2006
    Сообщения:
    111
    Симпатии:
    0
    Баллы:
    26
    Интересно, а если ИндексТекСтроки у тебя равен последней строке, тогда чему равен ИндексТекСтроки+1?
  4. TopicStarter Overlay
    mhl
    Offline

    mhl Опытный в 1С

    Регистрация:
    23 июн 2007
    Сообщения:
    418
    Симпатии:
    0
    Баллы:
    26
    написал вот так
    Код:
    Для Каждого ТекСтр Из ТаблЧасть Цикл
    Если ПустоеЗначение(ТекСтр.НормаКолво) = Ложь Тогда
    ТаблЧасть.Удалить(ТекСтр.НомерСтроки-1);
    КонецЕсли;
    КонецЦикла;
    
    Почему-то он очищает только первую строку, остальные оставляет как есть
  5. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Код:
     МассивУдаляемыхСтрок = Новый Массив;
    ТаблЧасть.Загрузить(Докум.РасходныеМатериалы.Выгрузить());
    Для Каждого СтрокаТЧ Из ТаблЧасть Цикл
    Если ЗначениеЗаполнено(СтрокаТЧ.НормаКол) Тогда
    МассивУдаляемыхСтрок.Добавить(СтрокаТЧ.НомерСтроки);
    КонецЕсли;
    КонецЦикла;
    
    Для Каждого НомерСтроки Из МассивУдаляемыхСтрок Цикл
    ТаблЧасть.Удалить(НомерСтроки);
    КонецЦикла;
    
    
    Полагаю, что понятно как будет работать...

    ЗЫ. Если 8.0 - то вместо ЗначениеЗаполнено() писать - НЕ ЗначениеНеЗаполнено()

Поделиться этой страницей