Автор Тема: Задача 3.21  (Прочитано 38998 раз)

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

napan

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Alexey
Задача 3.21
« : Август 23, 2010, 06:31:06 pm »
Вот решил....не пойму как сделать не превышение отпуска 24 дня (без применения Регистра накопления)
Вложения:
1916225.dt

alice

  • Новичок
  • *
  • Сообщений: 9
  • ФИО: annakoshkareva
Задача 3.21
« Ответ #1 : Август 24, 2010, 01:42:28 pm »
Мой вариант:


alice

  • Новичок
  • *
  • Сообщений: 9
  • ФИО: annakoshkareva
Задача 3.21
« Ответ #2 : Август 24, 2010, 01:43:11 pm »
База во вложении
Вложения:
3.21_82.dt

aworld

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Хасанов Амир Ринатович
Задача 3.21
« Ответ #3 : Сентябрь 21, 2010, 02:41:25 pm »
alice, одним документом можно сделать начисление сразу по нескольким месяцам? оригинально smile

ut2k5

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Максим
Задача 3.21
« Ответ #4 : Сентябрь 30, 2010, 03:10:14 pm »
alice, может оклад и фиксированный, но вытеснять по периоду дней он все равно отпуском должен, у тебя нету такого...
 и по-моему из задания оклад и фиксированная сумма должно быть одно и тоже, просто имеется в виду, что оклад не зависит от от того, сколько мы гуляли болели и были в отпсуке, сказал шеф 10000, значит 10000 хоть дома сиди, главное не злить его, а то уволит smile

честно говоря код трудно читаемый, очень громоздкие запросы и лишние проверки, коллеги уважайте труд друг друга... smile


sada

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Андрей
Задача 3.21
« Ответ #5 : Октябрь 03, 2010, 07:38:09 pm »
alice,
 в условии сказано "Количество предоставляемых в год рабочих дней отпуска не должно превышать 24." То есть 24 рабочих дня, при том что рабочие дни считаются по графику подразделений а дни отпуска по шестидневному графику.

Есть мысли по этому поводу ?

« Последнее редактирование: Октябрь 03, 2010, 07:38:28 pm от Андрей »

SergTH000

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Сергей
Задача 3.21
« Ответ #6 : Октябрь 03, 2010, 08:05:27 pm »
sada, Я так понимаю: если отпуск с 1.09 по 30.09 дни отпуска - 30, а рабочие дни отпуска это дни по шестидневке. Как вариант - завести оборотный регистр и копить в нем дни отпуска сотрудников, при расчете отпуска смотреть ЗначениеФактическийПД отпуска и сравнивать с данными регистра. Причем тут по-видимому нужно отказывать в проведении из общего модуля. Первое что пришло в голову: сделать РассчитатьОН не процедурой а функцией и возварщать значение типа булево: превышено количество дней отпуска - Истина и ориентируясь на нее проводить/не проводить документ
« Последнее редактирование: Октябрь 03, 2010, 08:06:12 pm от Сергей »

hugo

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Динар
Задача 3.21
« Ответ #7 : Октябрь 08, 2010, 02:40:32 pm »
ut2k5,
Quote (ut2k5)
но вытеснять по периоду дней он все равно отпуском должен, у тебя нету такого... и по-моему из задания оклад и фиксированная сумма должно быть одно и тоже, просто имеется в виду, что оклад не зависит от от того, сколько мы гуляли болели и были в отпсуке, сказал шеф 10000, значит 10000 хоть дома сиди, главное не злить его, а то уволит

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

Quote (SergTH000)
а рабочие дни отпуска это дни по шестидневке

 и я того же мнения

однако вопрос есть: по условию задачи "все сотрудники работают по графику работы, установ-ому для каждого подр-я отдельно". это зачем, ведь нет таких начислений где это используется.


alice

  • Новичок
  • *
  • Сообщений: 9
  • ФИО: annakoshkareva
Задача 3.21
« Ответ #8 : Октябрь 11, 2010, 10:08:36 am »
Давно решала эту задачу, часть условий не учла.

Я так думаю, что отпуск вытесняет оклад, поскольку нужно учитывать отработанные дни, пусть даже и размер самого оклада от их количества не зависит.
 Поэтому оклад в осн. начислениях.

Рабочие дни отпуска нужно считать по шестидневке по фактич. периоду действия.
 Отпуск отгулянный за весь тек. год + Отпуск по документу > 24.

Ввести за неск. месяцев можно данные только по отпуску.


Вложения:
9912847.dt

hapcher

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Марина
Задача 3.21
« Ответ #9 : Октябрь 14, 2010, 03:22:20 pm »
Выкладываю свое решение, вроде получилось красиво ))
 Не понравилось только то, что расчет записей осуществляется в цикле по каждой записи, но делать оптимальнее как-то лениво...
Вложения:
hapcher_3_21.dt

sada

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Андрей
Задача 3.21
« Ответ #10 : Октябрь 14, 2010, 03:49:15 pm »
hapcher, плохо что на каждую запись запрос выполняется, думаю это бужет ошибкой на экзамене.
 Я в последнее время в запрос даже сотрудников передаю не всех, а только по данному виду расчета.
 А в качестве приоритета я решил использовать порядок элементов в перечеслении (то есть прямо как они заданы в конфигураторе в таком порядке и расчитываю), благо в запросе по этому порядку можно отсортировать виды расчета.

hapcher

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Марина
Задача 3.21
« Ответ #11 : Октябрь 14, 2010, 04:35:06 pm »
sada, это не будет ошибкой на экзамене, т.к. в официальной литературе по 1С (Проф. разработка под ред. Радченко) приводится решение подобной задачи точно таким же способом, как у меня реализовано wink Кроме того в ЗУП тоже каждая запись отдельно считается. Так что в таком ключе они до меня не смогут докопаться))

Однако в реальной жизни я бы конечно так делать не стала.


sada

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Андрей
Задача 3.21
« Ответ #12 : Октябрь 14, 2010, 05:12:29 pm »
hapcher, Не факт что, Проф разрабока и ЗУП на 8.1 спасут от гнева экзаминаторов smile она по платформе 8.0, да и в примере решения, что в задачнике опубликован всетаки запрос по видам расчета. Принцип же один , чем меньше обращений к базе данных тем лучше.

Да и плюса особого я не вижу в скорости написания кода, ну мождет быть на 5 строк меньше набирать (не надо искать строку по номеру), зато камень на душе smile


hapcher

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Марина
Задача 3.21
« Ответ #13 : Октябрь 14, 2010, 09:38:23 pm »
Какая разница, на какой платформе реализованы примеры 1С, это скорее принципы программирования, а если 1С позволяет себе писать запросы в цикле, да еще и публикует их, почему остальным смертным нельзя делать этого на экзамене? wink
 Может хоть откроют книгу и хотя бы пример исправят smile

Добавлено (14.10.2010, 21:38)
 ---------------------------------------------
 

Quote (sada)
А в качестве приоритета я решил использовать порядок элементов в перечеслении (то есть прямо как они заданы в конфигураторе в таком порядке и расчитываю)

 получается, что у тебя в решении возможно максимум только 3 приоритета?

Немного подкорректировала свое решение.


Вложения:
3489219.dt
« Последнее редактирование: Октябрь 14, 2010, 10:41:19 pm от Марина »

sada

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Андрей
Задача 3.21
« Ответ #14 : Октябрь 15, 2010, 07:19:32 am »
hapcher,
 
Quote (hapcher)
получается, что у тебя в решении возможно максимум только 3 приоритета?

нет, столько сколько способов расчета в перечислениях, а зачем их больше то, для задачника вополне достаточно. У меня схема расчета такая:

- В модуле документа запросом выборка по виду расчета (отсортированная по приоритету из перечисления) ИТОГ по виду расчета внутри сотрудники.
 

Code
    Запрос = Новый Запрос;
    Запрос.Текст =    
     "ВЫБРАТЬ
     |    НЗ.ВидРасчета КАК ВидРасчета,
     |    НЗ.Сотрудник,
     |    НЗ.ВидРасчета.СпособРасчета.Порядок КАК ПорядокРасчета
     |ИЗ
     |    Документ.НачислениеЗарплаты.ОсновныеНачисления КАК НЗ
     |ГДЕ
     |    НЗ.Ссылка = &Ссылка
     |
     |СГРУППИРОВАТЬ ПО
     |    НЗ.ВидРасчета,
     |    НЗ.Сотрудник
     |
     |УПОРЯДОЧИТЬ ПО
     |    ПорядокРасчета
     |ИТОГИ ПО
     |    ВидРасчета";

 - При обходе выборки формирую массив сотрудников только по данному виду;
 - Далее проверяю что нибудь если это необходим (24 дня отпуска, ...) могу отказаться от проведения если надо.
 - Передаю в процедуру расчета (набор,вид,сотрудники). причем вид может быть из любого набора , я обращаюсь к метаданным по наименованию.
 
Code
  ИмяРегистра = ВыборкаВидРасчета.ВидРасчета.Метаданные().Имя;  // имя плана вида расчета , оно совпадает с именем регистра
     ВычисленияНаСервере.Расчет(Движения[ИмяРегистра],ВыборкаВидРасчета.ВидРасчета,МассивСотрудников);

 - Записываю записи набра.
 
Code
Движения[ИмяРегистра].Записать(,Истина);

(я не ищу в расчетном модуле существует ли необходимый вид расчета в каком либо наборе, расчитваю не по всем сотрудникам а только по сотрудникам данного вида, не делаю в расчетном модуле проверки на приоритет)

« Последнее редактирование: Октябрь 15, 2010, 07:27:39 am от Андрей »