Получение соответствующего реквизита при изменении какого-либо другого реквизита в форме документа. Базовый приём программирования.

29.12.11

Задачи пользователя - Адаптация типовых решений

В данной статье рассматривается наиболее часто встречающийся прием программирования. Статья рассчитана на начинающих программистов

Получение соответствующего реквизита при изменении какого-либо другого реквизита в форме документа.

Базовый приём программирования.

Ocean5

 

Чем отличается спортсмен-разрядник по дзюдо от уличного драчуна. Прежде всего тем, что дзюдоист до автоматизма натренировал базовые приемы борьбы, неплохо знает технику сложных приемов и имеет хорошую общефизическую подготовку. Уличный боец ознакомился с какими-то, порой сомнительными приёмчиками и самоуверенность его не уже знает границ.

Иногда приходится наблюдать, как некоторые начинающие программисты пытаясь конструировать сложные программные модули, напрочь забывают об элементарных, казалось бы вопросах. Или другая крайность, освоив несколько методов кодирования, программист пытается решить с их помощью не решаемые задачи. Хорошо, когда есть время подумать, спросить на форумах, у коллег. Когда же работаешь на выезде у заказчика и времени в обрез, тогда могут возникнуть серьезные проблемы.

Мастера программирования настоятельно рекомендуют иметь под рукой некоторые часто применяемые части кода, что бы можно быстро было найти и подсмотреть. Ибо даже самая гениальная голова имеет способность что-то забыть, причем в самый неподходящий момент. Материал данной статьи рассчитан для новичков и далее будет описан вполне конкретный случай из практики молодого программиста.

Вдруг, откуда ни возьмись, поступила задача. Изобразить  справочник «Должности». Дозаполнить справочник «Сотрудники» должностями сотрудников и сформировать документ «Приказ», в котором при выборе в табличной части сотрудника, должность в соседней графе проставлялась бы автоматически. Друг, опытный программист, уехал в отпуск, на форуме отвечали расплывчатыми формулировками или откровенно ёрничали.. Время шло, а все попытки успеха не имели.

Что делать? Начнем с двух теоретических вопроса. Первый. Что может связывать в документе «Приказ» конкретного сотрудника из одного справочника и должность из другого? Или по другому: как в документе образовать связку между фамилией сотрудника и занимаемой должностью. Таким связующим элементом в системе 1С является параметр. Если нам требуется один выбрать реквизит и соответственно выбрать связанный с ним другой реквизит, то мы должны использовать параметр.

Второй вопрос. Где или на каком уровне мы будем  осуществлять поиск соответствующих справочных реквизитов при заполнении документа «Приказ»? Конечно же, на уровне сервера, т.к. нам с нужно обращаться к данным справочника, т.е к данным базы. Отсюда следует то, что мы в модуле документа «Приказ» Должны написать серверный вызов.

Начинаем реализовывать задачу.

1.  Создаем объекты конфигурации.

 - Справочник «Сотрудники» На закладке данные указываем реквизит должность. Реквизит «Наименование», в котором мы будем указывать фамилия сотрудника задан по умолчанию. В свойствах реквизита «Наименование» можно указать название «Фамилия», которое будет выведено на форме в пользовательском режиме;

 - Справочник «Должность» без каких либо реквизитов. В этом справочнике также Реквизит «Наименование», в котором мы будем указывать фамилия сотрудника задан по умолчанию. В свойствах реквизита «Наименование» можно указать название «Фамилия», которое будет выведено на форме в пользовательском режиме;

 - Документ «Приказ» имеющий табличную часть с реквизитами «Фамилия» и «Должность»

2. Создаём форму документа «Приказ» и открываем модуль формы этого документа. Когда у нас должна проставляться должность? При изменении фамилии. Следовательно мы должны написать обработчик события при изменении у реквизита «Фамилия». Нажимаем на кнопку с увеличительным стеклом и нас система переводит в модуль формы документа, прописывает название процедуры на клиенте

