Форум программистов, компьютерный форум, киберфорум
1С: Собственные программы
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.91/22: Рейтинг темы: голосов - 22, средняя оценка - 4.91
23 / 23 / 1
Регистрация: 14.12.2013
Сообщений: 406
1
1C 8.x

Совмещение (соединение или объединение) таблиц, особенно временных

11.01.2014, 21:37. Показов 4014. Ответов 15
Метки нет (Все метки)

Здравствуйте, нужна помощь:

есть 2 временные таблицы
соединяются вместе
при слиянии некоторые столбцы не имеют данных
при дальнейшей обработке данных возникает ситуация, когда нужно сложить некоторые столбцы этой объединенной таблицы
и если при складывании в одной ячейке нет данных, а в другой есть то возникает ошибка
"Преобразование значения к типу Число не может быть выполнено"
как избежать этой ситуации... думаю банально можно было бы приравнять эти "пустые ячейки" к 0, но как это сделать?

делать перед каждым складыванием проверку на Null думаю как то не правильно... как по правильному быть в моей ситуации?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.01.2014, 21:37
Ответы с готовыми решениями:

Объединение временных таблиц
начнем сначала: есть Справочник.ФИО загоняется во временную таблицу есть Константа.Магазин есть...

Объединение временных таблиц по столбцу
Добрый день. Прошу помощи в объединении двух временных таблиц по столбцу. Есть две таблицы:...

Объединение временных таблиц в запросе
Здравствуйте, подскажите пожалуйста, пытаюсь в запросе объединить две временные таблицы, пишет...

Объединение таблиц или что то в этом роде
есть запрос SELECT * FROM TABLE(некая_процедура(некий_айди)) Данный вопрос работает, выдает на...

15
Модератор
Эксперт 1С
3062 / 2755 / 516
Регистрация: 10.03.2011
Сообщений: 10,589
Записей в блоге: 1
11.01.2014, 21:46 2
Тип какой у твоих временных таблиц?

Добавлено через 47 секунд
Правильнее. типизировать колонки таблицы при инициализации
1
2951 / 1763 / 82
Регистрация: 03.11.2011
Сообщений: 8,280
11.01.2014, 22:29 3
IsNull(ВТ1.Сум,0) КАК ВТ1Сум,
IsNull(ВТ2.Сум,0) КАК ВТ2Сум,
1
23 / 23 / 1
Регистрация: 14.12.2013
Сообщений: 406
12.01.2014, 01:33  [ТС] 4
Цитата Сообщение от Dethmontt Посмотреть сообщение
Тип какой у твоих временных таблиц?

Добавлено через 47 секунд
Правильнее. типизировать колонки таблицы при инициализации
эм... наверно сейчас лажу скажу... но разве у временных таблиц тоже тип есть? )

я вот так помещаю данные во вр.таблицу
1C
1
2
3
4
5
6
7
8
9
10
11
Запрос.Текст = "
    |ВЫБРАТЬ
    |   *
    |ПОМЕСТИТЬ 
    |   ВременнаяТаблицаРС
    |ИЗ
    |   РегистрСведений.ДанныеПродаж КАК ДанныеПродаж;
    |ВЫБРАТЬ
    |   *
    |ИЗ 
    |   ВременнаяТаблицаРС";
0
Модератор
Эксперт 1С
3062 / 2755 / 516
Регистрация: 10.03.2011
Сообщений: 10,589
Записей в блоге: 1
12.01.2014, 01:38 5
duk337 тебе правильно подсказал
З.Ы. Знаю что в конструкторе есть описание временной таблицы где можно указать тип поля, но как это работает так и не разобрался пока... Времени небыло
0
23 / 23 / 1
Регистрация: 14.12.2013
Сообщений: 406
12.01.2014, 01:39  [ТС] 6
Цитата Сообщение от duk337 Посмотреть сообщение
IsNull(ВТ1.Сум,0) КАК ВТ1Сум,
IsNull(ВТ2.Сум,0) КАК ВТ2Сум,
я правильно понял... это так каждую колонку надо... эм... "переделать" в запросе )))

Не по теме:

чувствую себя инностранцем в чужой стране



впринципе так работает... но можно какнибудь всю таблицу так "переделать"? а то у меня данных не много и по этому я не парюсь с колонками тупо
1C
1
2
|ВЫБРАТЬ
    |   *
0
Модератор
Эксперт 1С
3062 / 2755 / 516
Регистрация: 10.03.2011
Сообщений: 10,589
Записей в блоге: 1
12.01.2014, 01:39 7
Цитата Сообщение от SanSaySP Посмотреть сообщение
впринципе так работает... но можно какнибудь всю таблицу так "переделать"? а то у меня данных не много и по этому я не парюсь с колонками тупо
Да. Но будет избыточность

1C
1
ВЫБРАТЬ *, IsNull(*.НужноеПоле,0) КАК КопияНужногоПоляБезНУЛЛ
1
2951 / 1763 / 82
Регистрация: 03.11.2011
Сообщений: 8,280
12.01.2014, 11:58 8
Цитата Сообщение от SanSaySP Посмотреть сообщение
я правильно понял... это так каждую колонку надо
NULL возникает только при соединении (либо при обращении через две точки к атрибуту пустой ссылки). Я понял, что созданы ВТ1 и ВТ2, далее они соединяются (НЕ ОБЪЕДИНИТЬ!). В этом случае все поля, которые потребуются для вычислений, не должны быть налл. Либо при вычислениях каждое значение пропускайте через функцию какую-нибудь, например:
1C
1
2
3
4
5
6
7
Функция УжЧислоТакЧисло(знч)
Попытка
Возврат Число(""+знч);
Исключение
Возврат 0;
КонецПопытки;
КонецФункции
0
23 / 23 / 1
Регистрация: 14.12.2013
Сообщений: 406
12.01.2014, 14:22  [ТС] 9
сделал как Вы советовали первый раз
1C
1
2
3
4
IsNull(Предварительная.РегСуммаПокупок, 0) КАК РегСуммаПокупок,
    |   IsNull(Предварительная.РегПДУПродажа, 0) КАК РегПДУПродажа,
    |   IsNull(Предварительная.РегГСДПродажа, 0) КАК РегГСДПродажа,
и т.п.
0
2951 / 1763 / 82
Регистрация: 03.11.2011
Сообщений: 8,280
12.01.2014, 17:44 10
Цитата Сообщение от duk337 Посмотреть сообщение
NULL возникает только при соединении (либо при обращении через две точки к атрибуту пустой ссылки).
Оптимальнее при создании Предварительная - где, похоже, соединяются три (или два?) регистра. Но можно и так.
У меня, правда, есть подозрение, что всё это из одного регистра, нет? Тогда наллов там не будет вообще, все атрибуты регистра типизированы.
1
23 / 23 / 1
Регистрация: 14.12.2013
Сообщений: 406
12.01.2014, 18:16  [ТС] 11
в общем и целом выборка делается из справочника, документа и регистра

Т.е. оптимальнее это преобразование/замену (IsNull) делать как можно раньше?

П.С. у меня сейчас на последнем этапе сделано.
0
2951 / 1763 / 82
Регистрация: 03.11.2011
Сообщений: 8,280
12.01.2014, 22:18 12
Цитата Сообщение от SanSaySP Посмотреть сообщение
в общем и целом выборка делается из справочника, документа и регистра
Т.е. оптимальнее это преобразование/замену (IsNull) делать как можно раньше?
П.С. у меня сейчас на последнем этапе сделано.
Не то что оптимальнее, а как-то спокойнее. На самом деле я не совсем врубился, зачем запрос к уже созданной объединённой таблице? Обычно она выходит готовой сразу после соединения трёх ВТ с преобразованными наллами.
0
23 / 23 / 1
Регистрация: 14.12.2013
Сообщений: 406
13.01.2014, 11:19  [ТС] 13
Цитата Сообщение от duk337 Посмотреть сообщение
На самом деле я не совсем врубился, зачем запрос к уже созданной объединённой таблице?
ну как бы сказать...
я не умею делать запрос из разных источников, поэтому на текущий момент я:
1) делаю запрос к справочнику и помещаю во временную таблицу (ВТ1)
2) делаю запрос к региструсведений и помещаю во временную таблицу (ВТ2)
3) делаю запрос к документу и помещаю во временную таблицу (ВТ3)
4) соединяю ВТ1 и ВТ2 и помещаю во временную таблицу (ВТ4)
5) соединяю ВТ4 и ВТ3

подозреваю, что такая последовательность действий "через заднее место", но пока так

П.С. пробовал как то из разных источников сделать запрос, но чет там дублироваться стало

Если кто расскажет как правильно сделать такой запрос (из разных источников), буду признателен )
0
2951 / 1763 / 82
Регистрация: 03.11.2011
Сообщений: 8,280
13.01.2014, 12:07 14
Цитата Сообщение от SanSaySP Посмотреть сообщение
подозреваю, что такая последовательность действий "через заднее место", но пока так
да по-божески.
пп. 4 и 5 можно объединить.
Ну или текст запроса в студию.
0
23 / 23 / 1
Регистрация: 14.12.2013
Сообщений: 406
13.01.2014, 13:05  [ТС] 15
как то так:
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Запрос.Текст = "
    |ВЫБРАТЬ
    |   *
    |ПОМЕСТИТЬ 
    |   ВременнаяТаблицаПредварительная
    |ИЗ
    |   ВременнаяТаблицаФИО КАК ФИО
    |ЛЕВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ
    |   ВременнаяТаблицаРС КАК ДанныеПродаж
    |ПО
    |   ФИО.Наименование = ДанныеПродаж.РегФИО.Наименование;
    |ВЫБРАТЬ
    |   *
    |ИЗ 
    |   ВременнаяТаблицаПредварительная";
    Запрос.Выполнить();
 
Запрос.Текст = "
    |ВЫБРАТЬ
    |   *
    |ИЗ
    |   ВременнаяТаблицаПредварительная КАК Предварительная
    |ЛЕВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ
    |   ВременнаяТаблицаПланы КАК Планы
    |ПО
    |   Предварительная.Наименование = Планы.ФИО.Наименование
    |УПОРЯДОЧИТЬ ПО
    |   Наименование";
    Результат = Запрос.Выполнить().Выгрузить();
0
2951 / 1763 / 82
Регистрация: 03.11.2011
Сообщений: 8,280
13.01.2014, 13:14 16
1. При соединениях не стоит указывать "*", поскольку
2. При соединениях обрабатывать IsNull(ДанныеПродаж.ФИО,ФИО.ФИО)
3. Делать всё в одном пакете. Конструктор всё смонтирует.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.01.2014, 13:14

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Объединение таблиц базы или есть альтернатива?
В базе есть две таблички: 1. category_to_tovars с двумя полями...

Объединение двух скриптов (совмещение)
есть два скрипта: один выводит информацию из текстового файла <SCRIPT LANGUAGE="JavaScript">...

Объединение временных интервалов, заданных таблицей
Хочу обсудить решение средствами SQL вот какой задачи. Дана таблица, содержащая набор интервалов...

Уход от временных таблиц
Доброго всем времени. У меня в БД имеют довольно крупные таблицы, и не сколько сложных процедур,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.