Имя: Пароль:
1C
 
Копирование элемента справочника
0 dragonIMV
 
30.09.09
14:25
Заранее извиняюсь за путанное объяснение, ну не умею я с места мысли складно излагать))))

Есть справочник в 1С 8.1 УПП (свой собственный справочник). Название и смысле его не суть, но для удобство название  - "Коллективные договоры".

Цель - при копировании элемента справочника надо скопировать не только все реквизиты (что делается по умолчанию, кроме номера и даты), но и скопировать кое какие записи в регистре сведений (тоже свой доработанный). Причем необходимо в регистре записывать ссылку на элемент справочника "Коллективные договоры".

Если использовать процедуру "При копировании" в модуле справочника "Коллективные договоры",то на момент копирования ссылки на новый элемент не существует. Т.е. приходится прям в процедуре копирования писать "ЭтотОбъект.Записать()".
После этого я могу использовать "ЭтотОбъект.Ссылка" в процедуре копирования.

Но  при этом происходит ошибка следующая. Он нормально делает записи в регистре сведений и открывает форму (в которой есть "табличная часть" ссылающаяся как раз на наши записи в регистре). И все нормально типо заполнено. Но, форма как будто считает что она открыта от нового документа, а в системе уже есть записанный объект. И соответственно с этой открытой формой я ничего не смогу сделать. Ни сохранить ничего. Приходится выходить из формы не сохраняясь, в списке справочника открывать новый созданный элемент и уже с ним делать что захочешь.

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

Привожу саму процедуру "При копировании":

Режим = РежимДиалогаВопрос.ДаНет;
   Ответ = Вопрос("Если при копировании коллективного договора необходимо скопировать табличную часть с командой, то нажмите Да. Но необходимо помнить, что в этом случае новый объект будет сразу же сохранен в системе.", Режим, 0);
   Если Ответ = КодВозвратаДиалога.Да Тогда
       
       ЭтотОбъект.Записать();
       Запрос = Новый Запрос;
       Запрос.Текст=
       "ВЫБРАТЬ
       |    ВИПУчастникиПроектов.АйТиКоллективныеДоговоры,
       |    ВИПУчастникиПроектов.УчастникПроекта,
       |    ВИПУчастникиПроектов.Роль,
       |    ВИПУчастникиПроектов.Процент,
       |    ВИПУчастникиПроектов.Сумма,
       |    ВИПУчастникиПроектов.ДопПроцент,
       |    ВИПУчастникиПроектов.ДопСумма,
       |    ВИПУчастникиПроектов.ВремяУчастия,
       |    ВИПУчастникиПроектов.ВремяУчастия2,
       |    ВИПУчастникиПроектов.Примечание
       |ИЗ
       |    РегистрСведений.ВИПУчастникиПроектов КАК ВИПУчастникиПроектов
       |ГДЕ
       |    ВИПУчастникиПроектов.АйТиКоллективныеДоговоры = &Ссылка";
       Запрос.УстановитьПараметр("Ссылка", ОбъектКопирования.Ссылка);
       РЗ = Запрос.Выполнить().Выбрать();
       Пока РЗ.Следующий() Цикл
           Рег = РегистрыСведений.ВИПУчастникиПроектов.СоздатьНаборЗаписей();
           Рег.Отбор.АйТиКоллективныеДоговоры.Установить(ЭтотОбъект.Ссылка);
           Рег.Прочитать();
           Рег.Записать();
           Строка = Рег.Добавить();
           Строка.АйТиКоллективныеДоговоры = ЭтотОбъект.Ссылка;
           Строка.УчастникПроекта = РЗ.УчастникПроекта;
           Строка.Роль = РЗ.Роль;
           Строка.Процент = РЗ.Процент;
           Строка.Сумма = РЗ.Сумма;
           Строка.ДопПроцент = РЗ.ДопПроцент;
           Строка.ДопСумма = РЗ.ДопСумма;
           Строка.ВремяУчастия = РЗ.ВремяУчастия;
           Строка.ВремяУчастия2 = РЗ.ВремяУчастия2;
           Рег.Записать();
       КонецЦикла;    
   КонецЕсли;
1 ТелепатБот
 
гуру
30.09.09
14:25
2 dragonIMV
 
30.09.09
14:28
по поводу того что регистр в цикле записывается и открывается не обращайте внимания...потом нормально все сделаю)))
3 73
 
30.09.09
14:31
4 dragonIMV
 
30.09.09
14:33
т.е. как мне надо чтобы копировался например элемент Номенклатуры и чтоб в новом объетке создались точто такие же штрих кода как у объекта копирования..
5 Andry888
 
30.09.09
14:36
(0) может отказаться от стандартного копирования...программно копируй, записывай, открывай форму ну и т.п.
6 dragonIMV
 
30.09.09
14:41
(5) а как отказаться от стандартного копирования?
я что-то не вижу нигде процедуры копирования, в самом модуле например номенклатуры...

как мне изначально перехватить нажатие кнопки Копировать?
если подпиской на событие, то как отменить стандатное открывание формы?
7 Andry888
 
30.09.09
14:45
(6) Не делаешь свою кнопку копирования, и в процедуре обработки нажатия используешь метод Копировать() (ЭтотОбъект.Копировать()), который возвращает новый объект... а дальше верти им как хочешь
8 dragonIMV
 
30.09.09
14:53
ладно, так и буду делать
9 dragonIMV
 
30.09.09
14:57
сеньк за помощь кстати
10 toys
 
30.09.09
15:01
(0) смотри ПолучитьСсылкунового() и параметр "СтандартнаяОбработка" события копирования