Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

Конвертация данных. Как создать единицу измерения

Конвертация данных. Как создать единицу измерения
Я
   olo_lo1
 
25.01.13 - 01:25
Переношу данные по справочнику Номенклатура.
Как сделать так, что бы если у номенклатуры не выбрана единица измерения она создавалась автоматом при переносе по владельцу - элементу номенклатуры..
 
 
   sanja26
 
1 - 25.01.13 - 01:52
Какая-то определенная что-ли?
ПриЗагрузке можно или послеЗагрузки.
Объект.ЕдиницаИзмерения = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию

Если Единицы измерения подчиненный справочник, а не просто реквизит, то надо каждый раз создавать тут же новую
   olo_lo1
 
2 - 25.01.13 - 08:47
да, подчиненный, каждый раз создавать штуки
   ks_83
 
3 - 25.01.13 - 08:52
Можно после окончательной загрузки по всей загруженной номенклатуре пробежаться и насоздавать эти единицы. Так быстрее работать будет.
   olo_lo1
 
4 - 25.01.13 - 08:53
(3) класс, а можно описать как это сделать
   fenixx
 
5 - 25.01.13 - 08:55
в ПКО справочника "Номенклатура" в обработчике "После загрузки" добавь проверку на существования единицы измерения для Объекта. Если не существует - создаешь
   olo_lo1
 
6 - 25.01.13 - 08:57
(5) я в конвертации не силен, напиши пож пример
   fenixx
 
7 - 25.01.13 - 09:04
(6) Извини, дружище, моё дело - стратегия. Тут объяснения полдня занять могут, в зависимости от твоей не сильности в КД. Ищи где правила конвертации объектов (ПКО), где там соответствующий обработчик. Там хелп есть, посмотри примеры из типовых конвертиций. Успехов )
   vitek89
 
8 - 25.01.13 - 09:07
(0) А они разве не создаются? Там же есть такая штука - поля поиска. Если данные не находятся в приемнике по этим полям, то создается новый элемент
   cw014
 
9 - 25.01.13 - 09:07
(6) Никто ничего просто так писать не будет
   Deamonicus
 
10 - 25.01.13 - 09:12
после загрузки добавляешь:

Если НЕ ЗначениеЗаполнено(Объект.ЕдиницаИзмерения) Тогда
    НовЕд = Справочники.ЕдиницыИзмерения.СоздатьЭлемент();
    
   //тут далее заполняешь реквизиты...
 
    НовЕд.Наименование = .....
    НовЕд.Владелец = Объект.Ссылка;
    НовЕд.Записать();    
    Объект = НовЕд.Ссылка;

КонецЕсли;
 
 Рекламное место пустует
   olo_lo1
 
11 - 25.01.13 - 11:37
(10) спасибо!
   olo_lo1
 
12 - 25.01.13 - 11:44
КД - вообще крутейшая вещь, интересно кто ее разработал...
   olo_lo1
 
13 - 25.01.13 - 11:44
и придумал
   cw014
 
14 - 25.01.13 - 11:46
(12) Ее никто не разработал. Это инопланетная технология, привезенная на с альфы центавра, и внедренная людьми в черном в массы
   olo_lo1
 
15 - 25.01.13 - 11:59
(10) хотел уточнить - а для чего вот эта последняя строчка
Объект = НовЕд.Ссылка;
   Redkiy
 
16 - 25.01.13 - 12:05
(15) найдешь обработчик, куда этот код вставить, прочитаешь хэлп по обработчику и все поймешь (надеюсь)
   ДемонМаксвелла
 
17 - 25.01.13 - 12:06
Объект.ЕдиницаИзмерения = НовЕд.Ссылка;
   olo_lo1
 
18 - 25.01.13 - 13:22
Вот что пишет при загрузке ..
Ошибка при загрузке данных: {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(4842)}: Ошибка записи объекта
    ТипОбъекта             =  Номенклатура
    Объект                 =  шт
    ОписаниеОшибки         =  Метод объекта не обнаружен (Записать)
    ПозицияМодуля          =  Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(4835)
   hhhh
 
19 - 25.01.13 - 13:31
(18)

Если НЕ Объект.ЭтоГруппа Тогда
Если НЕ ЗначениеЗаполнено(Объект.ЕдиницаИзмерения) Тогда
    НовЕд = Справочники.ЕдиницыИзмерения.СоздатьЭлемент();
    
   //тут далее заполняешь реквизиты...
 
 
    НовЕд.Наименование = .....
    НовЕд.Владелец = Объект.Ссылка;
    НовЕд.Записать();    
    Объект = НовЕд.Ссылка;

КонецЕсли;
КонецЕсли;
   olo_lo1
 
20 - 25.01.13 - 13:39
(19) теперь вот это
Ошибка при загрузке данных: {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(1620)}: Ошибка в обработчике события ПослеЗагрузкиОбъекта
    ИмяПКО                 =  Номенклатура
    ТипОбъекта             =  Номенклатура
    Объект                 =  моя номенклатура1
    Обработчик             =  ПослеЗагрузкиОбъекта
    ОписаниеОшибки         =  Ошибка при вызове метода контекста (Записать): Значение поля "Номенклатура" не заполнено или заполнено неверно
    ПозицияМодуля          =  (8)
    КодСообщения           =  21
   Naumov
 
21 - 25.01.13 - 13:48
Ребята, а не учили перед созданием подчиненных объектов записывать прежде владельца?
   Naumov
 
22 - 25.01.13 - 13:52
вариантов решения этой задачи несколько:
1) после загрузки номенклатуры записывать подчиненный, как тут предлагают.
2) для этапа выгрузки создать ПКО, которое будет подчиненный объект выгружать. При загрузке все самой загрузится.
   olo_lo1
 
23 - 25.01.13 - 13:57
(22) так это же в предопред процедуре ПОСЛЕЗАГРУЗКИОБЪЕКТА прописывается..
   Йохохо
 
24 - 25.01.13 - 14:03
(18)(20) похоже ты упорно пихаешь в Справочник.ЕдиницыИзмерения в ПКО Номенклатура
   olo_lo1
 
25 - 25.01.13 - 14:04
(24) ну да..я не понимаю зачем создавать новый ПКО номенклатура
   Naumov
 
26 - 25.01.13 - 14:06
(23) А описание обработчика почитай, чтобы понять когда он вызывается.
   zladenuw
 
27 - 25.01.13 - 14:10
(23) да и все работает.

Попытка    
    Если НЕ Объект.ЭтоГруппа Тогда
 //        Объект.СтавкаНДС = Перечисления.СтавкиНДС.НДС20;
 
        Объект.ВидНоменклатуры=  Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Услуга");
Если ОбъектНайден или НЕ ЗначениеЗаполнено(Объект.БазоваяЕдиницаИзмерения) Тогда
        Объект.БазоваяЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("н/год").Ссылка;
        Объект.Записать();
КонецЕсли;        
        
        СпрЕД = Справочники.ЕдиницыИзмерения;
        НайденЕд = СпрЕд.НайтипоНаименованию("н/год",,,Объект.Ссылка).Ссылка;
    Если СпрЕД.пустаяСсылка() = НайденЕд Тогда
        Единица = Справочники.ЕдиницыИзмерения.СоздатьЭлемент();
        Единица.Наименование = "н/год";
        Единица.Коэффициент = 1;
        Единица.ЕдиницаПоКлассификатору = Объект.БазоваяЕдиницаИзмерения;
        Единица.Владелец = Объект.Ссылка;
        Единица.Записать();
        Ед = Единица.Ссылка;
    Иначе
        Ед = НайденЕд;
    КонецЕсли;
 //    
 
//    
    Если ОбъектНайден Тогда
        Если НЕ ЗначениеЗаполнено(Объект.ЕдиницаДляОтчетов) Тогда
            Объект.ЕдиницаДляОтчетов = Ед;
            Объект.ЕдиницаИзмеренияМест = Ед;
            Объект.ЕдиницаХраненияОстатков = Ед;
            Объект.Записать();
       //Иначе
 
           //НеЗамещатьОбъект = Истина; 
 
        КонецЕсли;        
    иначе
        Объект.ЕдиницаДляОтчетов = Ед;
        Объект.ЕдиницаИзмеренияМест = Ед;
        Объект.ЕдиницаХраненияОстатков = Ед;
        Объект.Записать();
    КонецЕсли;    
 //            
 
    КонецЕсли;
Исключение
 // //ОписаниеОшибки();
 
КонецПопытки
   olo_lo1
 
28 - 25.01.13 - 14:17
(27) судя по всему либо у тебя 2 ПКО на номенклатуре либо он находит нужную номенклатуру и к ней уже подтягивает ед изм, иначе работать это не должно..
   Йохохо
 
29 - 25.01.13 - 14:27
(25) эм, всё классно, и код рабочий, и вообще
но по (18) и (20) у тебя в ПослеЗагрузкиОбъекта ПКО Номенклатура Объект СправочникОбъект.ЕдиницыИзмерения. я не знаю, как еще пояснить мою догадку, она слишком бредовая
   Naumov
 
30 - 25.01.13 - 21:10
(28) Это почему же не должно?
   olo_lo1
 
31 - 25.01.13 - 21:20
(30) так вы сами себе тогда противоречите в (21)
   olo_lo1
 
32 - 25.01.13 - 21:24
После загрузки
Условия возникновения события:
Событие выполняется после прочтения и установки атрибутов объекта из файла, но до его записи в информационную базу. Возможна модификация загруженного объекта.

Соответственно создаться подчиненный объект по владкльцу как в 27 может только если владелец уже есть в базе. Видимо это работает если он в 22 раза конвертацию делает.
   Naumov
 
33 - 26.01.13 - 02:07
(32) в (27) он записывает номенклатуру (в событии после загрузки( делать это не кто не запрещает)), а потом создает подчиненный элемент.
Просто тебе перед применением твоего алгоритма создания элемента нужно просто ставить
Объект.Записать()
 
 


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует