Имя: Пароль:
1C
1С v8
v8: заполнение табличной части справочника
,
0 MariAlex
 
03.06.13
13:41
Есть справочник Должность и справочник ПлатныхУслуг. В табличной части платных услуг, нужно выбрать Должность, где указан так же среднедолжностной оклад и вычислить Затраты на оплату труда





&НаКлиенте
Процедура ЗатратыНаОплатуТрудаДолжностьПриИзменении(Элемент)
ТекСтрока = Элементы.ЗатратыНаОплатуТруда.ТекущиеДанные;
ТекСтрока.ЗатратыНаОплату=ТекСтрока.Должность.СреднийДолжностнойОклад*Элементы.ВремяОказываемойУслуги/Константа.МесячныйФондРабочегоВремени.Получить() ;      
КонецПроцедуры

--------------------------------------------

{Справочник.ПлатныеУслуги.Форма.ФормаЭлемента.Форма(5)}: Поле объекта не обнаружено (СреднийДолжностнойОклад)
ТекСтрока.ЗатратыНаОплату=ТекСтрока.Должность.СреднийДолжностнойОклад*Элементы.ВремяОказываемойУслуги ;      
{Справочник.ПлатныеУслуги.Форма.ФормаЭлемента.Форма(5,104)}: Переменная не определена (Константа)
ТекСтрока.ЗатратыНаОплату=ТекСтрока.Должность.СреднийДолжностнойОклад*Элементы.ВремяОказываемойУслуги/<<?>>Константа.МесячныйФондРабочегоВремени.Получить() ;       (Проверка: Тонкий клиент)
1 Maxus43
 
03.06.13
13:42
КонстантЫ.МесячныйФондРабочегоВремени.Получить()
2 Рэйв
 
03.06.13
13:43
1. НЕ Константа, а КонстантЫ
2. Нет у должностей реквизита с именем СреднийДолжностнойОклад
3 Рэйв
 
03.06.13
13:45
+ вренее нет у
ТекСтрока.Должность
...Неизвестно что там у тебя лежит.
4 MariAlex
 
03.06.13
14:26
должность справочник, у него реквизит СреднийДолжностнойОклад
5 MariAlex
 
03.06.13
14:28
переписала так


&НаСервере
Процедура РасчитатьЗатратыНаОплату(ТекСтрока)
       ТекСтрока.ЗатратыНаОплату=ТекСтрока.Должность.СреднийДолжностнойОклад*Элементы.ВремяОказываемойУслуги/Константы.МесячныйФондРабочегоВремени.Получить() ;    

   КонецПроцедуры

&НаКлиенте

Процедура ЗатратыНаОплатуТрудаДолжностьПриИзменении(Элемент)
   ТекСтрока = Элементы.ЗатратыНаОплатуТруда.ТекущиеДанные;

   РасчитатьЗатратыНаОплату(ТекСтрока);

       КонецПроцедуры

