7.7 Получение остатков

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем shergar, 7 май 2007.

  1. TopicStarter Overlay
    shergar
    Offline

    shergar

    Регистрация:
    8 дек 2006
    Сообщения:
    11
    Симпатии:
    0
    Баллы:
    1
    Подскажите пожалуйста варианты решения.
    Нужно чтобы при проведении документа Реализация в ТиС проверялся долг на ОсновноеСвойство контрагента, если этот долг превышает лимит, то документ не должен проводится. ОсновноеСвойство контрагента это менеджеры. У менеджера несколько контрагентов и если у контрагентов этого менеджера есть долг, превышающий лимит, который устанавливается на каждого менеджера, то документ не должен проводится.
    При проведении документа я создаю запрос, который формирует остатки по регистрам Покупатели и Поставщики, группируя по ОсновномуСвойству. Но суммы остатков другие! нежели чем при формировании отчета Ведомость по контрагентам. Это видимо из-за того что есть обращения к этим регистрам в документе.
    Еще пробовала с помощью СводныйОстаток получить остатки по контрагентам этого менеджера, но здесь все остатки равны нулю.
    Может, что подскажете?

    Код:
    МенеджерДляЗапроса=Контрагент.ОсновноеСвойство.ЗначениеСвойства;
    ВремРегистры= СоздатьОбъект("Регистры");
    ВремПокупатели= ВремРегистры.Покупатели;
    ТекущийДолг=ВремПокупатели.СводныйОстаток(Фирма,Договор,,,,"СуммаВал");
    Процедура ДолгМенеджера(МенеджерДляЗапроса,ТекущийДолг,ВремПокупатели)
    Перем Запрос, ТекстЗапроса;           
    ТЗ=СоздатьОбъект("ТаблицаЗначений");
    ТЗ.НоваяКолонка("Договор","Справочник");
    ДатаКонца = ПолучитьДатуТА();
    ДатаНачала= Дата(ДатаКонца)-1;
    
    ДолгМенеджераСумма=0;   
    //Создание объекта типа Запрос
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса = 
    "//{{ЗАПРОС(Сформировать)
    |Период с ДатаНачала по ДатаКонца;   
    |Контрагент = Регистр.Покупатели.Договор.Владелец, Регистр.Поставщики.Договор.Владелец;
    |Договор = Регистр.Покупатели.Договор, Регистр.Поставщики.Договор;
    |Менеджер = Регистр.Поставщики.Договор.Владелец.ОсновноеСвойство.ЗначениеСвойства, Регистр.Покупатели.Договор.Владелец.ОсновноеСвойство.ЗначениеСвойства;
    |Сумма = Регистр.Поставщики.СуммаРуб, Регистр.Покупатели.СуммаРуб;
    |Фирма = Регистр.Покупатели.Фирма, Регистр.Поставщики.Фирма;
    |Функция НачОст = НачОст(Сумма);
    |Функция Приход = Приход(Сумма);
    |Функция Расход = Расход(Сумма);
    |Функция КонОст = КонОст(Сумма);
    |Группировка Менеджер;
    |Группировка Контрагент без групп;
    |Условие (Менеджер=МенеджерДляЗапроса);  
    |"//}}ЗАПРОС;   
    // Если ошибка в запросе, то выход из процедуры
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
    Возврат;
    КонецЕсли;
    
    
    
    Пока Запрос.Группировка(1) = 1 Цикл
    
    
    Пока Запрос.Группировка(2) = 1 Цикл  
    
    Если (Запрос.Контрагент=Контрагент) Тогда
    //Если ТекущийДолг<>0 Тогда
    //    Плюс=(ТекущийДолг+СуммаВзаиморасчетов);//(Запрос.Сумма+СуммаВзаиморасчетов)*(-1);
    //    ДолгМенеджераСумма=ДолгМенеджераСумма+Плюс; 
    //    //ДолгМенеджераСумма=ДолгМенеджераСумма+Запрос.Сумма;    
    //КонецЕсли;
    Иначе
    //    ДолгМенеджераСумма=ДолгМенеджераСумма+Запрос.Сумма;        
    тз.НоваяСтрока();
    тз.Договор = Запрос.Договор;
    КонецЕсли;
    КонецЦикла;     
    КонецЦикла; 
    
    тз.ВыбратьСтроки();
    Пока тз.ПолучитьСтроку() = 1 Цикл 
    Догов=ТЗ.Договор;                 ДолгМенеджераСумма=ДолгМенеджераСумма+ВремПокупатели.СводныйОстаток(,Догов,,,,"СуммаВал");    
    КонецЦикла;
    
    КонецПроцедуры
    
    
  2. Amishechka
    Offline

    Amishechka Опытный в 1С

    Регистрация:
    8 сен 2006
    Сообщения:
    361
    Симпатии:
    1
    Баллы:
    26
    Чего-то у тебя тут намудрено. Зачем тебе поставщики? Какой тип имеет основное свойство контрагентов? Это справочник "Пользователи"? Ведь менеджеры это пользователи? Или там справочник "Сотрудники"?

    Для пользователей все просто:
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "
    |ФирмаР = Регистр.Покупатели.Фирма;
    |АвторР = Регистр.Покупатели.КредДокумент.Автор;
    |СуммаРуб = Регистр.Покупатели.СуммаРуб;
    |Функция СуммаРубКонОст = КонОст(СуммаРуб);
    |Группировка Автор;
    |Условие(ФирмаР = Фирма);
    |Условие(СуммаРубКонОст>0);
    |Условие(АвторР = Автор);";
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
    Возврат;
    КонецЕсли;
    Долг=Запрос.СуммаРубКонОст;

    Для справочника сотрудники не на много сложнее:
    Менеджер=Контрагент.ОсновноеСвойство.ЗначениеСвойства;
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "
    |ФирмаР = Регистр.Покупатели.Фирма;
    |КонтрагентР = Регистр.Покупатели.Договор.Владелец;
    |СуммаРуб = Регистр.Покупатели.СуммаРуб;
    |Функция СуммаРубКонОст = КонОст(СуммаРуб);
    |Группировка Контрагент;
    |Условие(ФирмаР = Фирма);
    |Условие(СуммаРубКонОст>0);
    |Условие(КонтрагентР.ОсновноеСвойство.ЗначениеСвойства = Менеджер);";
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
    Возврат;
    КонецЕсли;
    Долг=Запрос.СуммаРубКонОст;
  3. TopicStarter Overlay
    shergar
    Offline

    shergar

    Регистрация:
    8 дек 2006
    Сообщения:
    11
    Симпатии:
    0
    Баллы:
    1
    Менеджеры - это справочник "пользователи".
    Авторы и менеджеры не совпадают... заводит документ один автор, а контрагент относится к другому, менеджеру. Мне нужно к которуму относится контрагент документа.
    Извиняюсь за неправильную постановку кода. Там где сводный остаток это отдельная часть программы, а запрос другая, просто приведены как 2 варианта не связанных.
    Да у меня именоо второй вариант приведенного вами кода. Я пробовала получить конечный остаток на менеджера. Так этот остаток различается с тем что я получаю в отчете Ведомость по контрагентам
    Честно говоря не понимаю почему различия в этих суммах, но при проведении документа реализация есть обращения к регистру Покупатели. Может по этому...
  4. TopicStarter Overlay
    shergar
    Offline

    shergar

    Регистрация:
    8 дек 2006
    Сообщения:
    11
    Симпатии:
    0
    Баллы:
    1
    Вообщем, получить остаток с помощью запроса в документе Реализация получается. Но сумма остатка не такая, как когда я получаю с помощью такого же запроса но в отчете.