Имя: Пароль:
1C
 
Получить документ оплаты после которого клиент оплатил 50% от заказа
0 ИС-2
 
naïve
10.02.15
16:17
Клиент оформляет заказ и перечисляет деньги порциями. Надо найти сколько времени прошло с момента оформления заказа до момент когда клиент заплатил 50% и вывести какой документ создал этот платеж (после него заказ отправляют в работу)

Если делать через таблицу РасчетыСКонтрагентами.ОстаткиИОбороты (связь по сделке, контроль остатков по СуммаВзаиморасчетовКонечныйОстаток), то работает очень медленно. Сам запрос завтра скину.

Можно еще попробовать обороты по нарастающему итогу, но тут ХЗ что-то будет со скоростью.

Есть еще какие-то варианты как сделать быстрый запрос?
1 ИС-2
 
naïve
10.02.15
16:21
продублировал связь между таблицами в виртуальных параметрах - скорость выросла в 50 раз
2 Кир Пластелинин
 
10.02.15
16:35
интересно было бы посмотреть на текст запроса...
3 Жан Пердежон
 
10.02.15
16:40
(1) продолжайте наблюдения
4 ИС-2
 
naïve
11.02.15
07:12
ВЫБРАТЬ
    Запрос_ЗаказыПокупателяОбороты.ЗаказПокупателя,
    Запрос_ЗаказыПокупателяОбороты.ЗаказПокупателя.Дата КАК Дата_ЗаказПокупателя,
    Запрос_ЗаказыПокупателяОбороты.ЗаказПокупателя.СуммаДокумента КАК Сумма_ЗаказПокупателя
ПОМЕСТИТЬ ВТ_ЗаказПокупателя
ИЗ
    (ВЫБРАТЬ
        ВЫРАЗИТЬ(ЗаказыПокупателейОбороты.ЗаказПокупателя КАК Документ.ЗаказПокупателя) КАК ЗаказПокупателя,
        ЗаказыПокупателейОбороты.КоличествоПриход КАК КоличествоПриход
    ИЗ
        РегистрНакопления.ЗаказыПокупателей.Обороты(
                &ДатаНач,
                &ДатаКон,
                ,
                ЗаказПокупателя ССЫЛКА Документ.ЗаказПокупателя
                    И ВЫРАЗИТЬ(ЗаказПокупателя КАК Документ.ЗаказПокупателя).Организация = &Орг) КАК ЗаказыПокупателейОбороты) КАК Запрос_ЗаказыПокупателяОбороты
;

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

СГРУППИРОВАТЬ ПО
    ВТ_ЗаказПокупателя.ЗаказПокупателя
5 Мимохожий Однако
 
11.02.15
07:20
Добавь реквизит или дополнительное свойство (Процент оплаты) и при проведении фиксируй. Тогда готовый отчет можно получать сразу.
6 ИС-2
 
naïve
11.02.15
07:29
(5) так и хочу, но отчет надо срочно сделать.
7 Кир Пластелинин
 
11.02.15
10:15
как минимум - пробуем избавиться от соединения с вирт. таблицей оборотов во втором пакете. потом в первом пакете проиндексировать по полю "ЗаказПокупателя".
8 ИС-2
 
naïve
12.02.15
09:31
(7) про РасчетыСКонтрагентами.ОстаткиИОбороты или  РегистрНакопления.ЗаказыПокупателей.Обороты(


У меня сейчас другая проблема появилась - МИНИМУМ(РасчетыСКонтрагентамиОстаткиИОбороты.Регистратор) КАК ДокументОплатыЗаказа возвращает не самый ранний документ, а потом который ему приспичило вернуть.

Как можно получить действительно самый ранний документ? Добавлять еще 1 связь и таблицу (в начале получаем самую малую дату, а потом к ней присоединяем регистратор с малой датой) не хочется
Основная теорема систематики: Новые системы плодят новые проблемы.