К списку форумов К списку тем
Регистрация    Правила    Главная форума    Поиск   
Имя: Пароль:
Рекомендовать в новости

Несложный вопрос по программированию

Гость
0 - 24.12.2011 - 16:57
Уважаемые, подскажите пожалуйста элементарный вопрос. Создал справочник сотрудники (фамилия и должности) Надо сделать документ, где есть список некоторых сотрудников. Как сделать, чтобы при выборе фамилии в графе должность автоматически указывалась бы должность? Понятно, что на форме документа операция при изменении. Делаем серверный вызов а дальше?


Гость
1 - 24.12.2011 - 17:17
(1) Серверный вызов? А что это? На твой вопрос, ответ:
РеквизитДолжность = ВыбранныйСотрудник.Должность;
Гость
2 - 24.12.2011 - 17:49
Спасибо добрый человек. С РеквизитДолжность понятно ВыбранныйСотрудник это обращение к справочнику? Это процедуру не сервере делать нужно?
Гость
3 - 24.12.2011 - 17:53
(3) да. это ссылка на элемент справочника. все правильно (не на клиенте а на сервере)
Гость
4 - 24.12.2011 - 18:26
Нет, добрый человек, не выходит, чего-то.
&НаКлиенте
Процедура ТаблицаФамилияПриИзменении(Элемент)

ВыборДолжности();

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

&НаСервере
Процедура ВыборДолжности()


Документы.Приказ.ТаблицаДолжность = Справочники.Сотрудники.Должность;

КонецПроцедуры // ВыборДолжности()
5 - 24.12.2011 - 18:47
5-Ocean5 >
Цитата:
Документы.Приказ
Что сие значит?
Гость
6 - 24.12.2011 - 19:05
Есть документ Приказ в нем табличная часть Когда мы формируем приказ и табличной части выбираем фамилию, то нам надо, чтобы должность выбиралась автоматически из справочника сотрудники
Гость
7 - 24.12.2011 - 20:21
7-Ocean5 > Подсказываю: сервер клиента не видит.
Гость
8 - 24.12.2011 - 20:31
Я на сервере делаю. Там всё соблюдено
Гость
9 - 24.12.2011 - 20:31
всё видит, просто клиент новогодний...
Гость
10 - 24.12.2011 - 20:35
10-Капуста > Может код подскажешь, вместо умничества?
Гость
11 - 24.12.2011 - 20:56
11-Ocean5 > всё, ты меня обидел, пошёл я плакать....
Гость
12 - 24.12.2011 - 20:58
очередное изделие прохграммероф-одноЭсникоф

Гость
13 - 24.12.2011 - 21:00
а я пиццу счас ем.
Гость
14 - 24.12.2011 - 21:01
с пивом не плохо идёт, никогда не пробовал...
Гость
15 - 24.12.2011 - 21:02
жена прям с духовки достаёт, с пылу и жару.:)
Гость
16 - 24.12.2011 - 21:03
не знаю, как твоя пицца - но все пиво в раше - галимый оцтой
Гость
17 - 24.12.2011 - 21:04
да и хрен с ним, один раз живём!
Гость
30 - 24.12.2011 - 23:08
Спасибо, А можно попросить удалить диалого начиная с фотографии? Моя поблема не решена пока и....
31 - 24.12.2011 - 23:53
(31)
вопрос несложный, не для гуру...
Гость
32 - 25.12.2011 - 02:33
Вообще-то, ответ в (6).
Гость
33 - 25.12.2011 - 13:37
31-Ocean5 > Посмотрите в отладчике что возвращается в левой части равенства, что в правой. Какие типы у обеих частей, совпадают ли они. И, думаю, все станет понятно)
Гость
34 - 25.12.2011 - 21:26
34-Ch Lexa > Пошет ожидаемое выражение. Что-то я не понял, никто не знает, что ли? Ну не может быть. или, на первый взгляд простая задача оказалась сложна?
Гость
35 - 26.12.2011 - 08:27
А сотрудник. Должность часом не периодический реквизит ?
Гость
36 - 26.12.2011 - 09:57
(35) если ты не знаешь сабжа - фигли неучам объяснять
Гость
37 - 26.12.2011 - 12:43
&НаКлиенте
Процедура ТаблицаФамилияПриИзменении(Элемент)

Элемент.Родитель.ТекущиеДанные.Должность = ВыборДолжности(Элемент.Родитель.ТекущиеДанные.ФИО) ;

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

&НаСервере
Функция ВыборДолжности(ФИО)

Запрос = Новый Запрос("Выбрать Спровочник.Должность ИЗ Справочник.ФизЛица ГДЕ Ссылка = &ФИО");
Запрос.УстановитьПараметры("ФИО", ФИО);
Результат = Запрос.Выполнить().Выбрать();
Результат.Следующий();
Возврат Результат.Должность;


КонецФункции // ВыборДолжности()
Гость
38 - 26.12.2011 - 13:05
да и &НаСервереБезКонтекста вместо &НаСервере
Гость
39 - 26.12.2011 - 13:14
а еще лучше безконтекстный серверный вызов
Гость
40 - 26.12.2011 - 13:35
в идеале, можно было перетащить нужный реквизит из правого окошечка в левое... Гы
Гость
41 - 29.12.2011 - 23:56
Господа, большое спасибо всем тем, кто пытался мне помочь. Отдельное спасибо uh534 и gekon с их, очень дельными советами. Можно по дискутировать, нужен ли в данном варианте запрос, но это уже частности.
Не понятно позиция тех, кто пытался выпендриваться, показывая отсутствие каких либо знаний. Речь идёт, прежде всего о Helen 1986 и Капусте, мне жаль их. Коль не знаете - учитесь молча. Мне удалось решить данную задачу и я поделюсь решением. Допускаю, что кому-то мои формулировки покажуться спорными..
И так. Поступила задача. Изобразить справочник «Должности». Дозаполнить справочник «Сотрудники» должностями сотрудников и сформировать документ «Приказ», в котором при выборе в табличной части сотрудника, должность в соседней графе проставлялась бы автоматически. Друг, опытный программист, уехал в отпуск, на форуме отвечали расплывчатыми формулировками или откровенно ёрничали.. Время шло, а все попытки успеха не имели.
Что делать? Начнем с двух теоретических вопроса. Первый. Что может связывать в документе «Приказ» конкретного сотрудника из одного справочника и должность из другого? Или по другому: как в документе образовать связку между фамилией сотрудника и занимаемой должностью. Таким связующим элементом в системе 1С является параметр. Если нам требуется один выбрать реквизит и соответственно выбрать связанный с ним другой реквизит, то мы должны использовать параметр.
Второй вопрос. Где или на каком уровне мы будем осуществлять поиск соответствующих справочных реквизитов при заполнении документа «Приказ»? Конечно же, на уровне сервера, т.к. нам с нужно обращаться к данным справочника, т.е к данным базы. Отсюда следует то, что мы в модуле документа «Приказ» Должны написать серверный вызов.
Начинаем реализовывать задачу.
1. Создаем объекты конфигурации.
- Справочник «Сотрудники» На закладке данные указываем реквизит должность. Реквизит «Наименование», в котором мы будем указывать фамилия сотрудника задан по умолчанию. В свойствах реквизита «Наименование» можно указать название «Фамилия», которое будет выведено на форме в пользовательском режиме;
- Справочник «Должность» без каких либо реквизитов. В этом справочнике также Реквизит «Наименование», в котором мы будем указывать фамилия сотрудника задан по умолчанию. В свойствах реквизита «Наименование» можно указать название «Фамилия», которое будет выведено на форме в пользовательском режиме;
- Документ «Приказ» имеющий табличную часть с реквизитами «Фамилия» и «Должность»
2. Создаём форму документа «Приказ» и открываем модуль формы этого документа. Когда у нас должна проставляться должность? При изменении фамилии. Следовательно мы должны написать обработчик события при изменении у реквизита «Фамилия». Нажимаем на кнопку с увеличительным стеклом и нас система переводит в модуль формы документа, прописывает название процедуры на клиенте
ТаблицаФамилияПриИзменении(Элемент)
Что нам нужно добиться в данном обработчике? Нам нужно «достучаться» до табличной части. Табличная часть будет нам доступна
Элементы.Таблица.ТекущиеДанные;
Далее нам необходимо обращение на сервер и вот здесь мы в качестве параметров обращения на сервер проставляем Фамилию нашей табличной части Элементы.Таблица.ТекущиеДанные
Что нам сделать: серверную функцию или серверную процедуру? Это – глядя что мы хотим получить. В данном случае мы хотим получить должность Она должна быть нам возвращена. Следовательно, нам более всего подходить функция на сервере Назовем эту функцию ПодставитьДолжность
И так на клиенте мы получаем
Элементы.Таблица.ТекущиеДанные.Должность = ПодставитьДолжность(Элементы.Таблица.ТекущиеДанные .Фамилия)
Скажем прямо такой код читать весьма трудно, поэтому для удобства чтения вводим несколько переменных. После чего Обработчик события ТаблицаФамилияПриИзменении(Элемент) будет выглядеть следующим образом:

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

