Программно создать номенклатуру в 7.7

Тема в разделе "1C и всё что с ней связано", создана пользователем Спартак, 2 фев 2010.

Статус темы:
Закрыта.
  1. Спартак

    Спартак Well-Known Member

    Регистрация:
    2 май 2009
    Сообщения:
    69
    Симпатии:
    0
    Доброго времени суток!
    Ситуация такая... Переношу номенклатуру из УСН 7.7 в ТиС. Обе хорошо переписаны. Решил написать 2 обработки: 1-я выгружает из УСН в dbf, вторая - загружает из dbf в ТиС. столкнулся с проблемой заполнения базовой единицы измерения. Подскажите, как в 7-ке работать с подчиненными справочниками??
     
  2. KiR

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    даж не знаю что бы посоветовать.. пожалуй почитать ;)
    По идее ведь выбираешь элемент из подчиненного справочника и присваиваешь это значение одному из реквизитов нужного элемента справочника
     
  3. Спартак

    Спартак Well-Known Member

    Регистрация:
    2 май 2009
    Сообщения:
    69
    Симпатии:
    0
    если бы все было так просто...

    ед = СоздатьОбъект ("Справочник.ОКЕИ");
    ед.НайтиПоНаименованию ("шт", 1);
    спр = СоздатьОбъект ("Справочник.Номенклатура");
    спр.Новый ();
    спр.Наименование = "товар";
    спр.БазоваяЕдиница = ед.ТекущийЭлемент ();
    спр.Записать ();

    вот это срабатывает без ошибок, но базовая единица не появляется ;)
     
  4. KiR

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    погляди в отладчике - находится ли ед - может там просто пустое значение.
     
  5. Спартак

    Спартак Well-Known Member

    Регистрация:
    2 май 2009
    Сообщения:
    69
    Симпатии:
    0
    единица находится. а ед лежит ссылка на нее
     
  6. Andruha

    Andruha Гость

    Если спр. Единицы подчинен спр. Номенклатура, тогда надо сначало записать элемент номеклатуры без единицы, а потом уже записать единицу - потому что владельца сначала надо записать, а потом уже подчиненный справочник дергать.
     
  7. Спартак

    Спартак Well-Known Member

    Регистрация:
    2 май 2009
    Сообщения:
    69
    Симпатии:
    0
    Код (Text):
     ед = СоздатьОбъект ("Справочник.ОКЕИ");
    ед.НайтиПоНаименованию ("шт", 1);
    спр = СоздатьОбъект ("Справочник.Номенклатура");
    спр.Новый ();
    спр.Наименование = "вуцвуццув";
    спр.Записать ();          
    спр.БазоваяЕдиница = ед.ТекущийЭлемент();
    спр.Записать ();
    та же самая фигня... базовой единицы нет :(
     
  8. Hryv

    Hryv Гость

    1. У спр.БазоваяЕдиница тип точно "Справочник.ОКЕИ"?

    2. Справочник.ОКЕИ - подчиненный?

    3. Что показывает отладчик на спр.БазоваяЕдиница после спр.Записать (); ?
     
  9. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Вот тебе пример :

    Function RefFindC(Mode,Code)
    RefC = CreateObject("Reference."+Mode);
    if RefC.FindByCode(Code) = 0 then
    RefC.New();
    if Mode = "ОКЕИ" then
    RefC.Code = Code;
    endif;
    RefC.Write();
    Message("--->В справочник "+Mode+" добавлен элемент "+RefC.Наименование);
    endif;
    Return RefC.CurrentItem();
    EndFunction
    //-----------------------------------

    Function RefFindD(Mode,Name)
    RefD = CreateObject("Reference."+Mode);
    RefD.UseOwner(ТекущийТовар);
    if RefD.FindByDescr(Name) = 0 then
    RefD.New();
    if Mode = "Единицы" then
    RefD.Code = TrimALL(DBF.Field105);
    RefD.Наименование = DBF.Field106;
    RefD.ОКЕИ = ОКЕИ;
    RefD.Коэффициент = 1;
    endif;
    RefD.Наименование = Name;
    RefD.Write();
    Message("--->В справочник "+Mode+" добавлен элемент "+RefD.Наименование);
    endif;
    Return RefD.CurrentItem();
    EndFunction
    //**************************************************************************
    Ref = CreateObject("Reference."+Mode);
    // Создаем новый элемент - сокращено для экономии
    if Mode = "Номенклатура" then
    Ref.Write();
    ТекущийТовар = Ref.CurrentItem();
    ОКЕИ = RefFindC("ОКЕИ",TrimALL(DBF.Field105));
    Ref.БазоваяЕдиница = RefFindD("Единицы",TrimALL(DBF.Field106));
    Ref.Write();
    endif;

    Добавлено:
    Для твоего случая надо делать так :
    спр = СоздатьОбъект ("Справочник.Номенклатура");
    спр.Новый ();
    спр.Наименование = "товар";
    спр.Записать ();
    ед = СоздатьОбъект ("Справочник.Единицы");
    ед.ИспользоватьВладельца(спр.ТекущийЭлемент ());
    ед.НайтиПоНаименованию ("шт", 1); .// но сработает только, если длина наименования не 0
    // иначе надо найти наименование в справочнике ОКЕИ и потом использовать
    //ед.НайтиПоРеквизиту("ОКЕИ")
    спр.БазоваяЕдиница = ед.ТекущийЭлемент ();
    спр.Записать ();
     
  10. KiR

    KiR НЕ шибка опытный програмер)
    1C Team

    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    vbs, чисто так - для саморазвития... разве нельзя сразу найти ед.НайтиПоНаименованию("шт", 0) и передавать ссылку?
     
  11. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    В справочнике "единицы" в ТиС обычно наименование и код равны 0

    Добавлено: Точнее, надо создавать новую единицу (ибо товар новый) так:

    единицы = СоздатьОбъект ("Справочник.Единицы");
    ед = СоздатьОбъект ("Справочник.ОКЕИ");
    ед.НайтиПоНаименованию ("шт", 1);
    спр = СоздатьОбъект ("Справочник.Номенклатура");
    спр.Новый ();
    спр.Наименование = "товар";
    спр.Записать ();
    единицы.ИспользоватьВладельца(спр.ТекущийЭлемент ());
    единицы.Новый ();
    единицы.ОКЕИ = ед.ТекущийЭлемент ();
    единицы.Записать ();

    спр.БазоваяЕдиница = единицы.ТекущийЭлемент ();
    спр.Записать ();
     
  12. Спартак

    Спартак Well-Known Member

    Регистрация:
    2 май 2009
    Сообщения:
    69
    Симпатии:
    0
    всем спасибо!! завтра приду на работу - попробую :( отпишусь
     
  13. Спартак

    Спартак Well-Known Member

    Регистрация:
    2 май 2009
    Сообщения:
    69
    Симпатии:
    0
    vbs
    большое спасибо!!! заработало :welcome:
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей