новое событие
Информационный поток
Задания вакансии материалы разработки сообщения форума

Копирование сведений для нового объекта

  • Добавить свою публикацию
  • для этого требуется регистрация

Возможно, я не открою ничего нового, но кому-то мой совет может пригодиться. Часто при создании нового объекта (например, элемента справочника "Номенклатура"), при попытке установить значения каких-то свойств, появляется надпись типа "Для выполнения данной операции необходимо записать элемент". Лично меня это немного напрягает. Предположим, что у нас есть регистр сведений «Цены продажи» с измерением «Товар». При открытии формы элемента цены из этого регистра отображаются в списке на форме. Пользователь хочет, чтобы при копировании элемента (по F9), цены копируемого элемента сразу появились бы на форме нового. Казалось бы, для этого надо просто скопировать записи регистра для старого элемента и указать в них ссылку нового. Но загвоздка в том, что новый элемент еще не записан, и следовательно ссылки для него не существует. Конечно, можно предварительно записать объект, а потом открыть форму, но при таком подходе при каждом нажатии кнопки «Добавить копированием» элементы справочника будут добавляться, даже если пользователь закроет форму редактирование без сохранения. Выход один – использовать метод УстановитьСсылкуНового() для элемента, созданного копированием. Ссылка для созданного, но  еще не записанного объекта будет возвращена методом ПолучитьСсылкуНового().

Вот пример процедуры модуля объекта справочника номенклатура:


Процедура ПриКопировании(ОбъектКопирования)
	если ЭтоГруппа тогда Возврат; КонецЕсли;
	УстановитьСсылкуНового(Справочники.Номенклатура.ПолучитьСсылку());
	запрос  = новый запрос("ВЫБРАТЬ
			|	Цена,
			|	Категория
			|ИЗ
			|	РегистрСведений.ЦеныПродажи.СрезПоследних(,товар = &товар) ");
	запрос.УстановитьПараметр("товар",ОбъектКопирования.ссылка);
	выб =  запрос.Выполнить().Выбрать();
	пока выб.Следующий() цикл               
		РегЦены 		   = РегистрыСведений.ЦеныПродажи.СоздатьМенеджерЗаписи();
		РегЦены.Период     = НачалоДня( ТекущаяДата());
		РегЦены.Товар      = ПолучитьСсылкуНового();
		РегЦены.Категория  = выб.Категория;
		РегЦены.Цена       = выб.Цена;
		РегЦены.Автор      = ИмяПользователя(); 
		РегЦены.Записать(истина);
	конецЦикла;
 
КонецПроцедуры
 
0
Читайте также
Резервное копирование информационной базы при использовании MSSQL сервера.
Как организовать резервное копирование информационной базы 1с
Восстановление потерянных реквизитов документов v 7.7
В ранее записанных и проведённых документах пропали некоторые реквизиты. В отчётах полный бардак. Как я решил эту проблему.
Программирование 1с
Программирование 1С это постоянный анализ действующих процессов, подбор методов для решения проблем
Разработки
Групповой поиск и замена значений
Помощь в поиске и замене дублей в справочниках
Установка Изображений Номенклатуры
Обработка, позволяющая добавлять картинки к элементам номенклатуры и для УТ 10.3
Заполнения предоплат и отгрузок в документах: Поступления товаров, реализациях и платежках
Обработка по автоматическому заполнению предоплат и авансов в документах
Еще от автора
≡ к списку статей