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

Статус
Закрыто для дальнейших ответов.

Спартак

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

KiR

НЕ шибка опытный програмер)
11.09.2007
1 581
0
#2
даж не знаю что бы посоветовать.. пожалуй почитать ;)
По идее ведь выбираешь элемент из подчиненного справочника и присваиваешь это значение одному из реквизитов нужного элемента справочника
 

Спартак

Well-Known Member
02.05.2009
69
0
#3
если бы все было так просто...

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

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

KiR

НЕ шибка опытный програмер)
11.09.2007
1 581
0
#4
погляди в отладчике - находится ли ед - может там просто пустое значение.
 
A

Andruha

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

Спартак

Well-Known Member
02.05.2009
69
0
#7
Код:
 ед = СоздатьОбъект ("Справочник.ОКЕИ");
ед.НайтиПоНаименованию ("шт", 1);
спр = СоздатьОбъект ("Справочник.Номенклатура");
спр.Новый ();
спр.Наименование = "вуцвуццув";
спр.Записать ();			  
спр.БазоваяЕдиница = ед.ТекущийЭлемент();
спр.Записать ();
та же самая фигня... базовой единицы нет :(
 
H

Hryv

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

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

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

vbs

Well-Known Member
18.02.2007
1 708
3
#9
Вот тебе пример :

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

KiR

НЕ шибка опытный програмер)
11.09.2007
1 581
0
#10
vbs, чисто так - для саморазвития... разве нельзя сразу найти ед.НайтиПоНаименованию("шт", 0) и передавать ссылку?
 

vbs

Well-Known Member
18.02.2007
1 708
3
#11
vbs, чисто так - для саморазвития... разве нельзя сразу найти ед.НайтиПоНаименованию("шт", 0) и передавать ссылку?
В справочнике "единицы" в ТиС обычно наименование и код равны 0

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

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

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