# Форум 1С > Конфигурирование, программирование 1С - Предприятие >  Настройка формы

## Whes

Всем привет. 
1. Есть форма на которой располагаются Наименование, Фамилия, Имя , Отчество. Как сделать чтобы ФИО выводилось при записи в строке наименование?
2. Как сделать справочник выбора, чтобы не выпадающим списком, а именно открывалось окно с возможностью выбора из него?

----------


## avm3110

> 1. Есть форма на которой располагаются Наименование, Фамилия, Имя , Отчество. Как сделать чтобы ФИО выводилось при записи в строке наименование?


Вставить код в обработчик формы ПриЗаписи 



> 2. Как сделать справочник выбора, чтобы не выпадающим списком, а именно открывалось окно с возможностью выбора из него?


А поискать в гугле - не? Ведь никто не знает, а что говоря вы хотите. Может это?
http://stop1c.ru/books/1c82_prakt_posob/book1p27/

----------


## Whes

> Вставить код в обработчик формы ПриЗаписи


Вставляю, а он не работает. Что не так?

Процедура ПриЗаписи();
	Спр = Справочники.Пациенты.Созда  тьЭлемент();
	Спр.Наименование =  СокрЛП(Спр.Фамилия)+" "+СокрЛП(Спр.Имя)+" "+СокрЛП(Спр.Отчество);
	Спр.Записать();
КонецПроцедуры

----------


## avm3110

> Вставляю, а он не работает. Что не так?


Может мы о разном?
Ты "вставляешь в модуле объекта или формы?
Зачем нужно делать Справочники.Пациенты.Созда  тьЭлемент()  если ты находишься "в этом элементе" и значит его нужно только "Записать" ?

----------


## Whes

В модуле формы пишу

----------


## avm3110

Тогда нужно лишь:
Процедура ПриЗаписи();

Наименование = СокрЛП(Фамилия)+" "+СокрЛП(Имя)+" "+СокрЛП(Отчество);

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

Пы.СЫ но не забыть, чтобы обработчик ПриЗаписи был "взведен" для формы

----------

Whes (15.02.2017)

----------


## Whes

> Тогда нужно лишь:
> Процедура ПриЗаписи();
> 
> Наименование = СокрЛП(Фамилия)+" "+СокрЛП(Имя)+" "+СокрЛП(Отчество);
> 
> КонецПроцедуры
> 
> Пы.СЫ но не забыть, чтобы обработчик ПриЗаписи был "взведен" для формы


Спасибо

----------


## Whes

> Тогда нужно лишь:
> Процедура ПриЗаписи();
> 
> Наименование = СокрЛП(Фамилия)+" "+СокрЛП(Имя)+" "+СокрЛП(Отчество);
> 
> КонецПроцедуры
> 
> Пы.СЫ но не забыть, чтобы обработчик ПриЗаписи был "взведен" для формы


А как будет в модуле объекта?

----------


## avm3110

Код будет такой же, но тут вопрос "взведения" обработчика.
Если это в модуле формы, но обработчик не взведен, то естественно, что работать не будет

----------


## Whes

Есть еще вопрос. Хочу сделать строку в корой будет считаться кол-во полных лет. Написал вставил в модуль формы, а она не считает.

 Процедура  ПолныхЛет()
	Возраст = Дата(ТекущаяДата()) - Дата(ДатаРождения);
	Если Месяц(ТекущаяДата()) < Месяц(ДатаРождения) Тогда
		Возраст = Возраст - 1;
	ИначеЕсли Месяц(ТекущаяДата()) = Месяц(ДатаРождения) Тогда
		Если День(ТекущаяДата()) < День(ДатаРождения) Тогда
			Возраст = Возраст - 1;
		КонецЕсли;
	КонецЕсли;
КонецПроцедуры

----------


## alexandr_ll

> Есть еще вопрос. Хочу сделать строку в корой будет считаться кол-во полных лет. Написал вставил в модуль формы, а она не считает.
> 
>  Процедура  ПолныхЛет()
> 	Возраст = Дата(ТекущаяДата()) - Дата(ДатаРождения);
> 	Если Месяц(ТекущаяДата()) < Месяц(ДатаРождения) Тогда
> 		Возраст = Возраст - 1;
> 	ИначеЕсли Месяц(ТекущаяДата()) = Месяц(ДатаРождения) Тогда
> 		Если День(ТекущаяДата()) < День(ДатаРождения) Тогда
> 			Возраст = Возраст - 1;
> ...


Проверьте, каков результат вычисления 
Возраст = Дата(ТекущаяДата()) - Дата(ДатаРождения);?
Кстати, почему вы не указываете платформу, конфигурацию и вид приложения? Одни догадки

----------


## Whes

> Проверьте, каков результат вычисления 
> Возраст = Дата(ТекущаяДата()) - Дата(ДатаРождения);?
> Кстати, почему вы не указываете платформу, конфигурацию и вид приложения? Одни догадки


Ну да бред получается. Там где Дата он должен год считать.

1С 8.3: Технологическая поставка

----------


## avm3110

> Ну да бред получается. Там где Дата он должен год считать.


На самом деле "не бред":blush:
Дата(ТекущаяДата()) - Дата(ДатаРождения)     - это "разность дат" с секундах"
Год(ТекущаяДата()) - Год(ДатаРождения)       - это "разность дат" с годах"

Но при этом нужно обработать три ситуации:
"номер месяца" рождения  - больше "номера месяца" текущей даты
"номер месяца" рождения  - равен "номеру месяца" текущей даты
"номер месяца" рождения  - меньше "номера месяца" текущей даты


Ну и все

----------


## Whes

> Проверьте, каков результат вычисления 
> Возраст = Дата(ТекущаяДата()) - Дата(ДатаРождения);?


Заменил Дата на Год но результатов 0. Или не так надо было?

----------


## Whes

> На самом деле "не бред":blush:
> Дата(ТекущаяДата()) - Дата(ДатаРождения)     - это "разность дат" с секундах"
> Год(ТекущаяДата()) - Год(ДатаРождения)       - это "разность дат" с годах"
> 
> Но при этом нужно обработать три ситуации:
> "номер месяца" рождения  - больше "номера месяца" текущей даты
> "номер месяца" рождения  - равен "номеру месяца" текущей даты
> "номер месяца" рождения  - меньше "номера месяца" текущей даты
> 
> ...


Но с этим кодом он должен то показывать результат? (Пусть и не правильный) Или нет?
Процедура  ПолныхЛет();
	Возраст = Год(ТекущаяДата()) - Год(ДатаРождения);
	Если Месяц(ТекущаяДата()) < Месяц(ДатаРождения) Тогда
		Возраст = Возраст - 1;
	ИначеЕсли Месяц(ТекущаяДата()) = Месяц(ДатаРождения) Тогда
		Если День(ТекущаяДата()) < День(ДатаРождения) Тогда
			Возраст = Возраст - 1;
		КонецЕсли;
	КонецЕсли;
КонецПроцедуры

----------


## avm3110

> Но с этим кодом он должен то показывать результат? (Пусть и не правильный) Или нет?


А где (как)  смотрите результат?

пробовали отладчик?

Как вариант проверить - а что находится в "ДатаРождения" - "строка", "число" или "дата"?

----------


## Whes

> А где (как)  смотрите результат?
> 
> пробовали отладчик?
> 
> Как вариант проверить - а что находится в "ДатаРождения" - "строка", "число" или "дата"?


В справочнике создал 2 реквизита ДатаРождения(Дата) и Возраст(Число). Создал форму справочника и поместил на неё ДатуРождения и Возраст. Открыл справочник: Прочее->Модуль объекта и вставил код. Запустил, ошибок нет но и результата нет.

----------


## avm3110

А форма какая? Обычная или управляемая?
поставь в отладчике точку останова на строке
Возраст = Год(ТекущаяДата()) - Год(ДатаРождения);

и посмотри в окне отладки что у тебя возвращает ДатаРождения, что ТекущаяДата(), а что само выражение Год(ТекущаяДата()) - Год(ДатаРождения)

----------


## Whes

> А форма какая? Обычная или управляемая?
> поставь в отладчике точку останова на строке
> Возраст = Год(ТекущаяДата()) - Год(ДатаРождения);
> 
> и посмотри в окне отладки что у тебя возвращает ДатаРождения, что ТекущаяДата(), а что само выражение Год(ТекущаяДата()) - Год(ДатаРождения)


 А управляемая или обычная это как? Поставил точку он на неё не реагирует. Из-за чего?

----------


## avm3110

> Поставил точку он на неё не реагирует. Из-за чего?


А тестишь в файловой базе или в клиент сервере? Если в клиент-сервере, то как вариант не подключился отладчик к сессии




> А управляемая или обычная это как?


э-э-э.. Ну как бы тут тебе объяснить :blush:

Ну например тут "про это" - http://1c-programs.ru/chastye-vopros...mogo-v-1s.html

----------


## Whes

> А тестишь в файловой базе или в клиент сервере? Если в клиент-сервере, то как вариант не подключился отладчик к сессии


Вообщем сделал так и заработало

Процедура ПриЗаписи();

Наименование = СокрЛП(Фамилия)+" "+СокрЛП(Имя)+" "+СокрЛП(Отчество);

//ПолныхЛет
	Возраст = Год(ТекущаяДата()) - Год(ДатаРождения);
	Если Месяц(ТекущаяДата()) < Месяц(ДатаРождения) Тогда
		Возраст = Возраст - 1;
	ИначеЕсли Месяц(ТекущаяДата()) = Месяц(ДатаРождения) Тогда
		Если День(ТекущаяДата()) < День(ДатаРождения) Тогда
			Возраст = Возраст - 1;
		КонецЕсли;
	КонецЕсли;

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

----------


## Whes

> 


Подскажи как в базу добавить Адресный классификатор(Фиас или Кладр)?

----------


## avm3110

Смотря в какую базу. Если это типовая конфа типа ЗУПа, то заливка идет через регистр сведений "Адресный классификатор", там для этого есть соответствующая функциональность

----------


## Whes

> Смотря в какую базу. Если это типовая конфа типа ЗУПа, то заливка идет через регистр сведений "Адресный классификатор", там для этого есть соответствующая функциональность


А если новая(голая) база?

----------


## Whes

> Смотря в какую базу. Если это типовая конфа типа ЗУПа, то заливка идет через регистр сведений "Адресный классификатор", там для этого есть соответствующая функциональность


А если новая(голая) база?(У меня без всяких типовых конфигураций, делаю с нуля на 1с 8.3:Технологическая поставка)

----------


## avm3110

Есть такая классная штука как БСП (библиотека стандартных подсистем). Включаешь в свою конфу "с нуля" эти типовые библиотеки и там докуя полезного типового функционала

----------


## Whes

> Есть такая классная штука как БСП (библиотека стандартных подсистем). Включаешь в свою конфу "с нуля" эти типовые библиотеки и там докуя полезного типового функционала


Спасибо, буду пробовать устанавливать

----------

