Имя: Пароль:
1C
1С v8
ЗУП 2.5 программно рассчитать отпуск
0 ALEX7519
 
30.03.17
17:10
Не подскажите : конфигурация ЗУП 2.5

Программно создаю документ "НачислениеОтпускаРаботникамОрганизаций"
он создается, если в него потом зайти и нажать кнопку "Рассчитать" - все расчитывается.
А можно ли программно рассчитать созданный документ ( программно нажать кнопку "рассчитать" ) - чтобы в нем появился средний заработок и пр...

спс
1 Волшебник
 
модератор
30.03.17
17:12
Пишущие "спс" вместо "спасибо", что вы делаете с кучей сэкономленного времени?
2 Amra
 
30.03.17
17:15
(0) Я не возражаю. Только не спрашивай "Как?", думаю сам догадаешься посмотреть какая экспортная процедура вызывается по кнопке
3 piter3
 
30.03.17
17:42
Можно
4 k1noshkin
 
30.03.17
17:45
(0) Видел в чужих доработках, вроде как раз таким образом средний заработок и получали.
5 Флориан
 
30.03.17
17:48
(0) из код из процедуры Рассчитать нажатие - перенести в обработку, резервы отпусков нужно?
6 ALEX7519
 
30.03.17
18:02
(5) да, пытаюсь сделать отчет для резервов отпусков.
пытался выдрать запрос из конфигурации, не считает и все (
поэтому пытаюсь программно создать документ и из него уже получить средний заработок.

Документ = Документы.НачислениеОтпускаРаботникамОрганизаций.СоздатьДокумент();
...
Документ.Записать();    
...


по кнопке расмсчитать из формы вызывается
Процедура КнопкаРассчитатьВсеНажатие(Элемент)
...
в ней я так помнимаю вызывается процедура из модуля документа Рассчитать(мРассчитываемыеТаблицы);

вот как ко всему этому обратиться и не понимаю

Спасибо)
7 Alexandr_U1982
 
30.03.17
18:20
(6) А ты попробуй тоже вызвать процедуру из модуля документа Рассчитать(мРассчитываемыеТаблицы);
8 Бовка
 
30.03.17
18:20
(6) если вкратце, то так

... здесь создаешь док, инициилизируешь мРассчитываемыеТаблицы

а дальше

РасчетныйДокумент.Записать();
    РасчетныйДокумент.Рассчитать(мРассчитываемыеТаблицы);
    РасчетныйДокумент.Записать();
    Ставка                 = НачислениеОтпускаРаботникамОрганизацийПереопределяемый.РасчетСреднегоЗаработка(РасчетныйДокумент, СведениеОВидеРасчета, МесяцевРасчетногоПериода, Дата1, Дата2);
9 Вафель
 
30.03.17
18:33
без получении формы в зупе ничего рассчитать нельзя
10 Бовка
 
30.03.17
18:35
(9) и здесь поспорим? откуда такие огульные утверждения?
11 Вафель
 
30.03.17
18:44
ну в зуп 3 именно так
12 piter3
 
30.03.17
18:44
(9) можно
13 Alexandr_U1982
 
30.03.17
21:54
(11) В ЗУП 3 и расчет резервов более по-человечески сделан. Там не нужно подобных извращений делать.
14 Бовка
 
31.03.17
10:15
(11) При чем здесь ЗУП 3, если в заголовке четко указан ЗУП 2.5?
15 h-sp
 
31.03.17
10:51
(14) зато в ЗУП 2.5 сначала движения регистров пишет. Потом по этим движениям делает расчет, потом движения стирает. Потом опять пишет.
16 ИУБиПовиц
 
31.03.17
11:08
Давно еще делал регламентным  запись по каждому сотруднику резерва периодически в регистр. Код не очень хорош, зато работает:), но для 500 сотрув работал.
[code]
Запрос = Новый Запрос;
                  Запрос.Текст =
                  "ВЫБРАТЬ
                  |           РаботникиОрганизацийСрезПоследних.Сотрудник
                  |ИЗ
                  |           РегистрСведений.РаботникиОрганизаций.СрезПоследних(&Дата, ) КАК РаботникиОрганизацийСрезПоследних
                  |ГДЕ
                  |           РаботникиОрганизацийСрезПоследних.ЗанимаемыхСтавок > 0
                  |
                  |УПОРЯДОЧИТЬ ПО
                  |           РаботникиОрганизацийСрезПоследних.Сотрудник.Наименование";
                

                  Запрос.УстановитьПараметр("Дата",КонецДня(ДатаОтчета));                

                  Результат = Запрос.Выполнить();

                

                  ВыборкаДетальныеЗаписи = Результат.Выгрузить();

                  МассивСотров = ВыборкаДетальныеЗаписи.ВыгрузитьКолонку("Сотрудник");

                  Остаток = ОстаткиОтпусков.ОстатокОтпускаСпискаСотрудниковНаДату( МассивСотров,ДатаОтчета);

                  Остаток.Колонки.Добавить("СреднедневнойЗаработок");

                  Остаток.Сортировать("Сотрудник");                

                  СуммаИтого = 0;
                  для каждого стр из остаток цикл                              

                                 НачатьТранзакцию();
                                 Док = Документы.НачислениеОтпускаРаботникамОрганизаций.СоздатьДокумент();
                                 Док.Дата = КонецГода(ТекущаяДата());
                                 Док.Комментарий = "для расчета резерва";
                                 Док.Организация = ТекОрганизация;
                                 Док.Записать(РежимЗаписиДокумента.Запись);                    
                                 Стр.СреднедневнойЗаработок = 0;
                                 Док.Сотрудник = Стр.Сотрудник;                                
                                 Док.ДатаНачалаСобытия = ДатаОтчета;
                                 Док.ОсновнойОтпуск=Истина;
                                 Док.ПорядокРасчетаОсновногоОтпуска=Перечисления.ПорядокРасчетаОтпуска.ПоКалендарнымДням;
                                 Док.ДатаНачалаОсновногоОтпуска = ДатаОтчета;
                                 Док.КоличествоДнейОсновногоОтпуска = 1;
                                 Док.ДатаОкончанияОсновногоОтпуска =  ДатаОтчета;

                                 ЗаполнениеДокументовЗК.ЗаполнитьДатуВыплатыОтпускных(Док, Док.ДатаНачалаОсновногоОтпуска);

                                 ЗаполнитьЗначенияСвойств(Док, ОстаткиОтпусков.РабочийГодПериодаОтпуска(Док.Сотрудник, Док.ДатаНачалаОсновногоОтпуска, Док.ДатаОкончанияОсновногоОтпуска, Док.Ссылка, Док.ПорядокРасчетаОсновногоОтпуска, Не Док.ОсновнойОтпуск, Док.ВидРасчетаДополнительногоОтпуска, Док.ДатаНачалаДополнительногоОтпуска, Док.ДатаОкончанияДополнительногоОтпуска));

                                 Док.ПериодРасчетаСреднегоЗаработкаНачало = Док.РабочийГодС;
                                 Док.ПериодРасчетаСреднегоЗаработкаОкончание= Док.РабочийГодПо;
                                 Если ЗначениеЗаполнено(Док.ДатаНачалаСобытия) Тогда
                                                 мСведенияОВидахРасчета = Новый Соответствие;
                                                 ВидРасчета = Док.ОсновнойВариантРасчетаДокумента().ВидРасчета;
                                                 Если ЗначениеЗаполнено(ВидРасчета) Тогда
                                                                 СведениеОВидеРасчета = ПроведениеРасчетов.ПолучитьСведенияОВидеРасчета(мСведенияОВидахРасчета, ВидРасчета);

                                                                 МесяцевРасчетногоПериода = ?(СведениеОВидеРасчета.ПорядокОпределенияРасчетногоПериодаСреднегоЗаработка = Перечисления.ПорядокОпределенияРасчетногоПериодаСреднегоЗаработка.ПоКолдоговору,СведениеОВидеРасчета.ПериодРасчетаСреднегоЗаработка,НачислениеОтпускаРаботникамОрганизацийПереопределяемый.КоличествоМесяцевРасчетаПоЗакону(Док));
                                                 Иначе
                                                                 МесяцевРасчетногоПериода = 12
                                                 КонецЕсли;                                    

                                                 ПериодРасчетаСреднегоЗаработкаНачало = ДобавитьМесяц(НачалоМесяца(Док.ДатаНачалаСобытия), - МесяцевРасчетногоПериода);
                                                 ПериодРасчетаСреднегоЗаработкаОкончание = НачалоМесяца(Док.ДатаНачалаСобытия) - 1;
                                 Иначе
                                                 ПериодРасчетаСреднегоЗаработкаНачало = "";
                                                 ПериодРасчетаСреднегоЗаработкаОкончание = ""
                                 КонецЕсли;
                                 Док.ПериодРасчетаСреднегоЗаработкаНачало = ПериодРасчетаСреднегоЗаработкаНачало;
                                 Док.ПериодРасчетаСреднегоЗаработкаОкончание= ПериодРасчетаСреднегоЗаработкаОкончание;
                                 Док.ПериодРегистрации = НачалоМесяца(ДатаОтчета);
                                 Док.Записать(РежимЗаписиДокумента.Запись);
                                 мРассчитываемыеТаблицы = Новый Структура("Начисления,РасчетСреднего");
                                 мРассчитываемыеТаблицы.Начисления = Истина;
                                 мРассчитываемыеТаблицы.РасчетСреднего = Истина;
                                 Док.Рассчитать(мРассчитываемыеТаблицы);
                                 мСведенияОВидахРасчета = Новый Соответствие;
                                 ВариантРасчетаДокумента = Док.ОсновнойВариантРасчетаДокумента();
                                 ВидРасчета = ВариантРасчетаДокумента.ВидРасчета;
                                 Если ЗначениеЗаполнено(ВидРасчета) Тогда

                                                 СведениеОВидеРасчета = ПроведениеРасчетов.ПолучитьСведенияОВидеРасчета(мСведенияОВидахРасчета, ВидРасчета);
                                                 МесяцевРасчетногоПериода = 0;
                                                 ОбщегоНазначенияЗК.РазобратьРазностьДат(НачалоМесяца(Док.ПериодРасчетаСреднегоЗаработкаОкончание), НачалоМесяца(Док.ПериодРасчетаСреднегоЗаработкаНачало), , МесяцевРасчетногоПериода);
                                                 Если ЗначениеЗаполнено(МесяцевРасчетногоПериода) Тогда
                                                                 МесяцевРасчетногоПериода = МесяцевРасчетногоПериода + 1;
                                                 Иначе
                                                                 МесяцевРасчетногоПериода = ?(СведениеОВидеРасчета.ПорядокОпределенияРасчетногоПериодаСреднегоЗаработка = Перечисления.ПорядокОпределенияРасчетногоПериодаСреднегоЗаработка.ПоКолдоговору,СведениеОВидеРасчета.ПериодРасчетаСреднегоЗаработка,НачислениеОтпускаРаботникамОрганизацийПереопределяемый.КоличествоМесяцевРасчетаПоЗакону(Док));

                                                 КонецЕсли;
                                                 СреднедневнойЗаработок = Формат(НачислениеОтпускаРаботникамОрганизацийПереопределяемый.РасчетСреднегоЗаработка(ДОк, СведениеОВидеРасчета.СпособРасчета, МесяцевРасчетногоПериода, Док.ПериодРасчетаСреднегоЗаработкаНачало, Док.ПериодРасчетаСреднегоЗаработкаОкончание),  "ЧЦ=12; ЧДЦ=2; ЧН=");
                                      

                                 КонецЕсли;
                                 Стр.СреднедневнойЗаработок = Число(СреднедневнойЗаработок);

                                 Если Стр.СреднедневнойЗаработок = Неопределено тогда

                                                 Стр.СреднедневнойЗаработок = 0;

                                 КонецЕсли;

                                 ОтменитьТранзакцию();                                

                                 Набор = РегистрыСведений.Изм_СреднедневнойЗаработок.СоздатьНаборЗаписей();
                                 Набор.Отбор.Период.Установить(НачалоМесяца(ДатаОтчета));
                                 Набор.Отбор.Сотрудник.Установить(Стр.Сотрудник);                                

                                 //Набор.Загрузить(Остаток);
                                 Набор.Добавить();
                                 для каждого СтрНаб из Набор цикл
                                                 ЗаполнитьЗначенияСвойств(СтрНаб,Стр);
                                                 СтрНаб.Период = ДатаОтчета;
                                 КонецЦикла;                            

                                 Набор.Записать(истина);
[/code]
17 ALEX7519
 
31.03.17
16:52
Спасибо вроде бы получилось
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн