|
долго выполняется запрос 🠗 (Волшебник 19.08.2024 22:54) | ☑ | ||
---|---|---|---|---|
0
vux13
19.08.24
✎
12:07
|
всем здравствуйте
долго выполняется запрос ~0,4 с. подскажите где может быть узкое место база файловая УНФ ВЫБРАТЬ ВЫБОР КОГДА ЗаказНаПроизводствоПродукция.Номенклатура ЕСТЬ NULL ТОГДА ЗаказПокупателяЗапасы.Номенклатура ИНАЧЕ NULL КОНЕЦ КАК Номенклатура, ЗаказПокупателяЗапасы.Сумма КАК Сумма, ЗаказНаПроизводствоПродукция.Номенклатура КАК ЗаказНаПроизвожство, ЗаказНаПроизводствоПродукция.ЗаказПокупателя КАК ЗаказПокупателя ПОМЕСТИТЬ ВТ_НаПроизводство ИЗ Документ.ЗаказПокупателя.Запасы КАК ЗаказПокупателяЗапасы ПОЛНОЕ СОЕДИНЕНИЕ Документ.ЗаказНаПроизводство.Продукция КАК ЗаказНаПроизводствоПродукция ПО (ЗаказПокупателяЗапасы.Ссылка = ЗаказНаПроизводствоПродукция.ЗаказПокупателя) И (ЗаказПокупателяЗапасы.Номенклатура = ЗаказНаПроизводствоПродукция.Номенклатура) ГДЕ ЗаказПокупателяЗапасы.Ссылка = &СсылкаДок ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВЫБОР КОГДА ЗаказПоставщикуЗапасы.Номенклатура ЕСТЬ NULL ТОГДА ЗаказПокупателяЗапасы.Номенклатура ИНАЧЕ NULL КОНЕЦ КАК Номенклатура, ЗаказПокупателяЗапасы.Сумма КАК Сумма, ЗаказПоставщикуЗапасы.Номенклатура КАК ЗаказПоставщику, ЗаказПоставщикуЗапасы.ЗаказПокупателя КАК ЗаказПокупателя ПОМЕСТИТЬ ВТ_Поставщику ИЗ Документ.ЗаказПокупателя.Запасы КАК ЗаказПокупателяЗапасы ПОЛНОЕ СОЕДИНЕНИЕ Документ.ЗаказПоставщику.Запасы КАК ЗаказПоставщикуЗапасы ПО ЗаказПокупателяЗапасы.Ссылка = ЗаказПоставщикуЗапасы.ЗаказПокупателя И ЗаказПокупателяЗапасы.Номенклатура = ЗаказПоставщикуЗапасы.Номенклатура ГДЕ ЗаказПокупателяЗапасы.Ссылка = &СсылкаДок ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ЗапасыОстаткиИОбороты.Номенклатура КАК Номенклатура, МАКСИМУМ(ЗапасыОстаткиИОбороты.Регистратор.Дата) КАК РегистраторДата ПОМЕСТИТЬ ВТ_Поступления ИЗ РегистрНакопления.Запасы.ОстаткиИОбороты( , , Регистратор, , Номенклатура В (ВЫБРАТЬ ВТ_НаПроизводство.Номенклатура КАК Номенклатура ИЗ ВТ_НаПроизводство КАК ВТ_НаПроизводство ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_Поставщику КАК ВТ_Поставщику ПО ВТ_НаПроизводство.Номенклатура = ВТ_Поставщику.Номенклатура)) КАК ЗапасыОстаткиИОбороты ГДЕ ТИПЗНАЧЕНИЯ(ЗапасыОстаткиИОбороты.Регистратор) = ТИП(Документ.ПриходнаяНакладная) И ЗапасыОстаткиИОбороты.Регистратор.Дата <= &ДатаЗаказа СГРУППИРОВАТЬ ПО ЗапасыОстаткиИОбороты.Номенклатура ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ЗапасыОстаткиИОбороты.Номенклатура КАК Номенклатура, ВЫРАЗИТЬ(МАКСИМУМ(ЗапасыОстаткиИОбороты.СуммаПриход) / МАКСИМУМ(ЗапасыОстаткиИОбороты.КоличествоПриход) КАК ЧИСЛО(15, 2)) КАК Цена, ЗапасыОстаткиИОбороты.Регистратор.Дата КАК РегистраторДата ИЗ РегистрНакопления.Запасы.ОстаткиИОбороты(, , Авто, , ) КАК ЗапасыОстаткиИОбороты ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_Поступления КАК ВТ_ПОСТУПЛЕНИЯ ПО (ЗапасыОстаткиИОбороты.Номенклатура = ВТ_ПОСТУПЛЕНИЯ.Номенклатура) И (ЗапасыОстаткиИОбороты.Регистратор.Дата = ВТ_ПОСТУПЛЕНИЯ.РегистраторДата) СГРУППИРОВАТЬ ПО ЗапасыОстаткиИОбороты.Номенклатура, ЗапасыОстаткиИОбороты.Регистратор.Дата |
|||
1
vux13
19.08.24
✎
12:08
|
в качестве параметров Дата и номер заказа клиента
|
|||
2
АгентБезопасной Нацио
19.08.24
✎
12:10
|
вам точно нужны обороты от начала времен и до конца времен?
|
|||
3
craxx
19.08.24
✎
12:11
|
(0) Естественно долго, кстати, судя по ВТ_Поступления это еще не долго, ты выгребаешь регистраторы из регистра без ограничений по периоду плюс в параметры пихаешь вложенный запрос.
|
|||
4
maxab72
19.08.24
✎
12:15
|
В последнем запросе используйте отбор виртуальной таблицы Запасы.ОстаткиИОбороты
|
|||
5
RomanYS
19.08.24
✎
12:19
|
(0) Самая ж. вот здесь ЗапасыОстаткиИОбороты.Регистратор.Дата (таких мест 3)
Если можно заменить на Период, то это простое решение. Иначе думать, как по другому избежать неявного соединения со всеми регистраторами регистра |
|||
6
s-n-a-y
19.08.24
✎
12:20
|
1. В первых трех запросах можно попробовать добавить индексирование по Номенклатура
2. записи "выбор когда" можно переписать проще: ЕстьNull(ЗаказНаПроизводствоПродукция.Номенклатура, ЗаказПокупателяЗапасы.Номенклатура) КАК Номенклатура |
|||
7
craxx
19.08.24
✎
12:20
|
(5) Регистратор.Дата не равно Период.
Вот вообще ни разу. |
|||
8
RomanYS
19.08.24
✎
12:32
|
(7) Про равно никто не говорил. Возможно ТСу не нужна дата регистратора - моё предположения. На случай, если предположение не верное, читать (5) со слова "иначе"
|
|||
9
Волшебник
19.08.24
✎
12:37
|
(0) >> долго выполняется запрос ~0,4 с.
Это быстро |
|||
10
RomanYS
19.08.24
✎
12:38
|
(0) интересно что хотел посчитать таким образом
МАКСИМУМ(ЗапасыОстаткиИОбороты.СуммаПриход) / МАКСИМУМ(ЗапасыОстаткиИОбороты.КоличествоПриход) Выражение прямо кладезь сюрпризов) |
|||
11
Смотрящий
19.08.24
✎
12:40
|
(0) Первый запрос пакета
Происходит полный скан таблицы ЗаказПокупателя.Запасы, к ней полный скан таблицы ЗаказНаПроизводство.Продукция только после это накладывается условие ЗаказПокупателяЗапасы.Ссылка = &СсылкаДок Второй запрос пакета Происходит полный скан таблицы ЗаказПокупателя.Запасы, к ней полный скан таблицы ЗаказПоставщику.Запасы только после это накладывается условие ЗаказПокупателяЗапасы.Ссылка = &СсылкаДок Перебирается 10000 строк, к ним пристегивается еще 5000 и только после этого выбираются условные 10 строк из заказа покупателя Третий запрос пакета Соединение в условии виртуальной таблицы - ладно бох с ним - там сначала накладывается условие потом идет скан таблицы - можно оставить но лучшее переделать) но выбирать условные 3000 записей а потом на них накладывать условие ГДЕ на тип документа и дату регистратора, чтобы получить из этих 3000 записей условные 10 - так себе решение Четвертый запрос пакета Шерстим полностью "тяжелую" таблицу ОстаткиИОбороты пристегивая к ней 10 записей из ВТ_ПОСТУПЛЕНИЯ Правильнее прошерстить небольшую ВТ_ПОСТУПЛЕНИЯ и к ней пристегнуть ОстаткиИОбороты |
|||
12
Смотрящий
19.08.24
✎
12:42
|
Пока это перевари.
Потом будем бороться с неявными соединениями таблиц |
|||
13
vux13
19.08.24
✎
12:50
|
(2) поставил период, теперь 0.2 с., но всё равно мне не известно какой период нужно установить
(3) без вложенного запроса пока не знаю как (4) а можно по подробнее не понял ? (6) индексирование добавлял, но ничего не менялось (9) долго, это только небольшой кусочек большого запроса, который собственно тормозит, раньше по всем документам выполнялось за 4 секунды, а сейчас от 2-3 минуты (10) ищу последнюю цену поступления номенклатуры на склад от опр. даты |
|||
14
RomanYS
19.08.24
✎
13:01
|
(13) указанное выражение может быть почти всем чем угодно и только иногда "последней ценой поступления".
Тормоза основные у тебя в Регистратор.Дата. Так делать нельзя, если цель конечно не получить тормоза. Ты соединяешь неявно со всеми регистраторами, хотя нужен тебе только один - ПриходнаяНакладная. |
|||
15
timurhv
19.08.24
✎
13:08
|
"ЗапасыОстаткиИОбороты.Регистратор.Дата"
Просто Период РН не подойдет? |
|||
16
Волшебник
19.08.24
✎
13:09
|
(13) >> это только небольшой кусочек большого запроса
Покажите весь большой запрос |
|||
17
timurhv
19.08.24
✎
13:10
|
(11) "только после это накладывается условие ЗаказПокупателяЗапасы.Ссылка = &СсылкаДок"
Так не работает, условие нормально наложится |
|||
18
vux13
19.08.24
✎
13:17
|
(16)
Полный текст запросаВЫБРАТЬ ВЫБОР КОГДА ЗаказНаПроизводствоПродукция.Номенклатура ЕСТЬ NULL ТОГДА ЗаказПокупателяЗапасы.Номенклатура ИНАЧЕ NULL КОНЕЦ КАК Номенклатура, ЗаказПокупателяЗапасы.Сумма КАК Сумма, ЗаказНаПроизводствоПродукция.Номенклатура КАК ЗаказНаПроизвожство, ЗаказНаПроизводствоПродукция.ЗаказПокупателя КАК ЗаказПокупателя ПОМЕСТИТЬ ВТ_НаПроизводство ИЗ Документ.ЗаказПокупателя.Запасы КАК ЗаказПокупателяЗапасы ПОЛНОЕ СОЕДИНЕНИЕ Документ.ЗаказНаПроизводство.Продукция КАК ЗаказНаПроизводствоПродукция ПО ЗаказПокупателяЗапасы.Ссылка = ЗаказНаПроизводствоПродукция.ЗаказПокупателя И ЗаказПокупателяЗапасы.Номенклатура = ЗаказНаПроизводствоПродукция.Номенклатура ГДЕ ЗаказПокупателяЗапасы.Ссылка = &СсылкаДок ; ВЫБРАТЬ ВЫБОР КОГДА ЗаказПоставщикуЗапасы.Номенклатура ЕСТЬ NULL ТОГДА ЗаказПокупателяЗапасы.Номенклатура ИНАЧЕ NULL КОНЕЦ КАК Номенклатура, ЗаказПокупателяЗапасы.Сумма КАК Сумма, ЗаказПоставщикуЗапасы.Номенклатура КАК ЗаказПоставщику, ЗаказПоставщикуЗапасы.ЗаказПокупателя КАК ЗаказПокупателя ПОМЕСТИТЬ ВТ_Поставщику ИЗ Документ.ЗаказПокупателя.Запасы КАК ЗаказПокупателяЗапасы ПОЛНОЕ СОЕДИНЕНИЕ Документ.ЗаказПоставщику.Запасы КАК ЗаказПоставщикуЗапасы ПО ЗаказПокупателяЗапасы.Ссылка = ЗаказПоставщикуЗапасы.ЗаказПокупателя И ЗаказПокупателяЗапасы.Номенклатура = ЗаказПоставщикуЗапасы.Номенклатура ГДЕ ЗаказПокупателяЗапасы.Ссылка = &СсылкаДок ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ЗаказПокупателя.Контрагент КАК Контрагент, ЗаказПокупателя.Ссылка КАК Ссылка ПОМЕСТИТЬ ВТ_ЗаказПокупателяКонтрагент ИЗ Документ.ЗаказПокупателя КАК ЗаказПокупателя ГДЕ ЗаказПокупателя.Ссылка = &СсылкаДок ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ЗаказПоставщику.Контрагент КАК Контрагент, ЗаказПоставщику.Ссылка КАК Ссылка ПОМЕСТИТЬ ВТ_ЗаказПоставщику ИЗ Документ.ЗаказПоставщику КАК ЗаказПоставщику ГДЕ ЗаказПоставщику.ДокументОснование = &СсылкаДок И ЗаказПоставщику.Проведен = ИСТИНА И ЗаказПоставщику.ПометкаУдаления = ЛОЖЬ ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ЗапасыОстаткиИОбороты.Номенклатура КАК Номенклатура, МАКСИМУМ(ЗапасыОстаткиИОбороты.Регистратор.Дата) КАК РегистраторДата ПОМЕСТИТЬ ВТ_Поступления ИЗ РегистрНакопления.Запасы.ОстаткиИОбороты( , , Регистратор, , Номенклатура В (ВЫБРАТЬ ВТ_НаПроизводство.Номенклатура КАК Номенклатура ИЗ ВТ_НаПроизводство КАК ВТ_НаПроизводство ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_Поставщику КАК ВТ_Поставщику ПО ВТ_НаПроизводство.Номенклатура = ВТ_Поставщику.Номенклатура)) КАК ЗапасыОстаткиИОбороты ГДЕ ТИПЗНАЧЕНИЯ(ЗапасыОстаткиИОбороты.Регистратор) = ТИП(Документ.ПриходнаяНакладная) И ЗапасыОстаткиИОбороты.Регистратор.Дата <= &ДатаЗаказа СГРУППИРОВАТЬ ПО ЗапасыОстаткиИОбороты.Номенклатура ; ВЫБРАТЬ ЗапасыОстаткиИОбороты.Номенклатура КАК Номенклатура, ВЫРАЗИТЬ(МАКСИМУМ(ЗапасыОстаткиИОбороты.СуммаПриход) / МАКСИМУМ(ЗапасыОстаткиИОбороты.КоличествоПриход) КАК ЧИСЛО(15, 2)) КАК Цена, ЗапасыОстаткиИОбороты.Регистратор.Дата КАК РегистраторДата ПОМЕСТИТЬ ВТ_ПоступленияЦены ИЗ РегистрНакопления.Запасы.ОстаткиИОбороты(, , Авто, , ) КАК ЗапасыОстаткиИОбороты ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_ПОСТУПЛЕНИЯ КАК ВТ_ПОСТУПЛЕНИЯ ПО ЗапасыОстаткиИОбороты.Номенклатура = ВТ_ПОСТУПЛЕНИЯ.Номенклатура И ЗапасыОстаткиИОбороты.Регистратор.Дата = ВТ_ПОСТУПЛЕНИЯ.РегистраторДата СГРУППИРОВАТЬ ПО ЗапасыОстаткиИОбороты.Номенклатура, ЗапасыОстаткиИОбороты.Регистратор.Дата ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ СвязанныеДокументы.Ссылка КАК Ссылка, СвязанныеДокументы.Ссылка.ЗаказНаПроизводство КАК СсылкаЗаказНаПроизводство, СвязанныеДокументы.Ссылка.ЗаказПокупателя КАК СсылкаЗаказПокупателя ПОМЕСТИТЬ ВТ_СвязанныеДокументы ИЗ КритерийОтбора.СвязанныеДокументы(&СсылкаДок) КАК СвязанныеДокументы ГДЕ ТИПЗНАЧЕНИЯ(СвязанныеДокументы.Ссылка) = ТИП(Документ.СборкаЗапасов) ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ЗапасыОстаткиИОбороты.Регистратор КАК Регистратор, ЗапасыОстаткиИОбороты.Номенклатура КАК Номенклатура, ЗапасыОстаткиИОбороты.СуммаПриход КАК СуммаПриход, ЗапасыОстаткиИОбороты.СуммаРасход КАК СуммаРасход, ЗапасыОстаткиИОбороты.СуммаОборот КАК СуммаОборот, ВТ_СвязанныеДокументы.СсылкаЗаказНаПроизводство, ВТ_СвязанныеДокументы.СсылкаЗаказПокупателя ПОМЕСТИТЬ ПроизводствоСумма ИЗ РегистрНакопления.Запасы.ОстаткиИОбороты(, , Регистратор, , ) КАК ЗапасыОстаткиИОбороты ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_СвязанныеДокументы КАК ВТ_СвязанныеДокументы ПО ЗапасыОстаткиИОбороты.Регистратор = ВТ_СвязанныеДокументы.Ссылка ГДЕ ЗапасыОстаткиИОбороты.Регистратор В (ВЫБРАТЬ ВТ_СвязанныеДокументы.Ссылка КАК Ссылка ИЗ ВТ_СвязанныеДокументы КАК ВТ_СвязанныеДокументы) И ЗапасыОстаткиИОбороты.СуммаОборот > 0 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ЗаказНаПроизводствоПродукция.Номенклатура КАК Номенклатура, ЗаказНаПроизводствоПродукция.Ссылка КАК ЗаказНаПроизводство, NULL КАК Сумма, ВТ_ЗаказПокупателяКонтрагент.Контрагент КАК Контрагент ПОМЕСТИТЬ ВТ_ЗПР ИЗ Документ.ЗаказНаПроизводство.Продукция КАК ЗаказНаПроизводствоПродукция ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_ЗаказПокупателяКонтрагент КАК ВТ_ЗаказПокупателяКонтрагент ПО ЗаказНаПроизводствоПродукция.ЗаказПокупателя = ВТ_ЗаказПокупателяКонтрагент.Ссылка ГДЕ ЗаказНаПроизводствоПродукция.ЗаказПокупателя = &СсылкаДок ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ЗаказПокупателяЗапасы.Номенклатура КАК Номенклатура, ЕСТЬNULL(ЗаказПокупателяЗапасы.Сумма, 0) КАК Сумма, ЗаказПокупателяЗапасы.Ссылка КАК ЗаказПокупателя, ЗаказПокупателяЗапасы.Количество КАК Количество, ВЫРАЗИТЬ(ВТ_ПоступленияЦены.Цена * ЗаказПокупателяЗапасы.Количество КАК ЧИСЛО(15, 2)) КАК НоменклатураЦена, ВТ_ЗаказПокупателяКонтрагент.Контрагент КАК Контрагент ПОМЕСТИТЬ ВТ_ЗК2 ИЗ Документ.ЗаказПокупателя.Запасы КАК ЗаказПокупателяЗапасы ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ЗаказПокупателяКонтрагент КАК ВТ_ЗаказПокупателяКонтрагент ПО ЗаказПокупателяЗапасы.Ссылка = ВТ_ЗаказПокупателяКонтрагент.Ссылка ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ПоступленияЦены КАК ВТ_ПоступленияЦены ПО ЗаказПокупателяЗапасы.Номенклатура = ВТ_ПоступленияЦены.Номенклатура ГДЕ ЗаказПокупателяЗапасы.Ссылка = &СсылкаДок ОБЪЕДИНИТЬ ВЫБРАТЬ ВЫБОР КОГДА ЕСТЬNULL(ЗаказПокупателя.СтоимостьДоставки, 0) > 0 ТОГДА СТРОКА("Стоимость доставки") КОНЕЦ, ВЫБОР КОГДА ЕСТЬNULL(ЗаказПокупателя.СтоимостьДоставки, 0) > 0 ТОГДА ЗаказПокупателя.СтоимостьДоставки КОНЕЦ, ВЫБОР КОГДА ЕСТЬNULL(ЗаказПокупателя.СтоимостьДоставки, 0) > 0 ТОГДА ЗаказПокупателя.Ссылка КОНЕЦ, 0 КАК Количество, 0 КАК НоменклатураЦена, ВТ_ЗаказПокупателяКонтрагент.Контрагент ИЗ Документ.ЗаказПокупателя КАК ЗаказПокупателя ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ЗаказПокупателяКонтрагент КАК ВТ_ЗаказПокупателяКонтрагент ПО ЗаказПокупателя.Ссылка = ВТ_ЗаказПокупателяКонтрагент.Ссылка ГДЕ ЗаказПокупателя.Ссылка = &СсылкаДок ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ КонтрагентыДополнительныеРеквизиты.Ссылка КАК НаценкаСсылка, КонтрагентыДополнительныеРеквизиты.Значение КАК Значение ПОМЕСТИТЬ ВТ_Наценка ИЗ Справочник.Контрагенты.ДополнительныеРеквизиты КАК КонтрагентыДополнительныеРеквизиты ГДЕ КонтрагентыДополнительныеРеквизиты.Свойство.Имя = "ПроцентНаценки_79addb3b058c454490de9300dd1e2f39" ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ДокументЗаказПокупателя.Ссылка КАК Ссылка, ЕСТЬNULL(ОплатаСчетовИЗаказовОбороты.СуммаАвансаОборот, 0) + ЕСТЬNULL(ОплатаСчетовИЗаказовОбороты.СуммаОплатыОборот, 0) КАК Оплачено, ЕСТЬNULL(ОплатаСчетовИЗаказовОбороты.СуммаОборот, 0) - ЕСТЬNULL(ОплатаСчетовИЗаказовОбороты.СуммаАвансаОборот, 0) - ЕСТЬNULL(ОплатаСчетовИЗаказовОбороты.СуммаОплатыОборот, 0) КАК ОсталосьОплатить ПОМЕСТИТЬ ВТ_ЗаказыПокупателейСводно ИЗ РегистрНакопления.ЗаказыПокупателей.ОстаткиИОбороты(, , , , ) КАК ЗаказыПокупателейОстаткиИОборотыСводно ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОплатаСчетовИЗаказов.Обороты(, , , СчетНаОплату ССЫЛКА Документ.ЗаказПокупателя) КАК ОплатаСчетовИЗаказовОбороты ПО ЗаказыПокупателейОстаткиИОборотыСводно.ЗаказПокупателя = ОплатаСчетовИЗаказовОбороты.СчетНаОплату ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказПокупателя КАК ДокументЗаказПокупателя ПО ЗаказыПокупателейОстаткиИОборотыСводно.ЗаказПокупателя = ДокументЗаказПокупателя.Ссылка ГДЕ ДокументЗаказПокупателя.Ссылка = &СсылкаДок ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ РАЗРЕШЕННЫЕ ЗаказыПоставщикамОстаткиИОбороты.ЗаказПоставщику КАК ЗаказПоставщику ПОМЕСТИТЬ ЗаказыПоставщикамОстаткиИОборотыТест ИЗ РегистрНакопления.ЗаказыПоставщикам.ОстаткиИОбороты КАК ЗаказыПоставщикамОстаткиИОбороты ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ЗаказыПоставщикамОстаткиИОборотыТест.ЗаказПоставщику КАК ЗаказПоставщику, ЕСТЬNULL(ОплатаСчетовИЗаказовОбороты.СуммаАвансаОборот, 0) + ЕСТЬNULL(ОплатаСчетовИЗаказовОбороты.СуммаОплатыОборот, 0) КАК Оплачено, ЕСТЬNULL(ОплатаСчетовИЗаказовОбороты.СуммаОборот, 0) - ЕСТЬNULL(ОплатаСчетовИЗаказовОбороты.СуммаАвансаОборот, 0) - ЕСТЬNULL(ОплатаСчетовИЗаказовОбороты.СуммаОплатыОборот, 0) КАК ОсталосьОплатить ПОМЕСТИТЬ ВТ_ЗаказыПоставщикамСводно ИЗ РегистрНакопления.ОплатаСчетовИЗаказов.Обороты(, , , СчетНаОплату ССЫЛКА Документ.ЗаказПоставщику) КАК ОплатаСчетовИЗаказовОбороты ВНУТРЕННЕЕ СОЕДИНЕНИЕ ЗаказыПоставщикамОстаткиИОборотыТест КАК ЗаказыПоставщикамОстаткиИОборотыТест ПО ОплатаСчетовИЗаказовОбороты.СчетНаОплату = ЗаказыПоставщикамОстаткиИОборотыТест.ЗаказПоставщику ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ЗаказПоставщикуЗапасы.Номенклатура КАК Номенклатура, ЗаказПоставщикуЗапасы.Сумма КАК Сумма, ЗаказПоставщикуЗапасы.Ссылка КАК ЗаказПоставщику, ВТ_ЗаказПокупателяКонтрагент.Контрагент КАК Контрагент ПОМЕСТИТЬ ВТ_ЗП ИЗ Документ.ЗаказПоставщику.Запасы КАК ЗаказПоставщикуЗапасы ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_ЗаказПокупателяКонтрагент КАК ВТ_ЗаказПокупателяКонтрагент ПО ЗаказПоставщикуЗапасы.ЗаказПокупателя = ВТ_ЗаказПокупателяКонтрагент.Ссылка ГДЕ ЗаказПоставщикуЗапасы.ЗаказПокупателя = &СсылкаДок И ЗаказПоставщикуЗапасы.Ссылка.Проведен = ИСТИНА И ЗаказПоставщикуЗапасы.Ссылка.ПометкаУдаления = ЛОЖЬ ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТ_ЗК2.ЗаказПокупателя КАК ЗаказПокупателя, ВТ_ЗК2.Номенклатура КАК Номенклатура, ВТ_ЗК2.Сумма КАК Сумма, ВТ_ЗК2.НоменклатураЦена, ВТ_ЗК2.Контрагент КАК Контрагент ПОМЕСТИТЬ ВТ_ЗК ИЗ ВТ_ЗК2 КАК ВТ_ЗК2 ГДЕ ВТ_ЗК2.Номенклатура ЕСТЬ НЕ NULL И ВТ_ЗК2.ЗаказПокупателя ЕСТЬ НЕ NULL И ВТ_ЗК2.Сумма ЕСТЬ НЕ NULL ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ЗаказПокупателя.Ссылка КАК Ссылка, ЗаказПокупателя.СуммаДокумента КАК СуммаДокумента ПОМЕСТИТЬ ВТ_СуммаДокумента ИЗ Документ.ЗаказПокупателя КАК ЗаказПокупателя ГДЕ ЗаказПокупателя.Ссылка = &СсылкаДок ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТ_ЗК.Сумма КАК Сумма, ВТ_ЗП.Сумма КАК Сумма2, ВЫБОР КОГДА (ВЫРАЗИТЬ((ВТ_ЗК.Сумма - ВТ_ЗП.Сумма) / ВТ_ЗП.Сумма * 100 КАК ЧИСЛО(15, 2))) < ВТ_Наценка.Значение ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ КАК Поле123 ПОМЕСТИТЬ ВТ_ЦВЕТ ИЗ ВТ_ЗК КАК ВТ_ЗК ПОЛНОЕ СОЕДИНЕНИЕ ВТ_ЗП КАК ВТ_ЗП ПО ВТ_ЗК.Номенклатура = ВТ_ЗП.Номенклатура ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Наценка КАК ВТ_Наценка ПО (ВТ_ЗП.ЗаказПоставщику.Контрагент = ВТ_Наценка.НаценкаСсылка) ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ РАЗЛИЧНЫЕ ВТ_ЦВЕТ.Поле123 КАК Поле123 ПОМЕСТИТЬ ВТ_ЦВЕТ2 ИЗ ВТ_ЦВЕТ КАК ВТ_ЦВЕТ ГДЕ ВТ_ЦВЕТ.Поле123 = ИСТИНА ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ &СсылкаДок КАК СсылкаДок, &ДатаЗаказа КАК ДатаЗаказа, ВЫБОР КОГДА ВТ_ЗК.Контрагент ЕСТЬ НЕ NULL ТОГДА ВТ_ЗК.Контрагент КОГДА ВТ_ЗПР.Контрагент ЕСТЬ НЕ NULL ТОГДА ВТ_ЗПР.Контрагент ИНАЧЕ ВТ_ЗП.Контрагент КОНЕЦ КАК КонтрагентПокупатель, ВЫБОР КОГДА ТИПЗНАЧЕНИЯ(ВТ_ЗП.ЗаказПоставщику) = ТИП(Документ.ЗаказПоставщику) ТОГДА ВТ_ЗП.ЗаказПоставщику КОГДА ТИПЗНАЧЕНИЯ(ВТ_ЗПР.ЗаказНаПроизводство) = ТИП(Документ.ЗаказНаПроизводство) ТОГДА ВТ_ЗПР.ЗаказНаПроизводство КОГДА ВТ_ЗП.ЗаказПоставщику ЕСТЬ NULL ТОГДА СТРОКА("Отсутствует в заказе поставщику") КОНЕЦ КАК ЗаказПоставщику, ВЫБОР КОГДА ВТ_ЗК.Номенклатура <> "" ТОГДА ВТ_ЗК.Номенклатура КОГДА ВТ_ЗПР.Номенклатура ЕСТЬ НЕ NULL ТОГДА ВТ_ЗПР.Номенклатура ИНАЧЕ ВТ_ЗП.Номенклатура КОНЕЦ КАК НоменклатураЗаказаПокупателя, ВТ_ЗП.ЗаказПоставщику.Контрагент КАК КонтрагентПоставщик, ВТ_Наценка.Значение КАК Значение, ВТ_ЗК.Сумма КАК Сумма, ВТ_ЗК.НоменклатураЦена КАК НоменклатураЦена, ПроизводствоСумма.СуммаОборот КАК Суммапроизводства, ЕСТЬNULL(ВТ_ЗП.Номенклатура, " ") КАК НоменклатураЗаказаПоставщику, ВТ_ЗП.Сумма КАК Сумма2, ЕСТЬNULL(ВТ_СуммаДокумента.СуммаДокумента, 0) КАК СуммаДокумента, ВТ_ЗаказыПокупателейСводно.Оплачено КАК Оплачено, ВТ_ЗаказыПоставщикамСводно.Оплачено КАК ОплаченоПоставщику, ВТ_ЦВЕТ2.Поле123 КАК Поле123 ИЗ ВТ_ЗК КАК ВТ_ЗК ПОЛНОЕ СОЕДИНЕНИЕ ВТ_ЗП КАК ВТ_ЗП ПО ВТ_ЗК.Номенклатура = ВТ_ЗП.Номенклатура ПОЛНОЕ СОЕДИНЕНИЕ ВТ_ЗПР КАК ВТ_ЗПР ПО ВТ_ЗК.Номенклатура = ВТ_ЗПР.Номенклатура ПОЛНОЕ СОЕДИНЕНИЕ ВТ_СуммаДокумента КАК ВТ_СуммаДокумента ПО ВТ_ЗК.ЗаказПокупателя = ВТ_СуммаДокумента.Ссылка ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Наценка КАК ВТ_Наценка ПО (ВТ_ЗП.ЗаказПоставщику.Контрагент.Ссылка = ВТ_Наценка.НаценкаСсылка) ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ЗаказыПокупателейСводно КАК ВТ_ЗаказыПокупателейСводно ПО ВТ_ЗК.ЗаказПокупателя = ВТ_ЗаказыПокупателейСводно.Ссылка ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ЗаказыПоставщикамСводно КАК ВТ_ЗаказыПоставщикамСводно ПО (ВТ_ЗП.ЗаказПоставщику = ВТ_ЗаказыПоставщикамСводно.ЗаказПоставщику) ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ЦВЕТ2 КАК ВТ_ЦВЕТ2 ПО (ВТ_ЗК.ЗаказПокупателя = ВТ_СуммаДокумента.Ссылка) ЛЕВОЕ СОЕДИНЕНИЕ ПроизводствоСумма КАК ПроизводствоСумма ПО ВТ_ЗК.Номенклатура = ПроизводствоСумма.Номенклатура И ВТ_ЗПР.ЗаказНаПроизводство = ПроизводствоСумма.СсылкаЗаказНаПроизводство |
|||
19
vux13
19.08.24
✎
14:32
|
(14) да, больше всего тормозит последний запрос, а именно: Регистратор.Дата и Период
(15) РН ? (11) в последнем запросе сделал так, но ничего не изменилось, первые два вообще 16 мс. выполняются |
|||
21
СвинТуз
19.08.24
✎
14:39
|
Последний запрос в (0) понравился больше всего.
Виртуальную таблицу тянуть полностью это душевно. |
|||
22
СвинТуз
19.08.24
✎
14:40
|
+ последний и предпоследний дергают ее дважды
по одному поводу. душевно. |
|||
23
lEvGl
гуру
19.08.24
✎
15:53
|
(17) почему? Где всегда отрабатывало после выборки, что то поменялось?
Нормально наложится если в По это условие указать |
|||
24
Eiffil123
19.08.24
✎
16:06
|
(0) а что ваш запрос вообще делать должен?
|
|||
25
vux13
19.08.24
✎
17:51
|
(24) показывает последнюю цену поступления номенклатуры на склад от опр. даты
|
|||
26
lEvGl
гуру
19.08.24
✎
17:55
|
(25) в типовых есть цены номенклатуры, в готовом виде
и наверно не последнюю, а первую от опр. даты. либо последнюю, но на опр. дату. В 1с это разное |
|||
27
vux13
19.08.24
✎
17:58
|
(26) это понятно, но там нет того что надо
|
|||
28
lEvGl
гуру
19.08.24
✎
18:07
|
(27) судя по связям ЗаказПокупателя - ЗаказНаПроизводство это цены ГП, соответственно выпуск фиксируется ОПЗСом, соответственно можно писать цены в этот момент.
ЗаказПокупателя - ЗаказПоставщику это цены закупки, соответственно приход фиксируется ПоступлениемТоваров, соответственно можно писать цены в этот момент. Это настраивается, где как в зависимости от конфигурации, но принцип один и тот же |
|||
29
Timon1405
19.08.24
✎
18:49
|
(19) РН = регистр накопления. зачем брать дату из регистратора если она как правило в регистр пишется в колонку период? ладно бы еще было измерение документпартии у которого надо взять дату через точку, но дату от регистратора в общем случае брать незачем
|
|||
30
vux13
19.08.24
✎
20:52
|
(29) спасибо понял
|
|||
31
Волшебник
19.08.24
✎
20:53
|
(27)(30) Больше запятых, Давид! Это русский форум!
|
|||
32
vux13
19.08.24
✎
21:19
|
(31) ещё можно заметить что точки не ставлю в конце предложения и пишу всё с маленькой буквы
|
|||
33
Волшебник
19.08.24
✎
21:22
|
(32) Давид, я слежу за Вами, за каждой Вашей точкой или запятой, или пробелом перед запятой.
|
|||
34
Valdis2007
20.08.24
✎
07:40
|
(11) "только после это накладывается условие"
Откуда такая уверенность, ты план запроса видел? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |