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

11.03.15

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Z2_23.dt
.dt 174,45Kb
4
4 Скачать (1 SM) Купить за 1 850 руб.

Решение:

Для решения задачи задействуем следующие объекты:
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С v8.3 Конфигурации 1cv8 Платные (руб)

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

1800 руб.

11.02.2014    77022    95    15    

189

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

Меня зовут Татьяна, в 1С-разработке я уже семь лет, а в этом году официально стала junior-специалистом. Рассказываю, как всё происходило.

10.09.2024    7136    PROSTO-1C    21    

13

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

Я Олег, разработчик 1С. Расскажу, как сдавал на сертификат Специалиста, в чём ошибся и что стоит учесть.

11.06.2024    14132    PROSTO-1C    51    

66

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

Хочу поделиться своей историей планирования обучения, подготовки к экзамену и сдачи непосредственно экзамена. Надеюсь, что это будет полезно и откинет все вопросы об экзамене.

04.06.2024    9343    anton99    50    

57

Подготовка к аттестации Стажер Конфигурации 1cv8 Фармацевтика, аптеки Россия Управленческий учет Бесплатно (free)

Краткий рассказ о выборе 1С как основного языка программирования для дипломной работы в университете, и само приложение к диплому.

28.05.2024    4343    DmitryOneBit    20    

20

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

В публикации предоставлено решения 7 билетов из сборника 2022 года . Решения выполнены по пунктам и подробно, каждый БП описан и решен по условиям задач. Благодаря данному решению к экзамену стало подготовиться проще, чем когда-либо.

10 стартмани

07.05.2024    8408    85    user1988637    16    

42

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

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

10 стартмани

08.04.2024    2982    39    user1988637    4    

15

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

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

14.03.2024    18188    PROSTO-1C    47    

90
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
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 при соединениях. Но в целом никаких ошибок быть не должно.
Оставьте свое сообщение