В чем может быть проблема 1с выделения строк
Нужна помощь. Хочу, чтобы при выделении строк строки, которые я выделил остались, а те которые не выделенные - удались. Сделал код, который блин без "Для" работает, а с ним не работает. Думаю, что дело в том, что я использую и "Для" и "Пока" сразу вместе. Из-за этого у меня числа идут на все 5 букв. Посоветуйте, что сделать блин, спасибо. :)
Вот код:
Вот код:
Процедура КоманднаяПанельТоварыУдалитьНеВыделенные(Кнопка)
перем товар;
перем выделен;
перем перебор;
перем колво;
перем количество;
перем выд;
колво = ЭтаФорма.ЭлементыФормы.Товары.Значение.ВыгрузитьКолонку("Номенклатура").ВГраница();
количество = колво;
выделен = ЭтаФорма.ЭлементыФормы.Товары.ВыделенныеСтроки;
выд = новый Массив(количество - 1);
Для числ = 0 по выд.ВГраница() цикл
выд[числ] = выделен.Получить(числ).НомерСтроки;
Сообщить("Выделен:" + выд[числ]);
КонецЦикла;
Пока количество > -1 цикл
Для колич = 0 по выд.ВГраница() цикл
Если количество = выд[колич] тогда
Сообщить("Найден: " + количество);
количество = количество - 1;
Иначе
Если количество > -1 тогда
ЭтаФорма.ЭлементыФормы.Товары.Значение.Удалить(количество);
Сообщить("Удален: " + количество);
количество = количество - 1;
Иначе
Сообщить("!");
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
ПоказатьПо теме из базы знаний
Найденные решения
ещё одно замечание, в 1С не принято при создании массива, сразу указывая его размер, обычно он растёт сам, по мере заполнения его данными.
ну и если у вас ТЗ "не выделенные - удались", а гугл сломался, то вот вам готовое решение:
PS причина, почему я решил написать готовый код - по своему опыту, мне очень помогало понимать как работает 1С изучая чужой код, как это то что мне надо сделано в поставляемых конфигурациях, и пытаться понять почему сделано именно так.
ну и если у вас ТЗ "не выделенные - удались", а гугл сломался, то вот вам готовое решение:
ВыделенныеСтроки = Элементы.Товары.ВыделенныеСтроки; // просто удобнее далее будет работать с коротким наименованием
УдаляемыеСтроки = Новый Массив; // массив создается пустым
Для Каждого стр Из Объект.Товары Цикл
Если ВыделенныеСтроки.Найти(стр.ПолучитьИдентификатор())=Неопределено Тогда
УдаляемыеСтроки.Добавить(стр); // тут добавляется не копия строки, а сама строка (ссылка на неё)
КонецЕсли;
КонецЦикла;
Для Каждого стр Из УдаляемыеСтроки Цикл
Объект.Товары.Удалить(стр); // удаляем не по индексу, а указываем саму строку (ссылку на строку)
КонецЦикла;
ПоказатьPS причина, почему я решил написать готовый код - по своему опыту, мне очень помогало понимать как работает 1С изучая чужой код, как это то что мне надо сделано в поставляемых конфигурациях, и пытаться понять почему сделано именно так.
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)
а вы не думали, что после этой операции все строки что идут после - сдвинутся?
PS на мой взгляд ТЗ "не выделенные - удались" и код - имеют мало общего....
не пробовали просто загуглить "удалить выделенные строки"?
PPS кстати, как вы поняли что вложенный (или внешний) цикл не работает?
(я ведь правильно понял про какой "для" говорите?... блин ну как так можно задавать вопросы,что, что бы на них ответить надо задать пару других...)
ЭтаФорма.ЭлементыФормы.Товары.Значение.Удалить(количество);
а вы не думали, что после этой операции все строки что идут после - сдвинутся?
PS на мой взгляд ТЗ "не выделенные - удались" и код - имеют мало общего....
не пробовали просто загуглить "удалить выделенные строки"?
PPS кстати, как вы поняли что вложенный (или внешний) цикл не работает?
(я ведь правильно понял про какой "для" говорите?... блин ну как так можно задавать вопросы,что, что бы на них ответить надо задать пару других...)
ещё одно замечание, в 1С не принято при создании массива, сразу указывая его размер, обычно он растёт сам, по мере заполнения его данными.
ну и если у вас ТЗ "не выделенные - удались", а гугл сломался, то вот вам готовое решение:
PS причина, почему я решил написать готовый код - по своему опыту, мне очень помогало понимать как работает 1С изучая чужой код, как это то что мне надо сделано в поставляемых конфигурациях, и пытаться понять почему сделано именно так.
ну и если у вас ТЗ "не выделенные - удались", а гугл сломался, то вот вам готовое решение:
ВыделенныеСтроки = Элементы.Товары.ВыделенныеСтроки; // просто удобнее далее будет работать с коротким наименованием
УдаляемыеСтроки = Новый Массив; // массив создается пустым
Для Каждого стр Из Объект.Товары Цикл
Если ВыделенныеСтроки.Найти(стр.ПолучитьИдентификатор())=Неопределено Тогда
УдаляемыеСтроки.Добавить(стр); // тут добавляется не копия строки, а сама строка (ссылка на неё)
КонецЕсли;
КонецЦикла;
Для Каждого стр Из УдаляемыеСтроки Цикл
Объект.Товары.Удалить(стр); // удаляем не по индексу, а указываем саму строку (ссылку на строку)
КонецЦикла;
ПоказатьPS причина, почему я решил написать готовый код - по своему опыту, мне очень помогало понимать как работает 1С изучая чужой код, как это то что мне надо сделано в поставляемых конфигурациях, и пытаться понять почему сделано именно так.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот