Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 12:21

ЭтоНовый() при записи нового элемента справочника

Автор Maxx79, 25 ноя 2013, 14:44

0 Пользователей и 1 гость просматривают эту тему.

Maxx79

Добрый день!

Прочитал много тем по этому поводу, но так и не нашел ответа (или не понял  :mellow:)

При записи НОВОГО элемента справочника Контрагенты, надо автоматом создать новый договор в подчиненном справочнике ДоговорыКонтрагентов.
Делал так:
&НаСервере
Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
Если Объект.Ссылка.Пустая() Тогда
НовыйДоговор = Справочники.ДоговорыКонтрагентов.СоздатьЭлемент();
НовыйДоговор.Владелец = Объект.Наименование;
НовыйДоговор.Наименование = "Основной договор";
НовыйДоговор.ВалютаВзаиморасчетов = Константы.ВалютаВзаиморасчетов.Получить();
НовыйДоговор.МояОрганизацияСКоторойЗаключенДоговор = Константы.ОснавнаяОрганизация.Получить();
НовыйДоговор.СтатусДоговора = Перечисления.СтатусыДоговоровКонтрагентов.Действующий;
НовыйДоговор.ПризнакОсновногоДоговора = Истина;
НовыйДоговор.Записать();
КонецЕсли;
КонецПроцедуры

Но НовыйДоговор.Владелец = Объект.Наименование; - это не ссылка

Пытался так:
&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
Если Объект.Ссылка.Пустая() Тогда
НовыйДоговор = Справочники.ДоговорыКонтрагентов.СоздатьЭлемент();
НовыйДоговор.Владелец = Объект.Наименование;
НовыйДоговор.Наименование = "Основной договор";
НовыйДоговор.ВалютаВзаиморасчетов = Константы.ВалютаВзаиморасчетов.Получить();
НовыйДоговор.МояОрганизацияСКоторойЗаключенДоговор = Константы.ОснавнаяОрганизация.Получить();
НовыйДоговор.СтатусДоговора = Перечисления.СтатусыДоговоровКонтрагентов.Действующий;
НовыйДоговор.ПризнакОсновногоДоговора = Истина;
НовыйДоговор.Записать();
КонецЕсли;
КонецПроцедуры

Но тогда Если Объект.Ссылка.Пустая() Тогда - не имеет смысла, так как при записи уже существующего контрагента, просто создается еще один договор

Сделал так:
&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
КоличествоДоговоров = КоличествоДоговоровКонтрагента(Объект.Ссылка);
Если КоличествоДоговоров = 0 Тогда
СоздатьДоговорКонтрагента(Объект.Ссылка);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура СоздатьДоговорКонтрагента(Контрагент)
НовыйДоговор = Справочники.ДоговорыКонтрагентов.СоздатьЭлемент();
НовыйДоговор.Владелец = Контрагент;
НовыйДоговор.Наименование = "Основной договор";
НовыйДоговор.ВалютаВзаиморасчетов = Константы.ВалютаВзаиморасчетов.Получить();
НовыйДоговор.МояОрганизацияСКоторойЗаключенДоговор = Константы.ОснавнаяОрганизация.Получить();
НовыйДоговор.СтатусДоговора = Перечисления.СтатусыДоговоровКонтрагентов.Действующий;
НовыйДоговор.ПризнакОсновногоДоговора = Истина;
НовыйДоговор.Записать();
КонецПроцедуры
&НаСервере
Функция КоличествоДоговоровКонтрагента(Контрагент)

Перем КоличествоДоговоровКонтрагента;
КоличествоДоговоровКонтрагента = 0;

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ДоговорыКонтрагентов.Код
|ИЗ
| Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
|ГДЕ
| ДоговорыКонтрагентов.Владелец = &Владелец";

Запрос.УстановитьПараметр("Владелец", Контрагент);

Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();

Пока Выборка.Следующий() Цикл
КоличествоДоговоровКонтрагента = КоличествоДоговоровКонтрагента + 1;
КонецЦикла;

Возврат КоличествоДоговоровКонтрагента;
КонецФункции

На мой взгляд, это как-то громоздко и коряво. Подскажите способ по-лучше.

Besart

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

Процедура ПриЗаписи(Отказ)
Если ЭтотОбъект.ДополнительныеСвойства.Новый Тогда
//Ваш код
КонецЕсли;
КонецПроцедуры

Процедура ПередЗаписью(Отказ)
ЭтотОбъект.ДополнительныеСвойства.Вставить("Новый", ЭтоНовый());
КонецПроцедуры

Maxx79


Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск