вторник, 10 марта 2015 г.

1c специалист задача 2.23

Условие из сборника:

Необходимо организовать возможность выдачи денежных займов сотрудникам компании. Факт выдачи такого займа отражается в системе документом «Выдача займа». В этом документе указывается, какому сотруднику компании, в каком размере, были выданы денежные средства. Также указывается срок, в который должен произойти возврат денежных средств. Документ «Выдача займа» реализует следующую проводку:
Дт «Кредиты и займы выданные» - Кт «Касса»
на сумму выданных средств. Наличие денег в кассе контролировать не
нужно. Возврат денежных средств регистрируется с помощью документа «Возврат займа». В этом документе указывается, какой сотрудник и, какую сумму вернул. Возвращаемая сумма должна полностью совпадать с суммой полученных в свое время средств. Если сумма отличается, то документ не должен проводиться. Сотруднику не могут выдать следующий займ до тех пор, пока он не вернет ранее выданный. Документ «Возврат займа» реализует следующую проводку:
Дт «Касса» - Кт «Кредиты и займы выданные» на сумму возвращаемого
займа. Если займ был возвращен позже указанного срока, в документе дополнительно указывается дата возврата штрафа и документ делает дополнительную проводку:
Дт «Кредиты и займы выданные» - Кт «Прибыли и убытки»
на сумму, рассчитываемую как 0,1% от полной суммы предоставленного
займа. Фактически это означает начисление штрафной суммы в виде вновь выданного займа. Этот займ погашается другим экземпляром документа «Возврат займа». Штрафные санкции не начисляются, когда сумма штрафа становится меньше 1 копейки. В системе должен быть предусмотрен отчет о выданных займах.


Решение:

Для решения задачи задействуем следующие объекты:
1) ПВХ "Виды субконто". 

  • Заполняем типы значений характеристик и дополнительные значения характеристик. 
  • Согласно условия задачи заводим  предопределенные  элементы  "Сотрудника","ДатаВозврата".

2) Дорабатываем план счетов. 

  •  на закладке "субконто" заполняем тип субконто и устанавливаем значение субконто=2.
  • Редактируем предопределенный счет "КредитыЗаймыВыданные".(добавляем 2 субконто).
3) Добавляем регистр бухгалтерии "Управленческий".
  • Связываем его с планом счетов
  • Добавляем ресурсы ( сумма)
  • Выбираем регистраторы.
4) Не забываем о том, что в задачах бухгалтерского учета необходимо добавить документ,  с помощью которого можно добавлять записи в регистр вручную. Назовем его "Ручная операция".  укажем что он является регистратором нашего регистра. 
добавим форму на форму вытащим реквизит Объект-движения-управленческий.

5) Документ "Выдача Займа."
// БлокировкаДанных
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрБухгалтерии.Управленческий");
ЭлементБлокировки.УстановитьЗначение("Субконто1", Сотрудник);
ЭлементБлокировки.УстановитьЗначение("Счет",  ПланыСчетов.Управленческий.КредитыИЗаймыВыданные);
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
Блокировка.Заблокировать();
// Проверим есть ли долг
Запрос =Новый("Запрос");
Запрос.Текст ="ВЫБРАТЬ
| СУММА(ЕСТЬNULL(УправленческийОстатки.СуммаОстатокДт, 0)) КАК Долг
|ИЗ
| РегистрБухгалтерии.Управленческий.Остатки(&ТочкаИтогов, Счет = &Счет, &мсубконто, Субконто1 = &Сотрудник) КАК УправленческийОстатки";
Запрос.УстановитьПараметр("Счет", ПланыСчетов.Управленческий.КредитыИЗаймыВыданные);
Запрос.УстановитьПараметр("Сотрудник",Сотрудник);
ТочкаИтогов =?(Режим = РежимПроведенияДокумента.Оперативный, Неопределено, Новый Граница(МоментВремени(),ВидГраницы.Исключая));
Запрос.УстановитьПараметр("ТочкаИтогов",ТочкаИтогов);
мсубконто = Новый("Массив");
мсубконто.Добавить( ПланыВидовХарактеристик.ВидыСубконто.Сотрудник);
мсубконто.Добавить( ПланыВидовХарактеристик.ВидыСубконто.ДатаВозврата);
Запрос.УстановитьПараметр("мсубконто",мсубконто);
Результат = Запрос.Выполнить();
Если Не  Результат.Пустой() Тогда
Выборка = Результат.Выбрать();
Выборка.Следующий();
Если Выборка.Долг>0 Тогда
Отказ = Истина;
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "У выбранного сотрудника есть невозвращенный займ, выдача нового невозможна";
Сообщение.Сообщить();
КонецЕсли;
КонецЕсли;
Если Не Отказ Тогда
Движения.Управленческий.Записывать = Истина;
Движение = Движения.Управленческий.Добавить();
Движение.СчетДт = ПланыСчетов.Управленческий.КредитыИЗаймыВыданные;
Движение.СчетКт = ПланыСчетов.Управленческий.Касса;
Движение.Период = Дата;
Движение.Сумма = Сумма;
Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Сотрудник] = Сотрудник;
Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.ДатаВозврата] = СрокВозврата;
КонецЕсли;
КонецПроцедуры

6) Документ "Возврат Займа"

Процедура ОбработкаПроведения(Отказ, РежимПроведения)
Движения.Управленческий.Записывать = Истина;
Движения.Управленческий.Записать();

// БлокировкаДанных
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрБухгалтерии.Управленческий");
ЭлементБлокировки.УстановитьЗначение("Субконто1", Сотрудник);
ЭлементБлокировки.УстановитьЗначение("Счет",  ПланыСчетов.Управленческий.КредитыИЗаймыВыданные);
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
Блокировка.Заблокировать();
БудемШтрафовать = Ложь;
Запрос =Новый("Запрос");
Запрос.Текст ="ВЫБРАТЬ
| СУММА(ЕСТЬNULL(УправленческийОстатки.СуммаОстатокДт, 0)) КАК Долг,
| УправленческийОстатки.Субконто2 КАК ПланируемаяДатаВозврата
|ИЗ
| РегистрБухгалтерии.Управленческий.Остатки(&ТочкаИтогов, Счет = &Счет, &мсубконто, Субконто1 = &Сотрудник) КАК УправленческийОстатки
|
|СГРУППИРОВАТЬ ПО
| УправленческийОстатки.Субконто2";
Запрос.УстановитьПараметр("Счет", ПланыСчетов.Управленческий.КредитыИЗаймыВыданные);
Запрос.УстановитьПараметр("Сотрудник",Сотрудник);
ТочкаИтогов =?(РежимПроведения = РежимПроведенияДокумента.Оперативный, Неопределено, Новый Граница(МоментВремени(),ВидГраницы.Исключая));
Запрос.УстановитьПараметр("ТочкаИтогов",ТочкаИтогов);
мсубконто = Новый("Массив");
мсубконто.Добавить( ПланыВидовХарактеристик.ВидыСубконто.Сотрудник);
мсубконто.Добавить( ПланыВидовХарактеристик.ВидыСубконто.ДатаВозврата);
Запрос.УстановитьПараметр("мсубконто",мсубконто);
Результат = Запрос.Выполнить();
Если Не  Результат.Пустой() Тогда
Выборка = Результат.Выбрать();
Выборка.Следующий();
Если Выборка.Долг<> Сумма Тогда
Отказ = Истина;
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Проведение невозможно, сумма долга = "+ Выборка.Долг;
Сообщение.Сообщить();
КонецЕсли;
Если Выборка.ПланируемаяДатаВозврата< НачалоДня(Дата) И Выборка.Долг>1 Тогда 
БудемШтрафовать = Истина;
КонецЕсли;
КонецЕсли;
Если Не Отказ Тогда

Движение = Движения.Управленческий.Добавить();
Движение.СчетКт = ПланыСчетов.Управленческий.КредитыИЗаймыВыданные;
Движение.СчетДт = ПланыСчетов.Управленческий.Касса;
Движение.Период = Дата;
Движение.Сумма = Сумма;
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Сотрудник] = Сотрудник;
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.ДатаВозврата] = Дата;
КонецЕсли;
// штраф
Если БудемШтрафовать и ДатаВозвратаШтрафа = Дата(1,1,1) Тогда 
Отказ = Истина;
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Проведение невозможно, необходимо заполнить дату возврата штрафа";
Сообщение.Сообщить();
КонецЕсли;
Если БудемШтрафовать Тогда 
Движение = Движения.Управленческий.Добавить();
Движение.СчетДт = ПланыСчетов.Управленческий.КредитыИЗаймыВыданные;
Движение.СчетКт = ПланыСчетов.Управленческий.ПрибылиУбытки;
Движение.Период = Дата;
Движение.Сумма = Сумма/100;
Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Сотрудник] = Сотрудник;
Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.ДатаВозврата] = ДатаВозвратаШтрафа;
КонецЕсли;
КонецПроцедуры

7) Отчет.
Потребовалось соединение 2-х таблиц
ВЫБРАТЬ
Выдача.СубконтоДт1 КАК Сотрудник,
Выдача.СуммаОборот КАК СуммаЗайма,
Выдача.СубконтоДт2 КАК ПланируемаяДатаВозвращения,
Возвраты.ПериодДень КАК РеальнаяДатаВозвращения,
ВЫБОР
КОГДА Выдача.СчетКт = ЗНАЧЕНИЕ(ПланСчетов.Управленческий.ПрибылиУбытки)
ТОГДА "V"
КОНЕЦ КАК ЯвляетсяШтрафом
ИЗ
РегистрБухгалтерии.Управленческий.ОборотыДтКт(&ДатаНачала, &ДатаОкончания, , СчетДт = &Счет, , , , ) КАК Выдача
ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Управленческий.ОборотыДтКт(, , Авто, СчетДт = &счетКасса, , СчетКт = &Счет, , ) КАК Возвраты
ПО Выдача.СубконтоДт1 = Возвраты.СубконтоКт1
И Выдача.СуммаОборот = Возвраты.СуммаОборот
УПОРЯДОЧИТЬ ПО
ПланируемаяДатаВозвращения





1 комментарий:

  1. Спасибо мистеру Бенджамину за помощь в получении ипотечной ссуды VA. Было здорово получить ссуду в размере 900 000 долларов США от этого кредитора. Меня зовут Красимир Тодор, я бельгиец. Я получил ссуду от этого авторитетного кредитора 20 ноября 2019 года, и я хочу быстро использовать это средство, чтобы сообщить всем здесь, что вы можете получить любой ссуду у этой надежной кредитной компании. Найти ссудодателя VA непросто, и он должен быть рекомендован Департаментом по делам ветеранов. Г-н Бенджамин предоставит вам ссуды под низкие проценты в размере 2% и очень быстро. Получите кредиты по электронной почте: 247officedept@gmail.com или по номеру WhatsApp: + 1-989-394-3740

    ОтветитьУдалить