ТаблицаФамилияПриИзменении(Элемент)

Что нам нужно добиться в данном обработчике? Нам нужно «достучаться» до табличной части. Табличная часть будет нам доступна 

            Элементы.Таблица.ТекущиеДанные;

Далее нам необходимо обращение на сервер и вот здесь мы в качестве параметров обращения на сервер проставляем Фамилию нашей табличной части Элементы.Таблица.ТекущиеДанные

Что нам сделать: серверную функцию или серверную процедуру? Это – глядя что мы хотим получить. В данном случае мы хотим получить должность Она должна быть нам возвращена. Следовательно, нам более всего подходить функция на сервере Назовем эту функцию  ПодставитьДолжность

И так на клиенте мы получаем

Элементы.Таблица.ТекущиеДанные.Должность = ПодставитьДолжность(Элементы.Таблица.ТекущиеДанные.Фамилия)

Скажем прямо такой код читать весьма трудно, поэтому для удобства чтения вводим несколько переменных. После чего Обработчик события ТаблицаФамилияПриИзменении(Элемент) будет выглядеть следующим образом:

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

 Как мы должны сконструировать серверную функцию?

Мы должны найти по наименованию сотрудника с параметром Фамилия. Конструкция этой операции выглядит как Справочники.Сотрудники.НайтиПоНаименованию(Фамилия)

И возвратить (т.е. получить) должность найденного сотрудника с параметром фамилия

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

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

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

 Главное во всей этой истории четко определиться параметры и правильно определить объекты конфигурации.

См. также

Табличная часть в доп. реквизитах и формирование таблиц в шаблоне docx для 1С:ДО 3.0

Адаптация типовых решений Платформа 1С v8.3 1С:Документооборот Россия Платные (руб)

Расширение конфигурации для «1С:Документооборот КОРП», редакция 3.0. позволяет: 1.использовать произвольные табличные части в качестве дополнительных реквизитов к документу; 2 использовать произвольные табличные части в шаблонах в формате docx для автоматического заполнения таблиц.

29400 руб.

29.06.2023    4453    9    4    

18

Расширение для 1С:УНФ. Автоматическое снятие резервов в Заказах покупателей

Логистика, склад и ТМЦ Адаптация типовых решений Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 Россия Управленческий учет Платные (руб)

Чтобы не допустить путаницы с обещаниями клиентам и для четкого контроля исполнения заказов мы используем резервирование товаров. Мы доработали УНФ, чтобы она автоматически отменяла старые резервы и не мешала эффективно продавать.

7200 руб.

02.08.2023    2956    4    0    

19

Создать на основании - своя кнопка (БСП). Проблема двух подменю Создать на основании

БСП (Библиотека стандартных подсистем) Адаптация типовых решений Платформа 1С v8.3 1С:ERP Управление предприятием 2 Бесплатно (free)

Понадобилось в подменю "Создать на основании" добавить свою команду, которая открывает обработку. В процессе доработок появилась проблема двух подменю "Создать на основании". В статье о том, как решились проблемы.

01.03.2024    1289    dimanich70    6    

13

Доработка отчета "Связанные документы" (структура подчиненности) для вывода объектов из любого расширения

Адаптация типовых решений Платформа 1С v8.3 1С:Управление торговлей 11 Россия Абонемент ($m)

Доработка типового отчета "Связанные документы" позволяет просто и быстро расширять состав объектов для построения структуры подчиненности документов, используя объекты основной конфигурации и любых расширений.

1 стартмани

27.10.2023    1996    13    avmartynov    10    

43

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    2077    21    progmaster    7    

3
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. tango 506 26.11.13 10:37 Сейчас в теме
Справочник «Сотрудники» На закладке данные указываем реквизит должность.

периодический РС
2. tango 506 26.11.13 10:37 Сейчас в теме
Спр = Справочники.Сотрудники.НайтиПоНаименованию(Фамилия);

за это и минуса не жалко
Оставьте свое сообщение