Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
14 Дек 2017, 09:07
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: Удаление строк в таблице по условиям  (Прочитано 6559 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн llirik_87

  • *
  • Сообщений: 20
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2014-06-24
  • Сайт: 
  • Профессия: Ученик 1С
Здравствуйте!
Ситуация такая:
У меня 1С 8.1. Есть таблица ТАБ1, являющаяся результатом выборки:

Наименование    Артикул    Оригинал
Стол                     А1            А111
Стол                     А1            Нет
Стол                     А1            Нет
Кровать                К5            К321
Полка                   П4            Нет


Мне нужно из нее поудалять стоки по условиям:
1) если в строке в колонке Оригинал НЕ стоит "Нет" , то удалить эту строку
2) если в есть строки в которых одиноковы значения в колонках Наименование и Артикул и хотябы в одной из них в колонке Оригинал НЕ стоит "Нет" , то удалить все эти строи

Т.е. в итоге нужно чтоб получилась таблица:

Наименование    Артикул     Оригинал
Полка                    П4            Нет

Как это можно сделать?


Оффлайн GRADUS

  • *****
  • Сообщений: 699
  • РЕПУТАЦИЯ: 51
  • КПД: 7%
  • Регистрация: 2013-06-08
  • Сайт: 
  • Профессия: Программист 1С
Столько способов и ты пишешь этот вопрос сюда.

Ну создай новую ТЗ и занеси туда все данные или отбор сделать в данной ТЗ

Оффлайн llirik_87

  • *
  • Сообщений: 20
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2014-06-24
  • Сайт: 
  • Профессия: Ученик 1С
Буду благодарен, если напишете код отбора
Столько способов и ты пишешь этот вопрос сюда.

Ну создай новую ТЗ и занеси туда все данные или отбор сделать в данной ТЗ

Оффлайн LexaK

  • *****
  • Сообщений: 1267
  • РЕПУТАЦИЯ: 347
  • КПД: 27%
  • Регистрация: 2012-05-16
  • Сайт: 
  • Профессия: Программист 1С
Здравствуйте!
Ситуация такая:
У меня 1С 8.1. Есть таблица ТАБ1, являющаяся результатом выборки:

Самое правильное, в вашем случае, подправить ЗАПРОС (если выборка является результатом запроса) или написать правильный запрос к базе, в результате получите таблицу которую не надо править.
Помогло? - Нажми СПАСИБО!!!
                       :)

Оффлайн Snaky

  • **
  • Сообщений: 50
  • РЕПУТАЦИЯ: 5
  • КПД: 10%
  • Регистрация: 2014-06-18
  • Сайт: 
  • Профессия: Программист 1С
Здравствуйте!
Ситуация такая:
У меня 1С 8.1. Есть таблица ТАБ1, являющаяся результатом выборки:

Наименование    Артикул    Оригинал
Стол                     А1            А111
Стол                     А1            Нет
Стол                     А1            Нет
Кровать                К5            К321
Полка                   П4            Нет


Мне нужно из нее поудалять стоки по условиям:
1) если в строке в колонке Оригинал НЕ стоит "Нет" , то удалить эту строку
2) если в есть строки в которых одиноковы значения в колонках Наименование и Артикул и хотябы в одной из них в колонке Оригинал НЕ стоит "Нет" , то удалить все эти строи

Т.е. в итоге нужно чтоб получилась таблица:

Наименование    Артикул     Оригинал
Полка                    П4            Нет

Как это можно сделать?
МассивУдалаемых = Новый Массив;
Для Каждого Строка Из Таблица Цикл
    Если Не Строка.Оригинал = "Нет" ИЛИ Строка.Артикул = Строка.Наименование Тогда
        МассивУдаляемых.Добавить(Строка); 
    КонецЕсли;
КонецЦикла;
Для Каждого Элемент Из МассивУдаляемых Цикл
    Таб.Удалить(Элемент);
КонецЦикла;

Оффлайн llirik_87

  • *
  • Сообщений: 20
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2014-06-24
  • Сайт: 
  • Профессия: Ученик 1С
Я так понимаю если написать Строка.Артикул = Строка.Наименование  то удалятся строки в которых  поле Артикул равно полю Наименование.   А  мне нужно чтоб сравнивалось значение поля Артикул по всем строкам и поля Наименование по всем строкам. Т.е. если смотреть на приведенную мной таблицу нужно чтоб удалились 1-я, 2-я, 3-я строки т.к. в них в поле Наименование у всех стоит Стол, в поле Артикул в всех А1,  а хотя бы у одного из них  поле Оригинал  не равно "НЕТ"

МассивУдалаемых = Новый Массив;
Для Каждого Строка Из Таблица Цикл
    Если Не Строка.Оригинал = "Нет" ИЛИ Строка.Артикул = Строка.Наименование Тогда
        МассивУдаляемых.Добавить(Строка); 
    КонецЕсли;
КонецЦикла;
Для Каждого Элемент Из МассивУдаляемых Цикл
    Таб.Удалить(Элемент);
КонецЦикла;

Оффлайн Snaky

  • **
  • Сообщений: 50
  • РЕПУТАЦИЯ: 5
  • КПД: 10%
  • Регистрация: 2014-06-18
  • Сайт: 
  • Профессия: Программист 1С
Я так понимаю если написать Строка.Артикул = Строка.Наименование  то удалятся строки в которых  поле Артикул равно полю Наименование.   А  мне нужно чтоб сравнивалось значение поля Артикул по всем строкам и поля Наименование по всем строкам. Т.е. если смотреть на приведенную мной таблицу нужно чтоб удалились 1-я, 2-я, 3-я строки т.к. в них в поле Наименование у всех стоит Стол, в поле Артикул в всех А1,  а хотя бы у одного из них  поле Оригинал  не равно "НЕТ"

МассивУдалаемых = Новый Массив;
Для Каждого Строка Из Таблица Цикл
    Если Не Строка.Оригинал = "Нет" ИЛИ Строка.Артикул = Строка.Наименование Тогда
        МассивУдаляемых.Добавить(Строка); 
    КонецЕсли;
КонецЦикла;
Для Каждого Элемент Из МассивУдаляемых Цикл
    Таб.Удалить(Элемент);
КонецЦикла;
А вот сейчас я не понял задачу, нужно что бы удалились все строки где "Оригинал" не равно "Нет", а так же строки у которых наименование == артикул??? поясните задачу подробнее на примере

Оффлайн llirik_87

  • *
  • Сообщений: 20
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2014-06-24
  • Сайт: 
  • Профессия: Ученик 1С
Пример:
Исходная таблица
Наименование    Артикул    Оригинал
Стол                     А1            А111
Стол                     А1            Нет
Стол                     А1            Нет
Кровать                К5            К321
Полка                   П4            Нет

1)Ищем и удаляем строки в которых Наименования и Артикулы равны, а так же в поле Оригинал хотя бы раз в не стоит "Нет". Данному условию удовлетворяют первые три строки. У первых трех строк Наименования одинаковы (Стол) и Артикулы одинаковы (А1), а поле Оригинал в первой строке не стоит "Нет". Значит удаляем их.
2) Ищем строки в которых поле Оригинал не стоит "Нет" и нет больше строк с таким же Артикулом и Наименованием и удаляем. Этому условию соответствует 4-я строка. 
Получаем таблицу:
Наименование    Артикул     Оригинал
Полка                    П4            Нет

А вот сейчас я не понял задачу, нужно что бы удалились все строки где "Оригинал" не равно "Нет", а так же строки у которых наименование == артикул??? поясните задачу подробнее на примере

Оффлайн cska-fanat-kz

  • 1С:Специалист
  • Глобальный модератор
  • *****
  • Сообщений: 5745
  • РЕПУТАЦИЯ: 1099
  • КПД: 19%
  • Красная армия всех сильней!
  • Регистрация: 2010-11-06
    • Skype: cska-fanat-kz81
  • Сайт: cska-fanat-kz.ucoz.kz
  • Профессия: Разработчик 1С
Соответствие1 = Новый Соответствие;

Для каждого СтрокаТЧ Из ТЧ Цикл
Если СтрокаТЧ.Оригинал <> "НЕТ" Тогда
Соответствие1.Вставить(СтрокаТЧ.Наименование, СтрокаТЧ.Артикул);
КонецЕсли;
КонецЦикла;

Для каждого ЭлСоответствия Из Соответствие1 Цикл
СтруктураПоиска = Новый Структура("Наименование, Артикул", ЭлСоответствия.Ключ, ЭлСоответствия.Значение);
НайденныеСтроки = ТЧ.НайтиСтроки(СтруктураПоиска);
Для каждого СтрокаТЧ Из НайденныеСтроки Цикл
ТЧ.Удалить(СтрокаТЧ);
КонецЦикла;
КонецЦикла;
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Оффлайн llirik_87

  • *
  • Сообщений: 20
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2014-06-24
  • Сайт: 
  • Профессия: Ученик 1С
Что-то у меня так вообще ничего не оставляет, может я что-то не так сделал? вот код мой
   Запрос = Новый Запрос;           
Запрос.Текст =   "ВЫБРАТЬ
                 |   мебель.Наименование как Наименование,
                 |   мебель.Артикул как Артикул,
                 |   мебель.Оригинал как Оригинал
                 |ИЗ
                 |   Справочник.мебель КАК мебель";
Результат=Запрос.Выполнить();
ТабличнаяЧасть1.Загрузить(Результат.Выгрузить());

Соответствие1 = Новый Соответствие;

Для каждого СтрокаТЧ Из ТабличнаяЧасть1 Цикл
   Если СтрокаТЧ.Оригинал <> "НЕТ" Тогда
      Соответствие1.Вставить(СтрокаТЧ.Наименование, СтрокаТЧ.Артикул);
   КонецЕсли;
КонецЦикла;

Для каждого ЭлСоответствия Из Соответствие1 Цикл
   СтруктураПоиска = Новый Структура("Наименование, Артикул", ЭлСоответствия.Ключ, ЭлСоответствия.Значение);
   НайденныеСтроки = ТабличнаяЧасть1.НайтиСтроки(СтруктураПоиска);
   Для каждого СтрокаТЧ Из НайденныеСтроки Цикл
      ТабличнаяЧасть1.Удалить(СтрокаТЧ);
   КонецЦикла;
КонецЦикла;

Соответствие1 = Новый Соответствие;

Для каждого СтрокаТЧ Из ТЧ Цикл
Если СтрокаТЧ.Оригинал <> "НЕТ" Тогда
Соответствие1.Вставить(СтрокаТЧ.Наименование, СтрокаТЧ.Артикул);
КонецЕсли;
КонецЦикла;

Для каждого ЭлСоответствия Из Соответствие1 Цикл
СтруктураПоиска = Новый Структура("Наименование, Артикул", ЭлСоответствия.Ключ, ЭлСоответствия.Значение);
НайденныеСтроки = ТЧ.НайтиСтроки(СтруктураПоиска);
Для каждого СтрокаТЧ Из НайденныеСтроки Цикл
ТЧ.Удалить(СтрокаТЧ);
КонецЦикла;
КонецЦикла;


Теги:
 

Удаление помеченных объектов ("Не удалось записать "Контактная информация"")

Автор SnakeyРаздел Пользователям "1С - Предприятие 8"

Ответов: 5
Просмотров: 6968
Последний ответ 08 Янв 2015, 09:15
от Sanario
Удаление папки "Темп"

Автор TATIZРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 1
Просмотров: 1813
Последний ответ 11 Мар 2015, 13:45
от дфтын
Отсутствие документов помеченных на удаление в обработке удаления помеченных

Автор ak47Раздел Пользователям "1С - Предприятие 8"

Ответов: 1
Просмотров: 2600
Последний ответ 06 Июн 2013, 11:47
от Совёнок
Не могу найти "Удаление помеченных объектов"

Автор LeviathanРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 7
Просмотров: 5385
Последний ответ 14 Янв 2016, 06:03
от cska-fanat-kz
(Копирование строк из ТЧ документа в ТЧ другого документа в Обычном приложении)

Автор GanG031Раздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 1
Просмотров: 1655
Последний ответ 25 Янв 2016, 19:01
от cska-fanat-kz

* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
180 Сообщений
ilyay ilyay
75 Сообщений
oleg-x
51 Сообщений
alex0402
49 Сообщений
andron81_81
40 Сообщений
AIFrame
37 Сообщений
MuI_I_Ika MuI_I_Ika
34 Сообщений
BuhRust
30 Сообщений
Golickoff Golickoff
29 Сообщений
Dima Dddd Dima Dddd
26 Сообщений

* Кто онлайн

  • Точка Гостей: 624
  • Точка Скрытых: 0
  • Точка Пользователей: 10
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal