Показаны сообщения с ярлыком Зарплата и управление персоналом. Показать все сообщения
Показаны сообщения с ярлыком Зарплата и управление персоналом. Показать все сообщения

1С Предприятие 8.3. Изменяем форму справочника, и переносим ее на внешнюю обработку с выводом доп. столбца

Добрый день, сегодня хочу описать пошагово как можно изменить форму списка справочника, и вывести на нее дополнительный столбец с выводом значения из регистра сведений.
Задача с уровнем сложности легко, первым делом заходим в конфигуратор.
За основу возьмем справочник "Виды работ сотрудников"
Создаем в конфигураторе внешнюю обработку без реквизитов, и к ней форму.
Реквизиты будем создавать на форме, создаем реквизит с наименованием "Виды работ сотрудников", тип выбираем Динамический список.
Должно получится вот-так:
Далее в свойстве данного реквизита выбираем Основную таблицу, ею будет справочник который мы взяли за основу.
И внимание, выбрав данную таблицу в реквизиты формы упали реквизиты справочника, но мы ведь не останавливаемся, и идем дальше, нам нужно получить еще данные из регистра сведений и вывести их на форму, для этого нажимаем на галочку выше: Произвольный запрос.
Важно сначала выбрать основную таблицу, а потом произвольный запрос, так система поймет что взять за основу.
Нажимаем на настройку списка, и переходим к конструктору запроса.

Добавляем к выводу Реквизит Расценка из Регистра сведений РасценкиРаботСотрудников.СрезПоследних, в связях автоматически добавилась связь, к сожаление не совсем корректная, вместо левого соединения делаем правое.
Сохраняем все, и переносим Динамический список на форму, оставляя только необходимые реквизиты


Сохраняем обработку как внешнюю, и пробуем.
Полученный результат ниже


1С 8.3 ЗУП: Тариф платежного агента меняется при записи?


Проблема: 
Тариф платежного агента сохраняется некорректно, округляется, значения после записи другие.

Решение: 
Открываем конфигуратор 1С Предприятия 8.3 для нашей базы ЗУП. Открываем конфигурацию для редактирования.
Открываем форму ФормаЭлемента в справочнике ТарифыПлатежныхАгентов
Открываем модуль.
Смотрим две последние функции СуммаПриПроцентеСПревышенияПоСумме и СуммаПоСуммеПриПроцентеСПревышения
В ней мы видим что функция возвращает результат исправленный в соответствии с предыдущим порогом, комметируем Возвраты функций.
Вместо комментированного пишем:
Возврат ТекущаяСтрока.Сумма;   - в первой функции.
Возврат ТекущаяСтрока.СуммаПриПроцентеСПревышения;  - во второй функции.

Теперь при записи тарифов суммы они не будут меняться.

1С 8.3 ЗУП: Перерасчет северной надбавки на основе уже имеющегося стажа

Северный стаж и надбавка в Зарплате и управлением персоналом - больная тема.
Проблема №1: При трудоустройстве человек имеет стаж северный 7 месяца (допустим 2 группа льготная), имеет уже надбавку 20 процентов, в итоге при принятии на работу месяц наработанный сверху 6 месяцев пропадает.
Поля ввода стажа работы на севере - не работают, для чего указываются не понятно.
Поэтому приходиться самому высчитывать правильный стаж, в данном случае 1С заполняет будущие значения очень механически, не думая об исключениях, а они есть.
Поэтому придумано такое решение:
  1. Открываем конфигурацию для редактирования с сохранением поддержки.
  2. Справочник - ФизическиеЛица - ФормаРедактированияПроцентаСевернойНадбавки 
  3. Редактируем собственно эту форму, и добавляем желанную кнопку
Верное использование алгоритма неминуемо приведет к верному результату :) 
  1. Добавляем на форму кнопку, назовем ее ПодсчетСтажа.
  2. На вкладке команды создаем Команду с названием ПодсчетСтажаНаОснове.
  3. В параметрах команды, в свойстве Действие пишем: ПодсчетСтажаНаОснове
  4. Далее переходим на вкладку Модуль, двигаемся  в самый низ редактора исполняемого кода, и добавляем процедуру ПодсчетСтажаНаОснове выполняться она будет на клиенте.
  5. Исходный код
&НаКлиенте
Процедура ПодсчетСтажаНаОснове(Команда)
   ДатаПриема = ЭтотОбъект.ДатаСтажа;
   ДатаПриема = ДобавитьМесяц(ДатаПриема, -ЭтотОбъект.МесяцевСтажа);
   ДатаПриема = ДобавитьМесяц(ДатаПриема, -ЭтотОбъект.ЛетСтажа*12);
   ДатаПриема = ДатаПриема - ЭтотОбъект.ДнейСтажа*60*60*24;
   ЭтотОбъект.ПроцентыСевернойНадбавкиФизическихЛицНаборЗаписей.Очистить();
   ПерерасчетСтажаЛич = Новый Структура;  
   ПерерасчетСтажаЛич.Вставить("Период",ДатаПриема);
   ПерерасчетСтажаЛич.Вставить("ПроцентСевернойНадбавки","0");
   ЗаполнениеТЧ = ЭтотОбъект.ПроцентыСевернойНадбавкиФизическихЛицНаборЗаписей.Добавить();
   ЗаполнитьЗначенияСвойств(ЗаполнениеТЧ,ПерерасчетСтажаЛич);
   ЗаполнитьБудущиеИзмененияСДаты(Истина);
КонецПроцедуры

Очень краткое руководство:
  1. В поле вид стажа выбираем стаж работы на севере.
  2. В поле на дату пишем дату приема. 
  3. Указываем количество лет, месяцев, и дней.
  4. Нажимаем на кнопку Подсчитать стаж исходя из общего стажа.
Осознал что как-то не грамотно названы кнопки, и процедура, т.к. мы считаем северную надбавку в прошлом и будущем, а не стаж, оставлю свою ошибку на обозрение, и впредь постараюсь не допускать таких логических и лексических ошибок.