Имя: Пароль:
1C
1C 7.7
v7: внешние ключи
0 vmgvmg
 
24.10.14
16:30
Есть документ новый1 с реквизитами новый1 и новый2.
Введено два документа новый1 (без табл частей)

№ док |новый1 | новый2
--------------------------------
1           |два        | 2
2           |один       | 1



Есть документ новый2 с реквизитами новый1 и новый2.
Введено два документа новый2 (без табл частей)

№ док       |новый1       | новый2
--------------------------------
1           |1            | one
2           |2            | two


Запрос
"//{{ЗАПРОС(Сформировать)
|Период с (НачМесяца(ТекущаяДата()));
|Без итогов;
|новый11 = Документ.Новый1.новый1;
|новый12 = Документ.Новый1.новый2;
|новый21 = Документ.Новый2.новый1;
|новый22 = Документ.Новый2.новый2;
|Группировка новый11;
|Группировка новый12;
|Группировка новый21;
|Группировка новый22;
|"//}}ЗАПРОС

Даёт

новый11 |новый11|новый21|новый22
------------------------------------------------
                |             |1             |one
                |             |2             |two
два             |2            |              |
один            |1            |              |


Я хочу получить выводить два документа параллельно

чтобы, наложив условие новый11 = новый21, получить

новый11 |новый11|новый21|новый22
------------------------------------------------
два         |2              |2             |two
один        |1              |1             |one



То есть как сымитировать внешние ключи в sql-базах.

select
Новый1.новый1 as новый11, Новый1.новый2 as новый12,
Новый2.новый1 as новый21, Новый2.новый2 as новый22
from новый1, новый2
where
Новый1.новый2=Новый2.новый1
Сергей Астров
1 akaBrr
 
24.10.14
16:45
Вы специально всех запутать хотели или у вас это само получилось?
2 vmgvmg
 
24.10.14
17:26
вопрос сформулирован предельно чётко
3 vmgvmg
 
24.10.14
17:32
это можно сделать только с помощью обычного запроса без дополнительного программирования и без привлечения прямых запросов?
4 Herby
 
24.10.14
17:46
(3) без дополнительного кода не получится
5 akaBrr
 
24.10.14
17:50
МойДокумент = Документ.Новый1,Документ.Новый2;
СовпРеквизит = Документ.Новый1.Реквизит1,Документ.Новый2.Реквизит2;
Док1Рек2 = Документ.Новый1.Реквизит2;
Док2Рек1 = Документ.Новый2.Реквизит1;
Группировка МойДокумент;
Группировка СовпРеквизит;

а вот так?
6 vmgvmg
 
24.10.14
18:08
ошибки в запросе!
7 vmgvmg
 
24.10.14
18:14
МойДокумент = Документ.Новый1,Документ.Новый2
разные типы
8 Chameleon1980
 
24.10.14
18:15
пишем может что за ошибки или в битву экстрасенсов записываем народ?
9 vmgvmg
 
24.10.14
18:18
вот я и пишу
МойДокумент = Документ.Новый1,Документ.Новый2  разные типы
10 vmgvmg
 
24.10.14
18:20
и реквизитов Реквизит1 Реквизит2 у документов нет
11 silent person
 
24.10.14
18:20
а если будет 3 документа в которых реквизиты новый11 и новый21 будут иметь одинаковое значение то какой вид должна принять таблица ?
12 silent person
 
24.10.14
18:21
(10) ты думаешь тебе тут готовый код по твоей каше из (0) напишут ? только попытаются дать правильное направление.
13 vmgvmg
 
24.10.14
18:26
3 документа новый1
№ док       |новый1     | новый2
--------------------------------
1           |два        | 2
2           |один       | 1
3           |три        | 2

хочу получить
новый11 |новый11|новый21|новый22
------------------------------------------------
два         |2              |2             |two
один        |1              |1             |one  
три         |2              |2            |two
14 Chai Nic
 
24.10.14
18:29
(3) Вполне конкретный ответ - "обычные запросы" в семерке юзают исключительно извращенцы, коих по определению меньшинство. Если же ты еще только выбираешь ориентацию - обрати внимание на "прямые запросы" внешней компоненты 1с++.
15 vmgvmg
 
24.10.14
18:32
вопрос концептуальный!
Конструкция типа
select
..
from новый1, новый2
where
Новый1.новый2=Новый2.новый1

это работа с внешними ключами

а в 1с 7.7 как?
без программирования и прямых запросов
16 vmgvmg
 
24.10.14
18:33
лихо
99% программеров в 1с 7 записаны в извращенцы
17 Chai Nic
 
24.10.14
18:34
"Обычные запросы" в семерке использовать НЕ ПРИНЯТО, неужели не понятно.. никто вам тут не ответит.. в семерке или юзают выборки, или же прямые запросы..
18 vmgvmg
 
24.10.14
18:35
извращенцы те, кто использует прямые запросы там, где без них можно обойьтись и быстродействие некритично
19 Chai Nic
 
24.10.14
18:35
+(17) Никому не интересно разбираться с этим экспериментальным творением 1с под названием "встроенный запрос", когда нужного результата можно достичь более прямыми средствами..
20 vmgvmg
 
24.10.14
18:36
99%  обоаботок на Инфостарте написаны без прямых запросов
21 Chai Nic
 
24.10.14
18:36
(18) Угу, ага.. Видел я как эти ваши стандартные запросы работают.. перекачивают таблицы с сервера в каталог временных файлов и потом их соединяют..
22 Chai Nic
 
24.10.14
18:37
(21) Причем, работа с каталогов временных файлов ведется в синхронном режиме - с отключенным кэшированием записи.. специально для тех, кто любит слушать хруст диска.. Разные извращенцы бывают. Да.
23 vmgvmg
 
24.10.14
18:39
хруст диска из серверной не слышно
24 Chai Nic
 
24.10.14
18:40
(23) Ну да, ну да.. зато иопсы с отключенным кэшированием на порядок тормознее, чем со включенным.. и самое главное - зачем?
25 vmgvmg
 
24.10.14
18:41
а если у меня железо и сетка - супер, то зачем мне усложнять программу?
26 Chai Nic
 
24.10.14
18:41
(24) Ну на самом деле... обработка молча работает, считает что-то.. а тут - деловито хрустит диском, любой заказчик поймет - "дело то серьезное"..
27 Chai Nic
 
24.10.14
18:42
(25) Нет ничего проще прямых запросов.
28 vmgvmg
 
24.10.14
18:44
согдасен, чо они удобны при исползоании конструктора и sqlite
29 Chai Nic
 
24.10.14
18:51
(28) Главное что они реализованы максимально прямо, в отличие от.
30 akaBrr
 
24.10.14
21:50
МойДокумент = Документ.Новый1.ТекущийДокумент,Документ.Новый2.ТекущийДокумент;
31 vmgvmg
 
24.10.14
23:55
пустой результат
32 vmgvmg
 
25.10.14
00:11
|МойДокумент = Документ.Новый1.ТекущийДокумент,  Документ.Новый2.ТекущийДокумент;
|совпРекв = Документ.Новый1.новый2, Документ.Новый2.новый1;
|Группировка МойДокумент;
|Группировка совпРекв;
33 vmgvmg
 
25.10.14
17:38
ЗагрузитьВнешнююКомпоненту("1sqlite.dll");
базаДанных = СоздатьОбъект("SQLiteBase");
базаДанных.Открыть(":memory:");
34 vmgvmg
 
25.10.14
17:38
запрос = базаДанных.НовыйЗапрос();
запрос.ВыполнитьЗапрос("create virtual table Новый1 using

dbeng(Документ.Новый1)");
запрос.ВыполнитьЗапрос("create virtual table Новый2 using

dbeng(Документ.Новый2)");
текст="SELECT
        |Новый1.Новый1, Новый2.Новый2
        |FROM Новый1,Новый2
        |WHERE  Новый1.Новый2 = Новый2.Новый1
        |";
тз=запрос.ВыполнитьЗапрос(текст);
тз.ВыбратьСтроку();