Форум программистов, компьютерный форум, киберфорум
Наши страницы
1С: Собственные программы
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
zersturen
0 / 0 / 1
Регистрация: 12.03.2012
Сообщений: 166
1

Пересчет по разному коэффициенту

04.05.2016, 11:11. Просмотров 935. Ответов 14
Метки нет (Все метки)

Здравствуйте, уважаемые форумчане. Нужна помощь! Есть процедура (внешняя обработка, ЗУП 2.5), с помощью которой выводятся данные в макет, в процедуре есть данные которые необходимо обработать, но я никак не могу их вытащить. Вот строки кода, которые необходимо обработать (в общем: если у сотрудника инвалидность или у него доплата за вредность, то должны формироваться разные коэффициенты):
1C
1
2
3
4
5
6
7
8
9
10
ПолДнОтп = 2.33;
        ДоплатаЗаВред = ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоКоду("00105");
        //Инвалидность = РегистрыСведений.СведенияОбИнвалидностиФизлиц.Инвалидность;
        //Если Инвалидность = ИСТИНА Тогда
        //  ПолДнОтп = 2.5;
        //КонецЕсли;
        Если Стр.Сотрудник.ВидРасчета = ДоплатаЗаВред Тогда
            ПолДнОтп = 2.91;
        КонецЕсли;
        Стр.ОстатокДней=(?(стр.ДнейОтработано>14,1,0)+Стр.МесяцыОтработано)*ПолДнОтп;
Вот полный код процедуры, жду Вашего великого наставления):
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
Процедура КнопкаВыполнитьНажатие(Кнопка)
    // Вставить содержимое обработчика.
    Если НЕ(ЗначениеЗаполнено(РД) и ЗначениеЗаполнено(Организация)) тогда
        предупреждение("Не определена организация или дата отчета");
        Возврат;
    КонецЕсли;
    Зап=Новый Запрос;
    Зап.Текст="ВЫБРАТЬ
              | ВложенныйЗапрос.Сотрудник КАК Сотрудник,
              | ВложенныйЗапрос.ПодразделениеОрганизации КАК ПодразделениеОрганизации,
              | ВложенныйЗапрос.Должность,
              | Прием.ПриемНаРаботу,
              | РАЗНОСТЬДАТ(Прием.ПриемНаРаботу, &РД, МЕСЯЦ) КАК МесяцыОтработано,
              | 0 КАК ДнейОтработано,
              | 0 КАК Отпуск,
              | 0 КАК ОстатокДней,
              | 0 КАК СреднедневнойЗаработок
              |ИЗ
              | (ВЫБРАТЬ
              |     РаботникиОрганизацийСрезПоследних.Период КАК Период,
              |     РаботникиОрганизацийСрезПоследних.Регистратор КАК Регистратор,
              |     РаботникиОрганизацийСрезПоследних.НомерСтроки КАК НомерСтроки,
              |     РаботникиОрганизацийСрезПоследних.Активность КАК Активность,
              |     РаботникиОрганизацийСрезПоследних.Сотрудник КАК Сотрудник,
              |     РаботникиОрганизацийСрезПоследних.Организация КАК Организация,
              |     РаботникиОрганизацийСрезПоследних.УдалитьФизлицо КАК УдалитьФизлицо,
              |     РаботникиОрганизацийСрезПоследних.УдалитьПриказ КАК УдалитьПриказ,
              |     РаботникиОрганизацийСрезПоследних.ЗанимаемыхСтавок КАК ЗанимаемыхСтавок,
              |     РаботникиОрганизацийСрезПоследних.ОбособленноеПодразделение КАК ОбособленноеПодразделение,
              |     РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизации КАК ПодразделениеОрганизации,
              |     РаботникиОрганизацийСрезПоследних.Должность КАК Должность,
              |     РаботникиОрганизацийСрезПоследних.ГрафикРаботы КАК ГрафикРаботы,
              |     РаботникиОрганизацийСрезПоследних.ПериодЗавершения КАК ПериодЗавершения,
              |     РаботникиОрганизацийСрезПоследних.ЗанимаемыхСтавокЗавершения КАК ЗанимаемыхСтавокЗавершения,
              |     РаботникиОрганизацийСрезПоследних.ОбособленноеПодразделениеЗавершения КАК ОбособленноеПодразделениеЗавершения,
              |     РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизацииЗавершения КАК ПодразделениеОрганизацииЗавершения,
              |     РаботникиОрганизацийСрезПоследних.ДолжностьЗавершения КАК ДолжностьЗавершения,
              |     РаботникиОрганизацийСрезПоследних.ГрафикРаботыЗавершения КАК ГрафикРаботыЗавершения,
              |     РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостояния КАК ПричинаИзмененияСостояния,
              |     РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостоянияЗавершения КАК ПричинаИзмененияСостоянияЗавершения,
              |     РаботникиОрганизацийСрезПоследних.УдалитьТабельныйНомер КАК УдалитьТабельныйНомер,
              |     РаботникиОрганизацийСрезПоследних.УдалитьПричинаИзмененияСостояния КАК УдалитьПричинаИзмененияСостояния,
              |     РаботникиОрганизацийСрезПоследних.УдалитьОбособленноеПодразделение КАК УдалитьОбособленноеПодразделение,
              |     РаботникиОрганизацийСрезПоследних.ПервичныйДокумент КАК ПервичныйДокумент
              | ИЗ
              |     РегистрСведений.РаботникиОрганизаций.СрезПоследних(&РД, Организация = &Организация) КАК РаботникиОрганизацийСрезПоследних) КАК ВложенныйЗапрос
              |     ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
              |         МАКСИМУМ(РаботникиОрганизаций.Период) КАК ПриемНаРаботу,
              |         РаботникиОрганизаций.Сотрудник КАК Сотрудник
              |     ИЗ
              |         РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций
              |     ГДЕ
              |         РаботникиОрганизаций.Организация = &Организация
              |         И РаботникиОрганизаций.Период <= &РД
              |         И РаботникиОрганизаций.ПричинаИзмененияСостояния = ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.ПриемНаРаботу)
              |     
              |     СГРУППИРОВАТЬ ПО
              |         РаботникиОрганизаций.Сотрудник) КАК Прием
              |     ПО ВложенныйЗапрос.Сотрудник = Прием.Сотрудник
              |ГДЕ
              | ВложенныйЗапрос.ПричинаИзмененияСостояния <> ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)
              |
              |УПОРЯДОЧИТЬ ПО
              | ВложенныйЗапрос.Сотрудник.Наименование";
    Зап.УстановитьПараметр("Организация",Организация);
    Зап.УстановитьПараметр("РД",КонецДня(РД));
    Рез=Зап.Выполнить().Выгрузить();
    Рез.Колонки.Добавить("сч");
    Для Каждого Стр из Рез Цикл
        состояние("Обработка - "+Стр.Сотрудник);
        //Определим Количестов Дней отпуска
        Зап.Текст="ВЫБРАТЬ
        |   ОтпускаОрганизацийРаботникиОрганизации.Сотрудник,
        |   СУММА(ОтпускаОрганизацийРаботникиОрганизации.КоличествоДней) КАК КоличествоДней
        |ИЗ
        |   Документ.ОтпускаОрганизаций.РаботникиОрганизации КАК ОтпускаОрганизацийРаботникиОрганизации
        |ГДЕ
        |   ОтпускаОрганизацийРаботникиОрганизации.Ссылка.Проведен = ИСТИНА
        |   И ОтпускаОрганизацийРаботникиОрганизации.Ссылка.Организация = &Организация
        |   И ОтпускаОрганизацийРаботникиОрганизации.ПричинаОтсутствия = ЗНАЧЕНИЕ(Перечисление.ПричиныОтсутствияНаРаботеВОрганизации.ОтпускЕжегодный)
        |   И ОтпускаОрганизацийРаботникиОрганизации.ДатаНачала >= &ДН
        |   И ОтпускаОрганизацийРаботникиОрганизации.ДатаОкончания <= &РД
        |   И ОтпускаОрганизацийРаботникиОрганизации.Сотрудник = &Сотрудник
        |
        |СГРУППИРОВАТЬ ПО
        |   ОтпускаОрганизацийРаботникиОрганизации.Сотрудник
        |
        |УПОРЯДОЧИТЬ ПО
        |   ОтпускаОрганизацийРаботникиОрганизации.Сотрудник.Наименование";
        КолДн=0;
        ЗАп.УстановитьПараметр("ДН",Стр.ПриемНаРаботу);
        ЗАп.УстановитьПараметр("Сотрудник",Стр.Сотрудник);
        жж=Зап.Выполнить().Выгрузить();
        Для Каждого фф из жж Цикл
            КолДн=КолДн+фф.КоличествоДней;
        КонецЦикла;
        Стр.Отпуск=КолДн;
        ДеньРД = День(Стр.ПриемНаРаботу);
        Если ДеньРД = 31 Тогда
            ДеньРД = ДеньРД - 1;
        КонецЕсли;
        ТД=Дата(Формат(Год(РД),"ЧГ=0"),Месяц(РД),ДеньРД);
        Если День(Стр.ПриемНаРаботу)>День(РД) тогда
            Если Месяц(РД)=1 тогда
                ТД=Дата(Год(РД)-1,1,День(Стр.ПриемНаРаботу));
            иначе
                ТД=Дата(Год(РД),Месяц(РД)-1,ДеньРД);
            КонецЕсли;
        КонецЕсли;
        стр.ДнейОтработано=мв_ПолучитьКоличествоДней(РД,ТД);
        ПолДнОтп = 2.33;
        ДоплатаЗаВред = ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоКоду("00105");
        //Инвалидность = РегистрыСведений.СведенияОбИнвалидностиФизлиц.Инвалидность;
        //Если Инвалидность = ИСТИНА Тогда
        //  ПолДнОтп = 2.5;
        //КонецЕсли;
        Если Стр.Сотрудник.ВидРасчета = ДоплатаЗаВред Тогда
            ПолДнОтп = 2.91;
        КонецЕсли;
        Стр.ОстатокДней=(?(стр.ДнейОтработано>14,1,0)+Стр.МесяцыОтработано)*ПолДнОтп;
        Если Стр.ДнейОтработано<15 тогда
            Если Цел(Стр.МесяцыОтработано/12)=Стр.МесяцыОтработано/12 тогда
                Стр.ОстатокДней=28*Цел(Стр.МесяцыОтработано/12);
            КонецЕсли;
        КонецЕсли;
        Стр.ОстатокДней=Стр.ОстатокДней-Стр.Отпуск;
        ОБ=Документы.НачислениеОтпускаРаботникамОрганизаций.СоздатьДокумент();
        Об.Организация=Организация;
        Об.Дата=РД;
        Об.Сотрудник=Стр.Сотрудник;
        Об.ДатаНачалаОсновногоОтпуска=РД;
        ОБ.ДатаНачалаСобытия =РД;
        мСведенияОВидахРасчета = Новый Соответствие;
        ПериодРасчетаСреднегоЗаработкаОкончание=РД;
        ПериодРасчетаСреднегоЗаработкаНачало=РД+86400;
        ВидРасчета=ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.ОплатаПоСреднемуОтпКалендарныеДни;
        СведениеОВидеРасчета = ПроведениеРасчетов.ПолучитьСведенияОВидеРасчета(мСведенияОВидахРасчета, ВидРасчета);
        МесяцевРасчетногоПериода = ?(СведениеОВидеРасчета.ПорядокОпределенияРасчетногоПериодаСреднегоЗаработка = Перечисления.ПорядокОпределенияРасчетногоПериодаСреднегоЗаработка.ПоКолдоговору,СведениеОВидеРасчета.ПериодРасчетаСреднегоЗаработка,НачислениеОтпускаРаботникамОрганизацийПереопределяемый.КоличествоМесяцевРасчетаПоЗакону(ОБ));
        //Определим счет затрат на сотрудника
        Зат=Новый Запрос;
        Зат.Текст="ВЫБРАТЬ
                  | БУОсновныеНачисления.ПериодРегистрации,
                  | БУОсновныеНачисления.СчетДт КАК сч
                  |ИЗ
                  | РегистрРасчета.БУОсновныеНачисления КАК БУОсновныеНачисления
                  |ГДЕ
                  | БУОсновныеНачисления.Организация = &Орг
                  | И БУОсновныеНачисления.Сотрудник = &Сотр
                  | И БУОсновныеНачисления.Сотрудник.ПодразделениеОрганизации = &Подразд";
        Зат.УстановитьПараметр("Орг",Организация);
        Зат.УстановитьПараметр("Подразд",Стр.ПодразделениеОрганизации);
        Зат.УстановитьПараметр("Сотр",Стр.Сотрудник);
        фф=Зат.Выполнить().Выгрузить();
        фф.Сортировать("ПериодРегистрации Возр");
        Если фф.Количество()>0 тогда
            Стр.Сч=фф[0].сч;
        КонецЕсли;
    КонецЦикла;
    Если рез.Количество()=0 тогда
        Предупреждение("Нет данных для вывода");
        Возврат;
    КонецЕсли;
    
    Таб=Новый ТабличныйДокумент;
    Макет=ПолучитьМакет(?(флСредний,"Макет1","Макет"));
    Обл=Макет.ПолучитьОбласть("Шапка");
    Обл.Параметры.РД=Формат(РД,"ДФ=dd.MM.yyyy");
    Обл.Параметры.Организация=Организация;
    Таб.Вывести(Обл);
    ИтогоСумма=0;
    ИтогоСуммаЕСН=0;
    ИтогоВсего=0;
    Если флРасшифровка и флСредний тогда
        Таб.НачатьАвтогруппировкуСтрок();
    КонецЕсли;
    Для Каждого Стр из рез Цикл
        Состояние("Обработка - "+Стр.Сотрудник);
        Если ЗначениеЗаполнено(Сотр) тогда
            Если Сотр<>Стр.Сотрудник тогда
                Продолжить;
            КонецЕсли;
        ИначеЕсли ЗначениеЗаполнено(Подразд) Тогда
            Если Подразд<>Стр.ПодразделениеОрганизации Тогда
                Продолжить;
            КонецЕсли;
        КонецЕсли;
        Обл=Макет.ПолучитьОбласть("Стр");
        Обл.Параметры.Заполнить(Стр);
        Обл.Параметры.РД=Формат(РД,"ДФ=dd.MM.yyyy");
        Если флСредний тогда
            ПорядокРасчета = Перечисления.ПорядокРасчетаОтпуска.ПоКалендарнымДням;
            мРассчитываемыеТаблицы = Новый Структура("Начисления,РасчетСреднего");
            мРассчитываемыеТаблицы.Начисления = Ложь;
            мРассчитываемыеТаблицы.РасчетСреднего = Истина;
            
            ДатаРасчета = РД;
            
            Док = Документы.НачислениеОтпускаРаботникамОрганизаций.НайтиПоНомеру("Временный", ДатаРасчета);
            Если Док.Пустая() Тогда
                текДок = Документы.НачислениеОтпускаРаботникамОрганизаций.СоздатьДокумент();
                текДок.Номер = "Временный";
            Иначе
                текДок = Док.ПолучитьОбъект();
                Если текДок.ПометкаУдаления Тогда
                    текДок.УстановитьПометкуУдаления(Ложь);
                КонецЕсли;
            КонецЕсли;
            текДок.Организация=Организация;
            текДок.Дата=РД;
            текДок.ДатаНачалаОсновногоОтпуска = НачалоДня(РД);
            текДок.ДатаОкончанияОсновногоОтпуска = КонецДня(ДатаРасчета);
            текДок.ПорядокРасчетаОсновногоОтпуска = ПорядокРасчета;
            текДок.ОсновнойОтпуск = Истина;
            текДок.ПериодРегистрации = НачалоМесяца(ДатаРасчета);
            текДок.ДатаВыплатыДохода = НачалоМесяца(ДатаРасчета);
            текДок.ДатаНачалаСобытия = ДатаРасчета;
            текДок.Сотрудник = Стр.Сотрудник;
            текДок.ПериодРасчетаСреднегоЗаработкаОкончание=КонецМесяца(ДобавитьМесяц(НачалоМесяца(РД),-1));
            текДок.ПериодРасчетаСреднегоЗаработкаНачало=НачалоДня(ДобавитьМесяц(НачалоМесяца(текДок.ПериодРасчетаСреднегоЗаработкаОкончание),-11));
            текДок.Записать();
            ЗаполнитьЗначенияСвойств(текДок, ОстаткиОтпусков.РабочийГодПериодаОтпуска(
            текДок.Сотрудник, текДок.ДатаНачалаОсновногоОтпуска, текДок.ДатаОкончанияОсновногоОтпуска, текДок.Ссылка, ТекДок.ПорядокРасчетаОсновногоОтпуска, ТекДок.ОсновнойОтпуск, ТекДок.ПорядокРасчетаОсновногоОтпуска));
            текДок.Рассчитать(мРассчитываемыеТаблицы);
            ВариантРасчетаДокумента = текДок.ОсновнойВариантРасчетаДокумента();
            ВидРасчета = ВариантРасчетаДокумента.ВидРасчета;
            мСведенияОВидахРасчета = Новый Соответствие;
            СведениеОВидеРасчета = ПроведениеРасчетов.ПолучитьСведенияОВидеРасчета(мСведенияОВидахРасчета, ВидРасчета);
            МесяцевРасчетногоПериода = 12;
            текДок.Записать();
            СреднийДневнойЗаработок = Формат(НачислениеОтпускаРаботникамОрганизацийПереопределяемый.РасчетСреднегоЗаработка(текДок, СведениеОВидеРасчета.СпособРасчета, МесяцевРасчетногоПериода, текДок.ПериодРасчетаСреднегоЗаработкаНачало, текДок.ПериодРасчетаСреднегоЗаработкаОкончание),  "ЧЦ=12; ЧДЦ=2; ЧН=");
            Обл.Параметры.СреднийЗаработок=СреднийДневнойЗаработок;
            Сумма=Окр(СреднийДневнойЗаработок*Стр.ОстатокДней,2);
            ИтогоСумма=ИтогоСумма+Сумма;
            Обл.Параметры.Сумма=Сумма;
            текДок.Записать(РежимЗаписиДокумента.Проведение);
            ВыборкаПоШапкеДокумента = текДок.СформироватьЗапросПоШапке().Выбрать();
            ВыборкаПоШапкеДокумента.Следующий();
            ТабДокумент = ФормированиеПечатныхФормЗК.ПечатьРасчетаСреднегоЗаработка(текДок.Ссылка, текДок.ДатаНачалаСобытия, ВыборкаПоШапкеДокумента.ПериодРасчетаСреднегоЗаработка, "с " + Формат(текДок.ДатаНачалаОсновногоОтпуска,"ДФ=dd.MM.yyyy") + " по " + Формат(текДок.ДатаОкончанияОсновногоОтпуска,"ДФ=dd.MM.yyyy"), ?(текДок.ПорядокРасчетаОсновногоОтпуска = Перечисления.ПорядокРасчетаОтпуска.ПоКалендарнымДням,Перечисления.СпособыРасчетаОплатыТруда.ПоСреднемуЗаработкуДляОтпускаПоКалендарнымДням,Перечисления.СпособыРасчетаОплатыТруда.ПоСреднемуЗаработкуДляОтпускаПоШестидневке), НачислениеОтпускаРаботникамОрганизацийПереопределяемый.ИспользуетсяСреднеЧасовойЗаработок(текДок));
            текДок.Удалить();
            БазаЕСН=ПолучитьБазуЕСН(НачалоГода(РД),РД,Стр.Сотрудник.ФизЛицо,Организация);
            ПроцЕСН=?(БазаЕСН<512000,ПолучитьПроцЕСН(Организация,РД),10);
            ПроцТравм=ПолучитьПроцТравм(Организация,РД);
            Обл.Параметры.ПроцТравм=ПроцТравм;
            Обл.Параметры.ПолДнОтп = ПолДнОтп;
            Обл.Параметры.ПроцЕСН=ПроцЕСН;
            Обл.Параметры.БазаЕСН=БазаЕСН;
            СуммаЕСН=Окр(Сумма*((ПроцЕСН+ПроцТравм)/100),2);
            ИтогоСуммаЕсн=ИтогоСуммаЕсн+СуммаЕсн;
            Обл.Параметры.СуммаЕСН=СуммаЕСН;
            Всего=Сумма+СуммаЕСН;
            Обл.Параметры.Всего=Всего;
            ИтогоВсего=ИтогоВсего+Всего;
        КонецЕсли;
        Таб.Вывести(Обл,1);
        Если флСредний и флРасшифровка тогда
            Таб.Вывести(ТабДокумент,2);
        КонецЕсли;
    КонецЦикла;
    Если флСредний тогда
        Обл=Макет.ПолучитьОбласть("ит");
        Обл.Параметры.Сумма=ИтогоСумма;
        Обл.Параметры.СуммаЕСН=ИтогоСуммаЕСН;
        Обл.Параметры.Всего=ИтогоВсего;
        Таб.Вывести(Обл,1);
    КонецЕсли;
    Если флРасшифровка и флСредний тогда
        Таб.ЗакончитьАвтогруппировкуСтрок();
    КонецЕсли;
    УниверсальныеМеханизмы.НапечататьДокумент(Таб);
КонецПроцедуры
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.05.2016, 11:11
Ответы с готовыми решениями:

Пересчет тИЦ и пересчет позиций
Скажите пожалуйста, как по времени соотносятся между собой пересчет тИЦ и пересчет позиций. Это...

Найти среднее значение по коэффициенту
Найдите среднюю стоимость акций за полгода, если известна начальная стоимость . import...

Вероятность соответствующая коэффициенту в матче
Подскажите пожалуйста, как рассчитать вероятность, соответствующую коэффициенту в матче? Например:...

Построить АЧХ по коэффициенту передачи
Здравствуйте! Помогите, пожалуйста. Необходимо построить АЧХ ПФ по коэффициенту передачи ...

Повышение зарплаты согласно коэффициенту повышения
Всем Привет. Помогите написать програму.Повышение зарплаты согласно коэффициенту повышения. Буду...

14
GreenkA
Форумчанин
Эксперт 1С
3003 / 1923 / 520
Регистрация: 25.06.2009
Сообщений: 6,817
04.05.2016, 15:15 2
Цитата Сообщение от zersturen Посмотреть сообщение
в процедуре есть данные которые необходимо обработать, но я никак не могу их вытащить
что конкретно не получается?

Добавлено через 2 минуты
сведения по инвалидности получайте из регистра сведений по конкретному сотруднику на нужную дату.
0
zersturen
0 / 0 / 1
Регистрация: 12.03.2012
Сообщений: 166
04.05.2016, 19:09  [ТС] 3
Не получается обратиться к этим данным (инвалидность и доплата за вредность) на сотрудника, чтобы можно было изменить коэффициент так: если инвалидность, то коэффициент 2.5, если доплата за вредность, то коэффициент 2.91. Я так понимаю только запросом можно вытащить?
0
GreenkA
Форумчанин
Эксперт 1С
3003 / 1923 / 520
Регистрация: 25.06.2009
Сообщений: 6,817
04.05.2016, 20:55 4
zersturen, к сожаление нет под рукой ЗУП. Посмотрите структуру регистра сведений - СведенияОбИнвалидностиФизлиц. Если он периодический - то можно через ПолучитьПоследнее() с отбором по дате и значениям измерений регистра.
А доплату за вредность, так и не поняла, как вы получаете?
0
04.05.2016, 20:55
zersturen
0 / 0 / 1
Регистрация: 12.03.2012
Сообщений: 166
04.05.2016, 21:07  [ТС] 5
Про инвалидность Вы правильно говорите, есть информация в этом регистре, а вот доплата - это созданный в программе основной вид расчета, который имеется у сотрудника. По регистру запросом проходить?
0
GreenkA
Форумчанин
Эксперт 1С
3003 / 1923 / 520
Регистрация: 25.06.2009
Сообщений: 6,817
04.05.2016, 21:25 6
zersturen, я вам писала выше, можно:
1C
1
2
Инвалидность  = РегистрыСведений.СведенияОбИнвалидностиФизлиц.ПолучитьПоследнее(ДатаОтбора, Новый Структура("Сотрудник", Стр.Сотрудник)); 
//зависит от структуры регистра, его измерений.
0
zersturen
0 / 0 / 1
Регистрация: 12.03.2012
Сообщений: 166
05.05.2016, 06:49  [ТС] 7
Спасибо, сейчас попробую

Добавлено через 32 минуты
Сделал так:
1C
1
2
3
4
Инвалидность = РегистрыСведений.СведенияОбИнвалидностиФизлиц.ПолучитьПоследнее(РД,Новый Структура("ФизЛицо", Стр.Сотрудник));
        Если Инвалидность = ИСТИНА Тогда
            ПолДнОтп = 2.5;
        КонецЕсли;
По отладчику посмотрел, получает все равно коэффициент 2.33, а инвалидность значение ЛОЖЬ (хотя на текущую дату должна быть ИСТИНА). Пробовал через консоль запросов в самой программе запрос по регистру сделать, там показывает что инвалидность ИСТИНА

Добавлено через 49 секунд
В Регистре измерение ФизЛицо, а ресурс Инвалидность (для справки)
0
GreenkA
Форумчанин
Эксперт 1С
3003 / 1923 / 520
Регистрация: 25.06.2009
Сообщений: 6,817
06.05.2016, 13:07 8
zersturen, значит что-то с параметрами. На какую дату смотрите? Берите может на конец дня.
0
zersturen
0 / 0 / 1
Регистрация: 12.03.2012
Сообщений: 166
06.05.2016, 13:54  [ТС] 9
В общем попробовал так:
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
ЗапросРасч = Новый Запрос;
        ЗапросРасч.Текст ="ВЫБРАТЬ
                              | ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.ВидРасчета КАК ВидРасчета,
                              | ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.Сотрудник КАК Сотрудник
                              |ИЗ
                              | РегистрСведений.ПлановыеНачисленияРаботниковОрганизаций.СрезПоследних(&Дата, Сотрудник.Физлицо = &Сотрудник) КАК ПлановыеНачисленияРаботниковОрганизацийСрезПоследних";
        ПолДнОтп = 2.33;
        ДоплатаЗаВред = ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоКоду("00105");
        ЗапросРасч.УстановитьПараметр("Дата",РД);
        ЗапросРасч.УстановитьПараметр("Сотрудник",Стр.Сотрудник.ФизЛицо);
        Расчет = ЗапросРасч.Выполнить().Выбрать();
        //РасчИИнв = ЗапросРасчИИнв.Выполнить().Выгрузить();
        Пока Расчет.СледующийПоЗначениюПоля("ВидРасчета") Цикл
            Если Расчет.ВидРасчета = ДоплатаЗаВред Тогда
                ПолДнОтп = 2.91;
            КонецЕсли;
        КонецЦикла;
        
        Стр.ОстатокДней=(?(стр.ДнейОтработано>14,1,0)+Стр.МесяцыОтработано)*ПолДнОтп;
Отладчиком пробежал, коэффициент подставляет правильно на момент прохода цикла, но после окончания работы процедуры в печатную форму выдает все равно 2.33, не пойму что не так

Добавлено через 6 минут
И итоговые данные поменялись, вообще не те цифры что должны быть
0
GreenkA
Форумчанин
Эксперт 1С
3003 / 1923 / 520
Регистрация: 25.06.2009
Сообщений: 6,817
06.05.2016, 14:04 10
zersturen, а зачем вы в процедуре дважды цикл обходите?
Первый раз рассчитываете коэффициенты, второй раз - выводите все в макет. При этом конечно для всех строк ТЗ выведутся последние рассчитанные коэффициенты...
0
zersturen
0 / 0 / 1
Регистрация: 12.03.2012
Сообщений: 166
06.05.2016, 14:28  [ТС] 11
Эмм, то есть? Немного не понял? После запроса не надо что ли обходить циклом?
0
GreenkA
Форумчанин
Эксперт 1С
3003 / 1923 / 520
Регистрация: 25.06.2009
Сообщений: 6,817
06.05.2016, 16:02 12
zersturen, вы результат запроса выгружаете в ТЗ. И ее обходите дважды: в первый раз рассчитываете коэффициенты, второй раз - выводите в макет данные. Зачем дважды обходить? Сразу в первом обходе цикла выводите нужные данные в макет.
0
zersturen
0 / 0 / 1
Регистрация: 12.03.2012
Сообщений: 166
06.05.2016, 16:56  [ТС] 13
Я чет туплю сегодня видимо, можете в коде показать, если не сложно?
0
GreenkA
Форумчанин
Эксперт 1С
3003 / 1923 / 520
Регистрация: 25.06.2009
Сообщений: 6,817
06.05.2016, 20:38 14
Лучший ответ Сообщение было отмечено zersturen как решение

Решение

zersturen, посмотрите в вашей процедуре сколько раз встречается строка
1C
1
Для Каждого Стр из Рез Цикл
Это циклы обхода результата запроса. Я к тому, что можно все делать сразу в одном цикле: рассчитывать коэффициенты и выводить в табличный документ.
1
zersturen
0 / 0 / 1
Регистрация: 12.03.2012
Сообщений: 166
11.05.2016, 11:46  [ТС] 15
Спасибо, все как Вы и сказали, убрал один цикл "Для Каждого Стр из Рез Цикл" и все норм стало!
0
11.05.2016, 11:46
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.05.2016, 11:46

Пересчет ПР
Помоему пошел перещет... Если я не прав можете закидать гнилыми яблоками :P

пересчет ИЦ
Приветствую, когда будет пересчет ИЦ? уже прилично времени прошло

Пересчет ПР
Когда ждать ближайший пересчет ПР?... А то я не успел на предыдущий((


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.