Имя: Пароль:
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.Закрыть();

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