Имя: Пароль:
1C
1C 7.7
v7: Получение долга контрагента прямым запросом.
0 zenon46
 
08.09.21
15:02
Доброго дня!
Как (и возможно ли), получить долг контрагента прямым запросом, в 7.7 в компоненте оперативный учет, по регистрами ( https://s.mail.ru/fUAT/aZedkxX97 ), по переданному списку контрагентов (измерения такого нет, есть договор собственно это подчинение контрагенту) в качестве параметра в запрос ?
1 Ёпрст
 
08.09.21
15:24
(0) Можно. Разрешаю.
2 zenon46
 
08.09.21
15:28
(1) Пасиб
3 8 bit
 
08.09.21
15:29
У договора есть ParentID, который и есть ссылка на контрагента.
4 ДенисЧ
 
08.09.21
15:30
(3) Точно PArentID - это ссылка на владельца? А не на родителя?
5 zenon46
 
08.09.21
15:31
(4) владелец ParentExt
6 Ёпрст
 
08.09.21
15:31
Тип того будет, например, в синтаксисе sqllite^

    |inner join [Справочник.Договоры] Договор ON Договор.id = Рег.Договор
    |and Договор.parentext in (select val from ВыбКонтрагент)
7 8 bit
 
08.09.21
15:33
(5) умничка. Вот тебе конфетка: https://www.1cpp.ru/forum/YaBB.pl?board=query
8 zenon46
 
08.09.21
15:34
(6) спасибо
9 Ёпрст
 
08.09.21
15:40
Ну и вот, например, кусок с модуля проведения для получения текущего долга на дату проводимого дока


        мд = СоздатьОбъект("MetaDataWork");
    АктуальностьИтогов = ИтогиАктуальны();
    
    Если <условие> Тогда //контролировать только по элементу
        НачПериод = мд.ПолучитьНачПериода(ДатаДок);//начало периода
        ПредПериод = мд.ПолучитьНачПериода(НачПериод-1);//предыдущее начало периода останков
        Запрос.Подставлять("НачПериод",НачПериод);
        Запрос.Подставлять("КонПериод",ТекущийДокумент());//для вычисления НачОст
        Запрос.Подставлять("ТипУчета",ТипУчета);
        Запрос.Подставлять("ВыбКонтрагент",ВыбКонтрагент);
        
        
        
        ТекстЗапроса ="
        |SELECT
        |        Договор.parentext --[Контрагент :Справочник.Контрагенты]
        |        ,SUM(Рег.Сумма) [Долг :Число]
        |From
        |    (
        |
        |   SELECT
        |         Итоги.Договор Договор
        |        ,Итоги."+ВыбСумма+" Сумма
        
        |    FROM
        |        [РегистрИтоги.Покупатели] as Итоги
        |    WHERE
        |        Итоги.period = :ПредПериод
        |        and Итоги.ТипУчета = :ТипУчета
        |";
        Запрос.Подставлять("ПредПериод",НачПериод);
        Если АктуальностьИтогов=0 Тогда
            Запрос.Подставлять("ПредПериод",ПредПериод);
            ТекстЗапроса=ТекстЗапроса+"
            |    UNION ALL
            |
            |    SELECT
            |         Движения.Договор
            |        ,Движения."+ВыбСумма+"* (1 - Движения.debkred * 2)
            |    FROM
            |        [Регистр.Покупатели] AS Движения
            |    WHERE
            |     Движения.idx_date_time_iddoc_lineno_actno BETWEEN :НачПериод And :КонПериод~~~
            |        and Движения.ТипУчета = :ТипУчета
            |";
            
        КонецЕсли;
        
        ТекстЗапроса=ТекстЗапроса+"
        |    ) Рег
        |inner join [Справочник.Договоры] Договор ON Договор.id = Рег.Договор
        |and Договор.parentext = :ВыбКонтрагент
        |Group by Договор.parentext
        |";
        
        ТекущийДолг = 0+запрос.ВыполнитьЗапрос(ТекстЗапроса,1);
        
        //проверка текущего долга:    
        Если ТекущийДолг + СуммаВзаиморасчетовУпр > ДопКредит+ВыбКонтрагент.КредитСумма.Получить(ДатаДок) Тогда
            ВалютаКредита = Договор.ВалютаВзаиморасчетов;
            СтрокаСообщ = "Сумма накладной вместе с текущим долгом превышает сумму максимального кредита клиенту!
            |   Текущий долг:   "+глФРМ(ТекущийДолг,ВалютаКредита)+"
            |   Остаток кредита:"+глФРМ(ВыбКонтрагент.КредитСумма.Получить(ДатаДок) - ТекущийДолг,ВалютаКредита)+"
            |   Сумма накладной:"+ глФРМ(СуммаВзаиморасчетовУпр,ВалютаКредита)+"!";
            глНеПроводить(Контекст,СтрокаСообщ);
            Возврат 0;
        КонецЕсли;
        //проверка просроченного долга:    
10 Ёпрст
 
08.09.21
15:41
+9
ЗЫ:  это для дбф на 1sqlite
для sql запрос попроще будет, там можно вт заюзать
11 zenon46
 
08.09.21
15:42
(10) да я на ВТ и делаю
12 Злопчинский
 
09.09.21
16:01
Извращенцы.
что у вас такого - базы по 100ГБ что приходитяс прямыми?
я как-то живу до сих пор на чорных... или тупо выборками.
13 1Сергей
 
09.09.21
16:08
(12) Извращенцы те, кто на клюшках сидят :)
14 Mikeware
 
09.09.21
17:33
(12) а что, 100 - это много? Ну и прямые запросы - они просто удобнее. они на то и прямые, что не кривые.
я за 12 лет поддержки чорных вообще не писал. совсем. Даже если что-то надо быстро посмотреть - в консоли/QA прямой сделать гораздо проще. (13) если все работает - переходить на тормозное угребище незачем.
15 Злопчинский
 
09.09.21
20:08
(14) Спасибо, грамотно проглумился ;-)
16 Ёпрст
 
09.09.21
22:20
(12) ну, запрос в модуле проведения должен быть только прямым, если важна скорость проведения дока.
17 Злопчинский
 
10.09.21
04:53
(16) зарубить по максимум првоедение (_ж_) и будет норм... ;-)
а так-то - конечно, да...
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан