Имя: Пароль:
1C
1С v8
Как объединить таблицы значений в одну
,
0 Alexey vip
 
10.07.12
17:11
Помогите, пожалуйста.
Есть несколько ТЗ (на данный момент 6, потом будет больше). Нужно соединить всё это дело в одну ТЗ. В каждой ТЗ первые две колонки одного типа (склад и номенклатурная группа), следующие три - числовые значения. Требуется сделать единую ТЗ (фактически объединить ТЗ) следующим образом: Первые две колонки пишутся (склад и номенклатурная группа), а затем дописывается справа по 3 числовые колонки с каждой ТЗ. Не хотелось бы перебирать циклами всё это дело, так как тысячи на тысячи дают слишком долгие ожидания.
Пробовал делать через один запрос. В итоге бедный компьютер сообщил, что ему не хватило памяти.
Возможно я как-то тупо составляю запрос: пробовал через 6 пакетов запросов, затем ещё запрос, где объединяются всевозможные склады и номенклатурные группы, затем ещё запрос, где я через 12 левых соединений соединяю всё это дело в одну табличку:)
В общем поможет ли какой нибудь спец по запросам, или просто гений коддинга, который поможет как не через кучу циклов объединить много ТЗ:)
бп 8.2
1 Господин ПЖ
 
10.07.12
17:12
все беды в мире - от кривых задач...
2 andrewks
 
10.07.12
17:12
в исходных ТЗ по измерениям "склад и номенклатурная группа" уникальность присутствует?
3 Radion
 
10.07.12
17:18
попробуй так (код не мой))):
// Добавляет в таблицу значений строки из другой таблицы значений и
// в них значения колонок с совпадающими наименованиями.
//
// Параметры:
//  ТаблицаИсточник - таблица значений, откуда берутся значения.
//  ТаблицаПриемник - таблица значений, куда добавляются строки.
Функция ЗагрузитьВТаблицуЗначений(ТаблицаИсточник, ТаблицаПриемник)
   
   //Сформируем массив совпадающих колонок.
   МассивСовпадающихКолонок = Новый Массив();
   Для каждого Колонка Из ТаблицаПриемник.Колонки Цикл
       
       Если ТаблицаИсточник.Колонки.Найти(Колонка.Имя) <> Неопределено Тогда
           
           МассивСовпадающихКолонок.Добавить(Колонка.Имя);
           
       КонецЕсли;
       
   КонецЦикла;
   
   Для каждого СтрокаТаблицыИсточника Из ТаблицаИсточник Цикл
       
       СтрокаТаблицыПриемника = ТаблицаПриемник.Добавить();
       
       // Заполним значения в совпадающих колонках.
       Для каждого ЭлементМассива Из МассивСовпадающихКолонок Цикл
           
           СтрокаТаблицыПриемника[ЭлементМассива] = СтрокаТаблицыИсточника[ЭлементМассива];
           
       КонецЦикла;
       
   КонецЦикла;
   
   Возврат ТаблицаПриемник;
   
КонецФункции // ЗагрузитьВТаблицуЗначений()
4 Kreont
 
10.07.12
17:21
классно звучит: "12 левых соединений" :)

Попробуй обычным объединением:
инд.поле1, инд.поле2, параметр1,параметр2,параметр3, + (в цикле добавить N-раз, 0,0,0)
и так для каждой, во второй наборот:
инд.поле1, инд.поле2, 0,0,0, параметр1,параметр2,параметр3, 0,0,0, ...
и т.д.


Или через обработку одной ТЧ, добавляя нужные колонки + поиск через структуру нужной строки куда добавлять, зависит от колчиества данных, надо тестить где проще и оптимально по скорости и по объему памяти.
5 Alexey vip
 
10.07.12
17:27
1.
требуется создать огромный отчёт по горизонтали на 3 альбомных листа:) Сейчас данные выдираются из бухрегистра: через параметры виртуальных таблиц отсекаю по конкретным счетам, затем, нужные поля отсекаю ещё через ВЫБОР. В итоге у меня 6 запросов с разными условиями и числовыми значениями. Но у них одинаковые по типу первые две колонки (склад и номенклатурная группа), затем идут три числа.
Чтобы более понятно отчет выглядит примерно так:
Остатки Покупка ПеревовоВДругуюГруппу Падеж и тд

ну а в строках склады и номенк. группы.
Вытаскиваю я всё через бухрегистр. Через обычные регистры не вариант, так как очень много дописок и куча связей.
Вот и думаю, как же лучше выдрать кучу данных из бухрегистра.
2.
На разумеется.
6 Alexey vip
 
10.07.12
17:27
2.
Да, разумеется.
7 inspam
 
10.07.12
17:28
ОБЪЕДИНИТЬ?
8 Alexey vip
 
11.07.12
08:50
4.
Кароче, как и в 3?
7.
Что ОБЪЕДИНИТЬ? Синтаксис помощник выдал только для ячеек табличного документа
В Запросе объединить 6 таблиц/запросов?  Расскажи мне, как установить связи для них
9 SanGvin
 
11.07.12
08:55
(8) на закладке объединения\псевдонимы
10 Balabass
 
11.07.12
08:56
Создать новую тз, и в нее загрузить существующие.
Правда нужно чтобы названия столбцов были динаковые.
11 Alexey vip
 
11.07.12
09:16
10.
как загрузить? Просто добавлять столбцы нельзя, в во всех таблицах разное кол-во строк
12 Balabass
 
11.07.12
09:17
Дай описание таблиц
13 Buster007
 
11.07.12
09:19
(8) сгруппировать по первым двум колонкам после объединения вот тебе и связи.
Я так понимаю ты именно по ним и соединяешь.
14 Alexey vip
 
11.07.12
11:37
12
у всех таблиц первые две колонки типа склады и номенклатурные группы, следующие три числа
вот мне нужно сделать одну таблицу, где будут первые 2 колонки типа склады и номенклатурные группы, а следующие 18 колонок просто числа...
13
соединять каждую таблицу с каждой таблицей?
15 hhhh
 
11.07.12
12:03
(14) самое главное не забудь проиндексировать таблицы, а иначе будет как в (0) "... тысячи на тысячи дают слишком долгие ожидания"
16 GROOVY
 
11.07.12
12:08
(14) ТЗ во временные таблицы в запросе загони, проиндексируй по ключевым полям и объединением выбери данные. Потом сгруппируй по ключевым полям.
17 Alexey vip
 
12.07.12
09:49
Всем спасибо,  в общем воспользовался именно объединением в запросе. Правда пришлось все запросы исковеркать:) Мучался долго, но за неимением других вариантов никуда не деться.
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн