Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 01:53

Подсчёт суммы задолжности дебитора по процентам. Передача данных из регистра в реквизиты справочника.

Автор cobra152, 31 янв 2024, 19:55

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

cobra152

Всем добрый день. я начинающий программист в 1с и столкнулся с двумя проблемами при разработки конфигурации. Ситуация такая: 1. Необходимо подсчитать сумму задолженности дебитора по процентам и вписать результат в регистр накоплений. Сделал подсчёт просто всей суммы, но используя проценты которые хранятся в регистрах сведений ничего не выходит.
 
Функция РасчётСуммыЗадолжностиПоПроцентам()
      
   Запрос = Новый Запрос;
   Запрос.Текст =
      "ВЫБРАТЬ
      |   ВыдачаСсуды.Дебитор КАК Дебитор,
      |   ВыдачаСсуды.Счёт КАК Счёт,
      |   ВыдачаСсуды.СуммаСсуды КАК СуммаСсуды,
      |   КлючеваяСтавкаЦБ.Период КАК Период,
      |   КлючеваяСтавкаЦБ.Ставка КАК Ставка,
      |   ПроцентныеСтавкиПоДебиторам.ПроцентнаяСтавка КАК ПроцентнаяСтавка,
      |   ПроцентныеСтавкиПоДебиторам.Период КАК Период1,
      |   ПроцентныеСтавкиПоДебиторам.Дебитор.Ссылка КАК ДебиторСсылка
      |ИЗ
      |   Документ.ВыдачаСсуды КАК ВыдачаСсуды,
      |   РегистрСведений.КлючеваяСтавкаЦБ КАК КлючеваяСтавкаЦБ,
      |   РегистрСведений.ПроцентныеСтавкиПоДебиторам КАК ПроцентныеСтавкиПоДебиторам
      |ГДЕ
      |   ВыдачаСсуды.Дебитор = &Дебитор
      |   И ВыдачаСсуды.Счёт = &Счёт
      |   И КлючеваяСтавкаЦБ.Период = &ТекущаяДата
      |   И ПроцентныеСтавкиПоДебиторам.Период = &ТекущаяДата
      |   И ПроцентныеСтавкиПоДебиторам.Дебитор.Ссылка = &Дебитор";
   
   Запрос.УстановитьПараметр("Дебитор", Дебитор);
   Запрос.УстановитьПараметр("Счёт", Счёт);
   Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДата());
   
   РезультатЗапроса = Запрос.Выполнить();
   
   ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
   СуммаПоПроцентам = 0;
   Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
      СуммаПоПроцентам = СуммаПоПроцентам + ВыборкаДетальныеЗаписи.СуммаСсуды + (ВыборкаДетальныеЗаписи.СуммаСсуды * ((ВыборкаДетальныеЗаписи.Ставка + ВыборкаДетальныеЗаписи.ПроцентнаяСтавка) / 100));
   КонецЦикла;
   Возврат СуммаПоПроцентам;
   
   //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА


   
КонецФункции

Процедура ОбработкаПроведения(Отказ, Режим)
   // регистр ЗадолженностьПоДебиторам Приход
   Движения.ЗадолженностьПоДебиторам.Записывать = Истина;
   Движение = Движения.ЗадолженностьПоДебиторам.Добавить();
   Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
   Движение.Период = Дата;
   Движение.Дебитор = Дебитор;
   Движение.Счёт = Счёт;
   Движение.СуммаЗадолженности = РасчётСуммыЗадолжности();
   Движение.ЗадолженностьПоПроцентам = РасчётСуммыЗадолжностиПоПроцентам();

КонецПроцедуры

2. Так же необходимо брать эти же данные из регистра и вносить их в форму справочника дебитора при открытии самой формы.

&НаСервере
Функция ПриОткрытииНаСервере()
      //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
   // Данный фрагмент построен конструктором.
   // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
   
   Запрос = Новый Запрос;
   Запрос.Текст =
      "ВЫБРАТЬ
      |   Дебиторы.Ссылка КАК Ссылка,
      |   ЗадолженностьПоДебиторам.Дебитор КАК Дебитор,
      |   ЗадолженностьПоДебиторам.СуммаЗадолженности КАК СуммаЗадолженности,
      |   ЗадолженностьПоДебиторам.ЗадолженностьПоПроцентам КАК ЗадолженностьПоПроцентам
      |ИЗ
      |   Справочник.Дебиторы КАК Дебиторы,
      |   РегистрНакопления.ЗадолженностьПоДебиторам КАК ЗадолженностьПоДебиторам
      |ГДЕ
      |   ЗадолженностьПоДебиторам.Дебитор = &Ссылка";
   
   Запрос.УстановитьПараметр("Ссылка", Объект.Ссылка);
   
   РезультатЗапроса = Запрос.Выполнить();
   
   ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
   
   
   
   Переменная1 = 0;
   Переменная2 = 0;
   Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
      Переменная1 = ВыборкаДетальныеЗаписи.СуммаЗадолженности;
      Переменная2 = ВыборкаДетальныеЗаписи.ЗадолженностьПоПроцентам;
   КонецЦикла;
   Возврат Переменная1;
   Возврат Переменная2;
   //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
   
КонецФункции

&НаКлиенте
Процедура ПриОткрытии(Отказ)
   Переменная1 = ПриОткрытииНаСервере();
   Переменная2 = ПриОткрытииНаСервере();
   Объект.СуммаЗадолжности = Переменная1;
   Объект.ОбщаяСуммаЗадолжностей = Переменная2;
   Объект.ПроцентЗадолжности = Переменная2 - Переменная1;
   ПриОткрытииНаСервере();
КонецПроцедуры


Просьба помочь разобраться в проблемах. (Если можно поясните в каком месте я дурак)

P.s: Приложил выгрузку. Задача 1 - Модуль объекта документ "ВыдачаСсуды", задача 2 - Модуль формы справочника "Дебитор"

alexandr_ll


cobra152

alexandr_ll, Они не срабатывают, скорее всего дело в не правильном написании запроса.

LexaK

Цитата: cobra152 от 31 янв 2024, 19:55(Если можно поясните в каком месте я дурак)
так это всю 1С, с самого начала, надо вам объяснять!
(судя по вашему код, у вас вообще нет понятия, ни по коду ни по запросам)
может какую по проще задачку решите? (для набора опыта)
если помогло нажмите: Спасибо!

cobra152

LexaK, Да вот же, набираюсь опыта как раз таки на вот такой поставленной задачке. Пока сижу сам разбираюсь в проблеме, читаю статьи в интернете и книжки мельком просматриваю для понимания проблемы.

LexaK

cobra152, Дааа, помню время когда новые языки программирования осваивали начиная с команд вывода на экран текста^
Привет мир! (hello world!)

если помогло нажмите: Спасибо!

cobra152

LexaK, Сам три года назад начал учиться программированию, так же начинал с легендарного "Hello World!" на разных языках. Спустя три года учёбы остановился на 1с. Есть однако в этом языке перспективы если собираешься работать в России, да и сама идея конструктора из модулей и большой щепоткой программирования в данных модулях звучит очень интересно.

Afinogen

ну во первых что  сразу бросается в глаза это то  что у вас в запросах нет соединений между таблицами

|ИЗ
      |   Справочник.Дебиторы КАК Дебиторы,
      |   РегистрНакопления.ЗадолженностьПоДебиторам КАК ЗадолженностьПоДебиторам

тут и в аналогичных  ситуациях  должны быть разные соединения: левое, полное,внутреннее

во-вторых  у вас при формировании движений по регистру накопления нет регистратора


Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск