Имя: Пароль:
1C
 
Нужна помощь: как две ТаблицыЗначений поместить в третью?
0 dft2014
 
25.04.18
18:15
Добрый день!

Получаю две таблицы значений, с помощью типовых функций:
1) КадровыеДанныеСотрудников = КадровыйУчет.КадровыеДанныеСотрудников(Истина, СписокСотрудников, ИменаКадровыхДанных, ПериодОтчета,);
2) КадровыеДанныеФЛ = КадровыйУчет.КадровыеДанныеФизическихЛиц(Истина, СписокФизлиц, ИменаПрочихДанных, ПериодОтчета,);

Подскажите, как мне теперь КадровыеДанныеСотрудников и КадровыеДанныеФЛ поместить в третью (общую) таблицу значений. Ключом может быть колонка ФизическоеЛицо.


СтрокаИтоговойТЗ = тзИтог.Добавить();
что дальше писать?
1 Бертыш
 
25.04.18
18:26
СтрокаИтоговойТЗ.ТвоёПоле=
2 Flover
 
25.04.18
18:31
СтрокаИтоговойТЗ = тзИтог.Добавить();

Для каждого стр из КадровыеДанныеСотрудников
ЗаполнитьЗначенияСвойств(СтрокаИтоговойТЗ, стр);
КонецЦикла

Для каждого стр из КадровыеДанныеФЛ
ЗаполнитьЗначенияСвойств(СтрокаИтоговойТЗ, стр);
КонецЦикла

так можно
3 Бертыш
 
25.04.18
18:37
А если структура итоговой ТЗ тебе нужна такая же как в одной из входящих таблиц, то можно организовать

тзИтог=КадровыеДанныеСотрудников.Скопировать();

Для каждого стр из КадровыеДанныеФЛ
СтрокаИтоговойТЗ = тзИтог.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаИтоговойТЗ, стр);
КонецЦикла
4 Бертыш
 
25.04.18
18:44
А если у обоих структура идентична, то
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ТЗ.Поле1,
        |    ТЗ.Поле2
        |ПОМЕСТИТЬ Таблица1
        |ИЗ
        |    &ТЗ КАК ТЗ
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    ТЗ.Поле1,
        |    ТЗ.Поле2
        |ПОМЕСТИТЬ Таблица2
        |ИЗ
        |    &ТЗ2 КАК ТЗ
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    Таблица1.Поле1,
        |    Таблица1.Поле2
        |ИЗ
        |    Таблица1 КАК Таблица1
        |
        |ОБЪЕДИНИТЬ ВСЕ
        |
        |ВЫБРАТЬ
        |    Таблица2.Поле1,
        |    Таблица2.Поле2
        |ИЗ
        |    Таблица2 КАК Таблица2";
    
    Запрос.УстановитьПараметр("ТЗ",КадровыеДанныеСотрудников );
    Запрос.УстановитьПараметр("ТЗ2",КадровыеДанныеФЛ);

    РезультатЗапроса = Запрос.Выполнить();
тзИтог=РезультатЗапроса.Выгрузить(ОбходРезультатаЗапроса.Прямой)
5 Бертыш
 
25.04.18
18:45
Может конечно текст запроса может быть и таким но не уверен
        "ВЫБРАТЬ
        |    *
        |ПОМЕСТИТЬ Таблица1
        |ИЗ
        |    &ТЗ КАК ТЗ
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    *
        |ПОМЕСТИТЬ Таблица2
        |ИЗ
        |    &ТЗ2 КАК ТЗ
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    Таблица1.Поле1,
        |    Таблица1.Поле2
        |ИЗ
        |    Таблица1 КАК Таблица1
        |
        |ОБЪЕДИНИТЬ ВСЕ
        |
        |ВЫБРАТЬ
        |    Таблица2.Поле1,
        |    Таблица2.Поле2
        |ИЗ
        |    Таблица2 КАК Таблица2";
6 Бертыш
 
25.04.18
18:46
Пардон
    Запрос.Текст =
        "ВЫБРАТЬ
        |    *
        |ПОМЕСТИТЬ Таблица1
        |ИЗ
        |    &ТЗ КАК ТЗ
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    *
        |ПОМЕСТИТЬ Таблица2
        |ИЗ
        |    &ТЗ2 КАК ТЗ
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    *
        |ИЗ
        |    Таблица1 КАК Таблица1
        |
        |ОБЪЕДИНИТЬ ВСЕ
        |
        |ВЫБРАТЬ
        |    *
        |ИЗ
        |    Таблица2 КАК Таблица2";
7 b_ru
 
25.04.18
18:50
Я так понимаю, нужно связать эти таблицы, а не объединить? Можно действительно засунуть их во временные таблицы БД и объединить запросом (пример в (4), только в 3м результирующем запросе пакета нужно соединять, а не объединять). А более правильно заглянуть а типовые процедуры КадровыеДанныеСотрудников и КадровыеДанныеФизическихЛиц, подсмотреть, как там получаются данные,и написать свой запрос, чтобы он сразу делал соединение, чтобы избежать лишней передачи данных с сервера БД на сервер приложения и обратно.

Если производительность не критична, я бы не заморачивался и сделал по первому варианту :)
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн