|
Дайте мастеркласс - как дорабатывать, а потом обновлять типовые. | ☑ | ||
---|---|---|---|---|
0
RomaH
naïve
28.01.13
✎
08:08
|
А то как-то школа франчайзи меня стороной обошла,
и терзают смутные сомнения, что возможно я чего-то не знаю например, как изменять типовой текст модулей как изменять (обновлять) типовые объекты (в основном напрягают движения документов, и регистраторы регистров) Например: ЗУП добавляю новый документ и новый регистр новый документ делает движения по типовому регистру и по новому а для нового регистра регистратором является новый документ и типовой документ как обновить, что бы не забыть движения и регистраторы прописать у всех связаных объектов? |
|||
1
SeraFim
28.01.13
✎
08:10
|
движения - в подписке
|
|||
2
Мизантроп
28.01.13
✎
08:16
|
купить у 1с софтину которая сама обновит как надо
|
|||
3
RomaH
naïve
28.01.13
✎
08:18
|
(2) что за софтина, где посмотреть?
а может я все неправильно делаю? я сейчас через cf обновляю |
|||
4
Infsams654
28.01.13
✎
08:19
|
||||
5
cw014
28.01.13
✎
08:24
|
Мастер класс:
1) С поддержки снимать не надо, надо включить возможность изменений. При этом все объекты должны быть со статусом "не редактируется" 2) Объекты, которые нужно редактировать, ставишь статус "редактировать с сохранением поддержки". Если редактируешь форму - весь объект на редактирование ставить не нужно, нужно ставить только эту форму 3) Изменения в модулях по возможности помещать в начало процедур или в конец процедур 4) Не использовать код в типовых процедурах, использовать общий модуль (дополнительный, свой), где и производить обработку. В типовых модулях ставить только вызов этих процедур. Комментировать все изменения 5) Вести карту изменений. При изменении какого либо объекта - вносить в карту запись по изменению 6) При обновлении - сверяться с картой изменений. Если есть какие либо обновления, затрагивающие модуль, который исправлен - можно сделать индивидуальную настройку обновления (выбрать процедуры которые необходимо обновить). После обновления, если была обновлена процедура, которая перетерлась обновлением - внести изменения по новой. 7) Желательно не трогать формы - неудобно потом на новой форме все вырисовывать и привязки рисовать. Можно программно создавать элементы формы - тоже вынести в общий модуль... Кто чего добавить? |
|||
6
Demasiado
28.01.13
✎
08:27
|
(4) судя по видео - хреномуть...
|
|||
7
vicof
28.01.13
✎
08:27
|
(5)
0) Сделать бэкап :) |
|||
8
Бешеная Нога
28.01.13
✎
08:28
|
(5) хорошо написано
|
|||
9
RomaH
naïve
28.01.13
✎
08:29
|
5) Вести карту изменений. При изменении какого либо объекта - вносить в карту запись по изменению - вот от этого и хочу уйти - сейчас так и делается - накатываю конфигурацию, и вперед по списку - проверять
4) Не использовать код в типовых процедурах, использовать общий модуль (дополнительный, свой), где и производить обработку. В типовых модулях ставить только вызов этих процедур. Комментировать все изменения вариант, но не всегда допустим есть сложный модуль ... че-то там про расчет больничных, надо исправить - привести в соответсвие с законодательством - добавить пару строк в два места если выеносить процедуру в свой модуль - это копипаст текущей типовой при обновлении, типовая процедура может быть изменена, а исправления остануться на своих местах, это надо будет опять типовоую в свой модуль скопипастить, и исправить - сложнее |
|||
10
RomaH
naïve
28.01.13
✎
08:32
|
1) С поддержки снимать не надо, надо включить возможность изменений. При этом все объекты должны быть со статусом "не редактируется"
+ 7) Желательно не трогать формы - неудобно потом на новой форме все вырисовывать и привязки рисовать. Можно программно создавать элементы формы - тоже вынести в общий модуль... а вот тут ... несостыковочка, по формам так и сделано, но для типизации, делаю выгрузку модулей конфигарации и парсингом в модули форм добавляю вызов своей процедуры в ПриОткрытии или в ПередОткрытием (во ВСЕ формы сразу) |
|||
11
cw014
28.01.13
✎
08:36
|
(9) По возможности помещать код в конец процедуры... Но не обязательно
Приведи конкретный пример, подскажу как лучше в таком случае делать. У меня например есть в отчете процедура, которая "чуть-чуть" подправляет текст запроса, из-за чего отчет принимает другую форму. |
|||
12
cw014
28.01.13
✎
08:37
|
(10) Жесть
|
|||
13
i-rek
28.01.13
✎
08:37
|
(5) здорово
только я предпочитаю избегать вносить изменения в конце процедуры, т.к. в окне сравнения-объединения приходится прыгать в конец, если текст длинный. повышаются шансы проморгать изменение. добавлю: не комментировать изменения пометкой в конце строки кода //изменено по той же причине. может не быть видно в окне сравнения-объединения |
|||
14
i-rek
28.01.13
✎
08:38
|
и имея выбор: 2 точки вставки кода и оптимальный код, либо 1 точка и неоптимальный код - выбирать одну точку ;)
|
|||
15
cw014
28.01.13
✎
08:39
|
(13) Я комментирую примерно так:
// CW014 2013 [ Нужно что бы как бы так вот МойОбщийМодуль.КакойТоКод(); // CW014 2013 ] |
|||
16
cw014
28.01.13
✎
08:39
|
Да, хорошие добавления в (1) и в (7)
|
|||
17
cw014
28.01.13
✎
08:40
|
(10) Не рекомендуется так делать. Еще не видел таких задач, при которых "нужно во все формы" сделать. Если это формы документов - есть общие модули, которые вызываются в любой форме документа - можно туда воткнуть свою процедуру
|
|||
18
vicof
28.01.13
✎
08:40
|
(5) Насчет снимать или не снимать с поддержки. Когда конфа сильно переписана, проще подготовить цфник, с которого потом обновляться. Снять с поддержки и обновить типовым, чтобы поставить на поддержку.
|
|||
19
vicof
28.01.13
✎
08:42
|
(5) Некоторые не знают о попроцедурном сравнении модулей. Тоже можно в список включить.
|
|||
20
cw014
28.01.13
✎
08:42
|
(18) Не факт. На последнее место работы я пришел на сильно измененную УПП. Приходится протоколировать изменения, выносить печатные формы во внешние, в общем максимально приводить к типовому решению
|
|||
21
cw014
28.01.13
✎
08:43
|
(19) читай внимательно п. 6
|
|||
22
vicof
28.01.13
✎
08:44
|
(20) К типовому да, зачастую лучше к типовому приводить. Я так с ЗУПом у себя на предприятии поступаю. Но обновляться проще именно как я описал. Имхо.
|
|||
23
vicof
28.01.13
✎
08:45
|
(21) сорри, глаза протер
|
|||
24
RomaH
naïve
28.01.13
✎
08:47
|
пример (вставки выделены //Лобанов
изменения только в отдельной части расчета обновление делается прасингом выгруженых модулей: // Рассчитывает значение ресурса записи регистра расчета по ее реквизитам и дополнительным данным // // Параметры: // СтрокаДвижений - рассчитываемая запись регистра расчета // ИсходныеДанные - выборка из результата запроса с исходными данными для расчета // УправленческиеНачисления - булево, признак того, что это расчет управленческий // РегламентированныеНачисления - булево, признак того, что это регламентированное начисление // ОсновныеНачисленияОрганизаций - булево, признак того, что это именно основое регламентированное начисление // ДанныеДляПрогнозаНДФЛ - выборка из результата запроса с данными для прогнозирования НДФЛ // СведенияОДоначислениях - соответствие для хранения данных о доначислениях // КурсВалютыУпрУчета // ПовторныйРасчет - признак того, что выполняется повторный расчет (поддержка // способа ДоначислениеПоУправленческомуУчету) // // Возвращаемое значение: // Нет. // Процедура РассчитатьЗаписьРегистраРасчета(СтрокаДвижений, ИсходныеДанные, УправленческиеНачисления, РегламентированныеНачисления, РегламентированныеУдержания, ОсновныеНачисленияОрганизаций, ДополнительныеНачисленияОрганизаций, ДанныеДляПрогнозаНДФЛ, СведенияОДоначислениях, КурсВалютыУпрУчета, ПовторныйРасчет, КомментироватьРасчет, ФормаКомментариев, ГрафикиБезРабочегоВремени) ВидРасчета = СтрокаДвижений.ВидРасчета; СпособРасчета = ИсходныеДанные.СпособРасчета; Результат = 0; РезультатПолучен = Истина; ПоказательРазмер = "Показатель1"; // предварительные действия перед расчетом для поддержки // способа расчета ДоначислениеПоУправленческомуУчету РасчетДоначисления = Ложь; Если РегламентированныеНачисления и СведенияОДоначислениях <> Неопределено Тогда Сведение = СведенияОДоначислениях.Получить(СтрокаДвижений.Сотрудник); Если Сведение = Неопределено Тогда Сведение = Новый Структура("КВыплатеПоУпрУчету,ЕстьДоначисление,ПрогнозНДФЛ,СуммарныйПроцент,УжеНачисленоДоДоначисления"); Сведение.КВыплатеПоУпрУчету = 0; Сведение.СуммарныйПроцент = 0; Сведение.УжеНачисленоДоДоначисления = 0; Сведение.ЕстьДоначисление = Ложь; Сведение.ПрогнозНДФЛ = Новый Соответствие(); СведенияОДоначислениях[СтрокаДвижений.Сотрудник] = Сведение; КонецЕсли; Если ОсновныеНачисленияОрганизаций И ИсходныеДанные.УчитыватьДоходПоПериодуДействия Тогда ПериодДохода = НачалоМесяца(ИсходныеДанные.ПериодДействияНачало); Иначе // здесь предполагаем, что в наборе записей не может быть записей с разными периодами регистрации ПериодДохода = СтрокаДвижений.ПериодРегистрации; КонецЕсли; СтрокаПрогноза = Сведение.ПрогнозНДФЛ.Получить(ПериодДохода); Если СтрокаПрогноза = Неопределено Тогда СтрокаПрогноза = ПроведениеРасчетовДополнительный.СоздатьСтрокуПрогнозаНДФЛ(); Сведение.ПрогнозНДФЛ[ПериодДохода] = СтрокаПрогноза; КонецЕсли; Если ИсходныеДанные.СпособРасчета = Перечисления.СпособыРасчетаОплатыТруда.ДоначислениеПоУправленческомуУчету Тогда РасчетДоначисления = Истина; Если не ПовторныйРасчет Тогда Сведение.ЕстьДоначисление = Истина; Если ОсновныеНачисленияОрганизаций Тогда Сведение.КВыплатеПоУпрУчету = ?(ИсходныеДанные.КВыплатеПоУпрУчету = Null, 0, ИсходныеДанные.КВыплатеПоУпрУчету) * КурсВалютыУпрУчета[НачалоМесяца(ИсходныеДанные.ПериодДействияНачало)]; Иначе Сведение.КВыплатеПоУпрУчету = ?(ИсходныеДанные.КВыплатеПоУпрУчету = Null, 0, ИсходныеДанные.КВыплатеПоУпрУчету) * КурсВалютыУпрУчета[СтрокаДвижений.ПериодРегистрации]; КонецЕсли; Сведение.СуммарныйПроцент = ?(ИсходныеДанные.СуммарныйПроцент = Null, 0, ИсходныеДанные.СуммарныйПроцент); Сведение.УжеНачисленоДоДоначисления = ?(ИсходныеДанные.УжеНачисленоДоДоначисления = Null, 0, ИсходныеДанные.УжеНачисленоДоДоначисления); Физлицо = ИсходныеДанные.Физлицо; // запомним поле "резидентство" Для Каждого СтрокаДляЗаполнения Из Сведение.ПрогнозНДФЛ Цикл СтрокаДляЗаполнения.Значение.Резидент = ИсходныеДанные.Резидент; КонецЦикла; Если ПроведениеРасчетовДополнительный.ПозиционироватьДанныеПрогнозаНДФЛ(ДанныеДляПрогнозаНДФЛ, Физлицо) Тогда Пока Истина Цикл СтрокаДляЗаполнения = Сведение.ПрогнозНДФЛ.Получить(ДанныеДляПрогнозаНДФЛ.Период); Если СтрокаДляЗаполнения = Неопределено Тогда СтрокаДляЗаполнения = ПроведениеРасчетовДополнительный.СоздатьСтрокуПрогнозаНДФЛ(); Сведение.ПрогнозНДФЛ[ДанныеДляПрогнозаНДФЛ.Период] = СтрокаДляЗаполнения; КонецЕсли; // запоним остальные поля ПроведениеРасчетовДополнительный.ЗаполнитьСтрокуПрогнозаНДФЛ(СтрокаДляЗаполнения, ДанныеДляПрогнозаНДФЛ); Если не ДанныеДляПрогнозаНДФЛ.Следующий() Тогда Прервать; КонецЕсли; Если ДанныеДляПрогнозаНДФЛ.Физлицо <> Физлицо Тогда Прервать; КонецЕсли; КонецЦикла; КонецЕсли; КонецЕсли; КонецЕсли; КонецЕсли; // расчет будем проводить только для авторассчитываемой записи Если СтрокаДвижений.Авторасчет Тогда ДатаЗакона255ФЗ = ПроведениеРасчетовДополнительный.ПолучитьДатуВступленияВСилуИзмененийПоСоциальнымПособиям2006(); // этот Если... нужно расширять при появлении новых способов расчета или видов расчета, // которые не укладываются в тот или иной способ Если КомментироватьРасчет Тогда КомментарийВидаРасчета = ОбщегоНазначенияЗК.КомментарийРасчета("Расчет ", , ИсходныеДанные.ВидРасчетаНаименование, СтрокаДвижений.ВидРасчета); ОбщегоНазначенияЗК.КомментарийРасчета("Способ расчета: " + ИсходныеДанные.СпособРасчета, КомментарийВидаРасчета); КомментарийПорядкаРасчета = ОбщегоНазначенияЗК.КомментарийРасчета("Порядок расчета: " + ПроведениеРасчетов.ВизуализироватьФормулуРасчета(ИсходныеДанные.ВидРасчета, "Текст", РегламентированныеУдержания), КомментарийВидаРасчета); Если СпособРасчета = Перечисления.СпособыРасчетаОплатыТруда.ПочтовыйСбор ИЛИ СпособРасчета = Перечисления.СпособыРасчетаОплатыТруда.БанковскиеИздержки Тогда Если ЗначениеЗаполнено(ИсходныеДанные.Получатель) Тогда ОбщегоНазначенияЗК.КомментарийРасчета("Получатель: " + ИсходныеДанные.Получатель, КомментарийПорядкаРасчета); КонецЕсли; Если ИсходныеДанные.ПоТарифу Тогда ОбщегоНазначенияЗК.КомментарийРасчета("Тариф: " + ИсходныеДанные.ПорядокИсчисленияИздержек, КомментарийПорядкаРасчета); ОбщегоНазначенияЗК.КомментарийРасчета("Процент: " + ИсходныеДанные.Процент, КомментарийПорядкаРасчета); Иначе ОбщегоНазначенияЗК.КомментарийРасчета("Фиксированный процент: " + ИсходныеДанные.Процент, КомментарийПорядкаРасчета); КонецЕсли; ОбщегоНазначенияЗК.КомментарийРасчета("Сумма перевода: " + ИсходныеДанные.СуммаАлиментов, КомментарийПорядкаРасчета); КонецЕсли; КонецЕсли; // Процентом и от стажа процентом // Если ПроведениеРасчетов.ПолучитьСписокНачисленийПроцентом().Найти(СпособРасчета) <> НеОпределено Тогда Если ОсновныеНачисленияОрганизаций И СтрокаДвижений.Сторно И НЕ СтрокаДвижений.РасчетнаяБазаЗаЕдиницуНормыВремени = 0 Тогда // при расчете сторно получаем "отнормированную" базу из реквизита записи регистра // и учтем отработанное время; для записей которые были рассчитаны ранее, этот реквизит пуст, // поэтому для них получим базу прежним способом ОтработанноеВремя = ?(ИсходныеДанные.ВидУчетаВремени = Перечисления.ВидыУчетаВремени.ПоДням, ИсходныеДанные.ОтработаноДней, ИсходныеДанные.ОтработаноЧасов); РезультатБаза = СтрокаДвижений.РасчетнаяБазаЗаЕдиницуНормыВремени * ОтработанноеВремя; Иначе РезультатБаза = ИсходныеДанные.РезультатБаза; КонецЕсли; // Размер - процент доплаты Если РезультатБаза = NULL Тогда Если ВидРасчета <> ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.РайонныйКоэффициент И СпособРасчета <> Перечисления.СпособыРасчетаОплатыТруда.СевернаяНадбавка Тогда // оставляем поведение ред.2.1 ОбщегоНазначенияЗК.ОшибкаРасчета(ИсходныеДанные.СотрудникНаименование + "; " + ИсходныеДанные.ВидРасчетаНаименование + ": Не определены базовые начисления "); КонецЕсли; Иначе Если КомментироватьРасчет Тогда КомментарийБазы = ОбщегоНазначенияЗК.КомментарийРасчета("Базовые начисления составили всего: " + РезультатБаза, КомментарийВидаРасчета,,,, Ложь); РасшифровкаБазы = ИсходныеДанные.Выбрать(); Если Не РегламентированныеУдержания Тогда Пока РасшифровкаБазы.Следующий() Цикл Если РасшифровкаБазы.РезультатБаза <> 0 Тогда ОбщегоНазначенияЗК.КомментарийРасчета(РасшифровкаБазы.ВидРасчетаРазрезНаименование + ": " + РасшифровкаБазы.РезультатБаза, КомментарийБазы); КонецЕсли; КонецЦикла; КонецЕсли; КонецЕсли; Если РегламентированныеУдержания Тогда УжеНачисленоВТекущемПериоде = ?(ИсходныеДанные.УжеНачисленоВТекущемПериоде = Null, 0, ИсходныеДанные.УжеНачисленоВТекущемПериоде); Результат = Макс(РезультатБаза * СтрокаДвижений[ПоказательРазмер]/100 - УжеНачисленоВТекущемПериоде,0); Если КомментироватьРасчет Тогда ОбщегоНазначенияЗК.КомментарийРасчета("Процент: " + СтрокаДвижений[ПоказательРазмер], КомментарийВидаРасчета); ОбщегоНазначенияЗК.КомментарийРасчета("Ранее начислено в текущем периоде: " + УжеНачисленоВТекущемПериоде, КомментарийВидаРасчета); КонецЕсли; Иначе Результат = РезультатБаза * СтрокаДвижений[ПоказательРазмер]/100; Если Не ИсходныеДанные.ВидРасчетаПериодДействияБазовый и Не ИсходныеДанные.БазовыйПериодПрошлыйМесяц Тогда НормаВремени = ИсходныеДанные.НормаВремениЗаМесяц; СообщениеОбОшибке = Ложь; ОтработаноВремениОсновное = ОплачиваемоеВремя(ИсходныеДанные, СтрокаДвижений, КомментироватьРасчет, КомментарийВидаРасчета, СообщениеОбОшибке, ГрафикиБезРабочегоВремени); Если НЕ СообщениеОбОшибке И НормаВремени = 0 Тогда ОбщегоНазначенияЗК.ОшибкаРасчета(ИсходныеДанные.СотрудникНаименование + "; " + ИсходныеДанные.ВидРасчетаНаименование + ": Нет рабочих дней в заданном периоде"); КонецЕсли; Если НормаВремени = 0 Тогда Результат = 0; Иначе Результат = Результат * ОтработаноВремениОсновное / НормаВремени; КонецЕсли; СтрокаДвижений.ОплаченоДнейЧасов = ОтработаноВремениОсновное * ?(СтрокаДвижений.Сторно,-1,1); КонецЕсли; Если КомментироватьРасчет Тогда ОбщегоНазначенияЗК.КомментарийРасчета("Процент оплаты: " + СтрокаДвижений[ПоказательРазмер], КомментарийВидаРасчета); Если Не ИсходныеДанные.ВидРасчетаПериодДействияБазовый и Не ИсходныеДанные.БазовыйПериодПрошлыйМесяц Тогда ОбщегоНазначенияЗК.КомментарийРасчета("Отработанное время: " + ИсходныеДанные.ОтработаноВремени, КомментарийВидаРасчета); ОбщегоНазначенияЗК.КомментарийРасчета("Норма времени: " + ИсходныеДанные.НормаВремениЗаМесяц, КомментарийВидаРасчета); КонецЕсли; КонецЕсли; КонецЕсли; КонецЕсли; // Процентом от облагаемых ЕСН начислений - для добровольных страховых взносов в ПФР на накопительную часть пенсии // ИначеЕсли СпособРасчета = Перечисления.СпособыРасчетаОплатыТруда.ПроцентомОтОблагаемыхЕСННачислений Тогда Если ИсходныеДанные.ОблагаемыйЕСНДоход = NULL Тогда ОбщегоНазначенияЗК.ОшибкаРасчета(ИсходныеДанные.СотрудникНаименование + "; " + ИсходныеДанные.ВидРасчетаНаименование + ": Отсутствуют доходы, облагаемые ЕСН "); Иначе Если КомментироватьРасчет Тогда КомментарийБазы = ОбщегоНазначенияЗК.КомментарийРасчета("Облагаемые доходы составили всего: " + ИсходныеДанные.ОблагаемыйЕСНДоход, КомментарийВидаРасчета,,,, Ложь); РасшифровкаБазы = ИсходныеДанные.Выбрать(); Пока РасшифровкаБазы.Следующий() Цикл Если РасшифровкаБазы.ОблагаемыйЕСНДоход <> 0 Тогда ОбщегоНазначенияЗК.КомментарийРасчета(РасшифровкаБазы.ВидРасчетаРазрезНаименование + ": " + РасшифровкаБазы.ОблагаемыйЕСНДоход, КомментарийБазы); КонецЕсли; КонецЦикла; КонецЕсли; // Размер - процент доплаты Если РегламентированныеУдержания Тогда УжеНачисленоВТекущемПериоде = ?(ИсходныеДанные.УжеНачисленоВТекущемПериоде = Null, 0, ИсходныеДанные.УжеНачисленоВТекущемПериоде); Результат = Макс(ИсходныеДанные.ОблагаемыйЕСНДоход * СтрокаДвижений[ПоказательРазмер]/100 - УжеНачисленоВТекущемПериоде,0); Если КомментироватьРасчет Тогда ОбщегоНазначенияЗК.КомментарийРасчета("Процент: " + СтрокаДвижений[ПоказательРазмер], КомментарийВидаРасчета); ОбщегоНазначенияЗК.КомментарийРасчета("Ранее начислено в текущем периоде: " + УжеНачисленоВТекущемПериоде, КомментарийВидаРасчета); КонецЕсли; Иначе Результат = ИсходныеДанные.ОблагаемыйЕСНДоход * СтрокаДвижений[ПоказательРазмер]/100; Если КомментироватьРасчет Тогда ОбщегоНазначенияЗК.КомментарийРасчета("Процент оплаты: " + СтрокаДвижений[ПоказательРазмер], КомментарийВидаРасчета); КонецЕсли; КонецЕсли; КонецЕсли; // ИсполнительныйЛистВПрожиточныхМинимумах // ИначеЕсли СпособРасчета = Перечисления.СпособыРасчетаОплатыТруда.ИсполнительныйЛистВПрожиточныхМинимумах Тогда Если ПроведениеРасчетов.РассчитатьРесурсыПоАлгоритму("АлиментыВПрожиточныхМинимумах", КомментироватьРасчет, КомментарийВидаРасчета, СтрокаДвижений, ИсходныеДанные) Тогда Результат = СтрокаДвижений.Результат КонецЕсли; // ИсполнительныйЛистПроцентом // ИначеЕсли СпособРасчета = Перечисления.СпособыРасчетаОплатыТруда.ИсполнительныйЛистПроцентом Тогда РезультатБаза = ИсходныеДанные.РезультатБаза; // Размер - процент удержания Если РезультатБаза = NULL Тогда ОбщегоНазначенияЗК.ОшибкаРасчета(ИсходныеДанные.СотрудникНаименование + "; " + ИсходныеДанные.ВидРасчетаНаименование + ": Не определены базовые начисления"); Иначе ИсчисленныйНалог = ?(ИсходныеДанные.ИсчисленныйНалог = Null, 0, ИсходныеДанные.ИсчисленныйНалог); УжеНачисленоВТекущемПериоде = ?(ИсходныеДанные.УжеНачисленоВТекущемПериоде = Null, 0, ИсходныеДанные.УжеНачисленоВТекущемПериоде); Результат = Макс(((РезультатБаза - ?(ИсчисленныйНалог < 0, 0, ИсчисленныйНалог)) * СтрокаДвижений[ПоказательРазмер]/100) - УжеНачисленоВТекущемПериоде, 0); Если КомментироватьРасчет Тогда КомментарийБазы = ОбщегоНазначенияЗК.КомментарийРасчета("Базовые начисления составили всего: " + РезультатБаза, КомментарийВидаРасчета,,,, Ложь); ОбщегоНазначенияЗК.КомментарийРасчета("Исчислено НДФЛ за текущий период: " + ИсчисленныйНалог + ?(ИсчисленныйНалог < 0, "; сумма налога исключена из расчета", ""), КомментарийВидаРасчета); ОбщегоНазначенияЗК.КомментарийРасчета("Ранее начислено в текущем периоде: " + УжеНачисленоВТекущемПериоде, КомментарийВидаРасчета); КонецЕсли; КонецЕсли; // ИсполнительныйЛистПроцентомДоПредела // ИначеЕсли СпособРасчета = Перечисления.СпособыРасчетаОплатыТруда.ИсполнительныйЛистПроцентомДоПредела Тогда РезультатБаза = ИсходныеДанные.РезультатБаза; // Размер - процент удержания Если РезультатБаза = NULL Тогда ОбщегоНазначенияЗК.ОшибкаРасчета(ИсходныеДанные.СотрудникНаименование + "; " + ИсходныеДанные.ВидРасчетаНаименование + ": Не определены базовые начисления "); Иначе ИсчисленныйНалог = ?(ИсходныеДанные.ИсчисленныйНалог = Null, 0, ИсходныеДанные.ИсчисленныйНалог); УжеНачисленоВТекущемПериоде = ?(ИсходныеДанные.УжеНачисленоВТекущемПериоде = Null, 0, ИсходныеДанные.УжеНачисленоВТекущемПериоде); ПределПоДокументуОснованию = ?(ИсходныеДанные.ПределПоДокументуОснованию = Null, 0 ,ИсходныеДанные.ПределПоДокументуОснованию); УжеНачисленоЗаВсюИсторию = ?(ИсходныеДанные.УжеНачисленоЗаВсюИсторию = Null, 0, ИсходныеДанные.УжеНачисленоЗаВсюИсторию); Результат = Макс(((РезультатБаза - ?(ИсчисленныйНалог < 0, 0, ИсчисленныйНалог)) * СтрокаДвижений[ПоказательРазмер]/100) - УжеНачисленоВТекущемПериоде, 0); // Ограничим результат расчета в случае достижения предела удержания Результат = Мин(Результат, ПределПоДокументуОснованию - УжеНачисленоЗаВсюИсторию); Если КомментироватьРасчет Тогда КомментарийБазы = ОбщегоНазначенияЗК.КомментарийРасчета("Базовые начисления составили всего: " + РезультатБаза, КомментарийВидаРасчета,,,, Ложь); ОбщегоНазначенияЗК.КомментарийРасчета("Исчислено НДФЛ за текущий период: " + ИсчисленныйНалог + ?(ИсчисленныйНалог < 0, "; сумма налога исключена из расчета", ""), КомментарийВидаРасчета); ОбщегоНазначенияЗК.КомментарийРасчета("Ранее начислено в текущем периоде: " + УжеНачисленоВТекущемПериоде, КомментарийВидаРасчета); ОбщегоНазначенияЗК.КомментарийРасчета("Предел по документу основанию: " + ПределПоДокументуОснованию, КомментарийВидаРасчета); ОбщегоНазначенияЗК.КомментарийРасчета("Ранее начислено за всю историю: " + УжеНачисленоЗаВсюИсторию, КомментарийВидаРасчета); КонецЕсли; КонецЕсли; // ИсполнительныйЛистФиксСуммойДоПредела // ИначеЕсли СпособРасчета = Перечисления.СпособыРасчетаОплатыТруда.ИсполнительныйЛистФиксСуммойДоПредела Тогда ПределПоДокументуОснованию = ?(ИсходныеДанные.ПределПоДокументуОснованию = Null, 0 ,ИсходныеДанные.ПределПоДокументуОснованию); УжеНачисленоЗаВсюИсторию = ?(ИсходныеДанные.УжеНачисленоЗаВсюИсторию = Null, 0, ИсходныеДанные.УжеНачисленоЗаВсюИсторию); // Ограничим результат расчета в случае достижения предела удержания Результат = Мин(СтрокаДвижений[ПоказательРазмер], ПределПоДокументуОснованию - УжеНачисленоЗаВсюИсторию); Если КомментироватьРасчет Тогда ОбщегоНазначенияЗК.КомментарийРасчета("Предел по документу основанию: " + ПределПоДокументуОснованию, КомментарийВидаРасчета); ОбщегоНазначенияЗК.КомментарийРасчета("Ранее начислено за всю историю: " + УжеНачисленоЗаВсюИсторию, КомментарийВидаРасчета); КонецЕсли; ИначеЕсли СпособРасчета = Перечисления.СпособыРасчетаОплатыТруда.ПочтовыйСбор ИЛИ СпособРасчета = Перечисления.СпособыРасчетаОплатыТруда.БанковскиеИздержки Тогда Если ПроведениеРасчетов.РассчитатьРесурсыПоАлгоритму("ПочтовыеПереводы", КомментироватьРасчет, КомментарийВидаРасчета, СтрокаДвижений, ИсходныеДанные) Тогда Результат = СтрокаДвижений.Результат КонецЕсли; // УдержаниеФиксированнойСуммой // ИначеЕсли СпособРасчета = Перечисления.СпособыРасчетаОплатыТруда.УдержаниеФиксированнойСуммой Тогда УжеНачисленоВТекущемПериоде = ?(ИсходныеДанные.УжеНачисленоВТекущемПериоде = Null, 0, ИсходныеДанные.УжеНачисленоВТекущемПериоде); // Размер - сумма удержания // за месяц должно удержаться ровно столько, сколько указано в документе Результат = СтрокаДвижений[ПоказательРазмер] - УжеНачисленоВТекущемПериоде; Если КомментироватьРасчет Тогда ОбщегоНазначенияЗК.КомментарийРасчета("Размер удержания: " + СтрокаДвижений[ПоказательРазмер], КомментарийВидаРасчета); ОбщегоНазначенияЗК.КомментарийРасчета("Ранее начислено в текущем периоде: " + УжеНачисленоВТекущемПериоде, КомментарийВидаРасчета); КонецЕсли; // ФиксированнойСуммой // ПоДоговоруФиксированнойСуммой // ИначеЕсли СпособРасчета = Перечисления.СпособыРасчетаОплатыТруда.ФиксированнойСуммой или СпособРасчета = Перечисления.СпособыРасчетаОплатыТруда.ПоДоговоруФиксированнойСуммой Тогда // Размер - сумма доплаты Результат = СтрокаДвижений[ПоказательРазмер]; Если КомментироватьРасчет Тогда ОбщегоНазначенияЗК.КомментарийРасчета("Размер начисления: " + СтрокаДвижений[ПоказательРазмер], КомментарийВидаРасчета); КонецЕсли; // НулеваяСумма // ИначеЕсли СпособРасчета = Перечисления.СпособыРасчетаОплатыТруда.НулеваяСумма Тогда // Ничего не считаем // ПоМесячнойТарифнойСтавкеПоДням // ПоМесячнойТарифнойСтавкеПоЧасам ИначеЕсли СпособРасчета = Перечисления.СпособыРасчетаОплатыТруда.ПоМесячнойТарифнойСтавкеПоДням или СпособРасчета = Перечисления.СпособыРасчетаОплатыТруда.ПоМесячнойТарифнойСтавкеПоЧасам или СпособРасчета = Перечисления.СпособыРасчетаОплатыТруда.ОтСтажаПоМесячнойТарифнойСтавкеПоДням или СпособРасчета = Перечисления.СпособыРасчетаОплатыТруда.ОтСтажаПоМесячнойТарифнойСтавкеПоЧасам Тогда НормаВремени = ИсходныеДанные.НормаВремениЗаМесяц; СообщениеОбОшибке = Ложь; ОтработаноВремениОсновное = ОплачиваемоеВремя(ИсходныеДанные, СтрокаДвижений, КомментироватьРасчет, КомментарийВидаРасчета, СообщениеОбОшибке, ГрафикиБезРабочегоВремени); Если НЕ СообщениеОбОшибке И НормаВремени = 0 Тогда ОбщегоНазначенияЗК.ОшибкаРасчета(ИсходныеДанные.СотрудникНаименование + "; " + ИсходныеДанные.ВидРасчетаНаименование + ": Нет рабочих дней в заданном периоде"); КонецЕсли; Если НормаВремени <> 0 Тогда Результат = СтрокаДвижений[ПоказательРазмер] * ОтработаноВремениОсновное / НормаВремени; Если КомментироватьРасчет Тогда ОбщегоНазначенияЗК.КомментарийРасчета("Тарифная ставка: " + СтрокаДвижений[ПоказательРазмер], КомментарийВидаРасчета); ОбщегоНазначенияЗК.КомментарийРасчета("Норма времени: " + НормаВремени, КомментарийВидаРасчета); КонецЕсли; КонецЕсли; СтрокаДвижений.ОплаченоДнейЧасов = ОтработаноВремениОсновное * ?(СтрокаДвижений.Сторно,-1,1); // ПоЧасовойТарифнойСтавке // ПоДневнойТарифнойСтавке // ИначеЕсли СпособРасчета = Перечисления.СпособыРасчетаОплатыТруда.ПоЧасовойТарифнойСтавке или СпособРасчета = Перечисления.СпособыРасчетаОплатыТруда.ПоДневнойТарифнойСтавке или СпособРасчета = Перечисления.СпособыРасчетаОплатыТруда.ОтСтажаПоЧасовойТарифнойСтавке или СпособРасчета = Перечисления.СпособыРасчетаОплатыТруда.ОтСтажаПоДневнойТарифнойСтавке или СпособРасчета = Перечисления.СпособыРасчетаОплатыТруда.ДоплатаЗаВечерниеЧасы или СпособРасчета = Перечисления.СпособыРасчетаОплатыТруда.ДоплатаЗаНочныеЧасы Тогда ОтработаноВремениОсновное = ОплачиваемоеВремя(ИсходныеДанные, СтрокаДвижений, КомментироватьРасчет, КомментарийВидаРасчета, , ГрафикиБезРабочегоВремени); Результат = СтрокаДвижений[ПоказательРазмер] * ОтработаноВремениОсновное; Если КомментироватьРасчет Тогда ОбщегоНазначенияЗК.КомментарийРасчета("Тарифная ставка: " + СтрокаДвижений[ПоказательРазмер], КомментарийВидаРасчета); ОбщегоНазначенияЗК.КомментарийРасчета("Отработанное время: " + ОтработаноВремениОсновное, КомментарийВидаРасчета); КонецЕсли; СтрокаДвижений.ОплаченоДнейЧасов = ОтработаноВремениОсновное * ?(СтрокаДвижений.Сторно,-1,1); // ВыходноеПособие и СохраняемыйЗаработокНаВремяТрудоустройства ИначеЕсли ВидРасчета = ПланыВидовРасчета.ДополнительныеНачисленияОрганизаций.ВыходноеПособие ИЛИ ВидРасчета = ПланыВидовРасчета.ДополнительныеНачисленияОрганизаций.СохраняемыйЗаработокНаВремяТрудоустройства Тогда Если НЕ СтрокаДвижений.Сторно Тогда Если ИсходныеДанные.СреднийЗаработок = NULL ИЛИ (СтрокаДвижений.ВидУчетаВремени = Перечисления.ВидыУчетаВремени.ПоЧасам и ИсходныеДанные.ОтработаноЧасовПоСреднему = 0) ИЛИ (СтрокаДвижений.ВидУчетаВремени = Перечисления.ВидыУчетаВремени.ПоДням и ИсходныеДанные.ОтработаноДнейПоСреднему = 0) Тогда ОбщегоНазначенияЗК.ОшибкаРасчета(ИсходныеДанные.СотрудникНаименование + "; " + ИсходныеДанные.ВидРасчетаНаименование + ": Нет данных для расчета среднего заработка"); СтрокаДвижений.Результат = 0; Возврат; КонецЕсли; КонецЕсли; ПроцентОплаты = 100; ОплачиваемоеВремя = СтрокаДвижений[ПоказательРазмер]; //Если СтрокаДвижений.ВидУчетаВремени = Перечисления.ВидыУчетаВремени.ПоЧасам Тогда // // переводим дни в часы: количество недель * длительность рабочей недели // ОплачиваемоеВремя = ОплачиваемоеВремя / ИсходныеДанные.ЧислоДнейВНеделе * ИсходныеДанные.ДлительностьРабочейНедели; //КонецЕсли; // Рассчитаем заработок за день (или за час для суммированного учета времени) Если СтрокаДвижений.ВидУчетаВремени = Перечисления.ВидыУчетаВремени.ПоЧасам Тогда ЗаработокЗаЕдиницуВремени = Окр(ИсходныеДанные.СреднийЗаработок / ИсходныеДанные.ОтработаноЧасовПоСреднему,2); Ина |
|||
25
cw014
28.01.13
✎
08:48
|
В общем данные правила я использую для себя - и меня они полностью удовлетворяют дефакто. Всем остальным - просто мои советы - если хотите как то по другому делать - бога ради, никто не заставляет.
Да и к тому же я специально написал в конце: Кто чего добавить? Ибо хорошим советам и сам стараюсь следовать - помогает |
|||
26
cw014
28.01.13
✎
08:49
|
(24) Нигде в коде Лобанова не увидел, сорри
|
|||
28
RomaH
naïve
28.01.13
✎
08:51
|
по коду - фиг с ним, тут проблем вобщем-то и нет
вопрос по взаимосвязям регистраторов и движений типовых и не типовых только ручным отслеживанием? |
|||
29
cw014
28.01.13
✎
08:56
|
(27) Ну в общем можно и так:
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"НЕОПРЕДЕЛЕНО КАК ВариантЗаполненияСреднего", "ВЫБОР..."; // Лобанов 2013 [ ДополнительныйМодульЛобановЗП.ИзменитьЗапросПоПособию(ТекстЗапроса); // Лобанов 2013 ] А это уже легче менять |
|||
30
cw014
28.01.13
✎
08:58
|
(28) Конечно соглашусь, что если в типовой документ добавляется движение по какому либо регистру - это утяжеляет процесс обновления, но не так сильно, как кажется на первый взгляд, если опять же вести карту изменений. Если новый документ что-то пишет в типовой регистр - у регистра включать возможность изменений не нужно
|
|||
31
Фокусник
28.01.13
✎
09:03
|
(5)+ если программно не удобно добавлять элементы: обычные (не упр.) типовые формы (элементы) лучше не трогать, а заменять на свои копированием типовых. При обновлении следить, если есть изменения - копировать типовую форму и заново вносить свои изменения в элементах
|
|||
32
cw014
28.01.13
✎
09:04
|
(31) Как вариант, да
|
|||
33
PCcomCat
29.01.13
✎
16:15
|
Отмечусь.
|
|||
34
aka AMIGO
29.01.13
✎
16:18
|
(33) тебе не видно кнопку "Закладка" ?
|
|||
35
PCcomCat
29.01.13
✎
16:22
|
(34)Я здоровый человек, пусть хранится в "Темы с моим участием".
|
|||
36
aka AMIGO
29.01.13
✎
16:23
|
(35) с кнопкой туда и попадает :)
|
|||
37
PCcomCat
29.01.13
✎
16:24
|
(36) Век живи - век учись! Спасибочки! Теперь буду знать.
|
|||
38
alex-pro
29.01.13
✎
17:11
|
(30) "что если в типовой документ добавляется движение по какому либо регистру - это утяжеляет процесс обновления,"
ЛВП. Что мешает юзать подписки? В ней добавляй свои движения по регистрам и все. Если типовой и нужны другие движения по нему, я бы сторнировал (очищал)типовые движения и рисовал свои в той же подписке. В чем усложнение? |
|||
39
Конфигуратор1с
29.01.13
✎
17:46
|
(38) Наверное вопрос в том, что меняется состав регистров, в котором участвует документ. Сравнивать проблемно
|
|||
40
К_Дач
29.01.13
✎
18:16
|
За саморекламу не сочтите только
http://infostart.ru/public/169826/ |
|||
41
Волшебник
31.01.13
✎
11:44
|
(0) Вот ещё статья:
http://infostart.ru/public/171266/ |
|||
42
Фокусник
31.01.13
✎
17:46
|
(41) Сквозной манипиар :)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |