Автор Тема: Билет 2. Спец по платформе V8  (Прочитано 136492 раз)

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

artemusII

  • Пользователь
  • **
  • Сообщений: 34
  • ФИО: Артем А.
Re: Билет 2. Спец по платформе V8
« Ответ #30 : Октябрь 04, 2015, 01:15:56 pm »
Привет всем. Кому не лень - гляньте решение СПР. Сделал расчет периодов оклада полностью в запросе.

zorky

  • Проверенный
  • ***
  • Сообщений: 222
  • ФИО: ЗЖВ
Re: Билет 2. Спец по платформе V8
« Ответ #31 : Октябрь 04, 2015, 09:38:08 pm »
Привет.
1. Непонятно для чего ты блокируешь для изменения регистр строкой
Движения.Основной.БлокироватьДляИзменения=Истина;

А очистка движений при оперативном проведении ...или можно всё таки просто Движения.Основной.Записать ?   на всякий случай нельзя блокировку...это будет минус баллы?))) правильно,мы же пишем в +  без списания...

2. В док. Затраты я бы тоже для корСчета указал субконто в параметрах виртуальной таблицы, хотя, думаю это не критично...

Интересный вопрос, но если у счета одно предопределённое субконто "Номенклатура", то пользователь может добавить своё оборотное субконто, например "Качество", и тогда в выборку запроса с одним параметром виртуальной таблицы ПВХ.ВидыСубконто.Номенклатура будут попадать все записи? или он жестко обрубит записи с 2-мя субконто...надо проверить))) 


Ага, попадают в запрос, всё верно - нужно ставить параметры "Субконто" ибо не лишние, когда ТОЧНО есть такое субконто на счёте)
« Последнее редактирование: Октябрь 04, 2015, 09:42:08 pm от zorky »


Jones

  • Проверенный
  • ***
  • Сообщений: 199
Re: Билет 2. Спец по платформе V8
« Ответ #32 : Октябрь 08, 2015, 11:06:14 am »
Всем здрасте! )

Прошу оценить задачу БУ из этого билета, разбирался долго, смотрел другие решения )))  вроде всё как надо?

zorky, мне кажется все путем. Единственное, в запросе отчета в условиях вирт.таблицы нет условия по Субконто и КорСчетам, хотя может в отчете их накладывать и не надо.


Jones

  • Проверенный
  • ***
  • Сообщений: 199
Re: Билет 2. Спец по платформе V8
« Ответ #33 : Октябрь 08, 2015, 11:17:36 am »
Пересмотрел решение. Снова сделал без УФ. Вот пара комметариев.

1)   Каждый сотрудник может работать одновременно только в одном подразделении компании, то есть совместительство не допускается.
Значит, Подразделение – реквизит РР, а не измерение.
2)   Все сотрудники работают по графику работы, установленному отдельно для каждого подразделения.
Значит, спр Графики не нужен, в регистре Графики добавить только Подразделение + добавить Подразделение в обработку заполнения графиков.
3)   В течение расчетного периода первоначальное значение оклада может быть неоднократно изменено.
Значит, для каждой строки ТЧ документа надо сделать не одну запись в регистр, а + изменения оклада за ПериодДействия строки документа. Делается это в ОбработкеПроведения. Это первичная запись движений РР. Каждая запись будет обладать своим Окладом и своим ПериодомДействия.
4)   В одном документе могут быть данные за разные расчетные периоды.
Значит оклад нельзя получать просто как СрезПоследних на ДатуДокумента, но у нас он итак будет получен на индивидуальную дату для каждой строки документа.
А вот для Премии надо добавить в ТЧ документа поле РасчетныйПериод (ПериодРегистрации) и каждую строку записывать в регистр именно с этим ПериодомРегистрации, а БазовыйПериод устанавливать уже от него.
5)   Создать отчет «Перерасчет зарплаты», в котором пользователь должен увидеть записи регистра расчета, которые возможно требуется пересчитать.
Речь идет о перерасчета записей ДН (Премия) в связи с изменением их базовых записей (ВР Оклад). Чтобы при перепроведении документов с Окладом в перерасчете появлялись записи, надо для Премии указать Оклад ведущим.

alex1248

  • Призрак форума
  • *****
  • Сообщений: 714
Re: Билет 2. Спец по платформе V8
« Ответ #34 : Октябрь 08, 2015, 11:50:55 am »
Всем здрасте! )

Прошу оценить задачу БУ из этого билета, разбирался долго, смотрел другие решения )))  вроде всё как надо?

zorky, мне кажется все путем. Единственное, в запросе отчета в условиях вирт.таблицы нет условия по Субконто и КорСчетам, хотя может в отчете их накладывать и не надо.
Параметры вирт таблицы надо использовать всегда, когда можно, чем больше - тем лучше.

alex1248

  • Призрак форума
  • *****
  • Сообщений: 714
Re: Билет 2. Спец по платформе V8
« Ответ #35 : Октябрь 08, 2015, 11:53:55 am »
3)   В течение расчетного периода первоначальное значение оклада может быть неоднократно изменено.
Значит, для каждой строки ТЧ документа надо сделать не одну запись в регистр, а + изменения оклада за ПериодДействия строки документа. Делается это в ОбработкеПроведения. Это первичная запись движений РР. Каждая запись будет обладать своим Окладом и своим ПериодомДействия.
А при отладке обратить внимание на ситуацию, когда в течение месяца изменения оклада не было.  :)

alex44ru

  • Пользователь
  • **
  • Сообщений: 32
  • ФИО: Александр
Re: Билет 2. Спец по платформе V8
« Ответ #36 : Октябрь 08, 2015, 04:19:01 pm »
Моё решение билета 2. Если у кого будет желание и возможность - прошу проверить.
Запрос отчета набран с клавиатуры без использования конструктора - это реально круто !!!

margaritka47729

  • Пользователь
  • **
  • Сообщений: 43
Re: Билет 2. Спец по платформе V8
« Ответ #37 : Октябрь 14, 2015, 03:13:22 am »
Задача по УФ: у пользователя должна автоматически открываться форма каждой невыполненной его задачи.
Лично у меня не открывается форма задания, а открывается форма списка.
Не совсем понятно почему нет пользователей. Совсем.

Quantum81

  • Проверенный
  • ***
  • Сообщений: 117
Re: Билет 2. Спец по платформе V8
« Ответ #38 : Октябрь 19, 2015, 12:21:21 pm »
По УФ у кого смотрел не нашел решение строчки билета: "Кроме того пользователь должен иметь возможность видеть полный список задач". У Jones подразумевается список задач всех пользователей. Но мне более логичным кажется список задач в том числе выполненных.
Для критики код модуля формы списка. ( мне пришлось помучатся)
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Выполнена");
    ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
    ЭлементОтбора.ПравоеЗначение = Ложь;     
    ЭлементОтбора.Использование = Истина;

КонецПроцедуры   

&НаСервере
Процедура ВсеЗадачиСрв()

для Каждого ЭлОтб ИЗ Список.Отбор.Элементы Цикл

Если ЭлОтб.ЛевоеЗначение= (Новый ПолеКомпоновкиДанных("Выполнена"))
И ЭлОтб.ВидСравнения=ВидСравненияКомпоновкиДанных.Равно тогда

ЭлОтб.ПравоеЗначение=НЕ ЭлОтб.ПравоеЗначение;
КонецЕсли;
КонецЦикла;
КонецПроцедуры // ВсеЗадачиСрв()

&НаКлиенте
Процедура ВсеЗадачи(Команда)

ВсеЗадачиСрв(); 

КонецПроцедуры

Quantum81

  • Проверенный
  • ***
  • Сообщений: 117
Re: Билет 2. Спец по платформе V8
« Ответ #39 : Октябрь 19, 2015, 02:59:38 pm »
Тяжело сегодня соображается. В моем коде выше ошибка - он показывает либо выполненные либо не выполненные, что не правильно. Пофиксил:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Выполнена");
    ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
    ЭлементОтбора.ПравоеЗначение = Ложь;     
    ЭлементОтбора.Использование = Истина;

КонецПроцедуры   

&НаСервере
Процедура ВсеЗадачиСрв()

Стерто=Истина;

для Каждого ЭлОтб ИЗ Список.Отбор.Элементы Цикл

Если ЭлОтб.ЛевоеЗначение= (Новый ПолеКомпоновкиДанных("Выполнена"))
И ЭлОтб.ВидСравнения=ВидСравненияКомпоновкиДанных.Равно тогда

Если  ЭлОтб.Использование=Истина тогда
ЭлОтб.Использование=Ложь;
иначе
ЭлОтб.ПравоеЗначение=Ложь;
ЭлОтб.Использование=Истина;
КонецЕсли;
Стерто=Ложь;
КонецЕсли;
КонецЦикла;

Если Стерто тогда
    ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
        ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Выполнена");
        ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
        ЭлементОтбора.ПравоеЗначение = Ложь;     
        ЭлементОтбора.Использование = Истина;
КонецЕсли;

    //Грубо
//Если Список.Отбор.Элементы.Количество()=0 тогда
// ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
// ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Выполнена");
// ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
// ЭлементОтбора.ПравоеЗначение = Ложь;     
// ЭлементОтбора.Использование = Истина;
//иначе
// Список.Отбор.Элементы.Очистить();
//КонецЕсли;

КонецПроцедуры // ВсеЗадачиСрв()

&НаКлиенте
Процедура ВсеЗадачи(Команда)

ВсеЗадачиСрв(); 

КонецПроцедуры
« Последнее редактирование: Октябрь 19, 2015, 04:29:44 pm от Quantum81 »

Veron

  • Пользователь
  • **
  • Сообщений: 33
Re: Билет 2. Спец по платформе V8
« Ответ #40 : Октябрь 20, 2015, 06:35:35 am »
Спасибо всем за наводки, бился с регламентным заданием, так и не понял как в итоге заработало, создал еще одного пользователя, еще раз дал всем админ права, поигрался с галкой предопределенный  и о чуда - пашет)

unf13

  • Пользователь
  • **
  • Сообщений: 23
  • ФИО: unf13
Re: Билет 2. Спец по платформе V8
« Ответ #41 : Октябрь 20, 2015, 12:53:43 pm »
Пересмотрел решение. Снова сделал без УФ. Вот пара комметариев.

1)   Каждый сотрудник может работать одновременно только в одном подразделении компании, то есть совместительство не допускается.
Значит, Подразделение – реквизит РР, а не измерение.
2)   Все сотрудники работают по графику работы, установленному отдельно для каждого подразделения.
Значит, спр Графики не нужен, в регистре Графики добавить только Подразделение + добавить Подразделение в обработку заполнения графиков.
3)   В течение расчетного периода первоначальное значение оклада может быть неоднократно изменено.
Значит, для каждой строки ТЧ документа надо сделать не одну запись в регистр, а + изменения оклада за ПериодДействия строки документа. Делается это в ОбработкеПроведения. Это первичная запись движений РР. Каждая запись будет обладать своим Окладом и своим ПериодомДействия.
4)   В одном документе могут быть данные за разные расчетные периоды.
Значит оклад нельзя получать просто как СрезПоследних на ДатуДокумента, но у нас он итак будет получен на индивидуальную дату для каждой строки документа.
А вот для Премии надо добавить в ТЧ документа поле РасчетныйПериод (ПериодРегистрации) и каждую строку записывать в регистр именно с этим ПериодомРегистрации, а БазовыйПериод устанавливать уже от него.
5)   Создать отчет «Перерасчет зарплаты», в котором пользователь должен увидеть записи регистра расчета, которые возможно требуется пересчитать.
Речь идет о перерасчета записей ДН (Премия) в связи с изменением их базовых записей (ВР Оклад). Чтобы при перепроведении документов с Окладом в перерасчете появлялись записи, надо для Премии указать Оклад ведущим.

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

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

тут вот эту тему обсуждали,но так и не пришли к достоверно рабочему варианту, учитывающему все подводные камни: http://forum.chistov.pro/index.php?topic=3606.msg40402#msg40402

Quantum81

  • Проверенный
  • ***
  • Сообщений: 117
Re: Билет 2. Спец по платформе V8
« Ответ #42 : Октябрь 20, 2015, 02:29:20 pm »
помню когда решал, сломал голову, но интервалы формировались правильно. Прокоментировать сейчас не могу, т.к. разбираюсь с  УФ. Если есть желание  - выкладываю свое решение (не прилизывал)

unf13

  • Пользователь
  • **
  • Сообщений: 23
  • ФИО: unf13
Re: Билет 2. Спец по платформе V8
« Ответ #43 : Октябрь 21, 2015, 12:17:40 pm »
помню когда решал, сломал голову, но интервалы формировались правильно. Прокоментировать сейчас не могу, т.к. разбираюсь с  УФ. Если есть желание  - выкладываю свое решение (не прилизывал)

Посмотрел, в вашем решении, также как у Jones (смотрел один из первых вариантов на первых страницах темы) не накладывается никаких ограничений по выбираемому диапазону дат при обращении к реальной таблице регистра сведений СведенияоСотрудниках, где хранятся значения окладов.
ИМХО, это сильный грех,т.к. каждый раз будет происходить выборка всех записей регистра сведений.

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


По поводу заведения отдельного регистра сведений ГрафикПодразделения, мне кажется можно сделать по проще, обычно,если график устанавливается для каждого подразделения (смены, бригады итп) то это означает,что в регистре сведений "ГрафикиРаботы" заводится соответствующее измерение с типом соотв. справочника. И делается связь этого измерения с соотв. измерением или реквизитом в РР (закладка "связь с графиком" в РР).
« Последнее редактирование: Октябрь 21, 2015, 12:24:18 pm от unf13 »

Quantum81

  • Проверенный
  • ***
  • Сообщений: 117
Re: Билет 2. Спец по платформе V8
« Ответ #44 : Октябрь 21, 2015, 02:06:57 pm »
Да нет, ну как же. Я делаю внутренне соединение с условием что период старше даты начала периода действия строки(это уже ограничение), и беру максимально близкое значение с моему интервалу агрегирующей функцией. Я же никак не ограничу более, т.к. не знаю как давно было последнее изменение оклада.
В отличии от остальных задач, мне приходиться объединять этот результат с изменениями окладу внутри периода действия. А потом выстраивать интервалы.

* кстати сейчас подумалось, что можно было бы запросом сделать интеравалы, объединив последнюю табличку саму с собой по НомерСтроки=НомерСтроки-1. Хотя заморочно, код наглядней.