Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Удалить указанные стоки табличной части          
Gigi Подменю пользователя
сообщение 16.11.17, 15:27
Сообщение #1

Оратор
*****
Группа: Пользователи
Сообщений: 498
Спасибо сказали: 5 раз
Рейтинг: 0

Привет всем!
У меня опять вопрос ерундовый. У которого наверно опять решение это .... целая проблема.
Опять как обычно.. сделать ерунду сложно, а не наоборот.
Вопрос в чем... нужно удалить строки табличной части в которых булевый "реквизит2" имеет значение ЛОЖЬ.
Ну никак это не удаеться блин.. эта опять ерунда.
Потому, что наверно команда: Объект.ТабличнаяЧасть1.Удалить(ТекСтрокаИдент); удаляет по номеру строки, а не по идентификатору.
Поэтому в цикл удаляет не все поля имеющие на пример значение реквизита: "Реквизит2": ложь.... кое что оставляет и не удаляет.
Как быть? Блиин! Опять вынужден выходить на форум из ерундового вопроса.
Думал можно в цикле удалять так:
Сторка.Удалить();

Но где такое счастье, что бы можно было такой легкой командой удалить. И не париться с номером строки.. идентификатором и т.д.
&НаКлиенте
Процедура ТЧ_УдалитьУказанныеСтроки()
Для Каждого Сторка из Объект.ТабличнаяЧасть1 цикл
ТекСтрокаНомер=Сторка.НомерСтроки;
ТекСтрокаИдент=Сторка.ПолучитьИдентификатор();
Сообщить(""+ТекСтрокаНомер+" -- "+ТекСтрокаИдент);
//------------------------------------------------
Если  Сторка.Реквизит2=ложь Тогда
//Сторка.Удалить();    // ну такой команды конечно нет ... естественно
Объект.ТабличнаяЧасть1.Удалить(ТекСтрокаИдент); // не все удаляет .. пропускает не удалив
КонецЕсли;
//------------------------------------------------
КонецЦикла;    
КонецПроцедуры

Как быть?
Может в таком случае нужно удалять по идентификатору?
И как это сделать?
Буду признателен!

Petre Подменю пользователя
сообщение 16.11.17, 15:32
Сообщение #2

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2902
Из: Київ, Україна
Спасибо сказали: 1144 раз
Рейтинг: 1225

Gigi @ Сегодня, 16:27 * ,
МассивНайденныхСтрок = Объект.ТабличнаяЧасть1.НайтиСтроки(Новый Структура("Реквизит2", Ложь));
Для Каждого ТекНайденнаяСтрока Из МассивНайденныхСтрок Цикл
    Объект.ТабличнаяЧасть1.Удалить(ТекНайденнаяСтрока);
КонецЦикла;


Signature
Допрацьовую:
- "Бухгалтерія для України 2.1";
- "Альфа-Авто: Автосалон+Автосервіс+Автозапчастини, українська версія".

Спасибо сказали: Gigi,

Bernet Подменю пользователя
сообщение 16.11.17, 15:32
Сообщение #3

Ветеран
Иконка группы
Группа: Местный
Сообщений: 858
Из: Місто щасливих людей
Спасибо сказали: 317 раз
Рейтинг: 0

Gigi @ Сегодня, 15:27 * ,
МассивУдаляемых = Новый Массив;

Для Каждого СтрокаТЧ Из ВашаТЧ Цикл
   Если СтрокаТЧ.ВашРЕквизит Тогда // ВашРеквизит  = Истина
         МассивУдаляемых.Добавить(МассивУдаляемых);
   КонецЕсли;
КонецЦикла;

Для Каждого Элемент Из МассивУдаляемых Цикл
      ВашаТЧ .Удалить(Элемент);
КонецЦикла;


Signature
Дописываю конфигурации на платформе 8.х.
- Управление торговым предприятием для Украины
- Управление производственным предприятием для Украины
- Управление небольшой фирмой для Украины
- Бухгалтерия для Украины;
- Общепит для Украины
- Ресторан (Рарус)
- Розница

Спасибо сказали: Gigi,

Gigi Подменю пользователя
сообщение 16.11.17, 15:41
Сообщение #4

Оратор
*****
Группа: Пользователи
Сообщений: 498
Спасибо сказали: 5 раз
Рейтинг: 0

Bernet @ Сегодня, 15:32 * ,
Спасибо всем уважаемые
Т.е как понимается из примеров нужно обозначенное загонять в массив а уже после удалять
Ладно! Правда как работает нужно еще проверить. Ладно позже проверю и если че продолжу тему.
Пока все..
Спасибо!

