8.х ЗУП Почтовые сборы в ЗУП

Тема в разделе ""1С:Зарплата и управление персоналом ЗУП"", создана пользователем Кирилл_15, 19 фев 2010.

  1. TopicStarter Overlay
    Кирилл_15
    Offline

    Кирилл_15 Опытный в 1С

    Регистрация:
    2 ноя 2009
    Сообщения:
    57
    Симпатии:
    0
    Баллы:
    26
    Помогите написать условие,надо настроить вид удержание "почтовый Сбор",который рассчитывается от суммы алиментов следующим образомом:

    от 1000 р включит-7руб+5%
    от 1001 р до 5000 р включительно -57р+4%
    от 5001 р до 20000 р включительно 217р+2%
    от 20001р до 100000р включит 517р+2%
  2. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Вообще есть предопределенный вид удержания как почтовый сбор, который пристваивается человеку, если на него оформлен исчполнительный лист не пустое поле почтовый сбор. Но действительно что там фиксированный процент и не расчитывается. Многие в коде прямо дописывали шкалу.
    Я так понимаю что вы хотите описать свой вид удержания и назначать его тому кому надо.

    Ну создаете видр асчета Создаете показатель с видом Шкала (там описываете шкалу) и в формуле расчета пишете
    РасчетнаяБаза*ОценитьПо(РасчетнаяБаза,Шкала)
    РасчетнаяБаза -это предопределенный показатель.
    Заполняете вкладку прочие тем что в базу будет входить

    Я всегда на курсах говорил свои слушателям "перед тем как создать какое то начисление, сначала подумайте 5 минут на что оно похоже.Тогда порой можно сделать новое, добавив копрированием и переименовав"
  3. TopicStarter Overlay
    Кирилл_15
    Offline

    Кирилл_15 Опытный в 1С

    Регистрация:
    2 ноя 2009
    Сообщения:
    57
    Симпатии:
    0
    Баллы:
    26
    нашел где формируется :
    ИначеЕсли СпособРасчета = Перечисления.СпособыРасчетаОплатыТруда.ПочтовыйСбор Тогда

    Результат = СтрокаДвижений[ПоказательРазмер] / 100 * ОбщегоНазначения.ЦелМаксимальное(ИсходныеДанные.РазмерПочтовогоПеревода);


    а вот как я хочу реализовать:
    Результат= ?(СуммаПоИспЛисту<=1000, СуммаПоИспЛисту*0.05+7,
    ?(СуммаПоИспЛисту<=5000, СуммаПоИспЛисту*0.04+57,
    ?(СуммаПоИспЛисту<=20000, СуммаПоИспЛисту*0.02+217,СуммаПоИспЛисту*0.02+517)));


    а как правило написать Условие Если не могу.....
  4. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Вообще бы я не рекомендовал снимать с поддержки конфу только ради этой шкалы.
    я это добавлял в модуль док Начисление ЗП в процедуру РассчитатьУдержания запросик подправил

    Код:
    // удержания - в последнюю очередь
    ПроведениеРасчетовПереопределяемый.РассчитатьЗаписиРегистраРасчета("УдержанияРаботниковОрганизаций", НаборУдержания, , , ВыборкаПоШапкеДокумента.ГоловнаяОрганизация, ВыборкаПоШапкеДокумента.ОбособленноеПодразделение, Удержания, , , , , , МассивИндексыСтрокУдержания, Физлицо, КомментироватьРасчет);
    
    //+ KOAN
    // расчет почтового сбора
    Запрос = Новый Запрос;
    Запрос.Текст=
    "ВЫБРАТЬ
    |     УдержаниеПС.ФизЛицо,
    |     УдержаниеПС.НомерСтроки,
    |     ВЫБОР
    |          КОГДА УдержаниеОсновное.Результат ЕСТЬ NULL 
    |               ТОГДА 0
    |          КОГДА УдержаниеОсновное.Результат = 0
    |               ТОГДА 0
    |          КОГДА УдержаниеОсновное.Результат > 0
    |                    И УдержаниеОсновное.Результат <= 1000
    |               ТОГДА 7 + УдержаниеОсновное.Результат* 5 / 100
    |          КОГДА УдержаниеОсновное.Результат > 1000
    |                    И УдержаниеОсновное.Результат <= 5000
    |               ТОГДА 57 + (УдержаниеОсновное.Результат-1000) * 4 / 100
    |          КОГДА УдержаниеОсновное.Результат > 5000
    |                    И УдержаниеОсновное.Результат <= 20000
    |               ТОГДА 217 + (УдержаниеОсновное.Результат-5000) * 2 / 100
    |          КОГДА УдержаниеОсновное.Результат > 20000
    |                    И УдержаниеОсновное.Результат <= 100000
    |               ТОГДА 517 + (УдержаниеОсновное.Результат-20000) * 1 / 100
    |          ИНАЧЕ 0
    |     КОНЕЦ КАК размерПС
    |ИЗ
    |     Документ.НачислениеЗарплатыРаботникамОрганизаций.Удержания КАК УдержаниеПС
    |          ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    |               УдержанияРаботниковОрганизаций.Регистратор КАК Ссылка,
    |               УдержанияРаботниковОрганизаций.ФизЛицо КАК ФизЛицо,
    |               УдержанияРаботниковОрганизаций.Результат КАК Результат,
    |               УдержанияРаботниковОрганизаций.ДокументОснование КАК ДокументОснование
    |          ИЗ
    |               РегистрРасчета.УдержанияРаботниковОрганизаций КАК УдержанияРаботниковОрганизаций
    |          ГДЕ
    |               УдержанияРаботниковОрганизаций.ВидРасчета <> &ВидРасчетаПС) КАК УдержаниеОсновное
    |          ПО УдержаниеПС.Ссылка = УдержаниеОсновное.Ссылка
    |               И УдержаниеПС.ФизЛицо = УдержаниеОсновное.ФизЛицо
    |               И УдержаниеПС.ДокументОснование = УдержаниеОсновное.ДокументОснование
    |ГДЕ
    |     УдержаниеПС.Ссылка = &Ссылка
    |     И УдержаниеПС.ДокументОснование.ПроцентПочтовогоСбора <> 0
    |     И УдержаниеПС.ВидРасчета = &ВидРасчетаПС";
    Запрос.УстановитьПараметр("ВидРасчетаПС",ПланыВидовРасчета.УдержанияОрганизаций.ПочтовыйСборПоИЛ);
    Запрос.УстановитьПараметр("Ссылка",ЭтотОбъект.Ссылка);
    
  5. TopicStarter Overlay
    Кирилл_15
    Offline

    Кирилл_15 Опытный в 1С

    Регистрация:
    2 ноя 2009
    Сообщения:
    57
    Симпатии:
    0
    Баллы:
    26
    ну в процедуре РассчитатьУдержания нет запроса,с нуля создали

    ЗУП 2.5.20
  6. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Уже не помню Видно да. В последнее время просто делал как ты изначально хотел. Писал доп удержание и назначал его
  7. TopicStarter Overlay
    Кирилл_15
    Offline

    Кирилл_15 Опытный в 1С

    Регистрация:
    2 ноя 2009
    Сообщения:
    57
    Симпатии:
    0
    Баллы:
    26
    а какую переменую ты выставлял Результат=Запрос.Выбрать().Выполнить();
    скинь пожалуста оконцовку запроса.
    И снаступающем тебя праздником 23 февраля,всех благ и успехов...
  8. OksM
    Offline

    OksM Опытный в 1С

    Регистрация:
    15 окт 2007
    Сообщения:
    75
    Симпатии:
    0
    Баллы:
    26
    Общие модули
    ПроведениеРасчетовПереопределяемый
    Процедура РассчитатьЗаписьРегистраРасчета(.....


    Родная запись:
    ИначеЕсли СпособРасчета = Перечисления.СпособыРасчетаОплатыТруда.ПочтовыйСбор Тогда

    Результат = СтрокаДвижений[ПоказательРазмер] / 100 * ОбщегоНазначения.ЦелМаксимальное(ИсходныеДанные.РазмерПочтовогоПеревода);


    Переделано:

    ИначеЕсли СпособРасчета = Перечисления.СпособыРасчетаОплатыТруда.ПочтовыйСбор Тогда


    РазмерСбора = СтрокаДвижений[ПоказательРазмер];
    СуммаАлиментов = ИсходныеДанные.РазмерПочтовогоПеревода;

    Если РазмерСбора = 1 Тогда //по тарифам России
    Если СуммаАлиментов = 0 Тогда
    Результат = 0;
    ИначеЕсли СуммаАлиментов < 1001 Тогда
    Результат = Окр(СуммаАлиментов*0.07+9, 2);
    ИначеЕсли СуммаАлиментов < 5001 Тогда
    Результат = Окр((СуммаАлиментов-1000)*0.05+79, 2);
    ИначеЕсли СуммаАлиментов < 20001 Тогда
    Результат = Окр((СуммаАлиментов-5000)*0.02+279, 2);
    Иначе
    Результат = Окр((СуммаАлиментов-20000)*0.01+579, 2);
    КонецЕсли;
    ИначеЕсли РазмерСбора = 2 Тогда //по международным тарифам
    Если СуммаАлиментов = 0 Тогда
    Результат = 0;
    ИначеЕсли СуммаАлиментов < 1001 Тогда
    Результат = Окр(СуммаАлиментов*0.08+7, 2);
    ИначеЕсли СуммаАлиментов < 5001 Тогда
    Результат = Окр((СуммаАлиментов-1000)*0.035+87, 2);
    ИначеЕсли СуммаАлиментов < 20001 Тогда
    Результат = Окр((СуммаАлиментов-5000)*0.025+227, 2);
    Иначе
    Результат = Окр((СуммаАлиментов-20000)*0.015+602, 2);
    КонецЕсли;
    Иначе
    Результат = СтрокаДвижений[ПоказательРазмер] / 100 * СуммаАлиментов;
    КонецЕсли;

    Размер сбора по договоренности вводим 1 - если перевод по России, 2 - если за пределами РФ
  9. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Код:
    |ГДЕ
    |     УдержаниеПС.Ссылка = &Ссылка
    |     И УдержаниеПС.ДокументОснование.ПроцентПочтовогоСбора <> 0
    |     И УдержаниеПС.ВидРасчета = &ВидРасчетаПС";
    Запрос.УстановитьПараметр("ВидРасчетаПС",ПланыВидовРасчета.УдержанияОрганизаций.ПочтовыйСборПоИЛ);
    Запрос.УстановитьПараметр("Ссылка",ЭтотОбъект.Ссылка);
    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
    Если Выборка.размерПС = 0 Тогда
    сообщить("<span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/по')">По физ. лицу "+Выборка.ФизЛицо+" для расчета почтового сбора нет данных!!!");</span>
    Иначе     
    ЭтотОбъект.Удержания[Выборка.НомерСтроки-1].Результат =Выборка.размерПС;
    КонецЕсли;
    КонецЦикла;     
    //- KOAN
    
    // Удаляем движения
    Для Каждого Набор Из Движения Цикл
    ПроверяемыйТип = ТипЗнч(Набор);
    Если ПроверяемыйТип = Тип("РегистрРасчетаНаборЗаписей.ОсновныеНачисленияРаботниковОрганизаций") Тогда
    НаборОсновныеНачисления.Очистить();
    

Поделиться этой страницей