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

Таблица значений 8.2

Автор 1cka, 22 окт 2014, 10:30

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

1cka

Есть 2 ТЗ:
ТЗ1
Колонка1, Колонка2, Колонка3
ручка1      ---             10
ручка2      ----               2
ручка2     Германия      20
ручка3     Китай            30
ручка1     Китай            40

ТЗ2
Колонка1, Колонка2, Колонка3
ручка1     красная        10
ручка2     синяя            20
ручка3     зеленая        30
ручка1     синяя            40

Как в ТЗ1 найти все номенклатуры (с пустыми Колонками2) которые содержатся в ТЗ2
Из ТЗ1 удалить эти строки, а в ТЗ2 добавить
В итоге чтобы получилось 2 ТЗ:
ТЗ1
Колонка1, Колонка2, Колонка3

ручка2     Германия      20
ручка3     Китай            30
ручка1     Китай            40

ТЗ2
Колонка1, Колонка2, Колонка3
ручка1     красная        10
ручка2     синяя            20
ручка3     зеленая        30
ручка1     синяя            40
ручка1      ----             10
ручка2    ----               2


cska-fanat-kz

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

1cka

СтруктураПоиска = Новый Структура("Колонка2", <<ПустоеЗначение>>);
НайденныеСтроки = ТЗ31.НайтиСтроки(СтруктураПоиска);
Для каждого СтрокаТЗ31 Из НайденныеСтроки Цикл
      НайденнаяСтрока = ТЗ32.Найти(СтрокаТЗ31.Колонка1, "Колонка1");//
     Если НайденнаяСтрока <> Неопределено Тогда
    НоваяСтрока = ТЗ32.Добавить();
    НоваяСтрока.Колонка1 = СтрокаТЗ31.Колонка1;//
    НоваяСтрока.Колонка2 = СтрокаТЗ31.Колонка2;//
    НоваяСтрока.Колонка3 = СтрокаТЗ31.Колонка3;//

ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТЗ31);
КонецЕсли;
КонецЦикла;

подписала 3 строчки, без них добавляются пустые строки в тз
А так получилось добавить данные в ТЗ32.
а из ТЗ31 строки не удаляются?!


cska-fanat-kz

Использовал ЗаполнитьЗначенияСвойств() из расчета что в обоих ТЗ имена колонок совпадают.
В противном случае действительно простое присвоение.

Цитата: 1cka от 22 окт 2014, 13:25а из ТЗ31 строки не удаляются?!

попробуйте перед "КонецЦикла;" написать
ТЗ31.Удалить(СтрокаТЗ31);

т.е. что-то вроде

СтруктураПоиска = Новый Структура("Колонка2", <<ПустоеЗначение>>);
НайденныеСтроки = ТЗ31.НайтиСтроки(СтруктураПоиска);
Для каждого СтрокаТЗ31 Из НайденныеСтроки Цикл
      НайденнаяСтрока = ТЗ32.Найти(СтрокаТЗ31.Колонка1, "Колонка1");//
     Если НайденнаяСтрока <> Неопределено Тогда
    НоваяСтрока = ТЗ32.Добавить();
    НоваяСтрока.Колонка1 = СтрокаТЗ31.Колонка1;//
    НоваяСтрока.Колонка2 = СтрокаТЗ31.Колонка2;//
    НоваяСтрока.Колонка3 = СтрокаТЗ31.Колонка3;//

КонецЕсли;
ТЗ31.Удалить(СтрокаТЗ31);
КонецЦикла;
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

1cka

Цитата: cska-fanat-kz от 22 окт 2014, 13:42
Использовал ЗаполнитьЗначенияСвойств() из расчета что в обоих ТЗ имена колонок совпадают.
В противном случае действительно простое присвоение.

Цитата: 1cka от 22 окт 2014, 13:25а из ТЗ31 строки не удаляются?!

попробуйте перед "КонецЦикла;" написать
ТЗ31.Удалить(СтрокаТЗ31);

т.е. что-то вроде

СтруктураПоиска = Новый Структура("Колонка2", <<ПустоеЗначение>>);
НайденныеСтроки = ТЗ31.НайтиСтроки(СтруктураПоиска);
Для каждого СтрокаТЗ31 Из НайденныеСтроки Цикл
      НайденнаяСтрока = ТЗ32.Найти(СтрокаТЗ31.Колонка1, "Колонка1");//
     Если НайденнаяСтрока <> Неопределено Тогда
    НоваяСтрока = ТЗ32.Добавить();
    НоваяСтрока.Колонка1 = СтрокаТЗ31.Колонка1;//
    НоваяСтрока.Колонка2 = СтрокаТЗ31.Колонка2;//
    НоваяСтрока.Колонка3 = СтрокаТЗ31.Колонка3;//

КонецЕсли;
ТЗ31.Удалить(СтрокаТЗ31);
КонецЦикла;

так удаляются все позиции где "Колонка2" = <<ПустоеЗначение>>

cska-fanat-kz

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

1cka

Цитата: cska-fanat-kz от 22 окт 2014, 13:57
СтруктураПоиска = Новый Структура("Колонка2", <<ПустоеЗначение>>);
НайденныеСтроки = ТЗ31.НайтиСтроки(СтруктураПоиска);
Для каждого СтрокаТЗ31 Из НайденныеСтроки Цикл
      НайденнаяСтрока = ТЗ32.Найти(СтрокаТЗ31.Колонка1, "Колонка1");//
     Если НайденнаяСтрока <> Неопределено Тогда
    НоваяСтрока = ТЗ32.Добавить();
    НоваяСтрока.Колонка1 = СтрокаТЗ31.Колонка1;//
    НоваяСтрока.Колонка2 = СтрокаТЗ31.Колонка2;//
    НоваяСтрока.Колонка3 = СтрокаТЗ31.Колонка3;//
    ТЗ31.Удалить(СтрокаТЗ31);
КонецЕсли;
КонецЦикла;

ура! благодарю! вроде работает!:zebzdr:

cska-fanat-kz

в первой таблице в строках с пустой Колонка2 могут быть повторы в Колонка1?
При положительном ответе - может быть косяк ;)
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

1cka

Цитата: cska-fanat-kz от 22 окт 2014, 14:29
в первой таблице в строках с пустой Колонка2 могут быть повторы в Колонка1?
При положительном ответе - может быть косяк ;)
нет, не могут...я там уже все данные сгруппировала.
;) :btbzdb:

cska-fanat-kz

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

Теги:

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

Рейтинг@Mail.ru

Поиск