Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
29 июн 2024, 08:09

Запрос

Автор Nosferatu112, 04 мая 2023, 16:46

0 Пользователей и 1 гость просматривают эту тему.

Nosferatu112

Как вытащить стоимость из регистра сведений без запроса, начисления понятие в базе новое и я даже не знаю  чем связать его в запросе, и если я добавляю в конечный запрос стоимость из регистра то получаю 3 с лишним тысячи строк вместо нужных 160
&НаСервере
Процедура ЗаполнитьНаСервере()
Объект.Сотрудники.Очистить();
Объект.НачисленияСотрудников.Очистить();
Если (НЕ ЗначениеЗаполнено(Объект.ПериодНачала) И ЗначениеЗаполнено(Объект.ПериодОкончания))
ИЛИ (ЗначениеЗаполнено(Объект.ПериодНачала) И НЕ ЗначениеЗаполнено(Объект.ПериодОкончания)) Тогда
Сообщить("Документ не заполнен. Для заполнения необходимо указать полный период заполнения в шапке документа или не указывать период вообще.");
Возврат;
КонецЕсли;



Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| вд_СтавкиНачисленийМотивацийСрезПоследних.Начисление КАК Начисление,
| СУММА(вд_СтавкиНачисленийМотивацийСрезПоследних.Стоимость) КАК Стоимость
|ПОМЕСТИТЬ ВТСуммы
|ИЗ
| РегистрСведений.вд_СтавкиНачисленийМотиваций.СрезПоследних КАК вд_СтавкиНачисленийМотивацийСрезПоследних
|
|СГРУППИРОВАТЬ ПО
| вд_СтавкиНачисленийМотивацийСрезПоследних.Начисление
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВозвратПутевогоЛистаЗаявки.Заказ.АдресДоставки.ЗонаДоставки КАК ЗаказАдресДоставкиЗонаДоставки,
| вд_ЗонаМоскваСити.Значение.Зона КАК ЗначениеЗона
|ПОМЕСТИТЬ ВТЗоны
|ИЗ
| Константа.вд_ЗонаМоскваСити КАК вд_ЗонаМоскваСити
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ВозвратПутевогоЛиста.Заявки КАК ВозвратПутевогоЛистаЗаявки
| ПО (ВозвратПутевогоЛистаЗаявки.Заказ.АдресДоставки.ЗонаДоставки = вд_ЗонаМоскваСити.Значение)
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ДанныеСлужбыДоставки.Заказ) КАК Заказ,
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВЫБОР
| КОГДА ДанныеСлужбыДоставки.ПопалВОкно
| ТОГДА ДанныеСлужбыДоставки.Заказ
| КОНЕЦ) КАК ПопалВОкно,
| СУММА(ДанныеСлужбыДоставки.Километраж) КАК Километраж,
| СУММА(ВЫБОР
| КОГДА ДанныеСлужбыДоставки.Условие1
| И ДанныеСлужбыДоставки.Условие2
| ТОГДА ДанныеСлужбыДоставки.Километраж
| ИНАЧЕ 0
| КОНЕЦ) КАК Километраж12,
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВЫБОР
| КОГДА ДанныеСлужбыДоставки.Условие1
| И ДанныеСлужбыДоставки.Условие2
| ТОГДА ДанныеСлужбыДоставки.Заказ
| КОНЕЦ) КАК Заказ12,
| ВЫБОР
| КОГДА КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ДанныеСлужбыДоставки.Заказ) > 0
| ТОГДА ВЫРАЗИТЬ(КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВЫБОР
| КОГДА ДанныеСлужбыДоставки.ПопалВОкно
| ТОГДА ДанныеСлужбыДоставки.Заказ
| КОНЕЦ) * 100 / КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ДанныеСлужбыДоставки.Заказ) КАК ЧИСЛО(10, 0))
| ИНАЧЕ 0
| КОНЕЦ КАК ПроцентПопаданияВОкно,
| ПараметрыДоставокСрезПоследних.Водитель КАК Водитель,
| ПараметрыДоставокСрезПоследних.ДатаОтгрузки КАК ДатаОтгрузки
|ПОМЕСТИТЬ ВТ_Данные
|ИЗ
| РегистрСведений.ДанныеСлужбыДоставки КАК ДанныеСлужбыДоставки
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПараметрыДоставок.СрезПоследних({(&Период)}, ) КАК ПараметрыДоставокСрезПоследних
| ПО ДанныеСлужбыДоставки.Заказ = ПараметрыДоставокСрезПоследних.РаспоряжениеНаДоставку
|ГДЕ
| ПараметрыДоставокСрезПоследних.ДатаОтгрузки МЕЖДУ &ДатаНач И &ДатаКон
|
|СГРУППИРОВАТЬ ПО
| ПараметрыДоставокСрезПоследних.Водитель,
| ПараметрыДоставокСрезПоследних.ДатаОтгрузки
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ЗарплатаВодителяРасчет.ВозвратПЛ.Водитель КАК ВозвратПЛВодитель,
| ЗарплатаВодителяРасчет.ВозвратПЛ КАК ВозвратПЛ,
| ЗарплатаВодителяРасчет.ТипПутевогоЛиста КАК ТипПутевогоЛиста,
| ЗарплатаВодителяРасчет.КоличествоПолныхБутылок КАК КоличествоПолныхБутылок,
| ЗарплатаВодителяРасчет.КоличествоТочек КАК КоличествоТочек,
| ЗарплатаВодителяРасчет.СуммаВесовогоТовара КАК СуммаВесовогоТовара,
| ЗарплатаВодителяРасчет.КоличествоКулеров КАК КоличествоКулеров,
| ЗарплатаВодителяРасчет.ВозвратПЛ.Дата КАК ВозвратПЛДата,
| ЗарплатаВодителяРасчет.ВозвратПЛ.Автомобиль.Личный КАК ВозвратПЛАвтомобильЛичный,
| ВозвратПутевогоЛистаЗаявки.Заказ.Ночь КАК ЗаказНочь,
| ВозвратПутевогоЛистаЗаявки.Реализация.ДатаОтгрузки КАК РеализацияДатаОтгрузки
|ПОМЕСТИТЬ ВТОснДанные
|ИЗ
| Документ.ЗарплатаВодителя.Расчет КАК ЗарплатаВодителяРасчет
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ВозвратПутевогоЛиста.Заявки КАК ВозвратПутевогоЛистаЗаявки
| ПО ЗарплатаВодителяРасчет.ВозвратПЛ = ВозвратПутевогоЛистаЗаявки.Ссылка
|ГДЕ
| ЗарплатаВодителяРасчет.ВозвратПЛ.Дата >= &ДатаНач
| И ЗарплатаВодителяРасчет.ВозвратПЛ.Дата <= &ДатаКон
| И ЗарплатаВодителяРасчет.Водитель = &Сотрудник
|
|СГРУППИРОВАТЬ ПО
| ЗарплатаВодителяРасчет.ВозвратПЛ.Водитель,
| ЗарплатаВодителяРасчет.ВозвратПЛ,
| ЗарплатаВодителяРасчет.ТипПутевогоЛиста,
| ЗарплатаВодителяРасчет.КоличествоПолныхБутылок,
| ЗарплатаВодителяРасчет.КоличествоТочек,
| ЗарплатаВодителяРасчет.СуммаВесовогоТовара,
| ЗарплатаВодителяРасчет.КоличествоКулеров,
| ЗарплатаВодителяРасчет.ВозвратПЛ.Дата,
| ЗарплатаВодителяРасчет.ВозвратПЛ.Автомобиль.Личный,
| ВозвратПутевогоЛистаЗаявки.Реализация.ДатаОтгрузки,
| ВозвратПутевогоЛистаЗаявки.Заказ.Ночь
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ВТОснДанные.ВозвратПЛВодитель КАК Водитель,
| ВТОснДанные.ВозвратПЛ КАК ВозвратПЛ,
| ВТОснДанные.ТипПутевогоЛиста КАК ТипПутевогоЛиста,
| ВТОснДанные.КоличествоПолныхБутылок КАК КоличествоПолныхБутылок,
| ВТОснДанные.КоличествоТочек КАК КоличествоТочек,
| ВТОснДанные.СуммаВесовогоТовара КАК СуммаВесовогоТовара,
| ВТОснДанные.КоличествоКулеров КАК КоличествоКулеров,
| ВТОснДанные.ВозвратПЛДата КАК Дата,
| ВТОснДанные.ВозвратПЛАвтомобильЛичный КАК ВозвратПЛАвтомобильЛичный,
| МАКСИМУМ(ЕСТЬNULL(ВТ_Данные.Километраж12, 0)) КАК Километраж12,
| МАКСИМУМ(ЕСТЬNULL(ВТ_Данные.ПопалВОкно, 0)) КАК ПопалВОкно,
| ВТОснДанные.ЗаказНочь КАК ЗаказНочь
|ИЗ
| ВТОснДанные КАК ВТОснДанные
| ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Данные КАК ВТ_Данные
| ПО ВТОснДанные.ВозвратПЛВодитель = ВТ_Данные.Водитель
| И ВТОснДанные.РеализацияДатаОтгрузки = ВТ_Данные.ДатаОтгрузки
|
|СГРУППИРОВАТЬ ПО
| ВТОснДанные.ВозвратПЛВодитель,
| ВТОснДанные.ВозвратПЛ,
| ВТОснДанные.ТипПутевогоЛиста,
| ВТОснДанные.КоличествоПолныхБутылок,
| ВТОснДанные.КоличествоТочек,
| ВТОснДанные.СуммаВесовогоТовара,
| ВТОснДанные.КоличествоКулеров,
| ВТОснДанные.ВозвратПЛДата,
| ВТОснДанные.ВозвратПЛАвтомобильЛичный,
| ВТОснДанные.ЗаказНочь";

Запрос.УстановитьПараметр("ДатаКон", Объект.ПериодОкончания);
Запрос.УстановитьПараметр("ДатаНач", Объект.ПериодНачала);
Запрос.УстановитьПараметр("Сотрудник", Объект.Сотрудник);
//Запрос.УстановитьПараметр("Дата",Дата("01.02.2023 00:00:00"));

РезультатЗапроса = Запрос.Выполнить();

Выб = РезультатЗапроса.Выбрать();

Пока Выб.Следующий() Цикл

ТабСотр = Объект.Сотрудники.Добавить();
ТабСотр.Сотрудник = Выб.Водитель;
ТабСотр.ТипПЛ = Выб.ТипПутевогоЛиста;
ТабСотр.Смена = Выб.Дата;
ТабСотр.МестоВТранспорте = Истина;
ТабСотр.ИД = Выб.Дата;

ТабНач = Объект.НачисленияСотрудников.Добавить();
ТабНач.ВозвратПЛ = Выб.ВозвратПЛ;
ТабНач.Сотрудник = Выб.Водитель;
ТабНач.Начисление = Справочники.вд_НачисленияМотиваций.ТочкаДоставки;
ТабНач.Количество = Выб.КоличествоТочек;
ТабНач.ИД = Выб.Дата;
ТабНач.Стоимость = 100;
ТабНач.Сумма = ТабНач.Количество * ТабНач.Стоимость;


ТабНач = Объект.НачисленияСотрудников.Добавить();
ТабНач.ВозвратПЛ = Выб.ВозвратПЛ;
ТабНач.Начисление = Справочники.вд_НачисленияМотиваций.Вода19лЗа1бутыль;
ТабНач.Сотрудник = Выб.Водитель;
ТабНач.Количество = Выб.КоличествоПолныхБутылок;
ТабНач.ИД = Выб.Дата;
ТабНач.Стоимость = 28;
ТабНач.Сумма = ТабНач.Количество * ТабНач.Стоимость;

ТабНач = Объект.НачисленияСотрудников.Добавить();
ТабНач.ВозвратПЛ = Выб.ВозвратПЛ;
ТабНач.Начисление = Справочники.вд_НачисленияМотиваций.КулераЗа1шт;
ТабНач.Сотрудник = Выб.Водитель;
ТабНач.Количество = Выб.КоличествоКулеров;
ТабНач.ИД = Выб.Дата;
ТабНач.Стоимость = 40;
ТабНач.Сумма = ТабНач.Количество * ТабНач.Стоимость;

ТабНач = Объект.НачисленияСотрудников.Добавить();
ТабНач.ВозвратПЛ = Выб.ВозвратПЛ;
ТабНач.Начисление = Справочники.вд_НачисленияМотиваций.МелкаяВода1кг;
ТабНач.Сотрудник = Выб.Водитель;
ТабНач.Количество = Выб.СуммаВесовогоТовара;
ТабНач.ИД = Выб.Дата;
ТабНач.Стоимость = 2.10;
ТабНач.Сумма = ТабНач.Количество * ТабНач.Стоимость;

ТабНач = Объект.НачисленияСотрудников.Добавить();
ТабНач.ВозвратПЛ = Выб.ВозвратПЛ;
ТабНач.Начисление = Справочники.вд_НачисленияМотиваций.НочнойЗаказ;
ТабНач.Сотрудник = Выб.Водитель;
//ТабНач.Количество = Выб.Ночь;
ТабНач.ИД = Выб.Дата;
ТабНач.Стоимость = 150;
ТабНач.Сумма = ТабНач.Количество * ТабНач.Стоимость;

ТабНач = Объект.НачисленияСотрудников.Добавить();
ТабНач.ВозвратПЛ = Выб.ВозвратПЛ;
ТабНач.Начисление = Справочники.вд_НачисленияМотиваций.ДоплатаАЗС1км;
ТабНач.Сотрудник = Выб.Водитель;
ТабНач.Количество = Выб.Километраж12;
ТабНач.ИД = Выб.Дата;
ТабНач.Стоимость = 10;
ТабНач.Сумма = ТабНач.Количество * ТабНач.Стоимость;

ТабНач = Объект.НачисленияСотрудников.Добавить();
ТабНач.ВозвратПЛ = Выб.ВозвратПЛ;
ТабНач.Начисление = Справочники.вд_НачисленияМотиваций.ПопаданиеВОкноДоставки;
ТабНач.Сотрудник = Выб.Водитель;
ТабНач.Количество = Выб.ПопалВОкно;
ТабНач.ИД = Выб.Дата;
ТабНач.Стоимость = 20;
ТабНач.Сумма = ТабНач.Количество * ТабНач.Стоимость;

ТабНач = Объект.НачисленияСотрудников.Добавить();
ТабНач.ВозвратПЛ = Выб.ВозвратПЛ;
ТабНач.Начисление = Справочники.вд_НачисленияМотиваций.ЗимнийКофффициент;
ТабНач.Сотрудник = Выб.Водитель;
Если Выб.Дата >= Дата("01.12.2023 00:00:00") И Выб.Дата <= Дата("28.02.2024 23:59:59") Тогда
ТабНач.Количество = 1;
Иначе
ТабНач.Количество = 0;
КонецЕсли;
ТабНач.ИД = Выб.Дата;
ТабНач.Стоимость = 250;
ТабНач.Сумма = ТабНач.Количество * ТабНач.Стоимость;

ТабНач = Объект.НачисленияСотрудников.Добавить();
ТабНач.ВозвратПЛ = Выб.ВозвратПЛ;
ТабНач.Начисление = Справочники.вд_НачисленияМотиваций.АрендаАвтомобиляКомпании;
ТабНач.Сотрудник = Выб.Водитель;
Если Выб.ВозвратПЛАвтомобильЛичный = Истина Тогда
ТабНач.Количество = 1;
Иначе
ТабНач.Количество = 0;
КонецЕсли;
ТабНач.ИД = Выб.Дата;
ТабНач.Стоимость = 2000;
ТабНач.Сумма = ТабНач.Количество * ТабНач.Стоимость;

ТабНач = Объект.НачисленияСотрудников.Добавить();
ТабНач.ВозвратПЛ = Выб.ВозвратПЛ;
ТабНач.Начисление = Справочники.вд_НачисленияМотиваций.ДоплатаЗаМоскваСити;
ТабНач.Сотрудник = Выб.Водитель;
//ТабНач.Количество = ?;
ТабНач.ИД = Выб.Дата;

//ТабНач = Объект.НачисленияСотрудников.Добавить();
//ТабНач.ВозвратПЛ = Выб.ВозвратПЛ;
//ТабНач.Начисление = Справочники.вд_НачисленияМотиваций.ДоплатаЗаПодъем;
//ТабНач.Сотрудник = Выб.Водитель;


//Если ТабНач.Начисление = Справочники.вд_НачисленияМотиваций.НайтиПоНаименованию("ДоплатаЗаПодъем") Тогда
// ТабНач.Количество = Выб.Километраж12;
//КонецЕсли;

КонецЦикла;

КонецПроцедуры

&НаКлиенте
Процедура Заполнить(Команда)
ЗаполнитьНаСервере();
КонецПроцедуры

&НаКлиенте
Процедура СотрудникиПриАктивизацииСтроки(Элемент)

ПодключитьОбработчикОжидания("ОбработчикОжиданияРасчет", 0.1, Истина);

КонецПроцедуры

&НаКлиенте
Процедура ОбработчикОжиданияРасчет()
СписокРасчет = ЭтаФорма.Элементы.НачисленияСотрудников;
Если ЭтаФорма.Элементы.Сотрудники.ТекущиеДанные <> Неопределено И НЕ ЭтаФорма.Элементы.Сотрудники.ТекущиеДанные.Сотрудник = ПредопределенноеЗначение("Справочник.Контрагенты.ПустаяСсылка") Тогда
СписокРасчет.ОтборСтрок = Новый ФиксированнаяСтруктура("Сотрудник,ИД", ЭтаФорма.Элементы.Сотрудники.ТекущиеДанные.Сотрудник,ЭтаФорма.Элементы.Сотрудники.ТекущиеДанные.ИД);
КонецЕсли;
КонецПроцедуры

Nosferatu112

Это полностью мой код но я с этимзапросом замаялся уже 3 условия не полчаеться сделать
1. это стоимость из регистра
2. это Количество заказов в документе Возврат ПЛ, у которых есть отметка Ночь тоже не пойму как вытащить
3. И количество заказов покупателей документа Возврат ПЛ, у которых ЗаказПокупателя.АдресДоставки.ЗонаДоставки указана в Константе  вд_ЗонаМоскваСити тоже хрен пойми как как сделать всё это в одном запросе что бы не выскакивали тысячи задвоений

Максим75

Nosferatu112, так а зачем константу связывать с чем-то?
сразу условие нарисовать, где ЗонаДоставки=&НужнаЗона, а потом параметру присвоить значение из константы.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск