Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
17 Дек 2017, 07:32
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: Подсобите с запросом в 8.3, СКД  (Прочитано 2272 раз)

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

Оффлайн Opty

  • *
  • Сообщений: 32
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2015-05-06
  • Сайт: 
  • Профессия: Программист 8.1
День добрый уважаемые!

Повторюсь, что по 1С программер я начинающий, но за плечами приличный опыт работы с MySQL, поэтому есть понимание, как строить сложные запросы с выборками, сравнениями и группировками. Но тут уже 2 недели мучаюсь, не могу сделать отчет по ЗП продавцов.
Есть регистр сведений, в котором указаны бонусы для продавцов дверей, в зависимости от количества проданных дверей а так же ЗП за выход на работу в день. Периодически эти сведения могут меняться.

Просто сведения из этого регистра я без проблем получаю запросом
ВЫБРАТЬ
&Дата КАК Дата,
Бонусы.ДверейОт,
Бонусы.ДверейДо,
Бонусы.ЭтоЕжедневнаяЗП,
Бонусы.Стоимость КАК Бонус
ИЗ
РегистрСведений.ЗадатьБонусыНаДату.СрезПоследних(&Дата, ) КАК Бонусы

Далее есть регистр сведений с заказами, в котором указано количество дверей, дата и продавец.

Вывести отдельно сколько продал продавец дверей за каждый день в определенном периоде так же не составляет труда

ВЫБРАТЬ
Двери.Количество,
Двери.Продавец,
Двери.Период,
Двери.Регистратор,
Двери.Регистратор.Дата
ИЗ
РегистрНакопления.Двери КАК Двери
ГДЕ
Двери.Продавец = &Продавец
И Двери.Период МЕЖДУ &НачалоПериода И &КонецПериода

Проблема в том, что я никак не пойму где тут в конфигураторе прописать связку этих двух таблиц.
Т.е. логика запроса такая
  • посчитали количество дверей за день
  • обратились к регистратору бонусов
  • из него выбрали все параметры на дату продажи дверей и
  • потом, пробежав в цикле на нахождение количества проданных дверей в ОТ и ДО, находим бонус продавца
  • прибавили ЗП за день выхода
  • и получили цифру, сколько человек заработал

Пните плиз, куда копать или где что почитать.

Спасибо)


Оффлайн vitasw

  • *****
  • Сообщений: 2575
  • РЕПУТАЦИЯ: 311
  • КПД: 12%
  • Регистрация: 2015-02-10
  • Сайт: 
  • Профессия: Программист 1С
Левое соединение.
Не очень комильфо держать в РС разнотипные данные.
ЗП за день и бонусы - это несколько разные вещи, затрахаететсь потом разделять.

Оффлайн Opty

  • *
  • Сообщений: 32
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2015-05-06
  • Сайт: 
  • Профессия: Программист 8.1
Левое соединение.
да как я только с ним не пробовал левачить)))))))
мне кажется, что левое тут не подойдет, т.к. нет параметра через который эти таблицы можно связать впрямую. тут связка хитрая - на сравнении и дате, поэтому видимо через запрос в запросе, либо два последовательных запроса (это вообще возможно?)
Не очень комильфо держать в РС разнотипные данные.
ЗП за день и бонусы - это несколько разные вещи, затрахаететсь потом разделять.
согласен, но тут программулька узкоспециализированная (для друга делаю), поэтому вполне подойдет и так. у ЗП за день есть же булево свое на эту тему, так что отделить будет несложно.

Оффлайн cska-fanat-kz

  • 1С:Специалист
  • Глобальный модератор
  • *****
  • Сообщений: 5745
  • РЕПУТАЦИЯ: 1099
  • КПД: 19%
  • Красная армия всех сильней!
  • Регистрация: 2010-11-06
    • Skype: cska-fanat-kz81
  • Сайт: cska-fanat-kz.ucoz.kz
  • Профессия: Разработчик 1С
тут программулька узкоспециализированная (для друга делаю), поэтому вполне подойдет и так

а он в последствие задумается, друг ли вы ему ))))))))
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Оффлайн vitasw

  • *****
  • Сообщений: 2575
  • РЕПУТАЦИЯ: 311
  • КПД: 12%
  • Регистрация: 2015-02-10
  • Сайт: 
  • Профессия: Программист 1С
	Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ДвериОбороты.Продавец,
