powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / 500 джойнов и IN
88 сообщений из 88, показаны все 4 страниц
500 джойнов и IN
    #38492477
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladТаблоидчто такое "контекст" ?Во время выполнения запрос вычисляет и хранит состояние каждого потока данных (таблицы в простейшем случае).
Грубо говоря - текущую запись из каждого потока.
Операторы BLR принимают номера потоков (контекстов) как параметры.
Номер контекста кодируется 1 байтом, отсюда ограничение.
Т.е. если какой-нибудь генератор sql-кода сгенерит 256 джойнов одним селектом, то всё пропало?
Если это так, то можно ли отодвинуть это ограничение хотя бы до размера word?

У меня вот 175 джойнов генерится, при этом вытаскиваются 560 полей из примерно 30 таблиц. Это для печати отчёта. Лишних полей там нет, т.е. они либо печатаются, либо участвуют в вычислениях в отчёте. Это не табличный отчёт, а одностраничный документ с детальными характеристиками покупаемого изделия (много цифр, много букв).
И запрос уже на 45 килобайт... Простой селект одной записи с кучей джойнов.

И я вполне допускаю, что со временем система может перешагнуть и через 64K на этом запросе, и через 256 джойнов.
Я могу конечно запрос побить на два, причём прозрачно для отчётера (fastreport), на уровне кода сервера приложений. Но имхо универсальней будет убрать ограничение в дальние дали :)
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38492483
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDee,

для Fb3 ограничение в 64K на длину запроса сняли. А вот ограничения на контексты не трогали.

dimitr, hvlad

интересно а вот в таком запросе

Код: sql
1.
select * from sp_myproc(1) 



количество контекстов будет равно 1 или 1 + количество контекстов из ХП?
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38492493
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDee> Т.е. если какой-нибудь генератор sql-кода сгенерит
NickDee> 256 джойнов одним селектом, то всё пропало?

Почему всё пропало? Ни с сервером, ни с БД
ничего не происходит, а запрос не выполнится, да.

Симонов Денис> количество контекстов будет равно 1
Симонов Денис> или 1 + количество контекстов из ХП?

По логике вещей должно быть, конечно, 1,
ибо внутри ХП - свой отдельный контекст.
Иначе мы все давно наступили бы на это
ограничение из-за больших/вложенных ХП.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38492503
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladNickDeeможно ли отодвинуть это ограничение хотя бы до размера word?Нет.
Что-то поломается?
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38492522
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамNickDee> Т.е. если какой-нибудь генератор sql-кода сгенерит
NickDee> 256 джойнов одним селектом, то всё пропало?

Почему всё пропало? Ни с сервером, ни с БД
ничего не происходит, а запрос не выполнится, да.

Вот представь, что у тебя есть табличка, в которой среди прочих есть четыре поля: FirstDocId, SecondDocId, ThirdDocId, FourthDocId (ссылаются на одну табличку Docs). И у тебя есть вьюшка по таблице.
И вот тебе говорят, что во вьюшку нужно добавить четыре поля:
FirstDocId.ManagerId.ServerId.DealerId.CountryId.Name
SecondDocId.ManagerId.ServerId.DealerId.CountryId.Name
ThirdDocId.ManagerId.ServerId.DealerId.CountryId.Name
FourthDocId.ManagerId.ServerId.DealerId.CountryId.Name

Каждое такое поле развернётся в 5 joins, итого +20.

Понятно что имея инструмент, который позволяет строить такие вьюшки на раз-да, без написания sql вручную, то можно вполне наступить на ограничение в 256 joins на сложных базах.
У меня база совсем не сложная по структуре, а 175 joins на запрос уже есть.
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38492525
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDeeВот представь, что у тебя есть табличка, в которой среди прочих есть четыре
поля: FirstDocId, SecondDocId, ThirdDocId, FourthDocId (ссылаются на одну табличку Docs).
И у тебя есть вьюшка по таблице.
"Вот представь, что у разработчика БД нет головного мозга, совсем. А у программиста
приложения руки растут из задницы."
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38492535
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDee> Вот представь

Зачем? Способов создать себе проблемы я итак больше тебя знаю.

Не надо плодить плохие вьюшки/ХП, а если наплодил - не
надо удивляться, что они потом плохо/медленно работают.
AFAIU, основной "законный" способ получить сабж - это
различные графические построители запросов/отчетов, но
лично я на это ограничение и там не натыкался - юзеры,
видимо, тоже не могут удержать в голове/на экране такое
количество инфы, колонок, полей и пр.

Повторюсь, ничего не "пропало". Запрос не сработает, да.
Сервер не упадёт, БД не порушится. Ура. А недовольные
пользователи вызовут "программиста", который налабает
им SQL-запрос, работающий на два порядка быстрее их
мышетыкательного варианта, даже если бы он взлетел.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38492623
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамNickDee> Вот представь

Зачем? Способов создать себе проблемы я итак больше тебя знаю.

Проблем нет, пока ты не наступаешь на ограничение.
Вот начинаешь работать с движком БД, а там - то ограничение на количество элементов в IN, то на размер стейтмента, то на размер таблицы, то на длину имени поля, то на суммарный размер всех полей в таблице.

Лично я наступил на ограничение с IN, на размер стейтмента, на ограничение длины поля. Пришлось выкручиваться.

Спрашиваешь - почему бы не изменить такое поведение? В ответ получаешь телегу как правильно писать. В том-то и дело, что писать надо так, чтобы не создавать глупых ограничений :) А если они унаследованы из чужого кода, и пользователи просят изменить ограничение пока никто не наступил, то почему это просто не сделать?
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38492627
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDeeА если они унаследованы из чужого кода, и пользователи просят изменить ограничение пока никто не наступил, то почему это просто не сделать?Может потому, что это НЕ просто сделать ?
Может потому, что это нужно 1% тех самых пользователей ?
Может потому, что нужно научиться работать с чем-то, и не наступать на ограничения, как остальные 99% ?
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38492629
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDeeСпрашиваешь - почему бы не изменить такое поведение? В ответ получаешь телегу как правильно писать
дай вам волю, вы процедуры по 10 мегабайт писать будете.

NickDeeто почему это просто не сделать?
потому что ряд подобных изменений требует изменений в движке, которые могут повлиять неизвестно на что. И потому что не бывает софта без ограничений. Всегда есть какой-то лимит, и всегда на этот лимит кто-то наступит, обязательно.
Есть лимиты старые, которые можно или легко или с определенными усилиями изменить. И они меняются. Например, 36 гиг на одну таблицу, разрядность генератора, Next transaction, ... Ну растут данные, что поделать. Но есть определенные лимиты, которые выходят за здравый смысл.
Например, размер оператора. В ЯП ведь уже много лет есть правило - размер процедуры не должен превышать размер экрана (допустим, 120 строк). Почему в SQL это можно "нарушать"?
А с IN - насколько бы тебе его увеличить хотелось? 2500? 5000? 10000? Я гарантирую, что после увеличения до 10к обязательно тут же кто то на это наступит.
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38492645
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvNickDeeСпрашиваешь - почему бы не изменить такое поведение? В ответ получаешь телегу как правильно писать
дай вам волю, вы процедуры по 10 мегабайт писать будете.

И что конкретно тебя в этом пугает? :) Ну будут у меня стейтменты по 10 мегабайт, или по сто. Мне так удобно, и мне с ними жить :)
Почему я должен быть ограничен константой в коде? Просто потому что кто-то решил что конкретного N должно хватить на все задачи, доступные к осознанию того кто ставит этот N? :) А если некоторые задачи не подвластны его осознанию? :)

kdvNickDeeто почему это просто не сделать?
потому что ряд подобных изменений требует изменений в движке, которые могут повлиять неизвестно на что. И потому что не бывает софта без ограничений. Всегда есть какой-то лимит, и всегда на этот лимит кто-то наступит, обязательно.
Есть лимиты старые, которые можно или легко или с определенными усилиями изменить. И они меняются. Например, 36 гиг на одну таблицу, разрядность генератора, Next transaction, ... Ну растут данные, что поделать. Но есть определенные лимиты, которые выходят за здравый смысл.
Например, размер оператора. В ЯП ведь уже много лет есть правило - размер процедуры не должен превышать размер экрана (допустим, 120 строк). Почему в SQL это можно "нарушать"?

Потому что стейтменты могут быть сгенерённые. Собственно при генерации кода для триггера я и наступил на ограничение.

kdvА с IN - насколько бы тебе его увеличить хотелось? 2500? 5000? 10000? Я гарантирую, что после увеличения до 10к обязательно тут же кто то на это наступит.
Я наступил на 1500. И естественно это была автогенерация кода :) Пользователь в гриде выделял записи, и я их для групповой обработки вставлял в "where ID in (...)".
Ограничение должно быть как можно выше, и я бы не стал ограничиваться размером WORD. Пусть работает медленней, пусть противоречит чьей-то девелоперской совести, но пусть работает... это уже будет выбор того, кто это использует.
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38492684
miwaonline
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDee,

Ну так возьми да и сделай, раз все так просто.
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38492688
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDeeПользователь в гриде выделял записи, и я их для групповой обработки вставлял
в "where ID in (...)".
Потому что использовать для этого временную таблицу у тебя не хватило... чего?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38492704
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovNickDeeПользователь в гриде выделял записи, и я их для групповой обработки вставлял
в "where ID in (...)".
Потому что использовать для этого временную таблицу у тебя не хватило... чего?

Ты сейчас спрашиваешь о том, почему я вместо того чтобы написать простой "where ID in (...)", не создал временную таблицу, потом не сделал в неё N инсертов, а потом не написал "where Id in select from ..."? :) Ты сейчас про это спрашиваешь? :)
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38492725
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDeeТы сейчас про это спрашиваешь? :)

Именно так. Только не in, а join.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38492743
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovNickDeeТы сейчас про это спрашиваешь? :)

Именно так. Только не in, а join.

если делать с джойном, то тогда лучше без временной таблицы. Мы это тут обсуждали пять лет назад: 6343890 :)
Но это настоящий изврат, правда меньший чем с инсертами :) Быстро работает, да. Но изврат :)
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38492750
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDeeесли делать с джойном, то тогда лучше без временной таблицы.
Нет, не лучше. Во-первых, более сложный код на клиенте. Во-вторых, более сложный код на
сервере.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38492769
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDeeесли делать с джойном, то тогда лучше без временной таблицы. Мы это тут обсуждали пять лет назад: 6343890 :)
Но это настоящий изврат, правда меньший чем с инсертами :) Быстро работает, да. Но изврат :)0xFF.
2 NickDee: ты там разбиваешь список ИДшников на "слова" и выдаёшь из процедуры наружу отдельные ИДшники - я правильно понимаю ?
Что делает с входным блобом (IntStr) твоя УДФ CreateIntList(IntStr, ListId, Cnt) ? И откудова вытаскивает ID'шник вот эта штука: ValueInList(ListId, I, V) ? (ListId - это же integer, а не блоб... я слабо как-то понимаю тамошний код...)
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38492887
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDeeПользователь в гриде выделял записи
ой, опять про выделение пользователем в гриде полутора тысяч записей....
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38492916
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv> ой, опять про выделение пользователем в гриде полутора тысяч записей....

Да на самом деле там где-нибудь "выделить все" или
выделить диапазон, а обработать нормально это дело
автору лень, нехай сервер трудится, он же железный.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38492922
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТаблоидNickDeeесли делать с джойном, то тогда лучше без временной таблицы. Мы это тут обсуждали пять лет назад: 6343890 :)
Но это настоящий изврат, правда меньший чем с инсертами :) Быстро работает, да. Но изврат :)0xFF.
2 NickDee: ты там разбиваешь список ИДшников на "слова" и выдаёшь из процедуры наружу отдельные ИДшники - я правильно понимаю ?
Да.
ТаблоидЧто делает с входным блобом (IntStr) твоя УДФ CreateIntList(IntStr, ListId, Cnt) ?
Она создаёт из блоба IntStr список чисел, возвращает ассоциированный с этим списком ListId, и возвращает в Cnt количество элементов в списке.
ТаблоидИ откудова вытаскивает ID'шник вот эта штука: ValueInList(ListId, I, V) ? (ListId - это же integer, а не блоб... я слабо как-то понимаю тамошний код...)
Она вытаскивает их из списка, который ассоциирован с ListId.
Кстати Blob это же реально Int64, привязанный к данным, и имеющий методы работы с этими данными :) Вот тут по аналогии: ListId привязан к списку, и есть методы работы с этим списком.
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38492926
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустамkdv> ой, опять про выделение пользователем в гриде полутора тысяч записей....
Да на самом деле там где-нибудь "выделить все" или
выделить диапазон, а обработать нормально это дело
автору лень, нехай сервер трудится, он же железный.

Ну ты знаешь, у меня код в скриптах прописан, и достаточно сильно абстрагирован от грида.
Там (в скрипте) торчит функция, типа GetMarkedIdList: TIntegerDynArray.
С моей точки зрения именно список Id из грида и является теми данными, которые ожидает скриптовая процедура обработки, желающая обработать отмеченные записи :) Я так и реализовал.
Я эту функцию вызываю, получаю список отмеченных Id, и в скрипте пишу например такой sql-запрос: "update T set IsProcessed = 1 where Id in (' + IntListToStr(GetMarkedIdList) + ')".
Почти одной строчкой. Все шаги очевидны и понятны. А вы что предлагаете? :)

Я sql-серверу на его собственном языке говорю: поставь IsProcessed = 1, для записей у которых Id принадлежит указанному множеству значений.
Чего не так? :)
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38492938
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDeeЯ эту функцию вызываю, получаю список отмеченных Id, и в скрипте пишу
например такой sql-запрос: "update T set IsProcessed = 1 where Id in (' +
IntListToStr(GetMarkedIdList) + ')".
Почти одной строчкой. Все шаги очевидны и понятны. А вы что предлагаете? :)
Две строки:
Код: sql
1.
2.
SaveListToTempTable(GetMarkedIdList);
merge into t using select Id from TempTable when matched set IsProcessed=1;


Все шаги очевидны и понятны.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38492954
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovNickDeeЯ эту функцию вызываю, получаю список отмеченных Id, и в скрипте пишу
например такой sql-запрос: "update T set IsProcessed = 1 where Id in (' +
IntListToStr(GetMarkedIdList) + ')".
Почти одной строчкой. Все шаги очевидны и понятны. А вы что предлагаете? :)
Две строки:
Код: sql
1.
2.
SaveListToTempTable(GetMarkedIdList);
merge into t using select Id from TempTable when matched set IsProcessed=1;


Все шаги очевидны и понятны.

Это я понимаю.
Можно, чтобы не переписывать существующий sql-код, пойти ещё дальше - распарсить sql, вытащить из него элементы IN, вставить их во временную таблицу, исправить sql на join или merge, и отдать серверу :)
Будет почти универсальный воркэраунд для IN. Но это и есть изврат :)
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38492973
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDee> Ну ты знаешь, у меня код в скриптах прописан,
NickDee> и достаточно сильно абстрагирован от грида.
NickDee> С моей точки зрения именно список Id из грида

При чём тут скрипты и код? Пользователи как 1500
записей в гриде выбирают?

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38492986
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDeeМожно, чтобы не переписывать существующий sql-код, пойти ещё дальше -
распарсить sql, вытащить из него элементы IN, вставить их во временную таблицу, исправить
sql на join или merge, и отдать серверу :)
Назачем? "Нормальные герои всегда идут в обход"? (с)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38493009
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамПри чём тут скрипты и код? Пользователи как 1500
записей в гриде выбирают?

Наример так: загружают данные за период (условие в where), затем средствами devex-грида фильтруют-сортируют как им вздумается (это уже локально), затем в отфильтрованом выбирают либо инсертом (если им нужно отметить несколько записей), либо нажатием * (инвертировать выделение) с последующим деселектом ненужных записей. Дальше жмётся кнопка, которая делает определённые действия для отмеченых записей.
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38493014
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDee> либо нажатием * (инвертировать выделение)
NickDee> Дальше жмётся кнопка

Ч.Т.Д.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38493018
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамПользователи как 1500 записей в гриде выбирают?
поскольку эта песня с 1500 записей вылезает регулярно уже несколько лет, насколько я помню, были следующие объяснения:

неправдоподобное - пользователь кликает несколько часов в гриде на чекбоксы
правдоподобное - пользователь кликает на элемент группы, автоматически чекаются все "товары подгруппы", таким образом, если 1 клик выбирает 300 элементов, за 5 кликов элементарно набрать 1500 элементов. Но тут не очень непонятно, почему нужно выбирать по элементам, а не по группам.

В одной системе через ФБСканер мы отловили ситуацию, когда пользователь своими действиями генерил тучу версий, которые превращались в мусор - типа, набрать заказ, что-то сделать с ним, потом копирнуть результат в другой заказ, а набранный целиком удалить. Т.е. полезное действие мелкое, а версий плодится немеряно. Разработчики не ожидали, что пользователь так будет использовать их функционал, в результате переписали код, по-моему как процедуры, так и приложение. Чтобы оставить пользователю возможность, но не насиловать сервер бессмысленными операциями.

Кстати, вот у MS SQL написано
Включение очень большого количества значений (много тысяч) в предложение IN может привести к интенсивному расходованию ресурсов и возврату ошибки 8623 или 8632. Чтобы избежать этой проблемы, храните элементы списка IN в таблице .
при скольких элементах ошибка возникает - не указано.

У Оракла (как минимум версии 8)
ORA-01795 maximum number of expressions in a list is 1000

у PostgreSQL я вообще не нашел какого-либо описания IN. может ослеп, не знаю.
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38493020
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDee,

понял. Тем не менее, лучи ненависти можешь аналогично посылать Ораклу и Микрософту (см. предыдущее сообщение). И Микрософт тоже говорит - переписывайте на объединение таблиц.
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38493040
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамNickDee> либо нажатием * (инвертировать выделение)
NickDee> Дальше жмётся кнопка

Ч.Т.Д.
Человеку нужны все документы за период, кроме документов менеджера Иванова, менеджера Петрова, и менеджера Сидорова, и нужно исключить документы без номера.
Он выставляет период, снимает в devex-овском фильтре по столбцу "Менеджер" три соответствующих чекбокса, ставит значение "(Не пустые)" в фильтре по столбцу "Номер", и получает на экране то, что ему нужно обработать. Это может быть как 10 записей, так и 10000.
Дальше жмёт * и жмёт кнопку обработки. Дальше ты знаешь что происходит :)
Особо обращаю твоё внимание, что локальный фильтр в devex-гриде может быть очень навороченым, настолько, что не смапится на sql-условие. А если ещё учесть, что он может быть сделан по вычисляемым на клиенте полям, то задача конвертации фильтра в sql-условие становится в общем виде нерешаемой.
Так что остаётся только список ID :)
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38493065
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvNickDee,

понял. Тем не менее, лучи ненависти можешь аналогично посылать Ораклу и Микрософту (см. предыдущее сообщение). И Микрософт тоже говорит - переписывайте на объединение таблиц.
Мда... :)
Оптимизатору есть из чего догадаться, что вместо развёртывания IN на OR-ы эффективней сделать джойн?
А можно ли сделать так, что до 1500 элементов оно работает как сейчас, а после - не падает с ошибкой, а делает виртульный джойн (если он возможен)? :)
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38493080
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDeeОптимизатору есть из чего догадаться, что вместо развёртывания IN на OR-ы эффективней сделать джойн?
с "таблицей в памяти"?
Представь себе, что ты вместо ФБ работаешь с Ораклом. И обламываешься на 1000 элементах. Твои действия?

p.s. не грузи разработчиков ФБ фигней. У них есть другие, более важные дела.
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38493128
pastor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDeeГаджимурадов РустамNickDee> либо нажатием * (инвертировать выделение)
NickDee> Дальше жмётся кнопка

Ч.Т.Д.
Человеку нужны все документы за период, кроме документов менеджера Иванова, менеджера Петрова, и менеджера Сидорова, и нужно исключить документы без номера.
Он выставляет период, снимает в devex-овском фильтре по столбцу "Менеджер" три соответствующих чекбокса, ставит значение "(Не пустые)" в фильтре по столбцу "Номер", и получает на экране то, что ему нужно обработать. Это может быть как 10 записей, так и 10000.
Дальше жмёт * и жмёт кнопку обработки. Дальше ты знаешь что происходит :)
Особо обращаю твоё внимание, что локальный фильтр в devex-гриде может быть очень навороченым, настолько, что не смапится на sql-условие. А если ещё учесть, что он может быть сделан по вычисляемым на клиенте полям, то задача конвертации фильтра в sql-условие становится в общем виде нерешаемой.
Так что остаётся только список ID :)

Встречал такую фигню еще у фокспрошников в налоговой. Очень удобно - выбираешь все четные дома улицы + еще два дома + всех Петровых в квартале + одного конкретного Сидорова.

Попробуй на досуге представить это в виде IN. Во временной таблице - только ID лицевых счетов. и это работало еще до Путина!
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38493277
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDeeПочему я должен быть ограничен константой в коде? Просто потому что кто-то решил что конкретного N должно хватить на все задачи, доступные к осознанию того кто ставит этот N? :) А если некоторые задачи не подвластны его осознанию? :)
т.е. другие причины введения этого ограничения, кроме как природной ограниченности этого "кого-то", ты не мыслишь? Скажем, что могут быть ограничения реализации, связанные с рекурсивностью обработки и статическим ограничением размера стека процесса сервера? И что если этот лимит тупо убрать, то сервер начнет тупо падать. Тебе же оттуда виднее, как лучше, ага. Все вокруг враги, один я д'Артаньян?
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38493299
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDee> Человеку нужны все документы за период, кроме
NickDee> документов менеджера Иванова, менеджера Петрова,
NickDee> и менеджера Сидорова, и нужно исключить документы без номера.

Значит, нужно сгенерить соотв. SQL-выражение.

NickDee> Это может быть как 10 записей, так и 10000.

Именно. Повысив с 1500 до 3000 - упрёшься снова.

NickDee> Особо обращаю твоё внимание, что локальный фильтр
NickDee> в devex-гриде может быть очень навороченым, настолько,
NickDee> что не смапится на sql-условие. А если ещё учесть, что он
NickDee> может быть сделан по вычисляемым на клиенте полям,

Вообще говоря, это враньё. Не говоря уже о том, что
фильтр по локальным полям на клиенте никакого
отношения к фильтру по ID на сервере не имеет.

Но если лень делать через Where-фильтр, то делай
через таблицу, как подсказывают. Или не делай и
продолжай вопить дальше.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38493728
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамИменно. Повысив с 1500 до 3000 - упрёшься снова.странно, в форуме давно опубликован "костыль" ака list_to_rows, в котором сей предел задвинут "в хрензнаткуда", а обсуждение несчастного IN все так же горячо.

Гаджимурадов РустамПри чём тут скрипты и код? Пользователи как 1500
записей в гриде выбирают?У нас есть фанаты маркетологи, которые могут именно больше тыщи записей в гриде нах***** (простите мой аглицкий, но другое слово хрен подберешь) именно никак не формализуемых записей и потом назначить им "ценовую акцию" или там параметры какие подправить, шоб "продавались веселей".

in у нас не канает совсем. Пометки живут в нормальной стационарной (не gtt) таблице, чтоб не потерять "годы труда" на случай если связь глюканет или там клиент по каким-то причинам сдохнет или автор решит "продолжить завтра".

фильтров каких только не наделали, вот буквально в пятницу закоммитил очередной патч по фильтрации, но все едино натюкивают тонны записей руками. В общем токмо джойны, только хардкор, никаких полумер ака in !!!
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38494396
protector
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что мешает уважаемому NickDee использовать вместо одного несколько in ?
Если уж так хочется.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38500360
Сисдба Мастеркеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDee пишет:

> Человеку нужны все документы за период, кроме документов менеджера
> Иванова, менеджера Петрова, и менеджера Сидорова, и нужно исключить
> документы без номера.

Процитированное - это "всё, кроме указанных"
А получение результата указанием списка ID - это "только указанные".

Как бы 2 большие разницы.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38500565
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сисдба Мастеркеевич> Процитированное - это "всё, кроме указанных"
> А получение результата указанием списка ID - это "только указанные".

Это ты знаешь, человек. А программа ИИ не обладает,
каким образом сформированы галочки в гриде она не
знает (и даже тупо NOT IN не может сделать), посему
ТС пошёл по пути меньшего сопротивления.

Просто это неуместный плач Ярославны и проблемы
не сервера, а тупых горе-пользователей и ленивого
разработчика, который хочет переложить проблемы
со своих плеч на сервер или кого бы то ни было.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38500606
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамПросто это неуместный плач Ярославны и проблемы
не сервера, а тупых горе-пользователей и ленивого
разработчика, который хочет переложить проблемы
со своих плеч на сервер или кого бы то ни было.

Разработчик действительно ленив. Горе-пользователи действительно тупы. Проблемы сервера тут действительно нет :)

Почему 256 джойнов? Потому что в байте 8 бит, а восемью битами можно закодировать только 256 значений. Это не ограничение сервера, это ограничение в архитектуре байта :)

Тут dmitry недавно д'артаньяна вспоминал :)
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38500622
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDee> Тут dmitry недавно д'артаньяна вспоминал :)

В зеркало не пробовал посмотреться?

Объясняю ещё раз, последний:

1. Ресурсы не бесконечны, ограничение всё равно будет.
Если увеличить с 1500 до 3000 или даже 10000 - это не
поможет и лишь уменьшит частоту втыкания в потолок.

2. Есть несколько и нормальных решений и воркэраундов,
ты их то ли не видишь/не слышишь, то ли пытаешься
проявить какую-то упёртость - с этим сразу в сад.

3. Твоё решение в данном конкретном случае ещё и
невыгодно пользователям (с т.з. производительности) -
я не проверял, но IN на 10000 в любом случае должен
проиграть нормальному Where-фильтру, даже плохо
индексированному. Разработчику (тебе) - да, удобно
и выгодно, тупо по SelectedRows пробежался, IDшечки
в запрос собрал (без параметров, кстати) и готово.
Вместо того, чтобы наращивать функциональность
фильтров и поисков. У тебя фильтр "в найденном"
есть хотя бы, кстати?

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38500627
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> невыгодно пользователям (с т.з. производительности) -
> я не проверял, но IN на 10000 в любом случае должен
> проиграть нормальному Where-фильтру, даже плохо индексированному

Впрочем, нет, тут надо у ДЕ уточнять.
Скорее всего, сервер просто соберёт
битмап и пройдёт одним проходом.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38500638
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам,

не будет одного прохода, будут тормоза :-)
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38500643
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitr> не будет одного прохода, будут тормоза :-)

А почему нельзя собрать всё за один (или пачками) проход?
А сами записи уже потом извлекать и проверять.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38500655
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам
Вернёмся к джойнам.
Ты представляешь себе что имеет право существовать система из двух таблиц, в которой есть 500 справочников? Все справочники находятся в одной таблице... Наверняка представляешь.
А можешь себе представить вторую таблицу, в которой 500 FK на таблицу справочников (или 10 таблиц по 50 полей, но связаных друг с другом по ID 1:1)?
А можешь себе представить, что нужно селектнуть запись из таблички с 500 FK, но не просто селектнуть, а с соответствующими значениями из таблицы справочника, причём не какие-то несколько полей, а все 500?
Не можешь себе представить как у одной сущности может быть 500FK? Не было таких задач? Не представляешь кому может пригодиться сразу 500 значений? А если представляешь, то знаешь как обойти ограничение в 255 джойнов? Двумя запросами? :)
А как это должна обходить какая-нибудь ORM-система с автогенерацией SQL? Никак? А кто сделал больше 255 FK, тот идиот, и задачи у него заведомо идиотские? :) А до скольки FK он ещё не идиот? :) До 255? :)
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38500662
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDeeА можешь себе представить вторую таблицу, в которой 500 FK на таблицу
справочников (или 10 таблиц по 50 полей, но связаных друг с другом по ID 1:1)?
Я уверен, что Рустам на своём модераторском веку повидал достаточно идиотов, так что
представить себе такого, который не знает как делается связь N:M, он, определённо, сумеет.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38500674
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovNickDeeА можешь себе представить вторую таблицу, в которой 500 FK на таблицу
справочников (или 10 таблиц по 50 полей, но связаных друг с другом по ID 1:1)?
Я уверен, что Рустам на своём модераторском веку повидал достаточно идиотов, так что
представить себе такого, который не знает как делается связь N:M, он, определённо, сумеет.

Я про ограничения FB. А ты про что? :)
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38500678
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDeeЯ про ограничения FB. А ты про что? :)
А я про анацефала - проектировщика БД.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38500688
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDeeА кто сделал больше 255 FK, тот идиотДа
NickDeeи задачи у него заведомо идиотские?Нет

Одно с другим никак не связано. Новость ? :)
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38500690
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovNickDeeЯ про ограничения FB. А ты про что? :)
А я про анацефала - проектировщика БД.

И какие цели ты перед собой ставишь, когда пишешь об этом? :) Какие насущные задачи пытаешься решить? :)
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38500693
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDeeИ какие цели ты перед собой ставишь, когда пишешь об этом? :) Какие насущные
задачи пытаешься решить? :)
Я пытаюсь донести всем посетителям этого форума, что проектировать БД так, как ты
описываешь - не надо. Потому что "это делается совсем иначе".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38500694
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDee> Вернёмся к джойнам.

Я бы предпочёл не возвращаться, потому что во-первых, с тобой
никаких джойнов не обсуждал (в этом топике, по крайней мере).
Во-вторых, как мембера, меня уже давно достали постоянные
обсуждения (часто весьма немаленькие) 3-5 разных вопросов в
одном топике )да ещё чужом). Этим не ты один страдаешь, кстати.
Как модератор я вдвойне против таких обсуждений, да ещё не к
месту, да ещё столь бесполензных (для ТС и форума в целом).

> Ты представляешь

Вполне. Я даже в одной таблице такое делал. Почитай про EAV,
кстати - может быть, много нового для себя откроешь. Там тоже
семиэтажные запросы, но как-то в ограничения всех основных
СУБД укладывается. И никаких 250 джойнов.

> А можешь себе представить вторую таблицу, в которой 500 FK на таблицу справочников
> ...
> Не можешь себе представить как у одной сущности может быть 500FK?

Честно говоря - затрудняюсь. С ходу вспомнить не смог, как
и представить, а все подобные случаи в моей практике были
не одной сущностью, а несколькими (пусть и вложенными),
что меняет ситуацию коренным образом.

> А можешь себе представить, что нужно селектнуть запись
> из таблички с 500 FK, но не просто селектнуть, а с
> соответствующими значениями из таблицы справочника,
> причём не какие-то несколько полей, а все 500?

Не, не могу. Если это отчёт/экспорт данных, то даже при
неправильной архитектуре это делается по другому, AFAIU.
Если же это любая логика/обработка (не говоря уже о GUI),
то накакать бы в рот тому разработчику, который будет всё
это разом селектить, а не частями и по необходимости.

Ты ещё скажи, что это у тебя вьюхой/ХПшкой вытаскивается.

> А как это должна обходить какая-нибудь ORM-система с автогенерацией SQL?

Вот про ORM тут надо думать, кстати. Хороший вопрос,
хотя это не самый подходящий раздел для обсуждения.
Надо полагать, что тупые ORMы (хоть самописные, хоть
чужие готовые) такую кривую архитектуру не скушают -
полезут вытаскивать всё одним запросом и подавятся.
Надо освежить память и проверить ограничения EF и
Hibernate на сей счёт.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38500697
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladNickDeeА кто сделал больше 255 FK, тот идиотДа
И как нужно сделать, чтобы не быть идиотом? :)
Вот у меня есть устройство состоящее из 500 видов деталей. Нужно заводить эти устройства в БД, и печатать (одно устройство на 1 печатный бланк). Есть удобная форма для ввода устройства в БД, на 500 комбобоксов. Есть грид, в котором в удобной форме выведены все 500 полей, с возможностью быстрой фильтрации списка полей (хотя с ограничением в 255 джойнов уже нужно поизвращаться чтобы вывести все). Есть печатная форма (в которой должен бы быть один селект, но ограничение в 255 джойнов не даёт возможности сделать один).

Я тут вижу 1 главную таблицу с 500 FK, и справочники (это то, что естественным образом вытекает из условия задачи).
А какую структуру предлагаешь ты?
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38500700
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDee> Вот у меня есть устройство состоящее из 500 видов деталей.

> Есть удобная форма для ввода устройства в БД, на 500 комбобоксов.
> Есть грид, в котором в удобной форме выведены все 500 полей

OMG...

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38500702
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDeeВот у меня есть устройство состоящее из 500 видов деталей.500 видов деталей или из 500 штук деталей ?
NickDeeЕсть удобная форма для ввода устройства в БД, на 500 комбобоксов .Не верю
NickDeeЕсть грид, в котором в удобной форме выведены все 500 полей НЕ ВЕРЮ

NickDeeА какую структуру предлагаешь ты?Я предлагаю тебе включить свой собственный мозг. Или перестать троллить, уже давно не смешно...
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38500704
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Недописал:

NickDee> Вот у меня есть устройство состоящее из 500 видов деталей.

Подробнее расскажи, что за устройство и что за 500 линейных деталей.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38500937
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамНедописал:

NickDee> Вот у меня есть устройство состоящее из 500 видов деталей.

Подробнее расскажи, что за устройство и что за 500 линейных деталей.


Давай лучше на реально существующем примере расскажу, который работает у клиента...
Есть дверь, которая в общем случае состоит из: Основная створка, дополнительная створка, фрамуга слева, фрамуга справа, фрамуга сверху. На каждой из этих сущностей (панелей), с каждой стороны (внутренней и наружней) может быть:
- МДФ (материал, рисунок фрезеровки, тип фрезеровки, цвет )
- ЛДСП (материал)
- Филёнка (рисунок)
- Накладка (рисунок, цвет рисунка)
- Перфорация (рисунок, цвет)
- Ковка (рисунок, цвет)
В скобках ссылки на справочники. Т.е. у нас имеется 12 ссылок на справочники. И это только для одной стороны панели. Панелей максимум 5 (две створки, три фрамуги) + 2 сторны, итого: 120 ссылок на справочники (12 * 5 * 2).
Эти 120 ссылок НЕ лежат полями в таблице дверей. Они лежат в табличке "СторроныПанели"(там 12 FK).
Потом есть табличка "Панели" с полями: "Выстота", "Ширина", "ВнешняяСторона ->", "ВнутренняяСторона ->" (ссылаются на табличку "СторроныПанели").
В табличке "Двери" есть два 5 полей: "ОсновнаяСтворка ->", "ДополнительнаяСтворка ->", "ЛеваяФрамуга ->", "ПраваяФрамуга ->", "ВерхняяФрамуга ->" (ссылаются на табличку "Панели")
При сохранении заявки мы имеем одну запись в табличке "Двери", две записи в табличке "Панели", 10 записей в табличке "СторроныПанели".
Если вытаскивать дверь одним селектом, например для редактирования или печати, то получается 120 джойнов.
И это без учёта всех остальных характеристик двери (там ещё около 200 полей).
Вот тут ( 15256277 ) я говорил про 175 джойнов и размер запроса в 45 килобайт.
Вот этот запрос, для печати документа (вдохните поглубже :) ):

Код: sql
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.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
316.
317.
318.
319.
320.
321.
322.
323.
324.
325.
326.
327.
328.
329.
330.
331.
332.
333.
334.
335.
336.
337.
338.
339.
340.
341.
342.
343.
344.
345.
346.
347.
348.
349.
350.
351.
352.
353.
354.
355.
356.
357.
358.
359.
360.
361.
362.
363.
364.
365.
366.
367.
368.
369.
370.
371.
372.
373.
374.
375.
376.
377.
378.
379.
380.
381.
382.
383.
384.
385.
386.
387.
388.
389.
390.
391.
392.
393.
394.
395.
396.
397.
398.
399.
400.
401.
402.
403.
404.
405.
406.
407.
408.
409.
410.
411.
412.
413.
414.
415.
416.
417.
418.
419.
420.
421.
422.
423.
424.
425.
426.
427.
428.
429.
430.
431.
432.
433.
434.
435.
436.
437.
438.
439.
440.
441.
442.
443.
444.
445.
446.
447.
448.
449.
450.
451.
452.
453.
454.
455.
456.
457.
458.
459.
460.
461.
462.
463.
464.
465.
466.
467.
468.
469.
470.
471.
472.
473.
474.
475.
476.
477.
478.
479.
480.
481.
482.
483.
484.
485.
486.
487.
488.
489.
490.
491.
492.
493.
494.
495.
496.
497.
498.
499.
500.
501.
502.
503.
504.
505.
506.
507.
508.
509.
510.
511.
512.
513.
514.
515.
516.
517.
518.
519.
520.
521.
522.
523.
524.
525.
526.
527.
528.
529.
530.
531.
532.
533.
534.
535.
536.
537.
538.
539.
540.
541.
542.
543.
544.
545.
546.
547.
548.
549.
550.
551.
552.
553.
554.
555.
556.
557.
558.
559.
560.
561.
562.
563.
564.
565.
566.
567.
568.
569.
570.
571.
572.
573.
574.
575.
576.
577.
578.
579.
580.
581.
582.
583.
584.
585.
586.
587.
588.
589.
590.
591.
592.
593.
594.
595.
596.
597.
598.
599.
600.
601.
602.
603.
604.
605.
606.
607.
608.
609.
610.
611.
612.
613.
614.
615.
616.
617.
618.
619.
620.
621.
622.
623.
624.
625.
626.
627.
628.
629.
630.
631.
632.
633.
634.
635.
636.
637.
638.
639.
640.
641.
642.
643.
644.
645.
646.
647.
648.
649.
650.
651.
652.
653.
654.
655.
656.
657.
658.
659.
660.
661.
662.
663.
664.
665.
666.
667.
668.
669.
670.
671.
672.
673.
674.
675.
676.
677.
678.
679.
680.
681.
682.
683.
684.
685.
686.
687.
688.
689.
690.
691.
692.
693.
694.
695.
696.
697.
698.
699.
700.
701.
702.
703.
704.
705.
706.
707.
708.
709.
710.
711.
712.
713.
714.
715.
716.
717.
718.
719.
720.
721.
722.
723.
724.
725.
726.
727.
728.
729.
730.
731.
732.
733.
734.
735.
736.
select "ZAYAVKINADVERI"."ID" as "Id",
"ZAYAVKINADVERI"."NOMERZAKAZA" as "NomerZakaza",
"ZAYAVKINADVERI"."DATAIZGOTOVL" as "DataIzgotovl",
"ZAYAVKINADVERI"."DATAMONTAJA" as "DataMontaja",
"ZAYAVKINADVERI"."ZAKAZCHIK" as "Zakazchik",
"ZAYAVKINADVERI"."ADRES" as "Adres",
"ZAYAVKINADVERI"."FIO" as "FIO",
"ZAYAVKINADVERI"."TELEFON" as "Telefon",
"ZAYAVKINADVERI"."MODELDVERIID" as "ModelDverilId",
"ModeliDverei_1"."NAME" as "FF_1",
"ZAYAVKINADVERI"."STOIMOSTDVERI" as "StoimostDveri",
"ZAYAVKINADVERI"."STOIMOSTOSNSTVORKI" as "StoimostOsnStvorki",
"ZAYAVKINADVERI"."SHIRINAKOROBKI" as "ShirinaKorobki",
"ZAYAVKINADVERI"."SHIRINAKOROBKIPRICE" as "ShirinaKorobkiPrice",
"ZAYAVKINADVERI"."VISOTAKOROBKI" as "VisotaKorobki",
"ZAYAVKINADVERI"."PLOSHADKOROBKI" as "PloshadKorobki",
"ZAYAVKINADVERI"."VISOTAPOROGA" as "VisotaPoroga",
"Naveski_2"."NAME" as "FF_2",
"ZAYAVKINADVERI"."TUPIKSLEVA" as "TupikSleva",
"ZAYAVKINADVERI"."TUPIKSPRAVA" as "TupikSprava",
"ZAYAVKINADVERI"."TUPIKSVERHU" as "TupikSverhu",
"ZAYAVKINADVERI"."TUPIKSNIZU" as "TupikSnizu",
"Zamki_3"."NAME" as "FF_3",
"ZAYAVKINADVERI"."OSNZAMOKCOUNT" as "OsnZamokCount",
"ZAYAVKINADVERI"."OSNZAMOKPRICE" as "OsnZamokPrice",
"ZAYAVKINADVERI"."OSNZAMOKAMOUNT" as "OsnZamokAmount",
"Cilindri_4"."NAME" as "FF_4",
"ZAYAVKINADVERI"."OSNCILINDRCOUNT" as "OsnCilindrCount",
"ZAYAVKINADVERI"."OSNCILINDRPRICE" as "OsnCilindrPrice",
"ZAYAVKINADVERI"."OSNCILINDRAMOUNT" as "OsnCilindrAmount",
"ZAYAVKINADVERI"."OSNCILINDRRAZMER" as "OsnCilindrRazmer",
"Kluchevini_5"."NAME" as "FF_5",
"ZAYAVKINADVERI"."OSNKLUCHEVINACOUNT" as "OsnKluchevinaCount",
"ZAYAVKINADVERI"."OSNKLUCHEVINAPRICE" as "OsnKluchevinaPrice",
"ZAYAVKINADVERI"."OSNKLUCHEVINAAMOUNT" as "OsnKluchevinaAmount",
"ZAYAVKINADVERI"."ISOSNKLUCHEVINAUTOPLENNAYA" as "IsOsnKluchevinaUtoplennaya",
"ZAYAVKINADVERI"."OSNKLUCHEVINAUTOPLENNAYACOUNT" as "OsnKluchevinaUtoplennayaCount",
"ZAYAVKINADVERI"."OSNKLUCHEVINAUTOPLENNAYAPRICE" as "OsnKluchevinaUtoplennayaPrice",
"ZAYAVKINADVERI"."OSNKLUCHEVINAUTOPLENNAYAAMOUNT" as "OsnKluchevinaUtoplennayaAmount",
"Zamki_6"."NAME" as "FF_6",
"ZAYAVKINADVERI"."DOPZAMOKCOUNT" as "DopZamokCount",
"ZAYAVKINADVERI"."DOPZAMOKPRICE" as "DopZamokPrice",
"ZAYAVKINADVERI"."DOPZAMOKAMOUNT" as "DopZamokAmount",
"Cilindri_7"."NAME" as "FF_7",
"ZAYAVKINADVERI"."DOPCILINDRCOUNT" as "DopCilindrCount",
"ZAYAVKINADVERI"."DOPCILINDRPRICE" as "DopCilindrPrice",
"ZAYAVKINADVERI"."DOPCILINDRAMOUNT" as "DopCilindrAmount",
"ZAYAVKINADVERI"."DOPCILINDRRAZMER" as "DopCilindrRazmer",
"Kluchevini_8"."NAME" as "FF_8",
"ZAYAVKINADVERI"."DOPKLUCHEVINACOUNT" as "DopKluchevinaCount",
"ZAYAVKINADVERI"."DOPKLUCHEVINAPRICE" as "DopKluchevinaPrice",
"ZAYAVKINADVERI"."DOPKLUCHEVINAAMOUNT" as "DopKluchevinaAmount",
"ZAYAVKINADVERI"."ISDOPKLUCHEVINAUTOPLENNAYA" as "IsDopKluchevinaUtoplennaya",
"ZAYAVKINADVERI"."DOPKLUCHEVINAUTOPLENNAYACOUNT" as "DopKluchevinaUtoplennayaCount",
"ZAYAVKINADVERI"."DOPKLUCHEVINAUTOPLENNAYAPRICE" as "DopKluchevinaUtoplennayaPrice",
"ZAYAVKINADVERI"."DOPKLUCHEVINAUTOPLENNAYAAMOUNT" as "DopKluchevinaUtoplennayaAmount",
"Ruchki_9"."NAME" as "FF_9",
"ZAYAVKINADVERI"."RUCHKACOUNT" as "RuchkaCount",
"ZAYAVKINADVERI"."RUCHKAPRICE" as "RuchkaPrice",
"ZAYAVKINADVERI"."RUCHKAAMOUNT" as "RuchkaAmount",
"ZAYAVKINADVERI"."ISTYAGI" as "IsTyagi",
"Zadvijki_10"."NAME" as "FF_10",
"ZAYAVKINADVERI"."ZADVIJKACOUNT" as "ZadvijkaCount",
"ZAYAVKINADVERI"."ZADVIJKAPRICE" as "ZadvijkaPrice",
"ZAYAVKINADVERI"."ZADVIJKAAMOUNT" as "ZadvijkaAmount",
"Glazki_11"."NAME" as "FF_11",
"ZAYAVKINADVERI"."GLAZOKCOUNT" as "GlazokCount",
"ZAYAVKINADVERI"."GLAZOKPRICE" as "GlazokPrice",
"ZAYAVKINADVERI"."GLAZOKAMOUNT" as "GlazokAmount",
"ZAYAVKINADVERI"."ISSKRITIESHARNIRI" as "IsSkritieSharniri",
"ZAYAVKINADVERI"."SKRITIESHARNIRIAMOUNT" as "SkritieSharniriAmount",
"ZAYAVKINADVERI"."ISDOPSTVORKA" as "IsDopStvorka",
"ZAYAVKINADVERI"."DOPSTVORKAAMOUNT" as "DopStvorkaAmount",
"ZAYAVKINADVERI"."ISVNUTROTKRIVANIE" as "IsVnutrOtkrivanie",
"ZAYAVKINADVERI"."VNUTROTKRIVANIEAMOUNT" as "VnutrOtkrivanieAmount",
"TorcevieShpingaleti_12"."NAME" as "FF_12",
"ZAYAVKINADVERI"."TORCEVIESHPINGALETIAMOUNT" as "TorcevieShpingaletiAmount",
"Dovodchiki_13"."NAME" as "FF_13",
"ZAYAVKINADVERI"."DOVODCHIKAMOUNT" as "DovodchikAmount",
"TipiUstanovkiDovodchika_14"."NAME" as "FF_14",
"ZAYAVKINADVERI"."TIPUSTANOVKIDOVODCHIKAAMOUNT" as "TipUstanovkiDovodchikaAmount",
"ZAYAVKINADVERI"."ITOGOZAFURNITURUIPROCHEEAMOUNT" as "ItogoZaFurnituruIProcheeAmount",
"ZAYAVKINADVERI"."ISMONTAJ" as "IsMontaj",
"ZAYAVKINADVERI"."MONTAJAMOUNT" as "MontajAmount",
"TipiDemontaja_15"."NAME" as "FF_15",
"ZAYAVKINADVERI"."TIPDEMONTAJAAMOUNT" as "TipDemontajaAmount",
"ZAYAVKINADVERI"."VSEGOZARABOTIAMOUNT" as "VsegoZaRabotiAmount",
"ZAYAVKINADVERI"."VSEGOAMOUNT" as "VsegoAmount",
"ZAYAVKINADVERI"."SKIDKANAIZDELIE" as "SkidkaNaIzdelie",
"ZAYAVKINADVERI"."ITOGOAMOUNT" as "ItogoAmount",
"ZAYAVKINADVERI"."ITOGOTEXT" as "ItogoText",
"ZAYAVKINADVERI"."PREDOPLATAAMOUNT" as "PredoplataAmount",
"ZAYAVKINADVERI"."KREPEJ" as "Krepej",
"ZAYAVKINADVERI"."DOPOLNITELNO" as "Dopolnitelno",
"ZAYAVKINADVERI"."SMI" as "SMI",
"ZAYAVKINADVERI"."SOZDATELID" as "SozdatelId",
"ZAYAVKINADVERI"."DATASOZDANIYA" as "DataSozdaniya",
"Broni_16"."NAME" as "FF_16",
"ZAYAVKINADVERI"."OSNBRONCOUNT" as "OsnBronCount",
"ZAYAVKINADVERI"."OSNBRONPRICE" as "OsnBronPrice",
"ZAYAVKINADVERI"."OSNBRONAMOUNT" as "OsnBronAmount",
"ZAYAVKINADVERI"."ISOSNBRONUTOPLENNAYA" as "IsOsnBronUtoplennaya",
"ZAYAVKINADVERI"."OSNBRONUTOPLENNAYACOUNT" as "OsnBronUtoplennayaCount",
"ZAYAVKINADVERI"."OSNBRONUTOPLENNAYAPRICE" as "OsnBronUtoplennayaPrice",
"ZAYAVKINADVERI"."OSNBRONUTOPLENNAYAAMOUNT" as "OsnBronUtoplennayaAmount",
"Broni_17"."NAME" as "FF_17",
"ZAYAVKINADVERI"."DOPBRONCOUNT" as "DopBronCount",
"ZAYAVKINADVERI"."DOPBRONPRICE" as "DopBronPrice",
"ZAYAVKINADVERI"."DOPBRONAMOUNT" as "DopBronAmount",
"ZAYAVKINADVERI"."ISDOPBRONUTOPLENNAYA" as "IsDopBronUtoplennaya",
"ZAYAVKINADVERI"."DOPBRONUTOPLENNAYACOUNT" as "DopBronUtoplennayaCount",
"ZAYAVKINADVERI"."DOPBRONUTOPLENNAYAPRICE" as "DopBronUtoplennayaPrice",
"ZAYAVKINADVERI"."DOPBRONUTOPLENNAYAAMOUNT" as "DopBronUtoplennayaAmount",
"ZAYAVKINADVERI"."ISPROSTOYPRITVOR" as "IsProstoyPritvor",
"ZAYAVKINADVERI"."PRICEID" as "PriceId",
"ZAYAVKINADVERI"."PROCHEEAMOUNT" as "ProcheeAmount",
"ZAYAVKINADVERI"."POSLEDNIYIZMENILID" as "PosledniyIzmenilId",
"ZAYAVKINADVERI"."DATAIZMENENIYA" as "DataIzmeneniya",
"Cveta_18"."NAME" as "FF_18",
"ZAYAVKINADVERI"."ISPOLOTNODOPPODGOTOVKA" as "IsPolotnoDopPodgotovka",
"ZAYAVKINADVERI"."ISPOLOTNOPOKRITIELAKOM" as "IsPolotnoPokritieLakom",
"ZAYAVKINADVERI"."ISPOLOTNOSHAGREN" as "IsPolotnoShagren",
"ZAYAVKINADVERI"."POLOTNODOPPODGOTOVKAAMOUNT" as "PolotnoDopPodgotovkaAmount",
"ZAYAVKINADVERI"."POLOTNOPOKRITIELAKOMAMOUNT" as "PolotnoPokritieLakomAmount",
"ZAYAVKINADVERI"."POLOTNOPOKRITIEAMOUNT" as "PolotnoPokritieAmount",
"Cveta_19"."NAME" as "FF_19",
"ZAYAVKINADVERI"."ISKOROBDOPPODGOTOVKA" as "IsKorobDopPodgotovka",
"ZAYAVKINADVERI"."ISKOROBPOKRITIELAKOM" as "IsKorobPokritieLakom",
"ZAYAVKINADVERI"."ISKOROBSHAGREN" as "IsKorobShagren",
"ZAYAVKINADVERI"."KOROBDOPPODGOTOVKAAMOUNT" as "KorobDopPodgotovkaAmount",
"ZAYAVKINADVERI"."KOROBPOKRITIELAKOMAMOUNT" as "KorobPokritieLakomAmount",
"ZAYAVKINADVERI"."KOROBPOKRITIEAMOUNT" as "KorobPokritieAmount",
"ZAYAVKINADVERI"."ISCVETKOROBAVCVETPOLOTNA" as "IsCvetKorobaVCvetPolotna",
"ZAYAVKINADVERI"."POKRITIEAMOUNT" as "PokritieAmount",
"Otdelka_22"."NAME" as "FF_20",
"Otdelka_22"."IDENT" as "FF_21",
"Otdelka_22"."ISSOBSTVENNIYCVETPOVERHNOSTI" as "FF_22",
"Cveta_23"."NAME" as "FF_23",
"PanelSides_21"."DRUGOICVETPOVERHNOSTIAMOUNT" as "FF_24",
"MaterialMdfPanelei_24"."NAME" as "FF_25",
"MaterialMdfPanelei_24"."PICTURE" as "FF_26",
"RisunkiFrezerovkiMdf_25"."NAME" as "FF_27",
"RisunkiFrezerovkiMdf_25"."PICTURE" as "FF_28",
"MaterialLdspPanelei_26"."NAME" as "FF_29",
"MaterialLdspPanelei_26"."PICTURE" as "FF_30",
"RisunkiFilenki_27"."NAME" as "FF_31",
"RisunkiFilenki_27"."PICTURE" as "FF_32",
"RisunkiFilenki_27"."IDENT" as "FF_33",
"PanelSides_21"."FILENKAESKIZZAKAZCHIKA" as "FF_34",
"PanelSides_21"."FILENKAESKIZZAKAZCHIKAAMOUNT" as "FF_35",
"RusunkiNakladok_28"."NAME" as "FF_36",
"RusunkiNakladok_28"."PICTURE" as "FF_37",
"Cveta_29"."NAME" as "FF_38",
"RisunkiPerforacii_30"."NAME" as "FF_39",
"RisunkiPerforacii_30"."PICTURE" as "FF_40",
"Cveta_31"."NAME" as "FF_41",
"RisunkiKovki_32"."NAME" as "FF_42",
"RisunkiKovki_32"."PICTURE" as "FF_43",
"RisunkiKovki_32"."IDENT" as "FF_44",
"PanelSides_21"."KOVKAVARIANTZKAZCHIKAOPISANIE" as "FF_45",
"PanelSides_21"."KOVKAVARIANTZAKAZCHIKAAMOUNT" as "FF_46",
"Cveta_33"."NAME" as "FF_47",
"PanelSides_21"."OTDELKAAMOUNT" as "FF_48",
"Otdelka_35"."NAME" as "FF_49",
"Otdelka_35"."IDENT" as "FF_50",
"Otdelka_35"."ISSOBSTVENNIYCVETPOVERHNOSTI" as "FF_51",
"Cveta_36"."NAME" as "FF_52",
"PanelSides_34"."DRUGOICVETPOVERHNOSTIAMOUNT" as "FF_53",
"MaterialMdfPanelei_37"."NAME" as "FF_54",
"MaterialMdfPanelei_37"."PICTURE" as "FF_55",
"RisunkiFrezerovkiMdf_38"."NAME" as "FF_56",
"RisunkiFrezerovkiMdf_38"."PICTURE" as "FF_57",
"MaterialLdspPanelei_39"."NAME" as "FF_58",
"MaterialLdspPanelei_39"."PICTURE" as "FF_59",
"RisunkiFilenki_40"."NAME" as "FF_60",
"RisunkiFilenki_40"."PICTURE" as "FF_61",
"RisunkiFilenki_40"."IDENT" as "FF_62",
"PanelSides_34"."FILENKAESKIZZAKAZCHIKA" as "FF_63",
"PanelSides_34"."FILENKAESKIZZAKAZCHIKAAMOUNT" as "FF_64",
"RusunkiNakladok_41"."NAME" as "FF_65",
"RusunkiNakladok_41"."PICTURE" as "FF_66",
"Cveta_42"."NAME" as "FF_67",
"RisunkiPerforacii_43"."NAME" as "FF_68",
"RisunkiPerforacii_43"."PICTURE" as "FF_69",
"Cveta_44"."NAME" as "FF_70",
"RisunkiKovki_45"."NAME" as "FF_71",
"RisunkiKovki_45"."PICTURE" as "FF_72",
"RisunkiKovki_45"."IDENT" as "FF_73",
"PanelSides_34"."KOVKAVARIANTZKAZCHIKAOPISANIE" as "FF_74",
"PanelSides_34"."KOVKAVARIANTZAKAZCHIKAAMOUNT" as "FF_75",
"Cveta_46"."NAME" as "FF_76",
"Cveta_46"."PRICEZADRUGOICVET" as "FF_77",
"Cveta_44"."PRICEZADRUGOICVET" as "FF_78",
"Cveta_42"."PRICEZADRUGOICVET" as "FF_79",
"Cveta_36"."PRICEZADRUGOICVET" as "FF_80",
"PanelSides_34"."OTDELKAAMOUNT" as "FF_81",
"Panels_20"."SHIRINA" as "FF_82",
"Panels_20"."VISOTA" as "FF_83",
"Panels_20"."PLOSHAD" as "FF_84",
"Panels_20"."STOIMOST" as "FF_85",
"Steklopaketi_47"."NAME" as "FF_86",
"Panels_20"."SHIRINASTEKLOPAKETA" as "FF_87",
"Panels_20"."VISOTASTEKLOPAKETA" as "FF_88",
"Panels_20"."STEKLOPAKETAMOUNT" as "FF_89",
"Otdelka_50"."NAME" as "FF_90",
"Otdelka_50"."IDENT" as "FF_91",
"Otdelka_50"."ISSOBSTVENNIYCVETPOVERHNOSTI" as "FF_92",
"Cveta_51"."NAME" as "FF_93",
"PanelSides_49"."DRUGOICVETPOVERHNOSTIAMOUNT" as "FF_94",
"MaterialMdfPanelei_52"."NAME" as "FF_95",
"MaterialMdfPanelei_52"."PICTURE" as "FF_96",
"RisunkiFrezerovkiMdf_53"."NAME" as "FF_97",
"RisunkiFrezerovkiMdf_53"."PICTURE" as "FF_98",
"MaterialLdspPanelei_54"."NAME" as "FF_99",
"MaterialLdspPanelei_54"."PICTURE" as "FF_100",
"RisunkiFilenki_55"."NAME" as "FF_101",
"RisunkiFilenki_55"."PICTURE" as "FF_102",
"RisunkiFilenki_55"."IDENT" as "FF_103",
"PanelSides_49"."FILENKAESKIZZAKAZCHIKA" as "FF_104",
"PanelSides_49"."FILENKAESKIZZAKAZCHIKAAMOUNT" as "FF_105",
"RusunkiNakladok_56"."NAME" as "FF_106",
"RusunkiNakladok_56"."PICTURE" as "FF_107",
"Cveta_57"."NAME" as "FF_108",
"RisunkiPerforacii_58"."NAME" as "FF_109",
"RisunkiPerforacii_58"."PICTURE" as "FF_110",
"Cveta_59"."NAME" as "FF_111",
"RisunkiKovki_60"."NAME" as "FF_112",
"RisunkiKovki_60"."PICTURE" as "FF_113",
"RisunkiKovki_60"."IDENT" as "FF_114",
"PanelSides_49"."KOVKAVARIANTZKAZCHIKAOPISANIE" as "FF_115",
"PanelSides_49"."KOVKAVARIANTZAKAZCHIKAAMOUNT" as "FF_116",
"Cveta_61"."NAME" as "FF_117",
"PanelSides_49"."OTDELKAAMOUNT" as "FF_118",
"Otdelka_63"."NAME" as "FF_119",
"Otdelka_63"."IDENT" as "FF_120",
"Otdelka_63"."ISSOBSTVENNIYCVETPOVERHNOSTI" as "FF_121",
"Cveta_64"."NAME" as "FF_122",
"PanelSides_62"."DRUGOICVETPOVERHNOSTIAMOUNT" as "FF_123",
"MaterialMdfPanelei_65"."NAME" as "FF_124",
"MaterialMdfPanelei_65"."PICTURE" as "FF_125",
"RisunkiFrezerovkiMdf_66"."NAME" as "FF_126",
"RisunkiFrezerovkiMdf_66"."PICTURE" as "FF_127",
"MaterialLdspPanelei_67"."NAME" as "FF_128",
"MaterialLdspPanelei_67"."PICTURE" as "FF_129",
"RisunkiFilenki_68"."NAME" as "FF_130",
"RisunkiFilenki_68"."PICTURE" as "FF_131",
"RisunkiFilenki_68"."IDENT" as "FF_132",
"PanelSides_62"."FILENKAESKIZZAKAZCHIKA" as "FF_133",
"PanelSides_62"."FILENKAESKIZZAKAZCHIKAAMOUNT" as "FF_134",
"RusunkiNakladok_69"."NAME" as "FF_135",
"RusunkiNakladok_69"."PICTURE" as "FF_136",
"Cveta_70"."NAME" as "FF_137",
"RisunkiPerforacii_71"."NAME" as "FF_138",
"RisunkiPerforacii_71"."PICTURE" as "FF_139",
"Cveta_72"."NAME" as "FF_140",
"RisunkiKovki_73"."NAME" as "FF_141",
"RisunkiKovki_73"."PICTURE" as "FF_142",
"RisunkiKovki_73"."IDENT" as "FF_143",
"PanelSides_62"."KOVKAVARIANTZKAZCHIKAOPISANIE" as "FF_144",
"PanelSides_62"."KOVKAVARIANTZAKAZCHIKAAMOUNT" as "FF_145",
"Cveta_74"."NAME" as "FF_146",
"Cveta_74"."PRICEZADRUGOICVET" as "FF_147",
"PanelSides_62"."OTDELKAAMOUNT" as "FF_148",
"Panels_48"."SHIRINA" as "FF_149",
"Panels_48"."VISOTA" as "FF_150",
"Panels_48"."PLOSHAD" as "FF_151",
"Panels_48"."STOIMOST" as "FF_152",
"Steklopaketi_75"."NAME" as "FF_153",
"Panels_48"."SHIRINASTEKLOPAKETA" as "FF_154",
"Panels_48"."VISOTASTEKLOPAKETA" as "FF_155",
"Panels_48"."STEKLOPAKETAMOUNT" as "FF_156",
"Otdelka_78"."NAME" as "FF_157",
"Otdelka_78"."IDENT" as "FF_158",
"Otdelka_78"."ISSOBSTVENNIYCVETPOVERHNOSTI" as "FF_159",
"Cveta_79"."NAME" as "FF_160",
"PanelSides_77"."DRUGOICVETPOVERHNOSTIAMOUNT" as "FF_161",
"MaterialMdfPanelei_80"."NAME" as "FF_162",
"MaterialMdfPanelei_80"."PICTURE" as "FF_163",
"RisunkiFrezerovkiMdf_81"."NAME" as "FF_164",
"RisunkiFrezerovkiMdf_81"."PICTURE" as "FF_165",
"MaterialLdspPanelei_82"."NAME" as "FF_166",
"MaterialLdspPanelei_82"."PICTURE" as "FF_167",
"RisunkiFilenki_83"."NAME" as "FF_168",
"RisunkiFilenki_83"."PICTURE" as "FF_169",
"RisunkiFilenki_83"."IDENT" as "FF_170",
"PanelSides_77"."FILENKAESKIZZAKAZCHIKA" as "FF_171",
"PanelSides_77"."FILENKAESKIZZAKAZCHIKAAMOUNT" as "FF_172",
"RusunkiNakladok_84"."NAME" as "FF_173",
"RusunkiNakladok_84"."PICTURE" as "FF_174",
"Cveta_85"."NAME" as "FF_175",
"RisunkiPerforacii_86"."NAME" as "FF_176",
"RisunkiPerforacii_86"."PICTURE" as "FF_177",
"Cveta_87"."NAME" as "FF_178",
"RisunkiKovki_88"."NAME" as "FF_179",
"RisunkiKovki_88"."PICTURE" as "FF_180",
"RisunkiKovki_88"."IDENT" as "FF_181",
"PanelSides_77"."KOVKAVARIANTZKAZCHIKAOPISANIE" as "FF_182",
"PanelSides_77"."KOVKAVARIANTZAKAZCHIKAAMOUNT" as "FF_183",
"Cveta_89"."NAME" as "FF_184",
"PanelSides_77"."OTDELKAAMOUNT" as "FF_185",
"Otdelka_91"."NAME" as "FF_186",
"Otdelka_91"."IDENT" as "FF_187",
"Otdelka_91"."ISSOBSTVENNIYCVETPOVERHNOSTI" as "FF_188",
"Cveta_92"."NAME" as "FF_189",
"PanelSides_90"."DRUGOICVETPOVERHNOSTIAMOUNT" as "FF_190",
"MaterialMdfPanelei_93"."NAME" as "FF_191",
"MaterialMdfPanelei_93"."PICTURE" as "FF_192",
"RisunkiFrezerovkiMdf_94"."NAME" as "FF_193",
"RisunkiFrezerovkiMdf_94"."PICTURE" as "FF_194",
"MaterialLdspPanelei_95"."NAME" as "FF_195",
"MaterialLdspPanelei_95"."PICTURE" as "FF_196",
"RisunkiFilenki_96"."NAME" as "FF_197",
"RisunkiFilenki_96"."PICTURE" as "FF_198",
"RisunkiFilenki_96"."IDENT" as "FF_199",
"PanelSides_90"."FILENKAESKIZZAKAZCHIKA" as "FF_200",
"PanelSides_90"."FILENKAESKIZZAKAZCHIKAAMOUNT" as "FF_201",
"RusunkiNakladok_97"."NAME" as "FF_202",
"RusunkiNakladok_97"."PICTURE" as "FF_203",
"Cveta_98"."NAME" as "FF_204",
"RisunkiPerforacii_99"."NAME" as "FF_205",
"RisunkiPerforacii_99"."PICTURE" as "FF_206",
"Cveta_100"."NAME" as "FF_207",
"RisunkiKovki_101"."NAME" as "FF_208",
"RisunkiKovki_101"."PICTURE" as "FF_209",
"RisunkiKovki_101"."IDENT" as "FF_210",
"PanelSides_90"."KOVKAVARIANTZKAZCHIKAOPISANIE" as "FF_211",
"PanelSides_90"."KOVKAVARIANTZAKAZCHIKAAMOUNT" as "FF_212",
"Cveta_102"."NAME" as "FF_213",
"Cveta_102"."PRICEZADRUGOICVET" as "FF_214",
"Cveta_100"."PRICEZADRUGOICVET" as "FF_215",
"Cveta_98"."PRICEZADRUGOICVET" as "FF_216",
"Cveta_92"."PRICEZADRUGOICVET" as "FF_217",
"PanelSides_90"."OTDELKAAMOUNT" as "FF_218",
"Panels_76"."SHIRINA" as "FF_219",
"Panels_76"."VISOTA" as "FF_220",
"Panels_76"."PLOSHAD" as "FF_221",
"Panels_76"."STOIMOST" as "FF_222",
"Steklopaketi_103"."NAME" as "FF_223",
"Panels_76"."SHIRINASTEKLOPAKETA" as "FF_224",
"Panels_76"."VISOTASTEKLOPAKETA" as "FF_225",
"Panels_76"."STEKLOPAKETAMOUNT" as "FF_226",
"Otdelka_106"."NAME" as "FF_227",
"Otdelka_106"."IDENT" as "FF_228",
"Otdelka_106"."ISSOBSTVENNIYCVETPOVERHNOSTI" as "FF_229",
"Cveta_107"."NAME" as "FF_230",
"PanelSides_105"."DRUGOICVETPOVERHNOSTIAMOUNT" as "FF_231",
"MaterialMdfPanelei_108"."NAME" as "FF_232",
"MaterialMdfPanelei_108"."PICTURE" as "FF_233",
"RisunkiFrezerovkiMdf_109"."NAME" as "FF_234",
"RisunkiFrezerovkiMdf_109"."PICTURE" as "FF_235",
"MaterialLdspPanelei_110"."NAME" as "FF_236",
"MaterialLdspPanelei_110"."PICTURE" as "FF_237",
"RisunkiFilenki_111"."NAME" as "FF_238",
"RisunkiFilenki_111"."PICTURE" as "FF_239",
"RisunkiFilenki_111"."IDENT" as "FF_240",
"PanelSides_105"."FILENKAESKIZZAKAZCHIKA" as "FF_241",
"PanelSides_105"."FILENKAESKIZZAKAZCHIKAAMOUNT" as "FF_242",
"RusunkiNakladok_112"."NAME" as "FF_243",
"RusunkiNakladok_112"."PICTURE" as "FF_244",
"Cveta_113"."NAME" as "FF_245",
"RisunkiPerforacii_114"."NAME" as "FF_246",
"RisunkiPerforacii_114"."PICTURE" as "FF_247",
"Cveta_115"."NAME" as "FF_248",
"RisunkiKovki_116"."NAME" as "FF_249",
"RisunkiKovki_116"."PICTURE" as "FF_250",
"RisunkiKovki_116"."IDENT" as "FF_251",
"PanelSides_105"."KOVKAVARIANTZKAZCHIKAOPISANIE" as "FF_252",
"PanelSides_105"."KOVKAVARIANTZAKAZCHIKAAMOUNT" as "FF_253",
"Cveta_117"."NAME" as "FF_254",
"PanelSides_105"."OTDELKAAMOUNT" as "FF_255",
"Otdelka_119"."NAME" as "FF_256",
"Otdelka_119"."IDENT" as "FF_257",
"Otdelka_119"."ISSOBSTVENNIYCVETPOVERHNOSTI" as "FF_258",
"Cveta_120"."NAME" as "FF_259",
"PanelSides_118"."DRUGOICVETPOVERHNOSTIAMOUNT" as "FF_260",
"MaterialMdfPanelei_121"."NAME" as "FF_261",
"MaterialMdfPanelei_121"."PICTURE" as "FF_262",
"RisunkiFrezerovkiMdf_122"."NAME" as "FF_263",
"RisunkiFrezerovkiMdf_122"."PICTURE" as "FF_264",
"MaterialLdspPanelei_123"."NAME" as "FF_265",
"MaterialLdspPanelei_123"."PICTURE" as "FF_266",
"RisunkiFilenki_124"."NAME" as "FF_267",
"RisunkiFilenki_124"."PICTURE" as "FF_268",
"RisunkiFilenki_124"."IDENT" as "FF_269",
"PanelSides_118"."FILENKAESKIZZAKAZCHIKA" as "FF_270",
"PanelSides_118"."FILENKAESKIZZAKAZCHIKAAMOUNT" as "FF_271",
"RusunkiNakladok_125"."NAME" as "FF_272",
"RusunkiNakladok_125"."PICTURE" as "FF_273",
"Cveta_126"."NAME" as "FF_274",
"RisunkiPerforacii_127"."NAME" as "FF_275",
"RisunkiPerforacii_127"."PICTURE" as "FF_276",
"Cveta_128"."NAME" as "FF_277",
"RisunkiKovki_129"."NAME" as "FF_278",
"RisunkiKovki_129"."PICTURE" as "FF_279",
"RisunkiKovki_129"."IDENT" as "FF_280",
"PanelSides_118"."KOVKAVARIANTZKAZCHIKAOPISANIE" as "FF_281",
"PanelSides_118"."KOVKAVARIANTZAKAZCHIKAAMOUNT" as "FF_282",
"Cveta_130"."NAME" as "FF_283",
"Cveta_130"."PRICEZADRUGOICVET" as "FF_284",
"Cveta_128"."PRICEZADRUGOICVET" as "FF_285",
"Cveta_126"."PRICEZADRUGOICVET" as "FF_286",
"Cveta_120"."PRICEZADRUGOICVET" as "FF_287",
"PanelSides_118"."OTDELKAAMOUNT" as "FF_288",
"Panels_104"."SHIRINA" as "FF_289",
"Panels_104"."VISOTA" as "FF_290",
"Panels_104"."PLOSHAD" as "FF_291",
"Panels_104"."STOIMOST" as "FF_292",
"Steklopaketi_131"."NAME" as "FF_293",
"Panels_104"."SHIRINASTEKLOPAKETA" as "FF_294",
"Panels_104"."VISOTASTEKLOPAKETA" as "FF_295",
"Panels_104"."STEKLOPAKETAMOUNT" as "FF_296",
"Otdelka_134"."NAME" as "FF_297",
"Otdelka_134"."IDENT" as "FF_298",
"Otdelka_134"."ISSOBSTVENNIYCVETPOVERHNOSTI" as "FF_299",
"Cveta_135"."NAME" as "FF_300",
"PanelSides_133"."DRUGOICVETPOVERHNOSTIAMOUNT" as "FF_301",
"MaterialMdfPanelei_136"."NAME" as "FF_302",
"MaterialMdfPanelei_136"."PICTURE" as "FF_303",
"RisunkiFrezerovkiMdf_137"."NAME" as "FF_304",
"RisunkiFrezerovkiMdf_137"."PICTURE" as "FF_305",
"MaterialLdspPanelei_138"."NAME" as "FF_306",
"MaterialLdspPanelei_138"."PICTURE" as "FF_307",
"RisunkiFilenki_139"."NAME" as "FF_308",
"RisunkiFilenki_139"."PICTURE" as "FF_309",
"RisunkiFilenki_139"."IDENT" as "FF_310",
"PanelSides_133"."FILENKAESKIZZAKAZCHIKA" as "FF_311",
"PanelSides_133"."FILENKAESKIZZAKAZCHIKAAMOUNT" as "FF_312",
"RusunkiNakladok_140"."NAME" as "FF_313",
"RusunkiNakladok_140"."PICTURE" as "FF_314",
"Cveta_141"."NAME" as "FF_315",
"RisunkiPerforacii_142"."NAME" as "FF_316",
"RisunkiPerforacii_142"."PICTURE" as "FF_317",
"Cveta_143"."NAME" as "FF_318",
"RisunkiKovki_144"."NAME" as "FF_319",
"RisunkiKovki_144"."PICTURE" as "FF_320",
"RisunkiKovki_144"."IDENT" as "FF_321",
"PanelSides_133"."KOVKAVARIANTZKAZCHIKAOPISANIE" as "FF_322",
"PanelSides_133"."KOVKAVARIANTZAKAZCHIKAAMOUNT" as "FF_323",
"Cveta_145"."NAME" as "FF_324",
"PanelSides_133"."OTDELKAAMOUNT" as "FF_325",
"Otdelka_147"."NAME" as "FF_326",
"Otdelka_147"."IDENT" as "FF_327",
"Otdelka_147"."ISSOBSTVENNIYCVETPOVERHNOSTI" as "FF_328",
"Cveta_148"."NAME" as "FF_329",
"PanelSides_146"."DRUGOICVETPOVERHNOSTIAMOUNT" as "FF_330",
"MaterialMdfPanelei_149"."NAME" as "FF_331",
"MaterialMdfPanelei_149"."PICTURE" as "FF_332",
"RisunkiFrezerovkiMdf_150"."NAME" as "FF_333",
"RisunkiFrezerovkiMdf_150"."PICTURE" as "FF_334",
"MaterialLdspPanelei_151"."NAME" as "FF_335",
"MaterialLdspPanelei_151"."PICTURE" as "FF_336",
"RisunkiFilenki_152"."NAME" as "FF_337",
"RisunkiFilenki_152"."PICTURE" as "FF_338",
"RisunkiFilenki_152"."IDENT" as "FF_339",
"PanelSides_146"."FILENKAESKIZZAKAZCHIKA" as "FF_340",
"PanelSides_146"."FILENKAESKIZZAKAZCHIKAAMOUNT" as "FF_341",
"RusunkiNakladok_153"."NAME" as "FF_342",
"RusunkiNakladok_153"."PICTURE" as "FF_343",
"Cveta_154"."NAME" as "FF_344",
"RisunkiPerforacii_155"."NAME" as "FF_345",
"RisunkiPerforacii_155"."PICTURE" as "FF_346",
"Cveta_156"."NAME" as "FF_347",
"RisunkiKovki_157"."NAME" as "FF_348",
"RisunkiKovki_157"."PICTURE" as "FF_349",
"RisunkiKovki_157"."IDENT" as "FF_350",
"PanelSides_146"."KOVKAVARIANTZKAZCHIKAOPISANIE" as "FF_351",
"PanelSides_146"."KOVKAVARIANTZAKAZCHIKAAMOUNT" as "FF_352",
"Cveta_158"."NAME" as "FF_353",
"Cveta_158"."PRICEZADRUGOICVET" as "FF_354",
"Cveta_156"."PRICEZADRUGOICVET" as "FF_355",
"Cveta_154"."PRICEZADRUGOICVET" as "FF_356",
"Cveta_148"."PRICEZADRUGOICVET" as "FF_357",
"PanelSides_146"."OTDELKAAMOUNT" as "FF_358",
"Panels_132"."SHIRINA" as "FF_359",
"Panels_132"."VISOTA" as "FF_360",
"Panels_132"."PLOSHAD" as "FF_361",
"Panels_132"."STOIMOST" as "FF_362",
"Steklopaketi_159"."NAME" as "FF_363",
"Panels_132"."SHIRINASTEKLOPAKETA" as "FF_364",
"Panels_132"."VISOTASTEKLOPAKETA" as "FF_365",
"Panels_132"."STEKLOPAKETAMOUNT" as "FF_366",
"PanelSides_21"."OTDELKAID" as "FF_367",
"PanelSides_34"."OTDELKAID" as "FF_368",
"PanelSides_49"."OTDELKAID" as "FF_369",
"PanelSides_62"."OTDELKAID" as "FF_370",
"PanelSides_77"."OTDELKAID" as "FF_371",
"PanelSides_90"."OTDELKAID" as "FF_372",
"PanelSides_105"."OTDELKAID" as "FF_373",
"PanelSides_118"."OTDELKAID" as "FF_374",
"PanelSides_133"."OTDELKAID" as "FF_375",
"PanelSides_146"."OTDELKAID" as "FF_376",
"ZAYAVKINADVERI"."ISLEVAYAFRAMUGA" as "IsLevayaFramuga",
"ZAYAVKINADVERI"."ISPRAVAYAFRAMUGA" as "IsPravayaFramuga",
"ZAYAVKINADVERI"."ISVERHFRAMUGA" as "IsVerhFramuga",
"Panels_20"."PLOSHADSTEKLOPAKETA" as "FF_377",
"Panels_48"."PLOSHADSTEKLOPAKETA" as "FF_378",
"Panels_76"."PLOSHADSTEKLOPAKETA" as "FF_379",
"Panels_104"."PLOSHADSTEKLOPAKETA" as "FF_380",
"Panels_132"."PLOSHADSTEKLOPAKETA" as "FF_381",
"Users_160"."Fio" as "FF_382",
"ZAYAVKINADVERI"."GLUBINAKOROBKI" as "GlubinaKorobki",
"ProfiliStoek_161"."ISTUPIK" as "FF_383",
"ProfiliStoek_161"."PICTURE" as "FF_384",
"ProfiliStoek_162"."ISTUPIK" as "FF_385",
"ProfiliStoek_162"."PICTURE" as "FF_386",
"ProfiliStoek_163"."ISTUPIK" as "FF_387",
"ProfiliStoek_163"."PICTURE" as "FF_388",
"ProfiliStoek_164"."ISTUPIK" as "FF_389",
"ProfiliStoek_164"."PICTURE" as "FF_390",
"ZAYAVKINADVERI"."ISULICASVERHU" as "IsUlicaSverhu",
"RisunkiDverei_165"."PICTURE" as "FF_391",
"ZAYAVKINADVERI"."ISVERHFRAMUGAAROCHNAYA" as "IsVerhFramugaArochnaya",
"ZAYAVKINADVERI"."KOLICHESTVOSHARNIROV" as "KolichestvoSharnirov",
"ZAYAVKINADVERI"."SHARNIRIAMOUNT" as "SharniriAmount",
"BroniSteklopaketa_166"."NAME" as "FF_392",
"BroniSteklopaketa_167"."NAME" as "FF_393",
"BroniSteklopaketa_168"."NAME" as "FF_394",
"BroniSteklopaketa_169"."NAME" as "FF_395",
"BroniSteklopaketa_170"."NAME" as "FF_396",
"DveriVRabote_171"."PROIZVNOMER" as "FF_397",
"Gerkoni_172"."NAME" as "FF_398",
"ZAYAVKINADVERI"."GERKONIAMOUNT" as "GerkoniAmount",
"Upakovka_173"."NAME" as "FF_399",
"ZAYAVKINADVERI"."UPAKOVKAAMOUNT" as "UpakovkaAmount",
"ZAYAVKINADVERI"."ISSHUMOIZOLACIA" as "IsShumoizolacia",
"ZAYAVKINADVERI"."SHUMOIZOLACIAAMOUNT" as "ShumoizolaciaAmount",
"ZAYAVKINADVERI"."ISGERMANSKIYUPLOTNITEL" as "IsGermanskiyUplotnitel",
"ZAYAVKINADVERI"."GERMANSKIYUPLOTNITELAMOUNT" as "GermanskiyUplotnitelAmount",
"Zvonki_174"."NAME" as "FF_400",
"ZAYAVKINADVERI"."ZVONOKAMOUNT" as "ZvonokAmount",
"ZAYAVKINADVERI"."ZVONOKNAVISOTE" as "ZvonokNaVisote",
"RazmeshenieZvonka_175"."NAME" as "FF_401",
"ZAYAVKINADVERI"."GLAZOKNAVISOTE" as "GlazokNaVisote",
"PanelSides_21"."ISMDFSZERKALNIMIVSTAVKAMI" as "FF_402",
"PanelSides_21"."ISMDFSCVETNIMIVSTAVKAMI" as "FF_403",
"PanelSides_34"."ISMDFSZERKALNIMIVSTAVKAMI" as "FF_404",
"PanelSides_34"."ISMDFSCVETNIMIVSTAVKAMI" as "FF_405",
"PanelSides_49"."ISMDFSZERKALNIMIVSTAVKAMI" as "FF_406",
"PanelSides_49"."ISMDFSCVETNIMIVSTAVKAMI" as "FF_407",
"PanelSides_62"."ISMDFSZERKALNIMIVSTAVKAMI" as "FF_408",
"PanelSides_62"."ISMDFSCVETNIMIVSTAVKAMI" as "FF_409",
"PanelSides_77"."ISMDFSZERKALNIMIVSTAVKAMI" as "FF_410",
"PanelSides_77"."ISMDFSCVETNIMIVSTAVKAMI" as "FF_411",
"PanelSides_90"."ISMDFSZERKALNIMIVSTAVKAMI" as "FF_412",
"PanelSides_90"."ISMDFSCVETNIMIVSTAVKAMI" as "FF_413",
"PanelSides_105"."ISMDFSZERKALNIMIVSTAVKAMI" as "FF_414",
"PanelSides_105"."ISMDFSCVETNIMIVSTAVKAMI" as "FF_415",
"PanelSides_118"."ISMDFSZERKALNIMIVSTAVKAMI" as "FF_416",
"PanelSides_118"."ISMDFSCVETNIMIVSTAVKAMI" as "FF_417",
"PanelSides_133"."ISMDFSZERKALNIMIVSTAVKAMI" as "FF_418",
"PanelSides_133"."ISMDFSCVETNIMIVSTAVKAMI" as "FF_419",
"PanelSides_146"."ISMDFSZERKALNIMIVSTAVKAMI" as "FF_420",
"PanelSides_146"."ISMDFSCVETNIMIVSTAVKAMI" as "FF_421",
"ZAYAVKINADVERI"."ISLEVAYAFRAMUGASJEMNAYA" as "IsLevayaFramugaSjemnaya",
"ZAYAVKINADVERI"."ISPRAVAYAFRAMUGASJEMNAYA" as "IsPravayaFramugaSjemnaya",
"ZAYAVKINADVERI"."ISVERHFRAMUGASJEMNAYA" as "IsVerhFramugaSjemnaya",
"ZAYAVKINADVERI"."ISMINERALNAYAPLITA" as "IsMineralnayaPlita",
"ZAYAVKINADVERI"."ISPOLOTNO80MM" as "IsPolotno80MM",
"ZAYAVKINADVERI"."POLOTNO80MMSTOIMOST" as "Polotno80MMStoimost"
from "ZAYAVKINADVERI"
left join "MODELIDVEREI" "ModeliDverei_1" on ("ModeliDverei_1".id = "ZAYAVKINADVERI"."MODELDVERIID")
left join "NAVESKI" "Naveski_2" on ("Naveski_2".id = "ZAYAVKINADVERI"."NAVESKAID")
left join "ZAMKI" "Zamki_3" on ("Zamki_3".id = "ZAYAVKINADVERI"."OSNZAMOKID")
left join "CILINDRI" "Cilindri_4" on ("Cilindri_4".id = "ZAYAVKINADVERI"."OSNCILINDRID")
left join "KLUCHEVINI" "Kluchevini_5" on ("Kluchevini_5".id = "ZAYAVKINADVERI"."OSNKLUCHEVINAID")
left join "ZAMKI" "Zamki_6" on ("Zamki_6".id = "ZAYAVKINADVERI"."DOPZAMOKID")
left join "CILINDRI" "Cilindri_7" on ("Cilindri_7".id = "ZAYAVKINADVERI"."DOPCILINDRID")
left join "KLUCHEVINI" "Kluchevini_8" on ("Kluchevini_8".id = "ZAYAVKINADVERI"."DOPKLUCHEVINAID")
left join "RUCHKI" "Ruchki_9" on ("Ruchki_9".id = "ZAYAVKINADVERI"."RUCHKAID")
left join "ZADVIJKI" "Zadvijki_10" on ("Zadvijki_10".id = "ZAYAVKINADVERI"."ZADVIJKAID")
left join "GLAZKI" "Glazki_11" on ("Glazki_11".id = "ZAYAVKINADVERI"."GLAZOKID")
left join "TORCEVIESHPINGALETI" "TorcevieShpingaleti_12" on ("TorcevieShpingaleti_12".id = "ZAYAVKINADVERI"."TORCEVIESHPINGALETIID")
left join "DOVODCHIKI" "Dovodchiki_13" on ("Dovodchiki_13".id = "ZAYAVKINADVERI"."DOVODCHIKID")
left join "TIPIUSTANOVKIDOVODCHIKA" "TipiUstanovkiDovodchika_14" on ("TipiUstanovkiDovodchika_14".id = "ZAYAVKINADVERI"."TIPUSTANOVKIDOVODCHIKAID")
left join "TIPIDEMONTAJA" "TipiDemontaja_15" on ("TipiDemontaja_15".id = "ZAYAVKINADVERI"."TIPDEMONTAJAID")
left join "BRONI" "Broni_16" on ("Broni_16".id = "ZAYAVKINADVERI"."OSNBRONID")
left join "BRONI" "Broni_17" on ("Broni_17".id = "ZAYAVKINADVERI"."DOPBRONID")
left join "CVETA" "Cveta_18" on ("Cveta_18".id = "ZAYAVKINADVERI"."CVETPOLOTNAID")
left join "CVETA" "Cveta_19" on ("Cveta_19".id = "ZAYAVKINADVERI"."CVETKOROBAID")
left join "PANELS" "Panels_20" on ("Panels_20".id = "ZAYAVKINADVERI"."OSNSTVORKAID")
left join "PANELSIDES" "PanelSides_21" on ("PanelSides_21".id = "Panels_20"."NARUJN")
left join "OTDELKA" "Otdelka_22" on ("Otdelka_22".id = "PanelSides_21"."OTDELKAID")
left join "CVETA" "Cveta_23" on ("Cveta_23".id = "PanelSides_21"."DRUGOICVETIDPOVERHNOSTI")
left join "MATERIALMDFPANELEI" "MaterialMdfPanelei_24" on ("MaterialMdfPanelei_24".id = "PanelSides_21"."MATERIALMDFPANELIID")
left join "RISUNKIFREZEROVKIMDF" "RisunkiFrezerovkiMdf_25" on ("RisunkiFrezerovkiMdf_25".id = "PanelSides_21"."RISUNOKFREZEROVKIMDFID")
left join "MATERIALLDSPPANELEI" "MaterialLdspPanelei_26" on ("MaterialLdspPanelei_26".id = "PanelSides_21"."MATERIALLDSPPANELIID")
left join "RISUNKIFILENKI" "RisunkiFilenki_27" on ("RisunkiFilenki_27".id = "PanelSides_21"."RISUNOKFILENKIID")
left join "RUSUNKINAKLADOK" "RusunkiNakladok_28" on ("RusunkiNakladok_28".id = "PanelSides_21"."RISUNOKNAKLADKIID")
left join "CVETA" "Cveta_29" on ("Cveta_29".id = "PanelSides_21"."CVETRISUNKANAKLADKIID")
left join "RISUNKIPERFORACII" "RisunkiPerforacii_30" on ("RisunkiPerforacii_30".id = "PanelSides_21"."RISUNOKPERFORACIIID")
left join "CVETA" "Cveta_31" on ("Cveta_31".id = "PanelSides_21"."CVETRISUNKAPERFORACIIID")
left join "RISUNKIKOVKI" "RisunkiKovki_32" on ("RisunkiKovki_32".id = "PanelSides_21"."RISUNOKKOVKIID")
left join "CVETA" "Cveta_33" on ("Cveta_33".id = "PanelSides_21"."CVETKOVKIID")
left join "PANELSIDES" "PanelSides_34" on ("PanelSides_34".id = "Panels_20"."VNUTR")
left join "OTDELKA" "Otdelka_35" on ("Otdelka_35".id = "PanelSides_34"."OTDELKAID")
left join "CVETA" "Cveta_36" on ("Cveta_36".id = "PanelSides_34"."DRUGOICVETIDPOVERHNOSTI")
left join "MATERIALMDFPANELEI" "MaterialMdfPanelei_37" on ("MaterialMdfPanelei_37".id = "PanelSides_34"."MATERIALMDFPANELIID")
left join "RISUNKIFREZEROVKIMDF" "RisunkiFrezerovkiMdf_38" on ("RisunkiFrezerovkiMdf_38".id = "PanelSides_34"."RISUNOKFREZEROVKIMDFID")
left join "MATERIALLDSPPANELEI" "MaterialLdspPanelei_39" on ("MaterialLdspPanelei_39".id = "PanelSides_34"."MATERIALLDSPPANELIID")
left join "RISUNKIFILENKI" "RisunkiFilenki_40" on ("RisunkiFilenki_40".id = "PanelSides_34"."RISUNOKFILENKIID")
left join "RUSUNKINAKLADOK" "RusunkiNakladok_41" on ("RusunkiNakladok_41".id = "PanelSides_34"."RISUNOKNAKLADKIID")
left join "CVETA" "Cveta_42" on ("Cveta_42".id = "PanelSides_34"."CVETRISUNKANAKLADKIID")
left join "RISUNKIPERFORACII" "RisunkiPerforacii_43" on ("RisunkiPerforacii_43".id = "PanelSides_34"."RISUNOKPERFORACIIID")
left join "CVETA" "Cveta_44" on ("Cveta_44".id = "PanelSides_34"."CVETRISUNKAPERFORACIIID")
left join "RISUNKIKOVKI" "RisunkiKovki_45" on ("RisunkiKovki_45".id = "PanelSides_34"."RISUNOKKOVKIID")
left join "CVETA" "Cveta_46" on ("Cveta_46".id = "PanelSides_34"."CVETKOVKIID")
left join "STEKLOPAKETI" "Steklopaketi_47" on ("Steklopaketi_47".id = "Panels_20"."STEKLOPAKETID")
left join "PANELS" "Panels_48" on ("Panels_48".id = "ZAYAVKINADVERI"."DOPSTVORKAID")
left join "PANELSIDES" "PanelSides_49" on ("PanelSides_49".id = "Panels_48"."NARUJN")
left join "OTDELKA" "Otdelka_50" on ("Otdelka_50".id = "PanelSides_49"."OTDELKAID")
left join "CVETA" "Cveta_51" on ("Cveta_51".id = "PanelSides_49"."DRUGOICVETIDPOVERHNOSTI")
left join "MATERIALMDFPANELEI" "MaterialMdfPanelei_52" on ("MaterialMdfPanelei_52".id = "PanelSides_49"."MATERIALMDFPANELIID")
left join "RISUNKIFREZEROVKIMDF" "RisunkiFrezerovkiMdf_53" on ("RisunkiFrezerovkiMdf_53".id = "PanelSides_49"."RISUNOKFREZEROVKIMDFID")
left join "MATERIALLDSPPANELEI" "MaterialLdspPanelei_54" on ("MaterialLdspPanelei_54".id = "PanelSides_49"."MATERIALLDSPPANELIID")
left join "RISUNKIFILENKI" "RisunkiFilenki_55" on ("RisunkiFilenki_55".id = "PanelSides_49"."RISUNOKFILENKIID")
left join "RUSUNKINAKLADOK" "RusunkiNakladok_56" on ("RusunkiNakladok_56".id = "PanelSides_49"."RISUNOKNAKLADKIID")
left join "CVETA" "Cveta_57" on ("Cveta_57".id = "PanelSides_49"."CVETRISUNKANAKLADKIID")
left join "RISUNKIPERFORACII" "RisunkiPerforacii_58" on ("RisunkiPerforacii_58".id = "PanelSides_49"."RISUNOKPERFORACIIID")
left join "CVETA" "Cveta_59" on ("Cveta_59".id = "PanelSides_49"."CVETRISUNKAPERFORACIIID")
left join "RISUNKIKOVKI" "RisunkiKovki_60" on ("RisunkiKovki_60".id = "PanelSides_49"."RISUNOKKOVKIID")
left join "CVETA" "Cveta_61" on ("Cveta_61".id = "PanelSides_49"."CVETKOVKIID")
left join "PANELSIDES" "PanelSides_62" on ("PanelSides_62".id = "Panels_48"."VNUTR")
left join "OTDELKA" "Otdelka_63" on ("Otdelka_63".id = "PanelSides_62"."OTDELKAID")
left join "CVETA" "Cveta_64" on ("Cveta_64".id = "PanelSides_62"."DRUGOICVETIDPOVERHNOSTI")
left join "MATERIALMDFPANELEI" "MaterialMdfPanelei_65" on ("MaterialMdfPanelei_65".id = "PanelSides_62"."MATERIALMDFPANELIID")
left join "RISUNKIFREZEROVKIMDF" "RisunkiFrezerovkiMdf_66" on ("RisunkiFrezerovkiMdf_66".id = "PanelSides_62"."RISUNOKFREZEROVKIMDFID")
left join "MATERIALLDSPPANELEI" "MaterialLdspPanelei_67" on ("MaterialLdspPanelei_67".id = "PanelSides_62"."MATERIALLDSPPANELIID")
left join "RISUNKIFILENKI" "RisunkiFilenki_68" on ("RisunkiFilenki_68".id = "PanelSides_62"."RISUNOKFILENKIID")
left join "RUSUNKINAKLADOK" "RusunkiNakladok_69" on ("RusunkiNakladok_69".id = "PanelSides_62"."RISUNOKNAKLADKIID")
left join "CVETA" "Cveta_70" on ("Cveta_70".id = "PanelSides_62"."CVETRISUNKANAKLADKIID")
left join "RISUNKIPERFORACII" "RisunkiPerforacii_71" on ("RisunkiPerforacii_71".id = "PanelSides_62"."RISUNOKPERFORACIIID")
left join "CVETA" "Cveta_72" on ("Cveta_72".id = "PanelSides_62"."CVETRISUNKAPERFORACIIID")
left join "RISUNKIKOVKI" "RisunkiKovki_73" on ("RisunkiKovki_73".id = "PanelSides_62"."RISUNOKKOVKIID")
left join "CVETA" "Cveta_74" on ("Cveta_74".id = "PanelSides_62"."CVETKOVKIID")
left join "STEKLOPAKETI" "Steklopaketi_75" on ("Steklopaketi_75".id = "Panels_48"."STEKLOPAKETID")
left join "PANELS" "Panels_76" on ("Panels_76".id = "ZAYAVKINADVERI"."LEVAYAFRAMUGAID")
left join "PANELSIDES" "PanelSides_77" on ("PanelSides_77".id = "Panels_76"."NARUJN")
left join "OTDELKA" "Otdelka_78" on ("Otdelka_78".id = "PanelSides_77"."OTDELKAID")
left join "CVETA" "Cveta_79" on ("Cveta_79".id = "PanelSides_77"."DRUGOICVETIDPOVERHNOSTI")
left join "MATERIALMDFPANELEI" "MaterialMdfPanelei_80" on ("MaterialMdfPanelei_80".id = "PanelSides_77"."MATERIALMDFPANELIID")
left join "RISUNKIFREZEROVKIMDF" "RisunkiFrezerovkiMdf_81" on ("RisunkiFrezerovkiMdf_81".id = "PanelSides_77"."RISUNOKFREZEROVKIMDFID")
left join "MATERIALLDSPPANELEI" "MaterialLdspPanelei_82" on ("MaterialLdspPanelei_82".id = "PanelSides_77"."MATERIALLDSPPANELIID")
left join "RISUNKIFILENKI" "RisunkiFilenki_83" on ("RisunkiFilenki_83".id = "PanelSides_77"."RISUNOKFILENKIID")
left join "RUSUNKINAKLADOK" "RusunkiNakladok_84" on ("RusunkiNakladok_84".id = "PanelSides_77"."RISUNOKNAKLADKIID")
left join "CVETA" "Cveta_85" on ("Cveta_85".id = "PanelSides_77"."CVETRISUNKANAKLADKIID")
left join "RISUNKIPERFORACII" "RisunkiPerforacii_86" on ("RisunkiPerforacii_86".id = "PanelSides_77"."RISUNOKPERFORACIIID")
left join "CVETA" "Cveta_87" on ("Cveta_87".id = "PanelSides_77"."CVETRISUNKAPERFORACIIID")
left join "RISUNKIKOVKI" "RisunkiKovki_88" on ("RisunkiKovki_88".id = "PanelSides_77"."RISUNOKKOVKIID")
left join "CVETA" "Cveta_89" on ("Cveta_89".id = "PanelSides_77"."CVETKOVKIID")
left join "PANELSIDES" "PanelSides_90" on ("PanelSides_90".id = "Panels_76"."VNUTR")
left join "OTDELKA" "Otdelka_91" on ("Otdelka_91".id = "PanelSides_90"."OTDELKAID")
left join "CVETA" "Cveta_92" on ("Cveta_92".id = "PanelSides_90"."DRUGOICVETIDPOVERHNOSTI")
left join "MATERIALMDFPANELEI" "MaterialMdfPanelei_93" on ("MaterialMdfPanelei_93".id = "PanelSides_90"."MATERIALMDFPANELIID")
left join "RISUNKIFREZEROVKIMDF" "RisunkiFrezerovkiMdf_94" on ("RisunkiFrezerovkiMdf_94".id = "PanelSides_90"."RISUNOKFREZEROVKIMDFID")
left join "MATERIALLDSPPANELEI" "MaterialLdspPanelei_95" on ("MaterialLdspPanelei_95".id = "PanelSides_90"."MATERIALLDSPPANELIID")
left join "RISUNKIFILENKI" "RisunkiFilenki_96" on ("RisunkiFilenki_96".id = "PanelSides_90"."RISUNOKFILENKIID")
left join "RUSUNKINAKLADOK" "RusunkiNakladok_97" on ("RusunkiNakladok_97".id = "PanelSides_90"."RISUNOKNAKLADKIID")
left join "CVETA" "Cveta_98" on ("Cveta_98".id = "PanelSides_90"."CVETRISUNKANAKLADKIID")
left join "RISUNKIPERFORACII" "RisunkiPerforacii_99" on ("RisunkiPerforacii_99".id = "PanelSides_90"."RISUNOKPERFORACIIID")
left join "CVETA" "Cveta_100" on ("Cveta_100".id = "PanelSides_90"."CVETRISUNKAPERFORACIIID")
left join "RISUNKIKOVKI" "RisunkiKovki_101" on ("RisunkiKovki_101".id = "PanelSides_90"."RISUNOKKOVKIID")
left join "CVETA" "Cveta_102" on ("Cveta_102".id = "PanelSides_90"."CVETKOVKIID")
left join "STEKLOPAKETI" "Steklopaketi_103" on ("Steklopaketi_103".id = "Panels_76"."STEKLOPAKETID")
left join "PANELS" "Panels_104" on ("Panels_104".id = "ZAYAVKINADVERI"."PRAVAYAFRAMUGAID")
left join "PANELSIDES" "PanelSides_105" on ("PanelSides_105".id = "Panels_104"."NARUJN")
left join "OTDELKA" "Otdelka_106" on ("Otdelka_106".id = "PanelSides_105"."OTDELKAID")
left join "CVETA" "Cveta_107" on ("Cveta_107".id = "PanelSides_105"."DRUGOICVETIDPOVERHNOSTI")
left join "MATERIALMDFPANELEI" "MaterialMdfPanelei_108" on ("MaterialMdfPanelei_108".id = "PanelSides_105"."MATERIALMDFPANELIID")
left join "RISUNKIFREZEROVKIMDF" "RisunkiFrezerovkiMdf_109" on ("RisunkiFrezerovkiMdf_109".id = "PanelSides_105"."RISUNOKFREZEROVKIMDFID")
left join "MATERIALLDSPPANELEI" "MaterialLdspPanelei_110" on ("MaterialLdspPanelei_110".id = "PanelSides_105"."MATERIALLDSPPANELIID")
left join "RISUNKIFILENKI" "RisunkiFilenki_111" on ("RisunkiFilenki_111".id = "PanelSides_105"."RISUNOKFILENKIID")
left join "RUSUNKINAKLADOK" "RusunkiNakladok_112" on ("RusunkiNakladok_112".id = "PanelSides_105"."RISUNOKNAKLADKIID")
left join "CVETA" "Cveta_113" on ("Cveta_113".id = "PanelSides_105"."CVETRISUNKANAKLADKIID")
left join "RISUNKIPERFORACII" "RisunkiPerforacii_114" on ("RisunkiPerforacii_114".id = "PanelSides_105"."RISUNOKPERFORACIIID")
left join "CVETA" "Cveta_115" on ("Cveta_115".id = "PanelSides_105"."CVETRISUNKAPERFORACIIID")
left join "RISUNKIKOVKI" "RisunkiKovki_116" on ("RisunkiKovki_116".id = "PanelSides_105"."RISUNOKKOVKIID")
left join "CVETA" "Cveta_117" on ("Cveta_117".id = "PanelSides_105"."CVETKOVKIID")
left join "PANELSIDES" "PanelSides_118" on ("PanelSides_118".id = "Panels_104"."VNUTR")
left join "OTDELKA" "Otdelka_119" on ("Otdelka_119".id = "PanelSides_118"."OTDELKAID")
left join "CVETA" "Cveta_120" on ("Cveta_120".id = "PanelSides_118"."DRUGOICVETIDPOVERHNOSTI")
left join "MATERIALMDFPANELEI" "MaterialMdfPanelei_121" on ("MaterialMdfPanelei_121".id = "PanelSides_118"."MATERIALMDFPANELIID")
left join "RISUNKIFREZEROVKIMDF" "RisunkiFrezerovkiMdf_122" on ("RisunkiFrezerovkiMdf_122".id = "PanelSides_118"."RISUNOKFREZEROVKIMDFID")
left join "MATERIALLDSPPANELEI" "MaterialLdspPanelei_123" on ("MaterialLdspPanelei_123".id = "PanelSides_118"."MATERIALLDSPPANELIID")
left join "RISUNKIFILENKI" "RisunkiFilenki_124" on ("RisunkiFilenki_124".id = "PanelSides_118"."RISUNOKFILENKIID")
left join "RUSUNKINAKLADOK" "RusunkiNakladok_125" on ("RusunkiNakladok_125".id = "PanelSides_118"."RISUNOKNAKLADKIID")
left join "CVETA" "Cveta_126" on ("Cveta_126".id = "PanelSides_118"."CVETRISUNKANAKLADKIID")
left join "RISUNKIPERFORACII" "RisunkiPerforacii_127" on ("RisunkiPerforacii_127".id = "PanelSides_118"."RISUNOKPERFORACIIID")
left join "CVETA" "Cveta_128" on ("Cveta_128".id = "PanelSides_118"."CVETRISUNKAPERFORACIIID")
left join "RISUNKIKOVKI" "RisunkiKovki_129" on ("RisunkiKovki_129".id = "PanelSides_118"."RISUNOKKOVKIID")
left join "CVETA" "Cveta_130" on ("Cveta_130".id = "PanelSides_118"."CVETKOVKIID")
left join "STEKLOPAKETI" "Steklopaketi_131" on ("Steklopaketi_131".id = "Panels_104"."STEKLOPAKETID")
left join "PANELS" "Panels_132" on ("Panels_132".id = "ZAYAVKINADVERI"."VERHFRAMUGAID")
left join "PANELSIDES" "PanelSides_133" on ("PanelSides_133".id = "Panels_132"."NARUJN")
left join "OTDELKA" "Otdelka_134" on ("Otdelka_134".id = "PanelSides_133"."OTDELKAID")
left join "CVETA" "Cveta_135" on ("Cveta_135".id = "PanelSides_133"."DRUGOICVETIDPOVERHNOSTI")
left join "MATERIALMDFPANELEI" "MaterialMdfPanelei_136" on ("MaterialMdfPanelei_136".id = "PanelSides_133"."MATERIALMDFPANELIID")
left join "RISUNKIFREZEROVKIMDF" "RisunkiFrezerovkiMdf_137" on ("RisunkiFrezerovkiMdf_137".id = "PanelSides_133"."RISUNOKFREZEROVKIMDFID")
left join "MATERIALLDSPPANELEI" "MaterialLdspPanelei_138" on ("MaterialLdspPanelei_138".id = "PanelSides_133"."MATERIALLDSPPANELIID")
left join "RISUNKIFILENKI" "RisunkiFilenki_139" on ("RisunkiFilenki_139".id = "PanelSides_133"."RISUNOKFILENKIID")
left join "RUSUNKINAKLADOK" "RusunkiNakladok_140" on ("RusunkiNakladok_140".id = "PanelSides_133"."RISUNOKNAKLADKIID")
left join "CVETA" "Cveta_141" on ("Cveta_141".id = "PanelSides_133"."CVETRISUNKANAKLADKIID")
left join "RISUNKIPERFORACII" "RisunkiPerforacii_142" on ("RisunkiPerforacii_142".id = "PanelSides_133"."RISUNOKPERFORACIIID")
left join "CVETA" "Cveta_143" on ("Cveta_143".id = "PanelSides_133"."CVETRISUNKAPERFORACIIID")
left join "RISUNKIKOVKI" "RisunkiKovki_144" on ("RisunkiKovki_144".id = "PanelSides_133"."RISUNOKKOVKIID")
left join "CVETA" "Cveta_145" on ("Cveta_145".id = "PanelSides_133"."CVETKOVKIID")
left join "PANELSIDES" "PanelSides_146" on ("PanelSides_146".id = "Panels_132"."VNUTR")
left join "OTDELKA" "Otdelka_147" on ("Otdelka_147".id = "PanelSides_146"."OTDELKAID")
left join "CVETA" "Cveta_148" on ("Cveta_148".id = "PanelSides_146"."DRUGOICVETIDPOVERHNOSTI")
left join "MATERIALMDFPANELEI" "MaterialMdfPanelei_149" on ("MaterialMdfPanelei_149".id = "PanelSides_146"."MATERIALMDFPANELIID")
left join "RISUNKIFREZEROVKIMDF" "RisunkiFrezerovkiMdf_150" on ("RisunkiFrezerovkiMdf_150".id = "PanelSides_146"."RISUNOKFREZEROVKIMDFID")
left join "MATERIALLDSPPANELEI" "MaterialLdspPanelei_151" on ("MaterialLdspPanelei_151".id = "PanelSides_146"."MATERIALLDSPPANELIID")
left join "RISUNKIFILENKI" "RisunkiFilenki_152" on ("RisunkiFilenki_152".id = "PanelSides_146"."RISUNOKFILENKIID")
left join "RUSUNKINAKLADOK" "RusunkiNakladok_153" on ("RusunkiNakladok_153".id = "PanelSides_146"."RISUNOKNAKLADKIID")
left join "CVETA" "Cveta_154" on ("Cveta_154".id = "PanelSides_146"."CVETRISUNKANAKLADKIID")
left join "RISUNKIPERFORACII" "RisunkiPerforacii_155" on ("RisunkiPerforacii_155".id = "PanelSides_146"."RISUNOKPERFORACIIID")
left join "CVETA" "Cveta_156" on ("Cveta_156".id = "PanelSides_146"."CVETRISUNKAPERFORACIIID")
left join "RISUNKIKOVKI" "RisunkiKovki_157" on ("RisunkiKovki_157".id = "PanelSides_146"."RISUNOKKOVKIID")
left join "CVETA" "Cveta_158" on ("Cveta_158".id = "PanelSides_146"."CVETKOVKIID")
left join "STEKLOPAKETI" "Steklopaketi_159" on ("Steklopaketi_159".id = "Panels_132"."STEKLOPAKETID")
left join "Users" "Users_160" on ("Users_160".id = "ZAYAVKINADVERI"."SOZDATELID")
left join "PROFILISTOEK" "ProfiliStoek_161" on ("ProfiliStoek_161".id = "ZAYAVKINADVERI"."PROFILLEVOISTOIKIID")
left join "PROFILISTOEK" "ProfiliStoek_162" on ("ProfiliStoek_162".id = "ZAYAVKINADVERI"."PROFILPRAVOISTOIKIID")
left join "PROFILISTOEK" "ProfiliStoek_163" on ("ProfiliStoek_163".id = "ZAYAVKINADVERI"."PROFILVERHNEISTOIKIID")
left join "PROFILISTOEK" "ProfiliStoek_164" on ("ProfiliStoek_164".id = "ZAYAVKINADVERI"."PROFILNIJNEISTOIKIID")
left join "RISUNKIDVEREI" "RisunkiDverei_165" on ("RisunkiDverei_165".id = "ZAYAVKINADVERI"."RISUNOKDVERIID")
left join "BRONISTEKLOPAKETA" "BroniSteklopaketa_166" on ("BroniSteklopaketa_166".id = "Panels_20"."BRONSTEKLOPAKETAID")
left join "BRONISTEKLOPAKETA" "BroniSteklopaketa_167" on ("BroniSteklopaketa_167".id = "Panels_48"."BRONSTEKLOPAKETAID")
left join "BRONISTEKLOPAKETA" "BroniSteklopaketa_168" on ("BroniSteklopaketa_168".id = "Panels_76"."BRONSTEKLOPAKETAID")
left join "BRONISTEKLOPAKETA" "BroniSteklopaketa_169" on ("BroniSteklopaketa_169".id = "Panels_104"."BRONSTEKLOPAKETAID")
left join "BRONISTEKLOPAKETA" "BroniSteklopaketa_170" on ("BroniSteklopaketa_170".id = "Panels_132"."BRONSTEKLOPAKETAID")
left join "DVERIVRABOTE" "DveriVRabote_171" on ("DveriVRabote_171".id = "ZAYAVKINADVERI"."DVERIVRABOTEID")
left join "GERKONI" "Gerkoni_172" on ("Gerkoni_172".id = "ZAYAVKINADVERI"."GERKONIID")
left join "UPAKOVKA" "Upakovka_173" on ("Upakovka_173".id = "ZAYAVKINADVERI"."UPAKOVKAID")
left join "ZVONKI" "Zvonki_174" on ("Zvonki_174".id = "ZAYAVKINADVERI"."ZVONOKID")
left join "RAZMESHENIEZVONKA" "RazmeshenieZvonka_175" on ("RazmeshenieZvonka_175".id = "ZAYAVKINADVERI"."RAZMESHENIEZVONKAID")
where ("ZAYAVKINADVERI"."ID" = :Id0)



Запрашиваются не все поля, а только те, которые нужны для печати одного единственного листа. SQL генерируется не ручками.
Я вас так же уверяю, что форма ввода всего этого сделана вполне удобно.
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38500977
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDee> В скобках ссылки на справочники. Т.е. у нас имеется 12 ссылок на справочники.
NickDee> И это только для одной стороны панели. итого: 120 ссылок на справочники

Во-первых, у меня такой арифметики не получилось, но не суть.
Во-вторых, если сторон две, то логичнее было бы и выводить
(и соответственно, получать и даже хранить, наверное) их в 2
строки, а не в одну шириной в 120 полей, тем более в гриде,
отчете и т.д. В-третьих, сущностей у тебя таки не одна плоская,
а много вложенных, которые ты хранишь как одну (я не имею
в виду, что это неправильно, но тем не менее). Впрочем, я не
разбираюсь в мебельной отрасли, вам там виднее.

> то получается 120 джойнов.
> И это без учёта всех остальных характеристик двери (там ещё около 200 полей).

120, не 500. И даже не 250. И я с трудом представляю, что там
можно описать ещё в 200 атрибутах. Даже с учётом фурнитуры
и пр. - это очень постараться такую кривизну налабать, ИМХО.

> Вот тут (15256277) я говорил про 175 джойнов и размер запроса в 45 килобайт.
> Вот этот запрос, для печати документа (вдохните поглубже :) ):

Какой ужас. :) Хоть и не "ужас, ужас!" (с) Автосгенерён?

> Я вас так же уверяю, что форма ввода всего этого сделана вполне удобно.

В 500 комбобоксов?

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38501046
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамNickDee> В скобках ссылки на справочники. Т.е. у нас имеется 12 ссылок на справочники.
NickDee> И это только для одной стороны панели. итого: 120 ссылок на справочники

Во-первых, у меня такой арифметики не получилось, но не суть.
12 FK на одну сторону панели * 2 соторны * 5 панелей = 120

Гаджимурадов РустамВо-вторых, если сторон две, то логичнее было бы и выводить
(и соответственно, получать и даже хранить, наверное) их в 2
строки, а не в одну шириной в 120 полей, тем более в гриде,
отчете и т.д.
Они не хранятся в 1 строку. Но селектятся одним запросом. Посмотри внимательней :)

Гаджимурадов РустамВ-третьих, сущностей у тебя таки не одна плоская,
а много вложенных, которые ты хранишь как одну (я не имею
в виду, что это неправильно, но тем не менее).
Сущность таки одна плоская, но хранится в нескольких таблицах :)

Гаджимурадов Рустам> то получается 120 джойнов.
> И это без учёта всех остальных характеристик двери (там ещё около 200 полей).

