Имя: Пароль:
1C
1С v8
ЗУП 31
,
0 Natalika
 
18.12.17
16:23
Здравствуйте. Подскажите пожалуйста, как загрузить значения разовых показателей в ЗУП 3.1? Есть показатель "Премия Торг", создала шаблон документа ввода исходных данных с выбранным показателем, вводится раз в месяц, по сотрудникам. Вручную можно заполнить документ "Данные для расчета зп", который заполняет таблицу на форме "ДанныеСводно", а затем при записи заполняет значения в табличную часть "ЗначенияПоказателей" и "ФизическиеЛица". Я написала обработку заполнения табличных частей "ЗначенияПоказателей" и "ФизическиеЛица" для выбранного документа, но таблица "ДанныеСводно" остается пустой и данные в табл части документа не записываются. Подскажите пожалуйста как загрузить значения разовых показателей в документ "Данные для расчета зп"?
1 El_Duke
 
гуру
18.12.17
16:46
(0) Загрузить откуда ? Что выступает источником данных для документа Данные для расчета зарплаты ?
2 Natalika
 
18.12.17
16:52
(1) Ежемесячно из Торговой базы для продавцов выгружаются значения премий. В ЗУП 2.5 эти значения загружались в рег. св. "Значения показателей схем мотивации", в ЗУП 3.1 это рег. св. "Значения разовых показателей расчета зарплаты (для сотрудников)", но у него должен быть регистратор "Данные для расчета зп". Я не пойму как его правильно запонить...
3 El_Duke
 
гуру
18.12.17
16:55
(2) Продавцов 100500 человек и у каждого свой уникальный % премии ?
4 Natalika
 
18.12.17
16:56
(3)Да. Размер премии зависит от выручки продавца за период.
5 ZDenis
 
18.12.17
17:01
(0) Я тоже заполняю документ "Данные для расчета зарплаты" внешними данными, но для этого достаточно заполнить табличную часть "ЗначенияПоказателей". "ФизическиеЛица" заполниться сама при проведении (записи), если в "ЗначенияПоказателей" заполнен сотрудник
6 Natalika
 
18.12.17
17:06
(5) у вас заполняется разовый показатель или распределяется сумма сдельной работы по сотрудникам? Первый случай у меня не работает, а со вторым все хорошо.
7 ZDenis
 
18.12.17
17:13
(6) Именно разовый показатель. Вообще из всего перечня реквизитов табличной части заполняю только:         Показатель, Значение, Период и Объект

Реквизиты самого документа - Дата, Ответственный, Организация, ВидДокумента, Период
8 ZDenis
 
18.12.17
17:15
(6) Может у Вас в настройке шаблона какой-то изъян.
9 Natalika
 
18.12.17
17:18
(7) Странно. Я тоже самое заполняю. У меня пусто... А у вас на форме документа используется таблица "ЗначенияПоказателей" или таблица значений "ДанныеСводно"? У меня почему-то на форме "ДанныеСводно", а при записи из этой таблицы перезаполняется Табл часть "ЗначенияПоказателей" пустыми значениями. Можно посмотреть настройки вашего шаблона и код загрузки?
10 ZDenis
 
18.12.17
17:26
Шаблон простой:
На закладке "Показатели зарплаты" - переключатель на "Разовые (используемые только в одном месяце)", ниже галка на нужном показателе этом показателе. Все остальные закладки шаблона - пустые. На закладке "Дополнительно" - галочка "В документе используется несколько сотрудников".

Ну а модуль загрузки тоже прост:
&НаСервере
Функция СоздатьУдержаниеНаСервере()
    
    ДокОбъект = Документы.ДанныеДляРасчетаЗарплаты.СоздатьДокумент();
    ДокОбъект.Дата = Объект.Дата;
    ДокОбъект.Ответственный = Объект.Ответственный;
    ДокОбъект.Организация = Объект.Организация;
    ДокОбъект.ВидДокумента = Справочники.ВидыДокументовВводДанныхДляРасчетаЗарплаты.НайтиПоНаименованию("Удержания за телефон");
    ДокОбъект.Период = Объект.МесяцНачисления;
    
    Показатель = Справочники.ПоказателиРасчетаЗарплаты.НайтиПоНаименованию("УдержаноЗаТелефон");
    
    ТаблицаУдержаний = Объект.Начисления.Выгрузить();
    ТаблицаУдержаний.Свернуть("Сотрудник", "КУдержанию");
    
    Для Каждого Строка ИЗ ТаблицаУдержаний Цикл
        
        Если Строка.КУдержанию = 0 Тогда
            Продолжить;
        КонецЕсли;
        
        Стр = ДокОбъект.ЗначенияПоказателей.Добавить();
        Стр.Показатель = Показатель;
        Стр.Значение = Строка.КУдержанию;
        Стр.Период = Объект.МесяцНачисления;
        
        Стр.Объект = Строка.Сотрудник;
        
    КонецЦикла;
    ДокОбъект.Записать();
    Возврат ДокОбъект.Ссылка;
    
КонецФункции
11 Natalika
 
18.12.17
17:40
У меня настройка шаблона такая же. Вот код внешней обработки заполнения табличной части:
ИмяФайлаСервер = ПолучитьИмяВременногоФайла();
    ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресВременногоХранилища);    
    ДвоичныеДанные.записать(ИмяФайлаСервер);
    ЧтениеXML = Новый ЧтениеXML;
    ЧтениеXML.ОткрытьФайл(ИмяФайлаСервер);
    
    ДокОбъект.ЗначенияПоказателей.Очистить();
    
    Пока ЧтениеXML.Прочитать() Цикл         
        Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
            ИмяУзла = ЧтениеXML.Имя;
            Если ИмяУзла = "Строка" Тогда
                КодСотрудника = ЧтениеXML.ПолучитьАтрибут("КодСотрудника");  
                ФИОСотрудника = ЧтениеXML.ПолучитьАтрибут("Сотрудник");
                СуммаПремии =  ЧтениеXML.ПолучитьАтрибут("Сумма");
                
                ФизЛицо=Справочники.ФизическиеЛица.НайтиПоКоду(КодСотрудника);
                Если  ФизЛицо.Пустая() Тогда
                    Сообщить("Физлицо с кодом "+КодСотрудника+" не найден");
                    Продолжить;
                КонецЕсли;
                
                
                Запрос = Новый Запрос;
                Запрос.Текст =
                "ВЫБРАТЬ
                |    СотрудникиОрганизаций.Ссылка КАК Ссылка
                |ИЗ
                |    Справочник.Сотрудники КАК СотрудникиОрганизаций
                |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ТекущиеКадровыеДанныеСотрудников КАК ТекущиеКадровыеДанныеСотрудников
                |        ПО СотрудникиОрганизаций.Ссылка = ТекущиеКадровыеДанныеСотрудников.Сотрудник
                |            И (ЕСТЬNULL(ТекущиеКадровыеДанныеСотрудников.ДатаУвольнения, ДАТАВРЕМЯ(1, 1, 1)) = ДАТАВРЕМЯ(1, 1, 1))
                |            И (ТекущиеКадровыеДанныеСотрудников.ОсновноеРабочееМестоВОрганизации)
                |            И (ТекущиеКадровыеДанныеСотрудников.ТекущийВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятости.ОсновноеМестоРаботы))
                |ГДЕ
                |    СотрудникиОрганизаций.ФизическоеЛицо = &Физлицо
                |    И СотрудникиОрганизаций.ГоловнаяОрганизация = &Организация
                |    И НЕ СотрудникиОрганизаций.ПометкаУдаления";
                
                Запрос.УстановитьПараметр("Организация", ДокОбъект.Организация);
                Запрос.УстановитьПараметр("Физлицо", ФизЛицо);
                
                Результат = Запрос.Выполнить();
                
                ВыборкаДетальныеЗаписи = Результат.Выбрать();
                
                Если ВыборкаДетальныеЗаписи.Следующий() Тогда
                    Сотрудник = ВыборкаДетальныеЗаписи.Ссылка;
                    
                    ПараметрыОтбора = Новый Структура;
                    ПараметрыОтбора.Вставить("Объект", Сотрудник);
                    МассивСтрок = ДокОбъект.ЗначенияПоказателей.НайтиСтроки(ПараметрыОтбора);
                    
                    Если МассивСтрок.Количество()=0 Тогда
                        Сообщить("0.Добавляем Строку сотрудник "+Сотрудник);
                        НоваяСтрока = ДокОбъект.ЗначенияПоказателей.Добавить();
                        НоваяСтрока.Объект = Сотрудник;                    
                    Иначе
                        Сообщить("1 Строка сотрудник "+Сотрудник);
                        НоваяСтрока = МассивСтрок[0];
                    КонецЕсли;
                    НоваяСтрока.Период = ДокОбъект.Период;
                    НоваяСтрока.Показатель = ДокОбъект.ВидДокумента.Показатели.Получить(0).Показатель;
                    НоваяСтрока.Значение =  СуммаПремии;
                    
                КонецЕсли;
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;
    ЧтениеXML.Закрыть();

Не работает. Не понимаю. Но единственное, что меня смущает, это то, что на форме документа используется другая таблица значений, с которой перезаполняется Табличная часть "ЗначенияПоказателей". Поэтому я перепишу лучше обработку как у вас - сделаю, чтобы сразу создавался и заполнялся документ. Потом просто буду открывать созданный документ для пользователя. Спасибо большое за ваш вариант!!!
Программист всегда исправляет последнюю ошибку.