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

Хранилище

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

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



> Удаление строк из таблицы значений          
bodka Подменю пользователя
сообщение 28.02.12, 19:47
Сообщение #1

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

Что-то я запутался...
Вот допустим: Создаем таблицу значений, состоящая из колонок Номер, Наименование


Номер Наименование
1 Товар 1
2 Товар 2


нужно написать алгоритм удаления товар1 из таблицы

Создал форму и кнопку на ней и в модуле формы создал таблицу значений

&НаСервере
Процедура сервер()

    таб = новый ТаблицаЗначений;
    таб.Колонки.Добавить("Номер");
    таб.Колонки.Добавить("Наименование");
    
    новаястрока = таб.Добавить();
    новаястрока.Номер = 1;
    новаястрока.наименование = "Товар1";
    
     новаястрока = таб.Добавить();
    новаястрока.Номер = 2;
    новаястрока.наименование = "Товар2";
    новаястрока = таб.Добавить();
    новаястрока.Номер = 3;
    новаястрока.наименование = "Товар3";
    новаястрока = таб.Добавить();
    новаястрока.Номер = 4;
    новаястрока.наименование = "Товар1";
    
     Для НомерСтроки = 0 По таб.Количество() - 1 Цикл
    Сообщить(таб[НомерСтроки].номер);
    Сообщить(таб[НомерСтроки].наименование);    
        
     КонецЦикла;

А как лучше поступить дальше я не знаю. Направте на путь истинный пожалуйста.

logist Подменю пользователя
сообщение 28.02.12, 20:14
Сообщение #2

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

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


Signature
Личные бесплатные консультации не даю, для этого есть форум!

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

MATEVI Подменю пользователя
сообщение 28.02.12, 20:17
Сообщение #3

Отдыхающий
Иконка группы
Ветеран троянской войныМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 2201
Из: Одесса
Спасибо сказали: 956 раз
Рейтинг: 0

[необходимо зарегистрироваться для просмотра ссылки]
стрОтбор = Новый Структура("Колока2",22);

МассивСтрок = ТЗ.НайтиСтроки(стрОтбор); // в этом массиве останутся строки 2 и 4,
// т.е. в результате получим массив строк таблицы значений, соответствующих условиям поиска.
// Важно! Такой массив хранит ссылки на строки таблицы значений, то есть при изменении строки в таблице, значение в массиве тоже будет измененным.

ВремТЗ = ТЗ.Скопировать(МассивСтрок); // копируем массив строк во временную таблицу значений

ТЗ.Очистить(); // удаляем все строки из ТЗ

ТЗ = ВремТЗ.Скопировать(); // копируем всю временную таблицу значений в нашу ТЗ


Сообщение отредактировал Vofka - 29.02.12, 8:57

Домовик Подменю пользователя
сообщение 28.02.12, 23:21
Сообщение #4

Ветеран
Иконка группы
Группа: Местный
Сообщений: 975
Из: Киев
Спасибо сказали: 168 раз
Рейтинг: 0

ух-ты. MATEVI, интересно. А если Очистить() не применять, не запишет в ТЗ поверх?


а по этому коду в итоге не будет работать дольше, чем стандартное решение - пробежаться по строкам?

Сообщение отредактировал Домовик - 28.02.12, 23:24

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

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

logist, так неправильно. Если по условию удалится строка (1), то предыдущая (2) станет на её место и при следующей итерации она (строка 2) будет пропущена.

Цитата(Домовик @ 28.02.12, 23:21) *
А если Очистить() не применять, не запишет в ТЗ поверх?

Запишет. Но я бы всеравно лучше очищал, мало ли smile.gif

Спасибо сказали: Домовик,

logist Подменю пользователя
сообщение 29.02.12, 9:21
Сообщение #6

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

Цитата(Vofka @ 29.02.12, 9:11) *
logist, так неправильно. Если по условию удалится строка (1), то предыдущая (2) станет на её место и при следующей итерации она (строка 2) будет пропущена.

Хм.. странно это всё)) Но у меня вроде такого момента не было, но за заметку спасибо, возможно стоит кое-что проверить smile.gif))


Signature
Личные бесплатные консультации не даю, для этого есть форум!

Vofka Подменю пользователя
сообщение 29.02.12, 9:53
Сообщение #7

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

ТЗ = Новый ТаблицаЗначений;
    ТЗ.Колонки.Добавить("Колонка1");
    ТЗ.Колонки.Добавить("Колонка2");
    ТЗ.Колонки.Добавить("Колонка3");
    
    Для инд = 0 По 10 Цикл
        
        НоваяСтрока = ТЗ.Добавить();
        НоваяСтрока.Колонка1 = "Строка_"+Строка(инд)+"_Колонка_1";
        НоваяСтрока.Колонка2 = "Строка_"+Строка(инд)+"_Колонка_2";
        НоваяСтрока.Колонка3 = "Строка_"+Строка(инд)+"_Колонка_3";
        
    КонецЦикла;

    Для Каждого Строка ИЗ ТЗ Цикл
    
        Если Строка.Колонка1 = "Строка_1_Колонка_1"
            ИЛИ Строка.Колонка1 = "Строка_2_Колонка_1"
            ИЛИ Строка.Колонка1 = "Строка_3_Колонка_1"
            
            Тогда
            
                ТЗ.Удалить(Строка);
                
        КонецЕсли;
    
    КонецЦикла;


После выполнения этого кода в ТЗ останется строка с содержанием колонки 1 "Строка_2_Колонка_1"

bodka Подменю пользователя
сообщение 02.03.12, 17:20
Сообщение #8

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

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


Уважаемый, подскажите почему этот код не работает?

Vofka Подменю пользователя
сообщение 02.03.12, 17:40
Сообщение #9

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

bodka, а ниже посты почитать не судьба?

Сообщение отредактировал Vofka - 02.03.12, 17:40

alex040269 Подменю пользователя
сообщение 02.03.12, 17:59
Сообщение #10

Крутой
Иконка группы
Группа: Местный
Сообщений: 1626
Из: Гуляйполе
Спасибо сказали: 236 раз
Рейтинг: 0

Цитата(bodka @ 02.03.12, 17:20) *
Для Каждого строка Из Таб Цикл
        Если строка.Наименование = "Товар1"               
            Тогда
            Таб.Удалить(строка);
        КонецЕсли;
    КонецЦикла;


Уважаемый, подскажите почему этот код не работает?

Правильно так:
ш=0;
Пока ш < Таб.Количество() Цикл
            Строка = Таб[ш];
        Если строка.Наименование = "Товар1"               
            Тогда
            Таб.Удалить(ш);
                 Иначе
                     ш = ш + 1
        КонецЕсли;
    КонецЦикла;


Сообщение отредактировал alex040269 - 02.03.12, 17:59


Signature
Никогда не бойся делать то, что не умеешь, помни - Ноев ковчег был построен любителем, профессионалы построили Титаник.
ЗиУП

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

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


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

 

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