Как мы должны сконструировать серверную функцию?
Мы должны найти по наименованию сотрудника с параметром Фамилия. Конструкция этой операции выглядит как Справочники.Сотрудники.НайтиПоНаименованию(Фамилия )
И возвратить (т.е. получить) должность найденного сотрудника с параметром фамилия
Возврат Справочники.Сотрудники.НайтиПоНаименованию(Фамилия ).Должность
Но опять повторюсь, такой код читать весьма трудно, поэтому для удобства чтения вводим несколько переменных. После чего серверная функция ПодставитьДолжность с параметром Фамилия будет выглядеть следующим образом:

&НаСервере
Функция ПодставитьДолжность(Фамилия)
Спр = Справочники.Сотрудники.НайтиПоНаименованию(Фамилия );
Возврат Спр.Должность;
КонецФункции

Главное во всей этой истории четко определиться параметры и правильно определить объекты конфигурации.
Гость
42 - 30.12.2011 - 09:39
нифигасе мемуары то какие? автор, ты дипломную работу пишешь что ли :) ?
Гость
43 - 30.12.2011 - 09:57
(42) За старание 4 балла. За использование вместо ссылки на сотрудника текстового поля с фамилией и вызванного этим "найти по наименованию" минус балл. За использование контекстного серверного вызова без необходимости еще минус балл. Полбалла в плюс за заполнение реквизита ТЧ на клиенте добавим по просьбе веб-клиента. Итого 2+. Негусто...
44 - 30.12.2011 - 09:59
44-Reaper >"За использование вместо ссылки на сотрудника текстового поля с фамилией и вызванного этим "найти по наименованию" минус балл."
Я бы снял 2 балла.
:)
Гость
45 - 30.12.2011 - 10:03
За поиск по ФИО не снимать, а сразу дисквалификация. Ну, для класса "новичок" - два балла ;)
Гость
46 - 30.12.2011 - 10:07
(45, 46) Звери. Новый год же.
Гость
47 - 30.12.2011 - 10:09
Не читая: слишком много "букоф" - два балла.
Гость
48 - 30.12.2011 - 10:12
интересно, а всё что написал автор это только для форума, или он еще все эти пояснения в комментарии вставляет ))
Гость
49 - 30.12.2011 - 10:40
49-gematogen > Вообще-то, комментарии приветствуются ;) И даже предписываются.
Гость
50 - 30.12.2011 - 10:48
50-VZ > главное не переборщить, в данном случае комментариий раза в три больше самого кода
Гость
51 - 30.12.2011 - 10:50
42-Ocean5 > Чувак, пойми одну простую истину, что система при обращении к базе данных в любом случаи строит запрос, обращаешься ли ты к объекту через точку, или же другим способом. Как система строит запросы, я думаю, ты не знаешь, в любом случаи он будет больше того запроса, который написал я. Объектный метод обращения к БД используй только в случаях, когда необходимо изменять данные.


К списку вопросов






Copyright ©, Все права защищены