Имя: Пароль:
1C
1С v8
Ошибка отображения типов
,
0 Vika_Vika
 
18.08.11
22:47
Изучаю восьмерку по книжке Радченко. Дошла до документа "НачисленияСотрудникам". Не понравилось, что надо его заполнять вручную, решила часть данных запихнуть в справочник Сотрудники.
Затык случился, когда я решила сделать такую схему: в шапке задается ВидРасчета (варианты - оклад, премия, невыходы), а в зависимости от этого вида в качестве исходных данных должен в строке подставляться или извлеченный из справочника оклад (если вид расчета - оклад), или процент премии (если вид расчета - премия). И тут программа мне заявила, что она не в курсе, что такое ПланыВидовРасчета.ОсновныеНачисления.Оклад
Все прочее нормально занеслось.

Текст процедуры выглядел так:
&НаКлиенте
Процедура ОсновныеНачисленияСотрудникПриИзменении(Элемент)
 СтрокаТабличнойЧасти = Элементы.ОсновныеНачисления.ТекущиеДанные;
 СтрокаТабличнойЧасти.ГрафикРаботы = СтрокаТабличнойЧасти.Сотрудник.График;
 СтрокаТабличнойЧасти.ДатаНачала = НачалоМесяца(Объект.МесяцРасчета);
 СтрокаТабличнойЧасти.ДатаОкончания = КонецМесяца(Объект.МесяцРасчета);
 СтрокаТабличнойЧасти.ВидРасчета = Объект.ВидРасчетаОбщ;
Если  СтрокаТабличнойЧасти.ВидРасчета = ПланыВидовРасчета.ОсновныеНачисления.Оклад тогда
СтрокаТабличнойЧасти.Начислено = СтрокаТабличнойЧасти.Сотрудник.Оклад;
ИначеЕсли  СтрокаТабличнойЧасти.ВидРасчета = ПланыВидовРасчета.ОсновныеНачисления.Премия тогда
СтрокаТабличнойЧасти.Начислено = СтрокаТабличнойЧасти.Сотрудник.ПремияПроцент;
КонецЕсли;

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

Я поразмыслила, пришла к выводу, что причина в том, что процедура выполняется на клиенте, а ПланыВидовРасчета.ОсновныеНачисления.Оклад принадлежит глобальному контексту, и решила это условие выкинуть в общий модуль, который будет выполняться на сервере.
сделала такую процедуру в общем модуле

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

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

и вызвала ее из модуля формы вместо условия

ПроведениеРасчетов.ДанныеСотрудников(СтрокаТабличнойЧасти);

Тут у меня получилось такое сообщение
--------------------
{Документ.НачисленияСотрудникам.Форма.ФормаДокумента.Форма(17)}: Ошибка при вызове метода контекста (ДанныеСотрудников)
   ПроведениеРасчетов.ДанныеСотрудников(СтрокаТабличнойЧасти);
по причине:
Ошибка при вызове серверного метода.
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства 'param':
   форма: Элемент
   имя: {http://v8.1c.ru/8.2/managed-application/modules}param
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа 'ДанныеФормыЭлементКоллекции'
------------------------------
Насколько я поняла, значение СтрокаТабличноеЧасти у меня получилось какое-то некачественное, незапомненное, что ли. Но как сделать правильно, до меня не доходит. Перепробовала кучу вариантов, не получается ничего. Умные люди, посоветуйте, плиз, как выходить из такой ситуации.
1 lubja
 
18.08.11
22:55
а если сделать ДанныеСотрудников функцией, возвращающей истину, ложь или, вообще, неопределенно, если вид расчета и не оклад, и не премия. в эту функцию передавать не строку, а СтрокаТабличнойЧасти.ВидРасчета. а в процедуре ОсновныеНачисленияСотрудникПриИзменении обрабатывать.
2 Vika_Vika
 
18.08.11
23:06
Получилось! Спасибо.
3 Vika_Vika
 
18.08.11
23:07
Но все-таки интересно, почему вся строка передаваться не хочет.
4 lubja
 
18.08.11
23:11
(3) скорее всего с клиента на сервер просто так не передашь строку тч, нужно слегка извратиться.
5 Vika_Vika
 
18.08.11
23:14
А как извратиться?
6 lubja
 
18.08.11
23:15
(5) лучше дождаться завтрашнего дня и апнуть ветку, когда проснутся умы форума)
7 Axel2009
 
18.08.11
23:15
данныеформывзначение
8 lubja
 
18.08.11
23:16
+ а я сналету не скажу, лезть проверять нужно...
9 Vika_Vika
 
18.08.11
23:20
to Axel2009.
объясните подробнее, пожалуйста. Я только учусь.
10 Axel2009
 
18.08.11
23:27
(9) ищи в СП описание данной функции
11 Vika_Vika
 
19.08.11
05:19
Штука в том, что в другом документе эта самая строка тихо-мирно передавалась и все вычислялось.
Вот ПриходнаяНакладная. В модуле формы:

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

И в общем модуле:

Процедура РассчитатьСумму(ТекСтрока) экспорт
 ТекСтрока.Сумма = ТекСтрока.Количество * ТекСтрока.Цена;
КонецПроцедуры

Разница только в том, что сейчас прежде чем обратиться в общий модуль, я ее пишу данные в строчку. Это такая определяющая вещь? Видимо, я чего-то не понимаю?
Пожалуйста, кто-нибудь может объяснить?
12 Vika_Vika
 
19.08.11
08:22
Народ, откликнитесь, плиз!
13 lubja
 
19.08.11
08:30
(12) сравни галочки в свойствах этих 2 общих модулей
14 Vika_Vika
 
19.08.11
13:17
(13) Предложение хорошее, правильное. Дело, безусловно, именно в этом.
Ситуация такая:
Общий модуль, где вычисляется сумма, он помечен галочкой Клиент (управляемое пр-е). Но если поместить мою первую процедуру в него, получается та же ошибка, что и при работе в модуле формы. Он не знает что такое ПланыВидовРасчета.
Поэтому она находится в модуле, помеченном Сервер, и соответственно дает ту ситуацию, которую я описала вначале.

Вот такая зараза.
15 Hostess_
of_Love
 
19.08.11
13:25
(0) была у меня похожая проблема. выкрутилась изменив тип значения в свойствах реквизита
16 Vika_Vika
 
19.08.11
17:21
То есть эта фигня никак не решается? Можно только выкрутиться?
17 Hostess_
of_Love
 
19.08.11
17:39
говорю же, тип значения в свойствах измени. на какой именно сказать не могу, экспериментируй. главное чтобы на другие механизмы не влеяло
18 Vika_Vika
 
20.08.11
10:08
В свойствах чего? Какого реквидита?
19 Hostess_
of_Love
 
20.08.11
11:43
А вот этого я уже сказать не могу... Я меняла у реквизита формы, в который заносила данные с сервера. Вместо неопределенно поставила СправочникСсылка. Можешь попробовать поставить тип Строка
20 Vika_Vika
 
20.08.11
17:47
М-да. Надеялась, что кто-то сможет объяснить. lubja - спасибо. Остальным - не знаю, что сказать.
Как-то иначе я представляла себе здешний форум.
21 acsent
 
20.08.11
18:06
Есть замечательная функция ПредопределенноеЗначение()
22 Vika_Vika
 
20.08.11
20:55
Верю. И чем она замечательна?
23 Vika_Vika
 
20.08.11
21:04
Ее к моему вопросу можно применить? Если да, то как?