Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Получение долга контрагента прямым запросом.

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

    |inner join [Справочник.Договоры] Договор ON Договор.id = Рег.Договор 
    |and Договор.parentext in (select val from ВыбКонтрагент)
   8 bit
 
7 - 08.09.21 - 15:33
(5) умничка. Вот тебе конфетка: https://www.1cpp.ru/forum/YaBB.pl?board=query
   zenon46
 
8 - 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 запрос попроще будет, там можно вт заюзать
   zenon46
 
11 - 08.09.21 - 15:42
(10) да я на ВТ и делаю
   Злопчинский
 
12 - 09.09.21 - 16:01
Извращенцы.
что у вас такого - базы по 100ГБ что приходитяс прямыми?
я как-то живу до сих пор на чорных... или тупо выборками.
   1Сергей
 
13 - 09.09.21 - 16:08
(12) Извращенцы те, кто на клюшках сидят :)
   Mikeware
 
14 - 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) зарубить по максимум првоедение (_ж_) и будет норм... ;-)
а так-то - конечно, да...

Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.