__________________________________________
{Справочник.ПлатныеУслуги.Форма.ФормаЭлемента.Форма(13)}: Ошибка при вызове метода контекста (РасчитатьЗатратыНаОплату)
   РасчитатьЗатратыНаОплату(ТекСтрока);
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства 'param':
   форма: Элемент
   имя: {http://v8.1c.ru/8.2/managed-application/modules}param
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа 'ДанныеФормыЭлементКоллекции'
6 1Сергей
 
03.06.13
14:29
(5) считай в функции на сервере, а значение (числовое) передавай на клиента. СтрокуТЧ нельзя передать на сервер
7 MariAlex
 
03.06.13
15:30
не могу сообразить какую числовое значение передать


&НаСервере
Процедура РасчитатьЗатратыНаОплату()
        ТекСтрока = Элементы.ЗатратыНаОплатуТруда.ТекущиеДанные;

       ТекСтрока.ЗатратыНаОплату=ТекСтрока.Должность.СреднийДолжностнойОклад*Элементы.ВремяОказываемойУслуги/Константы.МесячныйФондРабочегоВремени.Получить() ;    

   КонецПроцедуры

&НаКлиенте

Процедура ЗатратыНаОплатуТрудаДолжностьПриИзменении(Элемент)
       РасчитатьЗатратыНаОплату();

       КонецПроцедуры
8 1Сергей
 
03.06.13
15:52
как-то так:


&НаСервере
Функция РасчитатьЗатратыНаОплату(СреднийДолжностнойОклад)
   Возврат СреднийДолжностнойОклад * Объект.ВремяОказываемойУслуги/Константы.МесячныйФондРабочегоВремени.Получить();
КонецФункции

&НаКлиенте
Процедура ЗатратыНаОплатуТрудаДолжностьПриИзменении(Элемент)
   РасчитатьЗатратыНаОплату();
   ТекСтрока = Элементы.ЗатратыНаОплатуТруда.ТекущиеДанные;
   ТекСтрока.ЗатратыНаОплату = РасчитатьЗатратыНаОплату(ТекСтрока.Должность.СреднийДолжностнойОклад);
КонецПроцедуры

не совсем понятно откуда ты берёшь ВремяОказываемойУслуги
9 MariAlex
 
03.06.13
15:54
из шапки справочника ПлатныеУслуги
10 MariAlex
 
03.06.13
15:58
выдает ошибку

{Справочник.ПлатныеУслуги.Форма.ФормаЭлемента.Форма(8,5)}: Недостаточно фактических параметров (РасчитатьЗатратыНаОплату)
   <<?>>РасчитатьЗатратыНаОплату();
11 MariAlex
 
03.06.13
16:00
убрала РасчитатьЗатратыНаОплату();
выдал:

{Справочник.ПлатныеУслуги.Форма.ФормаЭлемента.Форма(10)}: Поле объекта не обнаружено (СреднийДолжностнойОклад)
   ТекСтрока.ЗатратыНаОплату = РасчитатьЗатратыНаОплату(ТекСтрока.Должность.СреднийДолжностнойОклад);
12 DaZol1991
 
03.06.13
16:09
(11) передавай ТекСтрока.Должность параметром, а не ТекСтрока.Должность.СреднийДолжностнойОклад
На сервере уже обращайся Должность.СреднийДолжностнойОклад
На клиенте нельзя обращаться дальше чем на одну точку.

Можно еще намудрить и на сервере получать текущую строку:
ТекСтрока = Объект.ЗатратыНаОплатуТруда.НайтиПоИдентификатору(Элементы.ЗатратыНаОплатуТруда.ТекущаяСтрока)
На сервере нет метода ТекущиеДанные
13 MariAlex
 
03.06.13
16:11
Пробую так

&НаСервере
Процедура РасчитатьЗатратыНаОплату(Знач ТекущаяСтрока)
     Если ТекущаяСтрока <> Неопределено Тогда
           ТекСтрока = ЗатратыНаОплатуТруда.НайтиПоИдентификатору(ТекущаяСтрока);
           Если ТекСтрока <> Неопределено Тогда
                 ТекСтрока.ЗатратыНаОплату = ТекСтрока.Должность.СреднийДолжностнойОклад*Элементы.ВремяОказываемойУслуги/Константы.МесячныйФондРабочегоВремени.Получить() ;      
           КонецЕсли;
     КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура ЗатратыНаОплатуТрудаДолжностьПриИзменении(Элемент)
     РасчитатьЗатратыНаОплату(Элементы.ЗатратыНаОплатуТруда.ТекущаяСтрока);
КонецПроцедуры

--------------------------------
{Справочник.ПлатныеУслуги.Форма.ФормаЭлемента.Форма(16,25)}: Переменная не определена (ЗатратыНаОплатуТруда)
           ТекСтрока = <<?>>ЗатратыНаОплатуТруда.НайтиПоИдентификатору(ТекущаяСтрока); (Проверка: Сервер)
14 DaZol1991
 
03.06.13
16:15
(13) Наверное Объект.ЗатратыНаОплатуТруда.НайтиПоИдентификатору(ТекущаяСтрока)
У тебя же это реквизит справочника? или формы?
Если справочника то через объект
15 1Сергей
 
03.06.13
16:17
&НаСервере
Функция РасчитатьЗатратыНаОплату(Должность)
   Возврат Должность.СреднийДолжностнойОклад * Объект.ВремяОказываемойУслуги/Константы.МесячныйФондРабочегоВремени.Получить();
КонецФункции

&НаКлиенте
Процедура ЗатратыНаОплатуТрудаДолжностьПриИзменении(Элемент)
   РасчитатьЗатратыНаОплату();
   ТекСтрока = Элементы.ЗатратыНаОплатуТруда.ТекущиеДанные;
   ТекСтрока.ЗатратыНаОплату = РасчитатьЗатратыНаОплату(ТекСтрока.Должность);
КонецПроцедуры
16 MariAlex
 
03.06.13
16:17
&НаСервере
Функция РасчитатьЗатратыНаОплату(должность)
   Возврат должность.СреднийДолжностнойОклад * Объект.ВремяОказываемойУслуги/Константы.МесячныйФондРабочегоВремени.Получить();
КонецФункции

табличная часть справочника



&НаКлиенте

Процедура ЗатратыНаОплатуТрудаДолжностьПриИзменении(Элемент)
   //РасчитатьЗатратыНаОплату(Элемент);
   ТекСтрока = Элементы.ЗатратыНаОплатуТруда.ТекущиеДанные;
   ТекСтрока.ЗатратыНаОплату = РасчитатьЗатратыНаОплату(ТекСтрока.Должность);
КонецПроцедуры

так получилось, только считает не правильно, сейчас разберусь


Большое спасибо!!!!