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    73847    677    13    

165

Оптимизация запросов 1С - от теории к практике

Подготовка к аттестации Запросы Конфигурации 1cv8 Платные (руб)

Желаете повысить свой уровень разработки? Не знаете, как оптимизировать работу тяжелых запросов 1С? Или знаете методы оптимизации, но на практике не получаете результат? Тогда эта интерактивная обучающая программа для Вас! Оптимизация запросов прямо в программе 1С:Предприятие 8. Несколько десятков практических заданий, рассматривающих методы оптимизации на практике. От Вас требуются реальные решения - оптимизация представленных запросов. Автоматизированная система оценит Ваш запрос и представит результат проверки.

1800 руб.

06.07.2015    70807    118    9    

128

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

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

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

18.03.2024    1062    AlOkt    4    

6

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

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

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

14.03.2024    9403    PROSTO-1C    46    

78

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

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

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

04.02.2024    5632    shuhratsj    16    

72

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

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

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

29.01.2024    13016    shuhratsj    102    

153

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

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

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

5 стартмани

01.12.2023    1324    16    Ocherkcons    0    

6

1С: Специалист-консультант ЗУП 8. С чего начать решение билета на экзамене? Актуальность: ноябрь 2023 года

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

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

17.11.2023    2357    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 при соединениях. Но в целом никаких ошибок быть не должно.
Оставьте свое сообщение