120, не 500. И даже не 250. И я с трудом представляю, что там
можно описать ещё в 200 атрибутах. Даже с учётом фурнитуры
и пр. - это очень постараться такую кривизну налабать, ИМХО.
Дело не в кривизне, а в количестве атрибутов. Или ты считаешь что я буду вводить и обрабатывать неиспользуемые атрибуты? :)

Гаджимурадов Рустам> Вот тут (15256277) я говорил про 175 джойнов и размер запроса в 45 килобайт.
> Вот этот запрос, для печати документа (вдохните поглубже :) ):

Какой ужас. :) Хоть и не "ужас, ужас!" (с) Автосгенерён?
А что делать? Много полей, да.

Гаджимурадов Рустам> Я вас так же уверяю, что форма ввода всего этого сделана вполне удобно.

В 500 комбобоксов?
В 146 :)
Это опять же повезло что у дверей не так много параметров (т.е. в рамках ограничений ФБ) :) Но они имеют тенденцию добавляться...
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38501047
miwaonline
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDeeГаджимурадов Рустам> Я вас так же уверяю, что форма ввода всего этого сделана вполне удобно.

В 500 комбобоксов?
В 146 :)

Скриншот такого счастья можно посмотреть? Ну, для себя, чисто с целью общего развития интересуюсь.
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38501054
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miwaonlineNickDeeпропущено...
В 146 :)

Скриншот такого счастья можно посмотреть? Ну, для себя, чисто с целью общего развития интересуюсь.
Всё на экран конечно не входит. Вот про створки. Если прокрутить ниже - там фурнитура и пр. Думаю подход понятен :)
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38501058
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот ещё один...
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38501116
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDee,

открой для себя иерархии. Жизнь изменится. И 100500 джойнов будут вызывать саркастический смех, как и у всех остальных.
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38501130
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDee> 12 FK на одну сторону панели * 2 соторны * 5 панелей = 120

Я не про то, что 12*2*5 = 120, с арифметикой у меня всё в порядке.
Я про то, как и откуда эти 12, 2 и 5 берутся, хранятся и умножаются.
Но, повторюсь, спорить не собираюсь, не моя область.

> Они не хранятся в 1 строку. Но селектятся одним запросом.

Так это твои проблемы. Я тоже могу кучу запросов придумать,
которые не уложатся в ограничения, при том, что хранятся они
вполне нормально. Селектить надо то, что нужно, а не всё, что можно.

> Сущность таки одна плоская, но хранится в нескольких таблицах :)

RTFM плоские/вложенные сущности.

> Дело не в кривизне, а в количестве атрибутов. Или ты считаешь
> что я буду вводить и обрабатывать неиспользуемые атрибуты? :)

Я, честно говоря, уже не удивился бы и этому от тебя.
Кривизна - в способе хранения, получения, вывода и
обработки этих атрибутов. А сама дверь или что там у
тебя ни в чём не виновата, конечно.

Насчёт скриншотов - во-первых, скопипасть их в
соотв. топик про интерфейсы, плиз. Во-вторых,
лично меня очень не впечатлило, тем более такой
длинной простыней - это 100% неудобно, что бы
тебе (или ты сам себе) ни говорили пользователи.
Открой для себя (и для них) иерархию - будь-то
плоские вкладки, древовидный интерфейс или
вложенные формы редактирования.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38501173
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladNickDee,

открой для себя иерархии.
Я знаю много иерархий. Ты про какие? :)
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38501176
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамОткрой для себя (и для них) иерархию - будь-то
плоские вкладки, древовидный интерфейс или
вложенные формы редактирования.

Ну вот ты начинаешь учить :)
Представь что я всё это уже сделал. От этого структура БД должна поменяться? Или я должен делать несколько селектов чтобы вытащить на клиента дверь? Нет. Один селект тут наиболее уместен и эффективен.
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38501184
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустамтем более такой длинной простыней - это 100% неудобно
А форум читать удобно? :)
Все данные прокручиваются за три-четыре прикосновения к колесу мыши.
Вообще я в жизни много разных интерфейсов делал. И с табами, и с деревьями. Тут вот решил с прокруткой сделать, и не прогадал.

Кстати этот интерфейс полностью задизайнен встроенными в систему средствами.
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38501192
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDee> Ну вот ты начинаешь учить :)

А ты уже учёный? :) Не учись, если не хочешь, я не настаиваю. :)

> Представь что я всё это уже сделал. От этого структура БД должна поменяться?
> Или я должен делать несколько селектов чтобы вытащить на клиента дверь? Нет.

Вполне возможно. Когда есть большая сущность, тем более
сложная, состоящая из сущностей поменьше, то не всегда и
даже в большинстве случаев её не факт, что стоит выводить
и тем паче редактировать одним большим селектом и окном.

В случае, если пользователь хочет поменять один небольшой
атрибут - ему вряд ли нужны все остальные 200 атрибутов,
тем более никак не связанные с его интересующим. Если ты
хочешь поменять полики в машине - ты ведь не собираешься
мотор разбирать, надеюсь? :) Представляю, что было бы, если
на приёмё у стоматолога ещё и проктологию с урологией
предлагали лечить за одно. А что? Сущность-то одна.

> Один селект тут наиболее уместен и эффективен.

Вот откуда такая уверенность про наиболее? :) Ты вообще
какие-нибудь другие пробовал (пользователи видели) ?

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38501196
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDee> А форум читать удобно? :)

Когда как. Не всегда. Но форум - это во-первых,
Web-интерфейс, а не GUI, что 2 большие разницы.
Во-вторых, форум я именно читаю, а не редактирую
всю эту простыню, редактирование делается проще.

> Все данные прокручиваются за три-четыре прикосновения к колесу мыши.

Прокрутка прокрутке рознь. Когда однородные
элементы прокручиваются (эдиты и комбобоксы) -
это одно, а когда в глазах рябит от адской смеси
эдитов, комбобоксов, радиобаттонов и всё это
перемежается картинками и панелями - это совсем
другое дело. Хорошо хоть панели сворачиваются.
Кстати, это как-нибудь настраивается/запоминается?

> Тут вот решил с прокруткой сделать, и не прогадал.

С чего ты решил, что не прогадал? Ты может и не
прогадал, не стал париться. А вот пользователи ?

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38501198
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамВот откуда такая уверенность про наиболее? :) Ты вообще
какие-нибудь другие пробовал (пользователи видели) ?

Я давно программы пишу, и всяко разно делал :)
Есть у мнея в этой же программе и формы с табами. Там, где я посчитал это уместным :)
Пользователи, если им что-то не удобно, обычно говорят. И я исправляю.
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38501200
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамКстати, это как-нибудь настраивается/запоминается?
Запоминается :)
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38501205
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDee> Есть у мнея в этой же программе и формы с табами.
NickDee> Пользователи, если им что-то не удобно, обычно говорят

Ну, если и пользователям пофиг, и тебе
на них плевать - мне тем более, сдаюсь.

NickDee> > Кстати, это как-нибудь настраивается/запоминается?
>
> Запоминается :)

Аминь, хоть это нормально. А для разных
типов/видов дверей всё равно все блоки
выводятся/отображаются или адаптивно?
Или разных типов/видов нет и это только
внутри настраивается?

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38501233
fd00ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovNickDeeПользователь в гриде выделял записи, и я их для групповой обработки вставлял в "where ID in (...)".Потому что использовать для этого временную таблицу у тебя не хватило... чего?вброшу немного: если у меня двухзвенка и лаг между клиентом и сервером 100 мс - как максимально быстро создать эту временную таблицу из хотя бы 10 тыс строк?

у ТСа, я так понял, уже 2 варианта есть:
- трхзвенка, где сервер приложений может принять от клиента тупо 10000*SizeOf(ID) бинарных данных и разбить их на ID для быстрой вставки в _локальную_ базу
- собственные UDF, которые принимают аналогичный блоб (костыль сервера подпирается своим костылем)
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38501239
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамNickDee> Есть у мнея в этой же программе и формы с табами.
NickDee> Пользователи, если им что-то не удобно, обычно говорят

Ну, если и пользователям пофиг, и тебе
на них плевать - мне тем более, сдаюсь.
Если бы мне было плевать, я бы не смог писать для них.

Гаджимурадов РустамNickDee> > Кстати, это как-нибудь настраивается/запоминается?
>
> Запоминается :)

Аминь, хоть это нормально. А для разных
типов/видов дверей всё равно все блоки
выводятся/отображаются или адаптивно?
Или разных типов/видов нет и это только
внутри настраивается?
У некоторых моделей нет фрамуг или дополнительной створки. В некоторых не может быть стеклопакета (например в противопожарной). Всё что не может быть, то прячется или дизаблится.
Заказчик сам настраивает что у конкретной модели может быть, а что нет.

Твоя совесть хоть немного удовлетворена? :) А то я стараюсь, отвечаю :)
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38501316
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fd00chесли у меня двухзвенка и лаг между клиентом и сервером 100 мс - как максимально быстро создать эту временную таблицу из хотя бы 10 тыс строк?
Ты в любом случае не сможешь её создать быстрее, чем пользователь тыкает в мышкой. А он это делает реже чем пять раз в секунду, так что делай запросы в отдельном потоке и задержек никто не заметит.
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38501318
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDeeУ некоторых моделей нет фрамуг или дополнительной створки. В некоторых не может быть стеклопакета (например в противопожарной). Всё что не может быть, то прячется или дизаблится.
Заказчик сам настраивает что у конкретной модели может быть, а что нет.
А тебе не приходила в голову идея сделать для этого графический интерфейс? Чтобы заказчик редактировал нарисованную дверь и сразу видел как его изменения на неё повлияют.
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38501322
fd00ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovТы в любом случае не сможешь её создать быстрее, чем пользователь тыкает в мышкой. А он это делает реже чем пять раз в секунду, так что делай запросы в отдельном потоке и задержек никто не заметит.слишком натянутое предложение. мало того, что геморная реализация понадобится, так еще и невозможно делать групповые операции (выделить все, ничего, инвертировать или тупо выделить кучку строк, используя Shift/Ctrl и инвертировать чекбоксы, нажав на Space). ну и потом, не всегда ж юзер выбирает ID в списке по одному и не всегда полученные по этим ID строки юзер внимательно просматривает по одной.
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38501342
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fd00chмало того, что геморная реализация понадобится, так еще и невозможно делать групповые операции (выделить все, ничего, инвертировать или тупо выделить кучку строк, используя Shift/Ctrl и инвертировать чекбоксы, нажав на Space).Что там геморройного в реализации-то? Один старт потока, обложенного крит.секцией на каждое изменение статуса.
И в чём проблема с групповыми операциями-то? Всего-то послать запрос "insert select" для "выделить всё" да "delete без условия" для "ничего". Инвертирование, конечно, похитрее будет, чтобы сделать его одним запросом нужно "merge delete", которое появилось только в тройке. С Ctrl строки всё равно выделяются по одной, Shift сам по себе геморроен с использовании при выделении большего количества чем видно на экране, так что проблем не создаст если наладить user-friendly feedback (например, расставлять чек-боксы в списке только после успешной отправки запроса - получится забавная анимация и прогресс-бар в одном флаконе).
Если бы мне пришлось делать интерфейс стиля списков при латентной сети, я бы делал его именно так (в случае если просто часики на время выполнения операции не прокатят).

fd00chне всегда ж юзер выбирает ID в списке по одному и не всегда полученные по этим ID строки юзер внимательно просматривает по одной.
А как тогда он их выбирает и просматривает?
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38501372
fd00ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovЕсли бы мне пришлось делать интерфейс стиля списков при латентной сети, я бы делал его именно так (в случае если просто часики на время выполнения операции не прокатят).я лучше блобом массив ID буду передавать и сделаю udf для разворачивания этого блоба в таблицу, чем такой кудрявый метод

Dimitry SibiryakovА как тогда он их выбирает и просматривает?он задает критерии в фильтре - получает число строк (список ID). думает от минуты до месяца и посылает команду на экспорт этих ID.
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38501377
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fd00chон задает критерии в фильтре
Так в чём проблема отослать на сервер один запрос с этими критериями?
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38501380
fd00ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovТак в чём проблема отослать на сервер один запрос с этими критериями?через минуту/месяц, пока юзер думает/платит, некоторые записи будут неактуальны, какие-то - добавлены. повторно тот же результат не получить
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38501384
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fd00chчерез минуту/месяц, пока юзер думает/платит, некоторые записи будут неактуальны, какие-то - добавлены. повторно тот же результат не получить
В транзакции уровня concurency - легко!
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38501390
fd00ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov, и сколько мне ее держать открытой, если юзер не захочет этот кусок экспортировать, а запросит новый с другими критериями - пока сервер не перезагрузится?
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38501423
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fd00chи сколько мне ее держать открытой, если юзер не захочет этот кусок экспортировать, а запросит новый с другими критериями - пока сервер не перезагрузится?
Пока список, из которого пользователь выбирает, не обновится. Если список как раз и формируется по критериям, то аккорат до "запросит новый с другими критериями". По-моему так.
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38501428
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovNickDeeУ некоторых моделей нет фрамуг или дополнительной створки. В некоторых не может быть стеклопакета (например в противопожарной). Всё что не может быть, то прячется или дизаблится.
Заказчик сам настраивает что у конкретной модели может быть, а что нет.
А тебе не приходила в голову идея сделать для этого графический интерфейс? Чтобы заказчик редактировал нарисованную дверь и сразу видел как его изменения на неё повлияют.
Если бы это был коробочный продукт для дверных компаний, то я бы многое переделал. А так - это проект на заказ для одной компании, на два месяца работы и с ограниченным бюджетом.
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38501702
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDee> Всё что не может быть, то прячется или дизаблится.
NickDee> Заказчик сам настраивает что у конкретной модели может быть, а что нет.

Гут.

NickDee> Твоя совесть хоть немного удовлетворена? :) А то я стараюсь, отвечаю :)

Более или менее. :) Если ты и твои пользователи всем довольны -
я рад за вас, так что забей. Просто они могли быть ещё довольнее.
Это тот случай, когда игра (повышение удобства), судя по всему,
стоит свеч - я бы улучшал. Но если всё уже работает и все уже к
этому "длинному" интерфейсу привыкли - можно и оставить.
Но изначально было сделано неправильно (неудобно), ИМХО.
...
Рейтинг: 0 / 0
500 джойнов и IN
    #38501703
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDee> А так - это проект на заказ для одной компании,
NickDee> на два месяца работы и с ограниченным бюджетом.

Неплохо. Хотя, если это не с нуля, а на конструкторе - ХЗ.
...
Рейтинг: 0 / 0
88 сообщений из 88, показаны все 4 страниц
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / 500 джойнов и IN
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]