Vofka Подменю пользователя
сообщение 16.11.17, 16:09
Сообщение #5

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13948
Из: Киев
Спасибо сказали: 4514 раз
Рейтинг: 3635.6

Цитата
не все удаляет .. пропускает не удалив

Это частый вопрос. Расписывать в очередной раз лень, поэтому скопирую что уже написали в другом месте:

Цитата
Строки табличной части или таблицы значений необходимо удалять с конца. То биш обход надо делать не с начала, а с конца. Так как при удалении строки при обоходе с начала ТЧ индексы строк идущие за удаляемой , меняют индекс в таблице и уже не соответствуют индексам изначальной ТЧ, когда мы осуществляли поиск удаляемых строк. Для наглядности возьми ТЧ из 4 строк и удали 2-ую и 3-ю строчки и посмотри что происходит с индексами.
Пример как надо:
Для е = 0 по КоличествоСтрокТЗ - 1 Цикл
    Если (Условие верно) Тогда
              ТЗ.Удалить(КоличествоСтрокТЗ - 1 - е);
    КонецЕсли;
КонецЦикла;


Сообщение отредактировал Vofka - 16.11.17, 16:10

Спасибо сказали: Gigi,

Gigi Подменю пользователя
сообщение 17.11.17, 11:00
Сообщение #6

Оратор
*****
Группа: Пользователи
Сообщений: 498
Спасибо сказали: 5 раз
Рейтинг: 0

Vofka @ Вчера, 16:09 * ,
Цитата(Vofka @ 16.11.17, 16:09) *
Пример как надо:

Спасибо ... понял ...
Вот оно что ... ясно. А то думал .. че за..
Но относительно других решений думаю менее простых .. первый вариант рабочий
А второй че то выдавал ошибку:
МассивУдаляемых = Новый Массив;
Для Каждого Строка Из Объект.ТабличнаяЧасть1 Цикл
    Если Строка.Реквизит2=Истина Тогда
         ТекСтрокаИдент=Строка.ПолучитьИдентификатор();
         МассивУдаляемых.Добавить(МассивУдаляемых);
   КонецЕсли;
КонецЦикла;
//---------------------------------------------------
Для Каждого Элемент Из МассивУдаляемых Цикл
      Объект.ТабличнаяЧасть1.Удалить(Элемент); // Ошибку выдавало на этой линии.
КонецЦикла;


Поэтому так был сбой...
Но сработало без сбоя только так:
МассивУдаляемых = Новый Массив;
Для Каждого Строка Из Объект.ТабличнаяЧасть1 Цикл
    Если Строка.Реквизит2=Истина Тогда
         ТекСтрокаИдент=Строка.ПолучитьИдентификатор();
         МассивУдаляемых.Добавить(ТекСтрокаИдент);
   КонецЕсли;
КонецЦикла;
//---------------------------------------------------
Для Каждого Элемент Из МассивУдаляемых Цикл
    Строка = Объект.ТабличнаяЧасть1.НайтиПоИдентификатору(Элемент);
    Объект.ТабличнаяЧасть1.Удалить(Строка);
КонецЦикла;

Ладно! Всем спасибо!








Alex_Ticho Подменю пользователя
сообщение 21.11.17, 14:14
Сообщение #7

Молчаливый
*
Группа: Пользователи
Сообщений: 5
Спасибо сказали: 2 раз
Рейтинг: 0

Gigi @ 17.11.17, 11:00 * ,

Надо=Истина;
Пока Надо Цикл
      Надо=Ложь;
      Для Каждого Стр Из Табл Цикл
            Если (Условие....) Тогда
                   Надо=Истина;
                   Табл.Удалить(Стр);
                   Прервать;
            КонецЕСли;
     КонецЦикла;
КонецЦикла;

Может и долго, но надежно. icon_beer17.gif

 ! 

Правила: 9
 


Сообщение отредактировал logist - 21.11.17, 14:24

Petre Подменю пользователя
сообщение 21.11.17, 14:25
Сообщение #8

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2902
Из: Київ, Україна
Спасибо сказали: 1144 раз
Рейтинг: 1225

Alex_Ticho @ Сегодня, 14:14 * ,
faceoff.gif
Не увидел "перейти"...


Signature
Допрацьовую:
- "Бухгалтерія для України 2.1";
- "Альфа-Авто: Автосалон+Автосервіс+Автозапчастини, українська версія".

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 29.03.24, 2:54
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!