Версия для печати темы (https://pro1c.org.ua/index.php?s=2af0c7518620cb709be4aea1ec22d8cb&showtopic=46516)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Ошибка при создании новой номенклатуры программно

Автор: leikar 27.06.18, 13:04

Цитата

1С:Предприятие 8.3 (8.3.10.2667)
"Управление производственным предприятием для Украины", редакция 1.3 (1.3.55.1) (http://1c.ua/v8/RegionalSolutions_UA_UPP.php)
Copyright © Molenari OU, 2017-2018. All rights reserved.

Добрый день, я новичек совсем, дали задание доделать внешню обработку выгрузки приходных накладных из медок путем медовой стыковки. Все вроде как работает, заполняет и создает документ, но единственный момент - нет единиц измерения в документе, захожу в номенклатуру - позиции созданы, базовая ед. измерения заполнена (Пример на картинке по ссылке http://pro1c.org.ua/redirect.php?https://drive.google.com/file/d/1oLb1-t5EmqoIub0WMPVH7L9ynhv4OmhA/view)
Если нажать кнопку "ОК" номенклатура проведется и теперь будет в документе отображаться ед. зимерения как должно, но как это сделать программно? Вот мой код
Процедура СозданиеНоменклатуры(ДатаДокаВх,  НомерДокаВх,  НоменклатураОригинал,  НаОсновании,  ЕИОригинал,  НомСтавкаНДС, ВидНоменклатуры,  НоменклатураАртикул)
//бутко
    ГруппаМедка = Справочники.Номенклатура.НайтиПоКоду("ШИЙ00019795");
    Если НЕ ЗначениеЗаполнено(ГруппаМедка) тогда
        ГруппаОбъект  =  Справочники.Номенклатура.СоздатьГруппу();
        ГруппаОбъект.Наименование  =  "Auto_MEDoc";  
        ГруппаОбъект.Код = "MED";
        ГруппаОбъект.Записать();
    КонецЕсли;
    НоменклатураМедка = Справочники.Номенклатура.СоздатьЭлемент();
    
    НоменклатураМедка.Родитель = Справочники.Номенклатура.НайтиПоКоду("ШИЙ00019795");
    НоменклатураМедка.Наименование =  НоменклатураОригинал;
    НоменклатураМедка.НаименованиеПолное =  НоменклатураОригинал;
    НоменклатураМедка.ЕдиницаДляОтчетов= Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию(ЕИОригинал);
    
        
    
    НоменклатураМедка.Артикул=  НоменклатураАртикул;
    
    НоменклатураМедка.Комментарий =  Строка(НСтр("ru = 'Создана M.E.Doc IS на основании ';uk = 'Створена M.E.Doc IS на підставі '") +
    НаОсновании + Строка(НомерДокаВх) + НСтр("ru = 'от ';uk = 'від '") + ДатаДокаВх);
    //Если ВидНоменклатуры = "Запчасть" Тогда
    //НоменклатураМедка. Запчасть = Истина;
    //КонецЕсли;
    ЕдИзмНоменклатуры  = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию(ЕИОригинал);

    Если ЗначениеЗаполнено(ЕдИзмНоменклатуры) Тогда

        НоменклатураМедка.БазоваяЕдиницаИзмерения =  ЕдИзмНоменклатуры;

    КонецЕсли;
    НоменклатураМедка.СтавкаНДС = НомСтавкаНДС;
                        
    Если ИмяБазы="УТ" или ИмяБазы="УТП" или ИмяБазы="УПП" Тогда
        НоменклатураМедка.ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоНаименованию(ВидНоменклатуры);
    КонецЕсли;        Сообщить(1);
    НоменклатураМедка.Записать();
       Сообщить(2);
        ЕИНовая=Справочники.ЕдиницыИзмерения.СоздатьЭлемент();  Сообщить(3);
                            
              Сообщить(4);    
        Врем= Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию(ЕИОригинал);
        Сообщить(Врем.Код);
        ЕСЛИ НЕ Врем.Пустая()Тогда           Сообщить(5);  
           ЕИНовая.ЕдиницаПоКлассификатору = Врем;     Сообщить(6);
                
        ЕИНовая.Коэффициент="1";                            Сообщить("6.5");
        ЕИНовая.Владелец=  НоменклатураМедка;                  Сообщить(7);

        ЕИНовая.Записать();                            Сообщить(8);
        //НоменклатураМедка.ЕдиницаДляОтчетов=    ЕИНовая;      Сообщить(8);
    //    НоменклатураМедка.ЕдиницаХраненияОстатков=    ЕИНовая;
    //    НоменклатураМедка.БазоваяЕдиницаИзмерения=    ЕИНовая;     Сообщить(9);
        
        НоменклатураМедка.Записать();             Сообщить(10);
        КонецЕсли;
                      Сообщить(11);
КонецПроцедуры


Пробовал уже разные способы, но когда я создаю ед. измерения вручную(всмысле программно, просто не только пишу создать номенклатуру, но и создать ед. измерения и присвоить ее номенклатуре) выдает ошибку что не все сделано, но что "это" не все я не знаю. Если есть другой способ более подходящий для данного случая, очень прошу подсказать Вас. Большое спасибо!

Автор: Bernet 27.06.18, 13:07

leikar @ Сегодня, 14:04 * ,
Найдите место, где создается документ поступления и заполняется таб. часть "Товары", там должно быть заполнение единицы измерения в строке таб. части. Если такой строчки нет, то можно добавить.

Автор: leikar 27.06.18, 13:47



[Решено]

Процедура СозданиеНоменклатуры(ДатаДокаВх,  НомерДокаВх,  НоменклатураОригинал,  НаОсновании,  ЕИОригинал,  НомСтавкаНДС, ВидНоменклатуры,  НоменклатураАртикул)
//Юля
    ГруппаМедка = Справочники.Номенклатура.НайтиПоКоду("ШИЙ00019795");
    Если НЕ ЗначениеЗаполнено(ГруппаМедка) тогда
        ГруппаМедка  =  Справочники.Номенклатура.СоздатьГруппу();
        ГруппаМедка.Наименование  =  "Auto_MEDoc";  
        ГруппаМедка.Код = "MED";
        ГруппаМедка.Записать();
    КонецЕсли;
    НоменклатураМедка = Справочники.Номенклатура.СоздатьЭлемент();
    
    НоменклатураМедка.Родитель = ГруппаМедка;
    НоменклатураМедка.Наименование =  НоменклатураОригинал;
    НоменклатураМедка.НаименованиеПолное =  НоменклатураОригинал;
    НоменклатураМедка.ЕдиницаДляОтчетов= Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию(ЕИОригинал);
    НоменклатураМедка.Артикул=  НоменклатураАртикул;
    НоменклатураМедка.Комментарий =  Строка(НСтр("ru = 'Создана M.E.Doc IS на основании ';uk = 'Створена M.E.Doc IS на підставі '") +
    НаОсновании + Строка(НомерДокаВх) + НСтр("ru = 'от ';uk = 'від '") + ДатаДокаВх);
    НоменклатураМедка.СтавкаНДС = НомСтавкаНДС;
    //НоменклатураМедка.Записать();
    
    //Если ВидНоменклатуры = "Запчасть" Тогда
    //НоменклатураМедка. Запчасть = Истина;
    //КонецЕсли;
                        
    Если ИмяБазы="УТ" или ИмяБазы="УТП" или ИмяБазы="УПП" Тогда
        НоменклатураМедка.ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоНаименованию(ВидНоменклатуры);
    КонецЕсли;        
    НоменклатураМедка.Записать();
Сообщить("НоменклатураМедка");    
Сообщить(НоменклатураМедка);    
Сообщить(НоменклатураМедка.Код);    
    ЕдИзмНоменклатура = Справочники.ЕдиницыИзмерения.СоздатьЭлемент();  Сообщить(3);
    ЕдИзмНоменклатура.Владелец =  НоменклатураМедка.Ссылка;                  Сообщить(5);
    ЕдИзмНоменклатура.Наименование =  ЕИОригинал;                  Сообщить(7);
    ЕдИзмНоменклатура.Коэффициент = 1;                            Сообщить("6.5");
    ЕдИзмКлассификатор  = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию(ЕИОригинал);
Сообщить("ЕдИзмКлассификатор");    
Сообщить(ЕдИзмКлассификатор);    
Сообщить(ЕдИзмКлассификатор.Код);    
       ЕдИзмНоменклатура.ЕдиницаПоКлассификатору = ЕдИзмКлассификатор;     Сообщить(6);
    ЕдИзмНоменклатура.Записать();
Сообщить("ЕдИзмНоменклатура");    
Сообщить(ЕдИзмНоменклатура);    
Сообщить(ЕдИзмНоменклатура.Код);    
    НоменклатураМедка.БазоваяЕдиницаИзмерения =  ЕдИзмКлассификатор;
    НоменклатураМедка.ЕдиницаХраненияОстатков =  ЕдИзмНоменклатура.Ссылка;
    НоменклатураМедка.ЕдиницаДляОтчетов =  ЕдИзмНоменклатура.Ссылка;
    НоменклатураМедка.ЕдиницаИзмеренияМест =  ЕдИзмНоменклатура.Ссылка;
    НоменклатураМедка.Записать();             Сообщить(10);

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

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua