Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
23 ноя 2024, 00:02

Автоматизация назначения премии при проведении зарплаты

Автор FloralPashtet, 21 дек 2023, 13:35

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

FloralPashtet

Объясняю ситуацию:
Есть 2 документа - Расчёт Зарплаты и Документ Продажи. Я хочу назначить условному -Иванову- зарплату, но ещё хочу узнать, есть ли пройденный порог в его достижениях по продажам (допустим, 50 товаров за месяц - 5000 премия ).
Далее, есть у этого -Иванова- 50 (всего) проданных товаров в документе. Я хочу подсчитать их количество конкретно по Иванову (хотелось бы, чтобы код подхватывал последнее ФИО при изменении элемента формы, подготовленного для зарплаты), в документе есть и другие сотрудники.

В этих документах есть табличные части, в ТЧ Документа Продажи описано количество товара, название и стоимость, в ТЧ Расчёта Зарплаты записывается "Дата", "ФИО" сотрудника, "РазмерЗП" и булево поле "Премия"

И то есть, идея в чём, обобщаю: берём, вписываем в документ Иванова, после объявления зарплаты логика подхватывает дату и фамилию, смотрит в Документе Продажи сколько он продал за месяц. Если пройден порог в 50 товаров, то к зп прибавляется 5000 рублей и ставится галочка на "Премия" для отчёта.

Сейчас нахожусь на практике, совсем зелёный в 1С, в БД и SQL +- шарю, но встроенный язык 1С озадачил. Описал логику, но при исполнении терялся реквизит "НаименованиеСотрудника" в ТЧ, вчера и сегодня код лопатил. В итоге пришёл к некому результату, но логика просто не срабатывала (и не ругалась!) и через "Табло" не отслеживалось что и куда шло.
Помогите, пожалуйста!  :(

alexandr_ll

FloralPashtet, Вы чтог - все это сами наваяли? Приводите код тех процедур, которые не работают.

FloralPashtet

alexandr_ll, Да, сам придумал, сам разгребаю :D Очень уж люблю на событиях играть в логике, ранее в PostgreSQL химичил, но успешно. Я весь конфиг и ИБ оставил на производстве. Завтра перенесу домой и появлюсь снова! Сначала хотел дома переписать по памяти, но меня волнует тот, которым себе шишки набил.

Спасибо за отклик! Уверен, что в силу малого опыта и знания самого софта много чего не учитываю. Завтра всё будет.

FloralPashtet

alexandr_ll,

Добрый вечер! Вот код:

Общий модуль ПроверкаДляПремии:
-------------------------------------------------------
Функция ПроверкаНаПремию(ПолученоИмя)Экспорт
   ИтогоКоличество = 0;
   Для Каждого Строка из Объект.АкционныеПродажи  Цикл
      Если ПолученоИмя = "Иванов Иван Иванович" Тогда //Здесь я не смог нормально провести цикл
         ИтогоКоличество = ИтогоКоличество + Строка.КоличествоТоваров;
      КонецЕсли
   КонецЦикла;
   Возврат ИтогоКоличество;
КонецФункции
======================================================
Модуль Документа Расчёт Зарплаты:
------------------------------------------------------
&НаКлиенте
Процедура ТабличнаяЧастьРасчётаРазмерЗППриИзменении(Элемент, ИтогоКоличество)
   Перем ПолученоИмя;
   СтрокаДокумента = Элементы.ТабличнаяЧастьРасчёта.ТекущиеДанные;
   ПолученоИмя=ПроверкаДляПремии.ПроверкаНаПремию(СтрокаДокумента.НаименованиеСотрудника);
   Если ИтогоКоличество > 50 Тогда
      СтрокаДокумента.АкционнаяПремия = ИСТИНА;
      СтрокаДокумента.РазмерЗП = СтрокаДокумента.РазмерЗП + 5000;     
   КонецЕсли;

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

Сегодня общался с главным по практике. В принципе, понимаю, что слишком сложные задачи на себя беру, хорошо не изучив основных понятий и взаимодействий. Подозреваю, что в некоторых местах вообще бредово :(.
Хотел бы получить какие-то подсказки по поводу этой задачки. А пока что, эти выходные посвящу изучению теории, затем применю на практике.

alexandr_ll

FloralPashtet, СтрокаДокумента.НаименованиеСотрудника - какой тип значения? Если это ссылка на справочник, то условие в функции
  Если ПолученоИмя = "Иванов Иван Иванович" Тогданужно перелелать на
  Если ПолученоИмя = Строка.Сотрудник Тогда

FloralPashtet

alexandr_ll, Да, это ссылка на справочник "Сотрудники"

FloralPashtet

alexandr_ll,

{ОбщийМодуль.ПроверкаДляПремии.Модуль(4,24)}: Переменная не определена (Объект)
   Для Каждого Строка из <<?>>Объект.АкционныеПродажи  Цикл (Проверка: Сервер)

alexandr_ll

FloralPashtet, Как вы обращаетесь к общему модулю, что в нем?

FloralPashtet

alexandr_ll,    

ПолученоИмя=ПроверкаДляПремии.ПроверкаНаПремию(СтрокаДокумента.НаименованиеСотрудника);

По идее так обращаюсь. А в нём цикл:

Общий модуль ПроверкаДляПремии
--------------------------------------------
Функция ПроверкаНаПремию(ПолученоИмя)Экспорт
   ИтогоКоличество = 0;
   Для Каждого Строка из Объект.АкционныеПродажи  Цикл
      Если ПолученоИмя = Строка.Сотрудник Тогда //Здесь я не смог нормально провести цикл
         ИтогоКоличество = ИтогоКоличество + Строка.КоличествоТоваров;
      КонецЕсли
   КонецЦикла;
   Возврат ИтогоКоличество;
КонецФункции

alexandr_ll

FloralPashtet, Откуда общий модуль знает, про какой объект вы спрашиваете?
Или передайтк ссылку на ваш объект вторым параметром, или поместите функцию в форму документа.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск