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


1С:Предприятие ::

Метки:

Помогите с периодическими реквизитами в справочнике? :-(

Я
   Олег_новичок
 
08.12.04 - 07:52
Я пишу программу загрузки с текстового файла для "Торговли и Склад" справочников номеклатура, единицы, цены и документов "Поступление ТМЦ"
и сталкнулся с такой фигней.

//*******************************************
Процедура Выполнить()
    Ном = СоздатьОбъект("Справочник.Номенклатура");
    Ном.Новый();
    Ном.Наименование = "Шкаф";
    Ном.Записать();
///////////////////////////////////////////////////////

    Цен = СоздатьОбъект("Справочник.Цены");
    Цен.ИспользоватьВладельца(Ном);
    Цен.Новый();
    Цен.Цена.Установить(РабочаяДата(), "10");
    Цен.Записать();
КонецПроцедуры

Выводит ошибку!
err: Цена.Цена.Установить(РабочаяДата(), "10");
{C:\...}: Не выбран элемент!
 
 
   zgr
 
1 - 08.12.04 - 07:55
(0) потому-что не записан
   Олег_новичок
 
2 - 08.12.04 - 08:00
а как новый создать?
   zgr
 
3 - 08.12.04 - 08:36
(2)Цен.Записать();
Цен.Цена.Установить(РабочаяДата(), "10");
   Foma
 
4 - 08.12.04 - 08:39
1. Цен.ИспользоватьВладельца(Ном.ТекущийЭлемент());
2. у тебя цена "Строка", так и д.б.?
   Олег_новичок
 
5 - 08.12.04 - 12:51
можно ли Цен.Цена.Установить(РабочаяДата(), "10") сделать как-нибудь через метаданные (Метаданные.Справочник("Цена").???)
   laeg
 
6 - 08.12.04 - 12:58
(5)
Зачем ?
   Олег_новичок
 
7 - 08.12.04 - 13:12
Короче мне в цикл нужно вставить обработку периодических реквизитов
Спр = СоздатьОбъект("Справочник." + ВидСпр);
.....
Для НомерВхПоля = 1 по Файл.КоличествоСтрок() Цикл
  .....читает поле в ЗначениеПоля
   ТипРек = Метаданные.Справочник(ВидСпр).Реквизит(НомерВхПоля).Тип;
   ВидРек = Метаданные.Справочник(ВидСпр).Реквизит(НомерВхПоля).Вид;
  ИдентРек = Метаданные.Справочник(ВидСпр).Реквизит(НомерВхПоля).Идентификатор
  .....преобразует ЗначениеПоля в ТипРек
  Если Метаданные.Справочник(ВидСпр).Реквизит(НомерВхПоля).Периодический = 1 Тогда
     ?????
   Иначе
      Спр.УстановитьАтрибут(ИдентРек,ЗначениеПоля);
   КонецЕсли;
.....
КонецЦикла
   Олег_новичок
 
8 - 08.12.04 - 13:18
Блин!! Для НомерВхПоля = 1 по Файл.КоличествоСтрок() Цикл
Для НомерВхПоля = 1 по СтрЧислоВхождений(Стр, "\") Цикл
   laeg
 
9 - 08.12.04 - 13:26
Переодический = СоздатьОбъект("Периодический");  
Переодический.ИспользоватьОбъект(Идентификатор,Спр.ТекущийЭлемент()); 
...
...
   Олег_новичок
 
10 - 08.12.04 - 13:47
...
  ПериодРеквизит = СоздатьОбъект("Периодический");
  ПериодРеквизит.ИспользоватьОбъект(ИдентРеквизита, Спр.ТекущийЭлемент);
  ПериодРеквизит.Значение = ЗначениеВхПоля;
  ПериодРеквизит.ДатаЗнач = РабочаяДата();
  ПериодРеквизит.Записать();
...
КонецЦикла;
Спр.Записать(); здесь пишет "Не определена дата! Элемент не может быть записан!"
 
  Рекламное место пустует
   laeg
 
11 - 08.12.04 - 14:12
Спр.Записать() - перед установкой периодических реквизитов.
   laeg
 
12 - 08.12.04 - 14:12
+(11) если Спр - Новый ...
   Олег_новичок
 
13 - 08.12.04 - 14:19
Спр - новый справочник
то же самое выводит "Не определена дата! Элемент не может быть записан!"
   laeg
 
14 - 08.12.04 - 14:28
А не проще ли если ты записываешь только на одну дату (на рабочую),
Спр.ИспользоватьДату(РабочаяДата(), 1);
???

И что за гдюк у тебя вылазит ХЗ, весь текст модуля где обрабокта идет смотреть нужно ...
   Олег_новичок
 
15 - 08.12.04 - 14:47
Спр = СоздатьОбъект("Справочник." + ВидСпр); 
..... 
Для НомерВхПоля = 1 по СтрЧислоВхождений(Стр, "\") Цикл
 .....читает поле в ЗначениеПоля
  ТипРек = Метаданные.Справочник(ВидСпр).Реквизит(НомерВхПоля).Тип; 
  ВидРек = Метаданные.Справочник(ВидСпр).Реквизит(НомерВхПоля).Вид; 
 ИдентРек = Метаданные.Справочник(ВидСпр).Реквизит(НомерВхПоля).Идентификатор
 .....преобразует ЗначениеПоля в ТипРек
  Если (ВидСпр = "Цены") И (ИдентРеквизита = "Единица")) Тогда
     Спр.Записать();
     Спр.Единица.Установить(РабочаяДата(), ЗначениеВхПоля);
     Продолжить;
  ИначеЕсли (ВидСпр = "Цены") И (ИдентРеквизита = "Цена") Тогда
     Спр.Записать();
     Спр.Цена.Установить(РабочаяДата(), ЗначениеВхПоля);
     Продолжить;  
  КонецЕсли;
...
КонецЦикла 
Спр.Записать();
....
работает только так но это неудобно (да и глупо наверное)
если будет например сто период.реквизитов???
я бы не мучился обработки есть в и-нете но у них текстовый файл сложный
и выгружать такой файл с другой базы не удобно
   laeg
 
16 - 08.12.04 - 15:02
Спр = СоздатьОбъект("Справочник." + ВидСпр);
Спр.Код = нашКод;
спр.Наименование = НашеНаименование;
.....
спр.Записать();
Для НомерВхПоля = 1 по Файл.КоличествоСтрок() Цикл
.....
.....
КонецЦикла
спр.Записать();

Ты так делал ?
   laeg
 
17 - 08.12.04 - 15:04
+(16) т.е.
Спр = СоздатьОбъект("Справочник." + ВидСпр); 
Если Ля-ля Тогда
  спр.Новый();
  спр.Код = нашКод;
  спр.Наименование = НашеНаименование; 
  ...
 ...
КлнецЕсли
...
...
Для НомерВхПоля = 1 по Файл.КоличествоСтрок() Цикл
.....
 Если Метаданные.Справочник(ВидСпр).Реквизит(НомерВхПоля).Периодический = 1 Тогда
   ...
 Иначе
   ...
  КонецЕсли;
КонецЦикла;
спр.Записать();
   Олег_новичок
 
18 - 08.12.04 - 15:27
получается что когда я записываю элемент нетрогая период.реквизиты он записывается, а когда я их устанавливаю выводит ошибку (13)
может дело в дате?
   laeg
 
19 - 08.12.04 - 15:31
(18)
Нужно пива пить меньше ...

+(17)
Если Ля-ля Тогда
 спр.Новый();
 спр.Код = нашКод;
 спр.Наименование = НашеНаименование;
...
...
  спр.Записать();
КонецЕсли
   Олег_новичок
 
20 - 08.12.04 - 15:38
не понял в "Ля-Ля" че должно быть?
   laeg
 
21 - 08.12.04 - 15:48
Проверка на то что - элемент новый будет или нет ...
   Олег_новичок
 
22 - 09.12.04 - 07:30
да у меня так и было
а у спр "Единцы" нет ни кода ни наименования
   колодина
23 - 09.12.04 - 09:20
а я грузила стандартной загрузко справочников номенклатура и цены в ТИС. получилось нормально.
   laeg
 
24 - 09.12.04 - 09:26
(22)
Повторю еще раз, Перед установкой ПЕРИОДИЧЕСКИХ элементов, новый элемент справочника должен быть записан, т.е. спр.Выбран() = 1 !!!



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