Имя: Пароль:
1C
1C 7.7
v7: Автозаполнение реквизита документа реквизитом справочника
,
0 keramik
 
06.01.15
09:04
Добрый день. Задача - заполнить в документе поле "Должность" данными поля "Должность" из справочника "КонтактныеЛицаКонтрагентов" так, чтобы при выборе контрагента автоматически поле "Должность" менялось на соответствующее.
В модуле ФормыДокумента написал следующий код:
&НаКлиенте
Процедура КонтактнаяПерсонаПриИзменении()
ДокументОбъект.РеквизитСправочникаКонтактнаяПерсона = ПолучитьЗначениеРеквизитаСправочникаКонтактныеЛицаКонтрагентовНаСервере(ДокументОбъект.КонтактныеЛицаКонтрагентов);
КонецПроцедуры

&НаСервереБезКонтекста
Функция ПолучитьЗначениеРеквизитаСправочникаКонтактныеЛицаКонтрагентовНаСервере(КонтактныеЛицаКонтрагентов)
Возврат КонтактныеЛицаКонтрагентов.Должность;
КонецФункции

Но при запуске соответствующей формы, появляется сообщение о том, что функция ПолучитьЗначениеРеквизитаСправочникаКонтактныеЛицаКонтрагентовНаСервере не определена.
Если прописать перед функцией просто &НаСервере, то такой ошибки нет, но при выборе Контрагента появляется сообщение Object field not found (РеквизитСправочникаКонтактнаяПерсона).
1 iceman2112
 
06.01.15
11:18
&НаКлиенте
Процедура КонтактнаяПерсонаПриИзменении()
    КонтактнаяПерсонаПриИзмененииНаСервере();
КонецПроцедуры

&НаСервере
Функция КонтактнаяПерсонаПриИзмененииНаСервере()
    Объект.РеквизитСправочникаКонтактнаяПерсона = Объект.КонтактныеЛицаКонтрагентов.Должность;
КонецФункции
2 Мимохожий Однако
 
06.01.15
11:23
Забыл про метод реквизит формы в значение в серверной процедуре
3 keramik
 
06.01.15
11:52
(1) Изменил код так, как написали, теперь появляются сообщения: Variable is not defined (Объект) в функции.

А есть разница в передачи значений из справочника в поле документа или код одинаковый как для справочника, так и для формы документа?
4 keramik
 
06.01.15
12:05
Записал переменную "Объект" в Ordinary application module так:
Перем Объект Экспорт;
Сообщения об ошибке, что переменная не объявлена пропали. Но теперь при вводе информации в поле "Должность" (у меня процедура поставлена на действие "ПриИзменении в свойстве поля), появляется сообщение Value is not of object type (РеквизитСправочникаКонтактнаяПерсона).
5 Maximysis
 
06.01.15
12:17
почему тема о 7?
6 keramik
 
06.01.15
12:25
Чёрт, я слепой пенчекряк. Вопрос о версии 8.2
7 iceman2112
 
06.01.15
12:26
(4) Зайди во вкладку "Форма", там вкладка "Реквизиты", и есть ли там у тебя реквизит Объект? У тебя его там нет, а какой у тебя тогда реквизит форма связан с документом не ясно, ты ничего не переименовавывал? Вот ДокументОбъект, ты наверно переименовал
8 keramik
 
06.01.15
12:48
Я копаюсь в изменённой до меня программе, затрудняюсь сказать что тут менялось и переименовывалось.
Под вкладкой "Форма" имеется ввиду документ, в котором я делаю изменения? В нём есть группа "Attributes" в которой реквизита "Объект" отсутствует.
Если речь идёт о закладках в самой форме (их 3 штуки у меня "Dialog Box" - внешний вид формы; "Module" - код процедур и функций; "Attributes" - список атрибутов и их тип), то в закладке "Attributes" тоже отсутствует "Объект". Есть только ДокументОбъект, и его тип указан "ДокументОбъект.НазваниеФормы". Я так понимаю, что речь идёт именно про этот реквизит.
9 iceman2112
 
06.01.15
12:52
Ну значит
&НаСервере
Функция КонтактнаяПерсонаПриИзмененииНаСервере()
    ДокументОбъект.РеквизитСправочникаКонтактнаяПерсона = ДокументОбъект.КонтактныеЛицаКонтрагентов.Должность;
КонецФункции
10 keramik
 
06.01.15
13:00
Так всё компилится, но при добавлении информации появляется сообщение "Object field not found (РеквизитСправочникаКонтактнаяПерсона)".
11 iceman2112
 
06.01.15
13:44
Заходи в отладку и смотри. че там есть у тебя что нет
12 iceman2112
 
06.01.15
13:44
Прям поставь точку останова на
ДокументОбъект.РеквизитСправочникаКонтактнаяПерсона = ДокументОбъект.КонтактныеЛицаКонтрагентов.Должность;
И вычисли ДокументОбъект
13 keramik
 
06.01.15
14:26
При выделении мышкой текста ДокументОбъект во всплывающей подсказке отображается номер заявки, которую открыл для изменения.
Если выделять другие части строки, то только для Должность появляется вот такая всплывающая подсказка --> ""
14 keramik
 
06.01.15
14:27
Получается, что значение неправильно передаётся или даже вообще не передаётся.
15 palpetrovich
 
06.01.15
15:18
ниче не понимаю, что не получается? ...может тупо "РеквизитСправочникаКонтактнаяПерсона" и "Должность" - разные типы?
короче, так работает :)

&НаСервере
Процедура ВернутьТипЦенНоменклатуры()
    Объект.ТипЦенНоменклатуры = Объект.Контрагент.ТипЦенНоменклатуры;
КонецПроцедуры
&НаКлиенте
Процедура КонтрагентПриИзменении(Элемент)
    ВернутьТипЦенНоменклатуры();
КонецПроцедуры
16 keramik
 
06.01.15
15:34
Вот я сейчас полез изучать структуру системы, что откуда берётся и что куда переносится.
Может будет проще добавить новый реквизит к документу и к справочнику и уже его выводить... Буду пробовать.
17 iceman2112
 
06.01.15
16:11
Мужик, почитай про возможности отладки плз. Табло, вычислить выражение и т.п. Очень может тебе.
18 iceman2112
 
06.01.15
16:12
19 keramik
 
06.01.15
16:37
Спасибо, просмотрю.
20 keramik
 
07.01.15
11:42
Как вобще работает эта функция?

&НаСервере
Функция КонтактнаяПерсонаПриИзмененииНаСервере()
    ДокументОбъект.РеквизитСправочникаКонтактнаяПерсона = ДокументОбъект.КонтактныеЛицаКонтрагентов.Должность;
КонецФункции

Я так понимаю, что она на сервере в документе "КонтактныеЛицаКонтрагентов" ищет реквизит "Должность", а затем передаёт это значение в реквизит документа "КонтактнаяПерсона". Правильно?
21 keramik
 
07.01.15
12:41
(7) Вот ещё что. Во вкладке "Реквизиты" документа, где вызываются процедура и функция, есть реквизит ДокументОбъект.
А во вкладке "Реквизиты" справочника, откуда должны браться данные, есть реквизит СправочникОбъект.
Может это влияет на отработку кода?
22 keramik
 
07.01.15
12:49
Судя по отладке, функция ищет значение в том же самом документе, из которого и вызывается. Но надо, чтобы она искала значение в справочнике "КонтактныеЛицаКонтрагентов".
Т.е.
ДокументОбъект <-- указан номер созданной заявки    .РеквизитСправочникаКонтактнаяПерсона = ДокументОбъект <--указан тот же самый номер созданной заявки    .КонтактныеЛицаКонтрагентов.Должность
А как указать на другой документ? Чтобы она искала именно в нём.
23 Калиостро
 
07.01.15
13:03
Охренеть. В семерке код из одной строки был бы в перовм же ответе. Еще пяток постов на тыканье в ЖКК и тема спокойно бы умерла.
В снеговике меньше, чем сотней постов, такой вопрос, полагаю, не решится :(
24 keramik
 
07.01.15
15:03
Ребят, подскажите мануал с описанием или пример работающей конфиги, где передаётся значение из справочника в поле документа. Уже голову сломал.
Принцип понятен, что надо взять из одного реквизита и вставить в другой, а как это реализовать и в чём может быть загвоздка непонятно.
25 iceman2112
 
07.01.15
15:31
(24) Тебе скинули примеры, они все рабочие, все остальное это твои заморочки, почту проверь
26 Адский плющ
 
07.01.15
16:01
Автор начал делать цывильно без контекста. В итоге превратили в г-код.
27 iceman2112
 
07.01.15
18:09
(26) ты че тут яйцами тресешь? ты помог автору? нет. Он на сервере то, не может посмотреть что у него есть?
28 keramik
 
08.01.15
08:59
(27) Спасибо, iceman2112, помог.