Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: На основании документа создать элемент справочника
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование управляемых форм 1С 8.2
alexk
Здравствуйте, подскажите как с помощью документа создать элемент справочника, то есть допустим в документе есть схожие реквизиты с реквизитами справочника. И при проведении этого документе создавался элемент справочника, соответственно с заполненными полями?
pablo
А что будет происходить при отмене проведения документа? А при перепроведении? Да и зачем создавать справочник - дубликат документа?
alexk
Дело в том, что документ заполняет обычный пользователь, он имеет право только сохранять документ. А администратор уже проверяет данный документ, и уже сам решает проводить его или нет, соответственно вся ответственность на админе лежит
Vofka
В документе сделать кнопку и создавать только по нажатию кнопки.
alexk
А, если вам не сложно, можете написать пример кода?
Vofka
Справочник = Справочники.МойСправочник.СоздатьОбъект();
Справочник.Реквизит1 = "Вася";
Справочник.Записать();

Выполнять в серверной процедуре.
alexk
Если допустим у меня есть реквизит Фамилия и там, и там, то можно сделать так?
 новыйЭлемент= Справочники.Учащиеся.СоздатьЭлемент();
НовыйЭлемент.Фамилия=Фамилия;
новыйЭлемент.Записать();
Vofka
Т.к. ветка находится в разделе "Управляемый интерфейс", то предположу, что вот так:
НовыйЭлемент= Справочники.Учащиеся.СоздатьЭлемент();
НовыйЭлемент.Фамилия = Объект.Фамилия;
новыйЭлемент.Записать();
alexk
А он же вроде не сможет выполнить её НаСервере, там же Объект.Фамилия, не найдет...?
Vofka
А может вы бы сначала пробовали, а потом писали?
logist
Цитата(Vofka @ 11.04.13, 12:36) необходимо зарегистрироваться для просмотра ссылки
А может вы бы сначала пробовали, а потом писали?

Судя из стартового вопроса - процедура выполняется в модуле объекта, там как раз без Объекта, просто Фамилия.

upd: и если реквизиты по названиям одинаковы, то можно использовать ЗаполнитьЗначенияСвойств()
Vofka
Цитата(logist @ 11.04.13, 13:39) необходимо зарегистрироваться для просмотра ссылки
Судя из стартового вопроса - процедура выполняется в модуле объекта, там как раз без Объекта, просто Фамилия.

Я ж выше писал
Цитата(Vofka @ 11.04.13, 13:13) необходимо зарегистрироваться для просмотра ссылки
В документе сделать кнопку и создавать только по нажатию кнопки.

т.к. считаю так же как и pablo: создавать при проведении не надо. Ну и я, конечно, не написал, но думал, что это само собой всем понятно: раз по кнопке на форме, то код будет тоже выполняться в форме.
logist
Цитата(Vofka @ 11.04.13, 12:41) необходимо зарегистрироваться для просмотра ссылки
т.к. считаю так же как и pablo: создавать при проведении не надо. Ну и я, конечно, не написал, но думал, что это само собой всем понятно: раз по кнопке на форме, то код будет тоже выполняться в форме.

И при проведении и по кнопке в форме - идея утопична, поскольку можно создавать сколько угодно. Соответственно офф-топ в теме будет smile.gif
Vofka
Цитата(logist @ 11.04.13, 13:44) необходимо зарегистрироваться для просмотра ссылки
И при проведении и по кнопке в форме - идея утопична, поскольку можно создавать сколько угодно.

"По кнопке", как минимум, избавляет от проблем перепроведения и отмены проведения. А остальное - это уже на совести ТС. bk.gif
alexk
Скажите, а если я делаю по кнопке, то как мне Сделать с помощью ЗаполнитьЗначенияСвойств

        НовыйЭлемент= Справочники.Учащиеся.СоздатьЭлемент();
    ЗаполнитьЗначенияСвойств(новыйЭлемент,ЭтотОбъект);
    НовыйЭлемент.Записать();


"ЭтотОбъект", пишет Переменная не определена. Кнопка находится же в модуле формы, может как-то можно заменить?
Vofka
Ну а подумать? Пост №8 не на какие мысли не наводит?
zay
Alexk, у вас в принципе не правильное направление идеи. Это как открывать замок, одевая замок на ключ и поворачивая замок. У вас так даже вроде получится "открыть" его, но потом может оказаться что в нагрузку к замку идет дверь...

Смотрите, у вас есть набор реквизитов, которые вы говорите есть и в документе и в справочнике. На самом деле такого быть не должно. (В теории баз данных это называется "вторая нормальная форма"). Если у вас будут дубли реквизитов "Фамилия" в документе и в справочнике - то на 1000 курсантов у вас будут 2-3 курсанта у которых в документе и в справочнике будут разные фамилии. И дальше бы будете бороться с этими артефактами. Если правильно спроектировать хранение данных - таких проблем просто не возникнет.

Как бы я это делал. Создал обработку с кучей полей ввода (например "Фамилия"). И одной кнопкой "Записать". По нажатию кнопки:
1. Проверяется заполнение обязательных реквизитов.
2. Проверяется, а нет ли уже такого курсанта в базе (например по ИНН или паре ФИО+дата рождения )
3. Если такого курсанта нет - создаем новую запись в справочнике, если есть - используем существующую
4. Создаем новый документ. В документе есть только ссылка на элемент справочника (курсанта). Никаких "фамилий", "дат рождения" и прочих реквизитов, таких же как в справочнике, в нем быть не должно.
5. Выполняются какие-то действия с документом, для которых он нужен. Например печать.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.