Имя: Пароль:
1C
1С v8
Запросы в файловой базе
, ,
0 MrAvPika
 
16.01.17
18:00
Кто нибудь может подсказать как ускорить запрос на файловой отрабатывает минуту, а на клиент серверной архитектуре секунд 5, может есть то, что не стоит использовать в запросах к файловой базе?
1 mehfk
 
16.01.17
18:01
Не исключено.
2 Волшебник
 
модератор
16.01.17
18:03
Файловый режим работы 1С не предназначен для реальной работы, тем более многопользовательской с запросами в стиле клиент-сервер.
3 MrAvPika
 
16.01.17
18:07
(2)  я понимаю, не будет много пользователей, да и запрос в принципе простой, просто совмещение остатков с ценами и штрихкодами
4 MrAvPika
 
16.01.17
18:07
Некоторые запросы выполняются достаточно быстро
5 Jump
 
16.01.17
18:08
(2) Где это написано что он не предназначен?
Как это согласуется с тем что они его продают для реальной работы, и не указывают при этом что он для тестирования?
А так же с тем что подавляющее большинство работает именно на файловой версии?
6 Волшебник
 
модератор
16.01.17
18:09
(5) Кругом обман...
7 Jump
 
16.01.17
18:10
(0) Пользователей одновременно сидящих в базе сколько? Как идет работа с файловой базой - локально, по сети, характеристики сети?
9 MrAvPika
 
16.01.17
18:11
(7) Локально, один пользователь
10 MrAvPika
 
16.01.17
18:12
Да в некоторых моментах она шустрее чем клиент серверная, поэтому к этому пришли
11 roman844
 
16.01.17
18:14
ТС запрос в студию
12 MrAvPika
 
16.01.17
18:31
(11)

"ВЫБРАТЬ РАЗЛИЧНЫЕ
    сфТоварыВЯчейкахОстатки.Номенклатура,
    сфТоварыВЯчейкахОстатки.Характеристика,
    сфТоварыВЯчейкахОстатки.Ячейка,
    сфТоварыВЯчейкахОстатки.ВНаличииОстаток,
    сфТоварыВЯчейкахОстатки.Ячейка.Владелец КАК Склад,
    СерииНоменклатуры.ГоденДо
ПОМЕСТИТЬ ВТ_ТоварыВЯчейках
ИЗ
    РегистрНакопления.сфТоварыВЯчейках.Остатки(, ) КАК сфТоварыВЯчейкахОстатки
        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СерииНоменклатуры КАК СерииНоменклатуры
        ПО сфТоварыВЯчейкахОстатки.Серия = СерииНоменклатуры.Ссылка
ГДЕ
    НЕ сфТоварыВЯчейкахОстатки.Ячейка.Ссылка ЕСТЬ NULL
    И НЕ сфТоварыВЯчейкахОстатки.Характеристика ЕСТЬ NULL
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ТоварыНаСкладах.Номенклатура,
    ТоварыНаСкладах.Характеристика КАК Характеристика,
    ТоварыНаСкладах.КоличествоНачальныйОстаток КАК НачальныйОстаток,
    ТоварыНаСкладах.КоличествоПриход КАК Приход,
    ТоварыНаСкладах.КоличествоРасход КАК Расход,
    ТоварыНаСкладах.КоличествоКонечныйОстаток - ТоварыНаСкладах.РезервКонечныйОстаток КАК КоличествоОстаток,
    ЕСТЬNULL(сфДефектураПредоплата.Дефектура, ЛОЖЬ) КАК Дефектура,
    ЕСТЬNULL(сфДефектураПредоплата.Предоплата, ЛОЖЬ) КАК Предоплата,
    сфДефектураПредоплата.ЦенаЗаказа
ПОМЕСТИТЬ ВТ_ОстаткиИДефектураПредоплата
ИЗ
    РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ), , , , Склад В (&Склад)) КАК ТоварыНаСкладах
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.сфДефектураПредоплата КАК сфДефектураПредоплата
        ПО ТоварыНаСкладах.Номенклатура = сфДефектураПредоплата.Номенклатура
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    сфДефектураПредоплата.Номенклатура,
    ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка) КАК Характеристика,
    0 КАК НачальныйОстаток,
    0 КАК Приход,
    0 КАК Расход,
    0 КАК КоличествоОстаток,
    сфДефектураПредоплата.Дефектура,
    сфДефектураПредоплата.Предоплата,
    сфДефектураПредоплата.ЦенаЗаказа
ПОМЕСТИТЬ ВТ_ДефектураПредоплата
ИЗ
    РегистрСведений.сфДефектураПредоплата КАК сфДефектураПредоплата
        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ОстаткиИДефектураПредоплата КАК ВТ_ОстаткиИДефектураПредоплата
        ПО сфДефектураПредоплата.Номенклатура = ВТ_ОстаткиИДефектураПредоплата.Номенклатура
ГДЕ
    ЕСТЬNULL(ВТ_ОстаткиИДефектураПредоплата.Номенклатура, 0) = 0
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_ОстаткиИДефектураПредоплата.Номенклатура,
    ВТ_ОстаткиИДефектураПредоплата.Характеристика,
    ВТ_ОстаткиИДефектураПредоплата.НачальныйОстаток,
    ВТ_ОстаткиИДефектураПредоплата.Приход,
    ВТ_ОстаткиИДефектураПредоплата.Расход,
    ВТ_ОстаткиИДефектураПредоплата.КоличествоОстаток,
    ВТ_ОстаткиИДефектураПредоплата.Дефектура,
    ВТ_ОстаткиИДефектураПредоплата.Предоплата,
    ВТ_ОстаткиИДефектураПредоплата.ЦенаЗаказа КАК ЦенаДефектураПредоплата
ПОМЕСТИТЬ ВТ_Остатки_ДефектураПредоплата
ИЗ
    ВТ_ОстаткиИДефектураПредоплата КАК ВТ_ОстаткиИДефектураПредоплата

ОБЪЕДИНИТЬ

ВЫБРАТЬ
    ВТ_ДефектураПредоплата.Номенклатура,
    ВТ_ДефектураПредоплата.Характеристика,
    ВТ_ДефектураПредоплата.НачальныйОстаток,
    ВТ_ДефектураПредоплата.Приход,
    ВТ_ДефектураПредоплата.Расход,
    ВТ_ДефектураПредоплата.КоличествоОстаток,
    ВТ_ДефектураПредоплата.Дефектура,
    ВТ_ДефектураПредоплата.Предоплата,
    ВТ_ДефектураПредоплата.ЦенаЗаказа
ИЗ
    ВТ_ДефектураПредоплата КАК ВТ_ДефектураПредоплата
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_Остатки_ДефектураПредоплата.Номенклатура,
    ВТ_Остатки_ДефектураПредоплата.Характеристика КАК Характеристика,
    Штрихкоды.Штрихкод,
    ВТ_Остатки_ДефектураПредоплата.КоличествоОстаток,
    ВЫБОР
        КОГДА ВТ_Остатки_ДефектураПредоплата.Дефектура
            ТОГДА ВЫБОР
                    КОГДА ЕСТЬNULL(ДействующиеЦены.Цена, 0) = 0
                        ТОГДА ЕСТЬNULL(ВТ_Остатки_ДефектураПредоплата.ЦенаДефектураПредоплата, 0)
                КОНЕЦ
        ИНАЧЕ ЕСТЬNULL(ДействующиеЦены.Цена, 0)
    КОНЕЦ КАК Цена,
    ВТ_Остатки_ДефектураПредоплата.Дефектура,
    ВТ_Остатки_ДефектураПредоплата.Предоплата
ПОМЕСТИТЬ ВТ_Остатки_Цены_Штрихкоды
ИЗ
    ВТ_Остатки_ДефектураПредоплата КАК ВТ_Остатки_ДефектураПредоплата
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДействующиеЦеныНоменклатуры.СрезПоследних(, ОбъектЦенообразования = &Магазин) КАК ДействующиеЦены
        ПО ВТ_Остатки_ДефектураПредоплата.Номенклатура = ДействующиеЦены.Номенклатура
            И ВТ_Остатки_ДефектураПредоплата.Характеристика = ДействующиеЦены.Характеристика
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Штрихкоды КАК Штрихкоды
        ПО ВТ_Остатки_ДефектураПредоплата.Номенклатура = Штрихкоды.Владелец
            И ВТ_Остатки_ДефектураПредоплата.Характеристика = Штрихкоды.Характеристика
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_Остатки_Цены_Штрихкоды.Номенклатура,
    ВТ_Остатки_Цены_Штрихкоды.Характеристика,
    ВТ_Остатки_Цены_Штрихкоды.Штрихкод,
    ВТ_Остатки_Цены_Штрихкоды.КоличествоОстаток КАК Количество,
    ВТ_Остатки_Цены_Штрихкоды.Цена,
    ВТ_Остатки_Цены_Штрихкоды.Дефектура,
    ВТ_Остатки_Цены_Штрихкоды.Предоплата,
    ВТ_ТоварыВЯчейках.Ячейка,
    ВТ_ТоварыВЯчейках.ГоденДо КАК СрокГодности,
    ВТ_Остатки_Цены_Штрихкоды.Номенклатура.Производитель КАК Производитель,
    ВТ_Остатки_Цены_Штрихкоды.Номенклатура.сфМеждународноеНазвание КАК МеждународноеНазвание,
    ВТ_Остатки_Цены_Штрихкоды.Номенклатура.сфФармацевтическаяГруппа КАК ФармацевтическаяГруппа,
    ВТ_Остатки_Цены_Штрихкоды.Номенклатура.сфЭтоЖНВЛП КАК ЖНВЛП,
    ВТ_Остатки_Цены_Штрихкоды.Номенклатура.сфРанг КАК Ранг,
    ЕСТЬNULL(ВТ_Остатки_Цены_Штрихкоды.Номенклатура.сфБаллы, 0) КАК Бонус
ИЗ
    ВТ_Остатки_Цены_Штрихкоды КАК ВТ_Остатки_Цены_Штрихкоды
        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ТоварыВЯчейках КАК ВТ_ТоварыВЯчейках
        ПО ВТ_Остатки_Цены_Штрихкоды.Номенклатура = ВТ_ТоварыВЯчейках.Номенклатура
            И ВТ_Остатки_Цены_Штрихкоды.Характеристика = ВТ_ТоварыВЯчейках.Характеристика
ГДЕ
    ВЫБОР
            КОГДА ВТ_Остатки_Цены_Штрихкоды.КоличествоОстаток > 0
                ТОГДА ВЫБОР
                        КОГДА ВТ_Остатки_Цены_Штрихкоды.Цена = 0
                                И НЕ ВТ_Остатки_Цены_Штрихкоды.Номенклатура.Наименование ПОДОБНО "!%"
                            ТОГДА ЛОЖЬ
                        ИНАЧЕ ВЫБОР
                                КОГДА ВТ_Остатки_Цены_Штрихкоды.Штрихкод = ""
                                    ТОГДА ЛОЖЬ
                                ИНАЧЕ ВЫБОР
                                        КОГДА ЕСТЬNULL(ВТ_Остатки_Цены_Штрихкоды.Цена, 0) = 0
                                                И НЕ ВТ_Остатки_Цены_Штрихкоды.Номенклатура.Наименование ПОДОБНО "!%"
                                            ТОГДА ЛОЖЬ
                                        ИНАЧЕ ВЫБОР
                                                КОГДА ЕСТЬNULL(ВТ_Остатки_Цены_Штрихкоды.Штрихкод, 0) = 0
                                                    ТОГДА ЛОЖЬ
                                                ИНАЧЕ ИСТИНА
                                            КОНЕЦ
                                    КОНЕЦ
                            КОНЕЦ
                    КОНЕЦ
            ИНАЧЕ ИСТИНА
        КОНЕЦ"
13 Aleksey
 
16.01.17
18:38
RLS отключен?
14 MrAvPika
 
16.01.17
18:44
(13) +
15 MrAvPika
 
16.01.17
18:46
Короче понял, в одной временной таблице не связываю более двух таблиц, и индексирую поля по которым связываю, работает очень быстро
16 MrAvPika
 
16.01.17
18:47
Всем спасибо