Имя: Пароль:
1C
1С v8
Копирование элементов справочника номенклатура
,
0 Нечай
 
15.03.17
11:57
Всем привет. Подскажите пожалуйста.
Необходимо при копировании элемента справочника «Номенклатура», чтобы пользователю задавался вопрос о необходимости скопировать спецификацию, после чего если нужно скопировать он выбирал какую спецификацию копировать. Также задавался вопрос какое количество копий.
1 Нечай
 
15.03.17
11:59
Конфа УПП.
2 Мимохожий Однако
 
15.03.17
12:01
Посмотри обработку события при вводе нового
3 aka AMIGO
 
15.03.17
12:01
Свою обработку не пробовал писать?
4 Нечай
 
15.03.17
12:07
Про обработку не думал, как мне подсказали нужно писать на самой форме "Номенклатуры,  на форме списка или на форме элемента". Типа найти процедуру которая отвечает за копирование и там писать. Я такую процедуру не нашел, а нашел только событие перед началом добавления, начал играться, вот что написал. Но это срабатывает именно когда я в списке номенклатур нажимаю скопировать правой кнопкой. А другими способами не срабатывает.    
    Процедура СписокПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, ЭтоГруппа)
        Если Копирование = Истина Тогда
        
        Ответ = Вопрос("Необходимо ли скопировать спецификацию?",
        РежимДиалогаВопрос.ДаНет,
        0, КодВозвратаДиалога.Нет);

        Если Ответ = КодВозвратаДиалога.Да Тогда
            Сообщить("Отработало");
            ФормаОбъекта = Справочники.СпецификацииНоменклатуры.ПолучитьФорму("ФормаСписка");
            ФормаОбъекта.Открыть();
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры
5 Нечай
 
15.03.17
15:01
Ребят ну что все на этом подсказки закончились?
6 Волшебник
 
модератор
15.03.17
15:02
Процедура ПриОткрытии модуля формы
Если ЭтоНовый() Тогда
7 Нечай
 
15.03.17
15:10
Хорошо, теперь форма СпецификацииНоменклатуры открывается где бы я не копировал, как мне теперь сделать отбор, чтобы открывались спецификации именно по той номенклатуре которую я и копирую. И как сделать, чтобы можно было сделать несколько копии, как я и писал выше.
Спасибо)
8 ДемонМаксвелла
 
15.03.17
15:16
(0) вообще это правильно сделать обработкой. Выбирается номенклатура, заполняется основная спецификация (можно выбрать и другую). По нажатию одной кнопочки копируется номенклатура. По нажатию другой кнопки - спецификация.

Там же логично и копирование тех. карты сделать, если такое надо.
9 Timon1405
 
15.03.17
15:33
(0) в модуле объекта нажмите процедуры и функции - там будет "Процедура ПриКопировании(ОбъектКопирования)". делайте там что хотите
10 Нечай
 
15.03.17
16:41
Вооот Timon это то что я хотел. Спасибо.
А как мне сделать отбор по спецификации, чтобы в списке были только те спецификации которые относятся к той номенклатуре которую я и копирую.
11 Михаил Козлов
 
15.03.17
17:29
(10) Фильтр установить.
12 sidalexsandr
 
15.03.17
17:44
(10) Передать параметры перед открытием.
13 Нечай
 
05.04.17
15:14
Вот так сделал. Создал новую форму, и кнопку на форме списка номенклатуры. Спасибо кто помогал.
&НаКлиенте
Процедура СкопироватьНоменклатуру(Команда)
    
    Если НЕ ЗначениеЗаполнено(Спецификация) Тогда
        Предупреждение("Не выбрана спецификация. Копирование невозможно!");
        Возврат;
    КонецЕсли;
    
    НоваяНом = Номенклатура.Ссылка;
                                  
    Для ТекущийНомер = 1 По Количество Цикл

        КопияНом = НоваяНом.Скопировать();
        КопияНом.Записать();    

        КопияЕдХран = НоваяНом.ЕдиницаХраненияОстатков.Скопировать();
        КопияЕдХран.Владелец = КопияНом.Ссылка;
        КопияЕдХран.Записать();
        
        Если НоваяНом.ЕдиницаХраненияОстатков <> НоваяНом.ЕдиницаДляОтчетов Тогда
            КопияЕдОтч = НоваяНом.ЕдиницаДляОтчетов.Скопировать();
            КопияЕдОтч.Владелец = КопияНом.Ссылка;
            КопияЕдОтч.Записать();
        КонецЕсли;    
            
            
        КопияНом.ЕдиницаХраненияОстатков = КопияЕдХран.Ссылка;
        Если НоваяНом.ЕдиницаХраненияОстатков <> НоваяНом.ЕдиницаДляОтчетов Тогда
            КопияНом.ЕдиницаДляОтчетов = КопияЕдОтч.Ссылка;
        Иначе    
            КопияНом.ЕдиницаДляОтчетов = КопияЕдХран.Ссылка;
        КонецЕсли;    
        КопияНом.Записать();    
        
        Если ЗначениеЗаполнено(Спецификация) Тогда
            НоваяСпец = Спецификация.Ссылка;
            КопияСпец = НоваяСпец.Скопировать();
            КопияСпец.ВыходныеИзделия.Очистить();
            Стр = КопияСпец.ВыходныеИзделия.Добавить();
            Стр.Номенклатура = КопияНом.Ссылка;
            Стр.ЕдиницаИзмерения = КопияНом.Ссылка.ЕдиницаХраненияОстатков;
            Стр.Количество = 1;
            Стр.Кратность = 1;
            
            КопияСпец.Записать();
        КонецЕсли;
        
                
    КонецЦикла;
        
КонецПроцедуры

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    Номенклатура = Параметры.СсылкаНом;
    
КонецПроцедуры

&НаКлиенте
Процедура СпецификацияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    
    СтандартнаяОбработка    = Ложь;
    ФормаВыбораСпецификации = Справочники.СпецификацииНоменклатуры.ПолучитьФормуВыбора(, Элемент);

    ФормаВыбораСпецификации.Отбор.СпецификацииИзделийПоНоменклатуре.ВидСравнения  = ВидСравнения.Равно;
    ФормаВыбораСпецификации.Отбор.СпецификацииИзделийПоНоменклатуре.Значение      = Номенклатура;
    ФормаВыбораСпецификации.Отбор.СпецификацииИзделийПоНоменклатуре.Использование = Истина;
    
    ФормаВыбораСпецификации.Отбор.Активная.Установить(Истина);

    ФормаВыбораСпецификации.РежимВыбора                  = Истина;

    ФормаВыбораСпецификации.Открыть();

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