| БонусыСрез.Стоимость
|ИЗ
| РегистрНакопления.Продажи.Двери(&НачалоДня, &КонецДня, , Продавец = &Продавец) КАК ДвериОбороты
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Бонусы.СрезПоследних(&КонецДня, ) КАК БонусыСрез
| ПО (ДвериОбороты.КоличествоОборот МЕЖДУ БонусыСрез.ДверейОт И БонусыСрез.ДверейДо)";

Запрос.УстановитьПараметр("КонецДня", КонецДня);
Запрос.УстановитьПараметр("НачалоДня", НачалоДня);
Запрос.УстановитьПараметр("Продавец", Продавец);

Оффлайн Opty

  • *
  • Сообщений: 32
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2015-05-06
  • Сайт: 
  • Профессия: Программист 8.1
Вроде и я так же делал, видимо где-то натупил. Но стало вырисовываться уже, спасибо! В понедельник продолжу

Оффлайн Opty

  • *
  • Сообщений: 32
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2015-05-06
  • Сайт: 
  • Профессия: Программист 8.1
А можно очень глупый вопрос, второй день бьюсь и туплю))
Есть 2 записи в регистре сведений - от 1 мая и 5 июня с бонусов в 500 / 555 рублей за количество проданных дверей от 1 до 10



Вот запрос, которым выводится отчет по продавцам

ВЫБРАТЬ
Двери.Продавец,
Бонусы.Стоимость КАК Бонус,
Двери.Количество,
Бонусы.ДверейОт,
Бонусы.ДверейДо,
Двери.Стоимость КАК СтоимостьДверей,
Двери.Регистратор,
Бонусы.Регистратор КАК РегистраторБонусов
ИЗ
РегистрНакопления.Двери КАК Двери
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗадатьБонусыНаДату.СрезПоследних(&ДатаЗапроса, ) КАК Бонусы
ПО (Двери.Количество МЕЖДУ Бонусы.ДверейОт И Бонусы.ДверейДо) И (Бонусы.Регистратор.Дата <= Двери.Регистратор.Дата)

Но на выходе имеем пустые строчки для даты меньшей, чем 5 июня



А ведь там должно выдаваться от 1 до 10 и бонус в размере 500 рублей. Где я ошибся?


Оффлайн Opty

  • *
  • Сообщений: 32
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2015-05-06
  • Сайт: 
  • Профессия: Программист 8.1
Типовой вопрос.

Спасибо, но я с этой штуки изначально и начал, но не смог закончить, полез спрашивать сюда)
Сейчас снова полез туда - создал два запроса
ДВЕРИ
ВЫБРАТЬ
Двери.Продавец,
Двери.Количество,
Двери.Стоимость КАК СтоимостьДверей,
Двери.Регистратор,
Двери.Период
ИЗ
РегистрНакопления.Двери КАК Двери
и БОНУСЫ
ВЫБРАТЬ
    &Дата КАК Дата,
    Бонусы.Стоимость КАК Бонус,
    Бонусы.ДверейОт,
Бонусы.ДверейДо,
Бонусы.Регистратор КАК РегистраторБонусов
ИЗ
    РегистрСведений.ЗадатьБонусыНаДату.СрезПоследних(&Дата) КАК Бонусы

Потом связал их между собой:


И получилось, что БОНУСЫ на ДАТУ он берет правильно


Но теперь отчет не хочет учитывать вот это условие: Двери.Количество МЕЖДУ Бонусы.ДверейОт И Бонусы.ДверейДо

А его я пробовал и в связи наборов данных по разному прописать и как ЛЕВОЕ СОЕДИНЕНИЕ, но результат плачевный(

Добавлено: 29 Июл 2015, 19:03

Немного модифицировал запрос - добавил расчет количества проданных дверей внутри одного заказа, ведь сравнивать ОТ и ДО надо именно по количеству в заказе, а до этого у меня шло сравнение всех позиций подряд

ДВЕРИ
ВЫБРАТЬ
Двери.Продавец,
Двери.Регистратор,
Двери.Период,
СУММА (Двери.Количество) КАК ПроданоДверей,
СУММА (Двери.Стоимость * Двери.Количество) КАК СтоимостьДверей

ИЗ
РегистрНакопления.Двери КАК Двери

СГРУППИРОВАТЬ ПО
Двери.Период,
Двери.Продавец,
Двери.Регистратор

БОНУСЫ
ВЫБРАТЬ
    &Дата КАК Дата,
    Бонусы.Стоимость КАК Бонус,
    Бонусы.ДверейОт,
Бонусы.ДверейДо
ИЗ
    РегистрСведений.ЗадатьБонусыНаДату.СрезПоследних(&Дата) КАК Бонусы
Указал связь между запросами


Стало вот так:



Добавлено: 29 Июл 2015, 19:05

Остался вопрос видимо последний - как прописать выборку из БОНУСЫ по количеству дверей?

так не хочет работать)))))))))
Добавлено: 31 Июл 2015, 16:47

