helpf.pro
Регистрация

v8.2 УП: Новый элемент копированием текущего

silv
18.11.2013 23:46Прочитано: 12087
Господа знатоки помогите пожалуйста.
1с 8.2 как программно создать новый элемент копированием текущего.
Нужен код программы.
Yandex
Возможно, вас также заинтересует
Реклама на портале
E_Migachev
19.11.2013 11:32Ответ № 1
(0) silv, попробуй это:
Код 1C v 8.2 УП
 &НаКлиенте 
Процедура Команда1(Команда)
НоваяСсылка = ПолучитьСсылку(Объект.Ссылка);
ПараметрыФормы = Новый Структура("Ключ", НоваяСсылка);
Форма = ПолучитьФорму("Справочник.Товары.ФормаОбъекта", ПараметрыФормы);
Форма.Открыть();
КонецПроцедуры

&НаСервере
Функция ПолучитьСсылку(КопируемаяСсылка)
Копия = КопируемаяСсылка.Скопировать();
НоваяСсылка = Новый(Тип("СправочникСсылка.Товары"));
Значение = Копия.УстановитьСсылкуНового(НоваяСсылка);
Возврат Значение;
КонецФункции
E_Migachev
19.11.2013 11:34Ответ № 2
+ код на 7.7 на всякий случай:
Код 1C v 7.x
 
Процедура КопироватьЭлементСправочника(Конт) Экспорт
//*****
Перем К;
//*****
Если Конт.Выбран()=0 Тогда
Предупреждение("Копировать можно только сохраненный элемент");
Возврат;
КонецЕсли;

Если (Конт.ПометкаУдаления()=1) тогда
Предупреждение("Элемент помечен на удаление");
Возврат;
КонецЕсли;

ИмяСправочника = Строка(Конт.Вид());
Справ = СоздатьОбъект("Справочник."+ИмяСправочника);
Справ.Новый();

Если Конт.Уровень()>1 Тогда
Справ.Родитель = Конт.Родитель;
КонецЕсли;

Справ.Наименование=Конт.Наименование+"1";
Для К=1 to Метаданные.Справочник(ИмяСправочника).Реквизит() Цикл
Если Метаданные.Справочник(ИмяСправочника).Реквизит(К).Периодический =0 Тогда
ИмяРеквизита=Строка(Метаданные.Справочник(ИмяСправочника).Реквизит(К).Идентификатор);
Справ.УстановитьАтрибут(ИмяРеквизита,Конт.ПолучитьАтрибут(ИмяРеквизита));
КонецЕсли;
КонецЦикла;
Справ.Записать();

Образец = Конт.ТекущийЭлемент();
Копия=Справ.ТекущийЭлемент();

П = СоздатьОбъект("Периодический");
ПКоп = СоздатьОбъект("Периодический");

Тмп=Вопрос("Копировать историю периодических реквизитов?",4);

Для К=1 to Метаданные.Справочник(ИмяСправочника).Реквизит() Цикл
Если Метаданные.Справочник(ИмяСправочника).Реквизит(К).Периодический = 0 Тогда
Продолжить;
КонецЕсли;

ИмяРеквизита=Строка(Метаданные.Справочник(ИмяСправочника).Реквизит(К).Идентификатор);
ТипЗнач=Метаданные.Справочник(ИмяСправочника).Реквизит(К).Тип;
ТочнЗнач=Метаданные.Справочник(ИмяСправочника).Реквизит(К).Точность;
ДлинаЗнач=Метаданные.Справочник(ИмяСправочника).Реквизит(К).Длина;


П.ИспользоватьОбъект(ИмяРеквизита, Образец);
ПКоп.ИспользоватьОбъект(ИмяРеквизита, Копия);

П.ВыбратьЗначения();
Пока П.ПолучитьЗначение() = 1 Цикл
Если Тмп = 6 Тогда
ПКоп.ДатаЗнач = П.ДатаЗнач;
ПКоп.Значение = П.Значение;
Иначе
ПКоп.ДатаЗнач = '01.01.80';
ПКоп.Значение = П.ЗначениеНаДату(РабочаяДата());
КонецЕсли;
Если ТипЗнач <> "" Тогда
ПКоп.НазначитьТип(ТипЗнач,ДлинаЗнач,ТочнЗнач);
КонецЕсли;
ПКоп.Записать();
КонецЦикла;
КонецЦикла;

Тмп=Вопрос("Копировать элементы из подчиненных справочников?",4);
Если Тмп = 6 Тогда
глКопироватьПодчиненныеСправочники(Образец, Копия ,1);
КонецЕсли;

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

// ИЛИ проще
Процедура КопироватьЭлементСправочника(Конт, групппа) Экспорт
Перем К;
ИмяСправочника = Строка(Конт.Вид());
Если Конт.Выбран()=0 Тогда
Предупреждение("Копировать можно только сохраненный элемент");
Возврат;
КонецЕсли;
Если (Конт.ПометкаУдаления()=1) тогда
Предупреждение("Элемент помечен на удаление");
Возврат;
КонецЕсли;
Справ = СоздатьОбъект("Справочник."+Строка(Конт.Вид()));
Справ.Новый();
Справ.Наименование=Конт.Наименование;
Для К=1 to Метаданные.Справочник(ИмяСправочника).Реквизит() Цикл
Если Метаданные.Справочник(ИмяСправочника).Реквизит(К).Периодический =0 Тогда
ИмяРеквизита=Строка(Метаданные.Справочник(ИмяСправочника).Реквизит(К).Идентификатор);
Справ.УстановитьАтрибут(ИмяРеквизита,Конт.ПолучитьАтрибут(ИмяРеквизита));
КонецЕсли;
КонецЦикла;
Справ.Родитель=Группа;
Справ.УстановитьНовыйКод();
Справ.Записать();
Образец = Конт.ТекущийЭлемент();
Копия=Справ.ТекущийЭлемент();
КонецПроцедуры
silv
19.11.2013 13:36Ответ № 3
E_Migachev Спасибо только это наверно для формы элемента а мне надо для формы списка. в 8.2. К примеру я создаю новый документ на основание другого. Спасибо.
E_Migachev
21.11.2013 12:52Ответ № 4
(3) silv, УФ или Обычные формы?
silv
26.11.2013 23:47Ответ № 5
E_Migachev УФ
Пожалуйста если знаите.
Изменено 26.11.13 23:48:25
JoCo
14.12.2015 16:37Ответ № 6

УФ ОткрытьФорму("Документ.ТвойДокумент.ФормаОбъекта",Новый Структура("ЗначениеКопирования", ТвояСсылка), ЭтаФорма);

Подсказка: Для быстрого поиска ответов - используйте 'Поиск'
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.