1С: Специалист по платформе. Задача 2.23

11.03.15

Разработка - Подготовка к аттестации

1С: специалист по платформе. Решение задачи 2.23

Скачать исходный код

Наименование Файл Версия Размер
Z2_23.dt
.dt 174,45Kb
4
.dt 174,45Kb 4 Скачать

Решение:

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

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


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

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

5) Документ "Выдача Займа."

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


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

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


специалист

См. также

Запросы 1С OnLine. Интерактивная обучающая программа.

Подготовка к аттестации Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Интерактивное изучение языка запросов с самого начала: - 50 практических заданий с различным уровнем сложности; - Методические материалы по практике написания запросов; - Описание назначения таблиц и индексов 1С Предприятие 8; - Методика решения реальных задач запросом 1С; - Автоматическая система проверки решений с указанием ошибок; - Инструкции по решению задач с разъяснениями; - Техническая поддержка пользователей. Подходит для начинающих и действующих разработчиков 1С

1800 руб.

11.02.2014    74325    76    14    

168

Экзамен "1С:Специалист" по платформе "1С:Предприятие 8.3". Полные и правильные решения билетов из сборника 2022

Подготовка к аттестации Платформа 1С v8.3 Россия Абонемент ($m)

В публикации предоставлены решения всех 16 задач из сборника . В решениях выполнены и отображены действия решений (основные действия) по условиям задач. Благодаря данным решениям к экзамену стало подготовиться проще, чем когда-либо.

10 стартмани

07.05.2024    2893    25    user1988637    6    

16

Экзамен "1С:Специалист-консультант" по внедрению подсистем управленческого учета в 1С:ERP. Полные и правильные решения билетов

Подготовка к аттестации Платформа 1С v8.3 1С:ERP Управление предприятием 2 Россия Абонемент ($m)

В публикации представлены только решения тех заданий, который попадаются на экзамене 1С:СК управленческого учета ERP. Благодаря данным решениям к экзамену стало подготовиться проще, чем когда-либо.

10 стартмани

08.04.2024    1372    15    user1988637    0    

11

Программист 1С: как начать с нуля с минимальными затратами

Подготовка к аттестации Платформа 1С v8.3 Россия Бесплатно (free)

Информация будет полезна многим начинающим программистам 1C и тем, кто хочет что-то изменить в своей жизни, испытывая жизненные трудности, с минимальными затратами.

18.03.2024    3311    AlOkt    4    

6

Как я готовилась к экзамену на Специалиста по платформе 1С

Подготовка к аттестации Платформа 1С v8.3 Россия Бесплатно (free)

Готовилась три месяца, сдала с первого раза. Делюсь опытом, лайфхаками и ресурсами, по которым учила материал.

14.03.2024    11438    PROSTO-1C    46    

86

Как я стал Экспертом по технологическим вопросам за 3 месяца. Часть 2 (обновлена)

Подготовка к аттестации Бесплатно (free)

Мой опыт подготовки и сдачи к экзамену 1С: Эксперт по технологическим вопросам. Часть 2.

04.02.2024    6443    shuhratsj    16    

76

Как я стал Экспертом по технологическим вопросам за 3 месяца

Подготовка к аттестации Бесплатно (free)

Мой опыт подготовки и сдачи к экзамену 1С: Эксперт по технологическим вопросам за 3 месяца. Часть 1.

29.01.2024    14305    shuhratsj    103    

156

1С: Специалист-консультант ЗУП 8. Решения из сборника задач для подготовки к экзамену «1С:Специалист-консультант» по внедрению прикладного решения „1С:Зарплата и управление персоналом 8“, редакция сентябрь 2023. Часть 6

Подготовка к аттестации Зарплата Кадровый учет Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Абонемент ($m)

Часть шестая. Делюсь сквозным решением 15-ти задач из сборника задач для подготовки к экзамену «1С:Специалист-консультант» по внедрению прикладного решения „1С:Зарплата и управление персоналом 8“, редакция сентябрь 2023.

5 стартмани

01.12.2023    1618    19    Ocherkcons    0    

6
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. slazzy 42 11.03.15 10:51 Сейчас в теме
Я конечно всё понимаю, но Вы не могли бы объяснить почему тут ЕСТЬNULL?
|СУММА(ЕСТЬNULL(УправленческийОстатки.СуммаОстатокДт, 0)) КАК Долг


а вот тут нету
Потребовалось соединение 2-х таблиц
2. Betis 26 11.03.15 11:09 Сейчас в теме
(1) slazzy, благодарю за наблюдательность. В данном случае сумма не имеет смысла, так как не влияет на результат. В ближайшее время исправлю и постараюсь впредь так не делать)
3. slazzy 42 11.03.15 13:40 Сейчас в теме
(2) Вы похоже не совсем поняли суть моего вопроса
|ЕСТЬNULL(УправленческийОстатки.СуммаОстатокДт, 0) КАК Долг


Зачем тут использовать ЕСТЬNULL?
И вот тут аналогично
|СУММА(ЕСТЬNULL(УправленческийОстатки.СуммаОстатокДт, 0)) КАК Долг,
|УправленческийОстатки.Субконто2 КАК ПланируемаяДатаВозврата
|ИЗ
|РегистрБухгалтерии.Управленческий.Остатки(&ТочкаИтогов, Счет = &Счет, &мсубконто, Субконто1 = &Сотрудник) КАК УправленческийОстатки
|
|СГРУППИРОВАТЬ ПО
|УправленческийОстатки.Субконто2";
Показать


Группировать таблицу остатков не надо, она уже сгруппирована.
4. Betis 26 11.03.15 15:00 Сейчас в теме
(3) slazzy,
1) Я Вас понял насчет группировки, погорячился)
2) За замечание про ЕСТЬNUll отдельное спасибо, уже вошло в привычку все подряд ресурсы "изналлить" на всякий случай. В этом случае естественно это необязательно так как нет соединений таблиц, что могло бы привести к появлению "null".
3) Еще исправил ошибку в документе "Возврат займа"
Если результат запроса пустой добавил
Отказ=Истина;
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Проведение невозможно, сотрудник ничего не должен";
Сообщение.Сообщить();
КонецЕсли;

5. dmpas 418 11.03.15 19:53 Сейчас в теме
А почему только одна? И почему именно эта?
Мы как-то тут разбаловались и привыкли, что народ сразу скопом решения выкладывает.
6. Betis 26 11.03.15 21:32 Сейчас в теме
(5) baton_pk, 7
Если имеете в виду исправленную ошибку, то где я написал что одна? Почему именно эта- наверное потому что ее я обнаружил.
Если у Вас имеется конструктивная критика, то не стесняйтесь критикуйте. буду благодарен.
7. dmpas 418 11.03.15 22:45 Сейчас в теме
(6)
Я не про ошибку, я про публикацию вообще. Почему только одна задача и почему именно эта??? Тут народ выкладывает решения сразу если не всех, то гораздо большего количества задач.
9. Betis 26 12.03.15 08:41 Сейчас в теме
(7) baton_pk, Это ж я как лучше хочу, выложу одно задание, народ покритикует, я в следующей задаче учту и исправлюсь. А именно эта просто потому что эта последняя что я решал.
8. fancy 35 12.03.15 07:35 Сейчас в теме
Замечание касательно 5) пункта решения.
После условия
Если БудемШтрафовать и ДатаВозвратаШтрафа = Дата(1,1,1) Тогда ...


в случае БудемШтрафовать = ИСТИНА будет зачем-то выполняться следующий блок,
Если БудемШтрафовать Тогда ...


даже если Отказ = ИСТИНА
10. Betis 26 12.03.15 08:47 Сейчас в теме
(8) fancy, Вы правы, в случае Отказ = ИСТИНА незачем даже выполнять этот блок.
11. slazzy 42 12.03.15 09:34 Сейчас в теме
теперь по поводу того же ISNULL
ВЫБРАТЬ
Выдача.СубконтоДт1 КАК Сотрудник,
Выдача.СуммаОборот КАК СуммаЗайма,
Выдача.СубконтоДт2 КАК ПланируемаяДатаВозвращения,
Возвраты.ПериодДень КАК РеальнаяДатаВозвращения,
ВЫБОР
КОГДА Выдача.СчетКт = ЗНАЧЕНИЕ(ПланСчетов.Управленческий.ПрибылиУбытки)
ТОГДА "V"
КОНЕЦ КАК ЯвляетсяШтрафом
ИЗ
РегистрБухгалтерии.Управленческий.ОборотыДтКт(&ДатаНачала, &ДатаОкончания, , СчетДт = &Счет, , , , ) КАК Выдача
ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Управленческий.ОборотыДтКт(, , Авто, СчетДт = &счетКасса, , СчетКт = &Счет, , ) КАК Возвраты
ПО Выдача.СубконтоДт1 = Возвраты.СубконтоКт1
И Выдача.СуммаОборот = Возвраты.СуммаОборот
УПОРЯДОЧИТЬ ПО
ПланируемаяДатаВозвращения
Показать


вот тут
Возвраты.ПериодДень КАК РеальнаяДатаВозвращения,

Наоборот нужен ISNULL

А вот тут
ВЫБОР
КОГДА Выдача.СчетКт = ЗНАЧЕНИЕ(ПланСчетов.Управленческий.ПрибылиУбытки)
ТОГДА "V"
КОНЕЦ КАК ЯвляетсяШтрафом

Неплохо бы сделать ветку ИНАЧЕ. Иначе если Счет не ПрибылиУбытки, то значение будет null

Я в задачу не вникал, мне лень :) но мне кажется странным соединение по сумме
12. Betis 26 12.03.15 10:30 Сейчас в теме
(11) slazzy, насчет "Null" в отчете, я не в курсе зачем ISNULL запросе в этом случае, ведь даже если получится "Null" я его не сравниваю и не складываю с другими значениями, если можно объясните как может возникнуть ошибка?
насчет соединения по сумме, то еще раз перепроверил все нормально, без этого результат запроса будет задваиваться, если займов выдано и погашено 2.
В документе "Возврат займа" нашел еще одну ошибку, надеюсь последнюю), нужно:
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.ДатаВозврата] = Выборка.ПланируемаяДатаВозврата;
вместо
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.ДатаВозврата] = Выборка.Дата;
13. slazzy 42 12.03.15 10:49 Сейчас в теме
(12)
slazzy, насчет "Null" в отчете, я не в курсе зачем ISNULL запросе в этом случае, ведь даже если получится "Null" я его не сравниваю и не складываю с другими значениями, если можно объясните как может возникнуть ошибка?

Ошибки в принципе не будет. Это просто нуу как бы правило хорошего тона в общем случае избавляться от потенциальных NULL при соединениях. Но в целом никаких ошибок быть не должно.
Оставьте свое сообщение