Думал, думал, увидел такое слово как ПОМЕСТИТЬ и решил попробовать с ним. Если я правильно понял, то это создание временной таблицы, которую потом можно использовать. И вот что получилось:

//--выбираем все бонусы, которые попадают на период отчета
ВЫБРАТЬ
Стоимость КАК Бонус,
ДверейОт,
ДверейДо,
Период,
ЭтоЕжедневнаяЗП
ПОМЕСТИТЬ БонусыВсе
ИЗ
РегистрСведений.ЗадатьБонусыНаДату
ГДЕ
Период МЕЖДУ &НачалоПериода И &КонецПериода;

////////////////////////////////////////////////////////////////////////////////

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

////////////////////////////////////////////////////////////////////////////////

//--выбираем все двери из временной таблицы и цепляем к ней бонусы по условиям связи: количество и дата
ВЫБРАТЬ
ДвериВсе.Период,
ДвериВсе.ПроданоДверей,
ДвериВсе.СтоимостьДверей,
БонусыВсе.ДверейОт,
БонусыВсе.ДверейДо,
БонусыВсе.Бонус,
БонусыВсе.Период КАК ПериодБонусов
ИЗ
ДвериВсе
ЛЕВОЕ СОЕДИНЕНИЕ БонусыВсе
ПО
(БонусыВсе.Период <= ДвериВсе.Период И (ДвериВсе.ПроданоДверей МЕЖДУ БонусыВсе.ДверейОт И БонусыВсе.ДверейДо)) ;

 Однако, отдельно две временных таблицы работают прекрасно, но как только я начинаю ЛЕВОЕ СОЕДИНЕНИЕ дверей с бонусами, то начинают появляться какие-то дубли

Стал разбираться что это такое - появляются лишние строки: почему-то бонусы присваиваются все, какие есть, т.е. не работает выборка по дате

И еще один важный вопрос - а как сделать так, чтобы в первой выборке временной таблицы у меня группировка шла не по заказам а по дням? Т.е. сколько всего дверей было продано Брежневым за 4 июня?

Последний раз редактировалось: Opty; 31 Июл 2015, 16:47. Причина: Объединение сообщений


Теги:
 

Как ватащить вытащить дополнительные свойства номенклатуре в одной строке запросом ?

Автор supiyanРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 1
Просмотров: 2805
Последний ответ 30 Июн 2014, 17:48
от Klyacksa
Отбор специфик запросом и последующий выбор в форме выбора

Автор AzamatMCMLXXXVРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 1
Просмотров: 2279
Последний ответ 12 Июн 2012, 14:42
от sergeevds
Проблема с запросом 1с (итоги, начальный, конечный остатки)

Автор cbr900Раздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 0
Просмотров: 3151
Последний ответ 13 Янв 2010, 16:31
от cbr900
динамический список с произвольным запросом - неправильное отображение

Автор msРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 0
Просмотров: 1897
Последний ответ 15 Сен 2010, 16:50
от ms
Как выбрать запросом элементы номенклатуры с одинаковыми артикулами

Автор anateronРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 1
Просмотров: 2791
Последний ответ 16 Янв 2012, 21:36
от Dethmontt

* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
145 Сообщений
ilyay ilyay
63 Сообщений
alex0402
50 Сообщений
AIFrame
50 Сообщений
andron81_81
44 Сообщений
oleg-x
42 Сообщений
BuhRust
32 Сообщений
MuI_I_Ika MuI_I_Ika
31 Сообщений
Golickoff Golickoff
28 Сообщений
Dima Dddd Dima Dddd
24 Сообщений

* Кто онлайн

  • Точка Гостей: 120
  • Точка Скрытых: 0
  • Точка Пользователей: 2
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal