Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 23:52

Удаление строк в таблице по условиям

Автор llirik_87, 24 июн 2014, 12:27

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

Klyacksa

Если я правильно поняла условие:
"ВЫБРАТЬ
| мебель.Наименование КАК Наименование,
| мебель.Артикул КАК Артикул,
| мебель.Оригинал КАК Оригинал
|ПОМЕСТИТЬ Мебель
|ИЗ
| Справочник.Мебель КАК мебель
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| Мебель.Наименование,
| Мебель.Артикул,
| Мебель.Оригинал
|ИЗ
| Мебель КАК Мебель
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| Мебель.Наименование КАК Наименование,
| Мебель.Артикул КАК Артикул
| ИЗ
| Мебель КАК Мебель
| ГДЕ
| Мебель.Оригинал <> ""Нет""
|
| СГРУППИРОВАТЬ ПО
| Мебель.Наименование,
| Мебель.Артикул) КАК ВложенныйЗапрос
| ПО Мебель.Наименование = ВложенныйЗапрос.Наименование
| И Мебель.Артикул = ВложенныйЗапрос.Артикул
|ГДЕ
| ВложенныйЗапрос.Наименование ЕСТЬ NULL ";
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

cska-fanat-kz

значит по каким то причинам не отрабатывает условие
Цитата: llirik_87 от 24 июн 2014, 17:59
Если СтрокаТЧ.Оригинал <> "НЕТ" Тогда

мож у вас Оригинал НЕ строка? Кто Вас знает...

Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

llirik_87

Понял в чем проблема, Вы правильный код дали, просто забыл исправить на с "НЕТ" на "Нет" в строке Если СтрокаТЧ.Оригинал <> "НЕТ"  . Спасибо, код отрабатывает как я хотел!
Цитата: cska-fanat-kz от 24 июн 2014, 18:58
значит по каким то причинам не отрабатывает условие
Цитата: llirik_87 от 24 июн 2014, 17:59
Если СтрокаТЧ.Оригинал <> "НЕТ" Тогда

мож у вас Оригинал НЕ строка? Кто Вас знает...
Добавлено: 24 июн 2014, 19:26


Спасибо! этот вариант тоже отрабатывает как нужно
Цитата: Klyacksa от 24 июн 2014, 18:15
Если я правильно поняла условие:
"ВЫБРАТЬ
| мебель.Наименование КАК Наименование,
| мебель.Артикул КАК Артикул,
| мебель.Оригинал КАК Оригинал
|ПОМЕСТИТЬ Мебель
|ИЗ
| Справочник.Мебель КАК мебель
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| Мебель.Наименование,
| Мебель.Артикул,
| Мебель.Оригинал
|ИЗ
| Мебель КАК Мебель
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| Мебель.Наименование КАК Наименование,
| Мебель.Артикул КАК Артикул
| ИЗ
| Мебель КАК Мебель
| ГДЕ
| Мебель.Оригинал <> ""Нет""
|
| СГРУППИРОВАТЬ ПО
| Мебель.Наименование,
| Мебель.Артикул) КАК ВложенныйЗапрос
| ПО Мебель.Наименование = ВложенныйЗапрос.Наименование
| И Мебель.Артикул = ВложенныйЗапрос.Артикул
|ГДЕ
| ВложенныйЗапрос.Наименование ЕСТЬ NULL ";


Amateur

Цитата: cska-fanat-kz от 24 июн 2014, 18:58
значит по каким то причинам не отрабатывает условие
Цитата: llirik_87 от 24 июн 2014, 17:59
Если СтрокаТЧ.Оригинал <> "НЕТ" Тогда

мож у вас Оригинал НЕ строка? Кто Вас знает...
вообще-то у вас ошибка
идея использовать Соответствие хорошая, но
при вставке там будут убиваться дубликаты толко ключа, т.е. Названия (а надо еще учитывать Артикул)
так что в итоге может проскочить запись без НЕТ в Оригинале

например замените в третей строке и Артикул и Оригинал и посмотрите что получится

cska-fanat-kz

Amateur, вот тут
СтруктураПоиска = Новый Структура("Наименование, Артикул", ЭлСоответствия.Ключ, ЭлСоответствия.Значение);

ищется и по наименованию, и по коду....
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

llirik_87

Да, Вы правы(
Если изменить третью строку и таблица будет
Наименование    Артикул    Оригинал
Стол                     А1            А111
Стол                     А1            Нет
Стол                     А123          А222
Кровать                К5            К321
Полка                   П4            Нет

то на выходе получил

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

А должно быть

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

Цитата: Amateur от 24 июн 2014, 19:30
Цитата: cska-fanat-kz от 24 июн 2014, 18:58
значит по каким то причинам не отрабатывает условие
Цитата: llirik_87 от 24 июн 2014, 17:59
Если СтрокаТЧ.Оригинал <> "НЕТ" Тогда

мож у вас Оригинал НЕ строка? Кто Вас знает...
вообще-то у вас ошибка
идея использовать Соответствие хорошая, но
при вставке там будут убиваться дубликаты толко ключа, т.е. Названия (а надо еще учитывать Артикул)
так что в итоге может проскочить запись без НЕТ в Оригинале

например замените в третей строке и Артикул и Оригинал и посмотрите что получится

Amateur

Цитата: cska-fanat-kz от 24 июн 2014, 19:57
Amateur, вот тут
СтруктураПоиска = Новый Структура("Наименование, Артикул", ЭлСоответствия.Ключ, ЭлСоответствия.Значение);

ищется и по наименованию, и по коду....
ищется то правильно, да только при :

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

вы отсеяли больше, чем надо (вставка убивает дубликат по Наименованию, не обращая внимания на Артикул, поскольку ключ: только Наименование)
Альтернатива, которую вижу : более сложный ключ или Свертка для ТаблицыЗначений (вместо Соответствия)

cska-fanat-kz

Эх, пора в отпуск (((

В итоге Klyacksa как всегда молодец )))
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

cska-fanat-kz

Цитата: Amateur от 24 июн 2014, 20:06Альтернатива, которую вижу : более сложный ключ или Свертка для ТаблицыЗначений (вместо Соответствия)

...или список значений и вместо Ключ-Значение использовать Значение-Представление...
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

llirik_87

А можете, пожалуйста, код написать, я не знаю как это сделать
Цитата: Amateur от 24 июн 2014, 20:06
Цитата: cska-fanat-kz от 24 июн 2014, 19:57
Amateur, вот тут
СтруктураПоиска = Новый Структура("Наименование, Артикул", ЭлСоответствия.Ключ, ЭлСоответствия.Значение);

ищется и по наименованию, и по коду....
ищется то правильно, да только при :

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

вы отсеяли больше, чем надо (вставка убивает дубликат по Наименованию, не обращая внимания на Артикул, поскольку ключ: только Наименование)
Альтернатива, которую вижу : более сложный ключ или Свертка для ТаблицыЗначений (вместо Соответствия)
Добавлено: 24 июн 2014, 20:49


Тоже самое, буду очень благодарен если пришлете код. И Klyacksa конечно молодец но я хотел разобраться все таки как это сделать вне запроса. т.к. это всего лишь пример, а так запрос у меня более сложный.
Цитата: cska-fanat-kz от 24 июн 2014, 20:28
Цитата: Amateur от 24 июн 2014, 20:06Альтернатива, которую вижу : более сложный ключ или Свертка для ТаблицыЗначений (вместо Соответствия)

...или список значений и вместо Ключ-Значение использовать Значение-Представление...

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск