Имя: Пароль:
1C
1C 7.7
v7: Установка элемента подчиненного справочника
0 MixanM
 
06.12.11
05:12
Всем добрый день, столкнулся с проблемой такой: на форме есть поле ввода, тип : Справочник.ОКЕИ, он подчинен Справочнику.Номенклатура, пытаюсь загрузить номенклатуру с кодом ОКЕИ, он номенклатуру загружает нормально, а ОКЕИ не выбирает

СпрОкеи = СоздатьОбъект("Справочник.ОКЕИ");
Спр = СоздатьОбъект("Справочник.Номенклатура");
Спр.Новый();
   ОКЕИ = Текст.ПолучитьСтроку(6);
   //Выбираем БазовуюЕдиницу из Справочника ОКЕИ
   СпрОкеи.ИспользоватьВладельца(Спр.ТекущийЭлемент());
   Если СпрОкеи.НайтиПоНаименованию(ОКЕИ, 0, 1) = 1 Тогда  
       НайденныйКод = СпрОкеи.ТекущийЭлемент();
   КонецЕсли;
1 GROOVY
 
06.12.11
05:15
Что есть "Текст"?
2 MixanM
 
06.12.11
05:18
Текст это :
Текст = СоздатьОбъект("Текст");        
       Попытка
           Текст.Открыть(ИмяФайла);
...
ОКЕИ = Текст.ПолучитьСтроку(6);

Немного не дописал, у элемента на справочнике Идентификатор : РеквБазоваяЕдиница

Если СпрОкеи.НайтиПоНаименованию(ОКЕИ, 0, 1) = 1 Тогда  
       НайденныйКод = СпрОкеи.ТекущийЭлемент();
       Спр.РеквБазоваяЕдиница = НайденныйКод;
   КонецЕсли;
Сделал так, но все равно не выставляется
3 GROOVY
 
06.12.11
05:19
Элемент то находит?
Что в переменной ОКЕИ? Пробелов может дофига?
4 MixanM
 
06.12.11
05:25
нет нет, в ОКЕИ находиться Базовая Еденица измерения, там всего 2-3 символа, например : "ед.", "шт" "лит"," бут"
5 Злопчинский
 
06.12.11
05:26
1. если ОКЕИ - подчинен номенклатуре (откуда вы это взяли вообще?), то почему поиск Океи идет ПО ВСЕМУ справочнике без подчинения?
2. Если указан точный поиск по наименованию - где вы сформировали поисковй реквизит..?
.
если у вас ТиС штатный - то океи никакого отношения к номенклатуре не имеет.
6 Злопчинский
 
06.12.11
05:27
Справочнику.Номенклатура подчинен Справочник.Единицы, который своим реквизитом ссылается на ОКЕИ
7 MixanM
 
06.12.11
05:28
точно счас глянул, он вообще никому не подчинен
8 MixanM
 
06.12.11
05:28
тогда такой вопрос, если на форме есть элемент с типом "справочник" , как сделать так что бы туда встал реквезит?
9 Злопчинский
 
06.12.11
05:29
Это что за хрень?
.
Спр = СоздатьОбъект("Справочник.Номенклатура");
Спр.Новый();
ОКЕИ = Текст.ПолучитьСтроку(6);
СпрОкеи.ИспользоватьВладельца(Спр.ТекущийЭлемент());
- если новый элемент номенклатуры не записан - ссылка не существует! Спр.ТекущийЭлемент() - нет текущего элемента, не записан еще.. бред получится
10 Злопчинский
 
06.12.11
05:30
(8) какую-то хрень п ишешь полную.. в (0) - вообще поток сознания, как и в (8).
.
какую задачу хочешь решить..? "туда встал реквизит" - это не задача - это попытка к микроскопу прикрутить БАК
11 MixanM
 
06.12.11
05:31
у Справочника.ОКЕИ, есть Идентификатор "Наименование", собственно по нему то я и ищу, дабы выбрать найденный элемент
12 Злопчинский
 
06.12.11
05:31
клаву быстрей топчи, минут 10 осталось
13 Злопчинский
 
06.12.11
05:32
(11) да похрен что ты ищешь, потому как еще не соображаешь что надо сделать.
какую задачу решаешь?
14 MixanM
 
06.12.11
05:32
Кароче, записывается номенклатура, и в поле номенклатуры выбирается базовая еденица измерения, БазоваЕденица измерния берется из файла
15 Злопчинский
 
06.12.11
05:32
Хорошо, допустим нашел нужный ОКЕИ - что дальше ХОЧЕШЬ сделать?
16 Злопчинский
 
06.12.11
05:32
"записывается номенклатура," - нова яноменклатура создается?
17 MixanM
 
06.12.11
05:34
да
18 MixanM
 
06.12.11
05:35
и у нее выставляюится "Цена" из справочника "цена, "ШтрихКод" - он создается новый в справчонике ШтрихКод и выставляется, это я сделал, счас с ОКЕИ е..усь
19 Любопытная
 
06.12.11
05:38
(18) В ТиС Базовая единица номенклатуры имеет тип Справочник.Единицы, а вот у элемента справочника Единицы есть реквизит ОКЕИ, который имеет тип Справочник.ОКЕИ. Т.е. тебе надо для новой номенклатуры создать новые единицы
20 Злопчинский
 
06.12.11
05:38
СпрН = СоздатьОбъект("Справочник.Номенклатура");
СпрН.Новый();
СпрН.Наименование = "тролролролр";
СпрН.Записать();
//

СпрО = СоздатьОбъект("Справочник.ОКЕИ");
длНаименования = Метаданные.Справочник("ОКЕИ").ДлинаНаименования;
ОКЕИизФайла = Формат("лдролролрол","С"+длНаименования);
Если СпрО.НайтиПоНаименованию(ОКЕИизФайла,0,1)=0
Тогда
 СпрО.Новый();
 СпрО.Наименование = ОКЕИизФайла;
 СпрО.Записать();
КонецЕсли;
//
СпрЕ = СоздатьОбъект("Справочник.Единицы");
СпрЕ.ИспользоватьВладельца(СпрН.ТекущийЭлемент())
СпрЕ.Новый();
СпрЕ.ОКЕИ = СпрО.ТекущийЭлемент();
СпрЕ.Коэффициент = 1;
СпрЕ.Записать();
//
СпрН.БазоваяЕдиница = СпрЕ.ТекущийЭлемент();
СпрН.ОсновнаяЕдиница = СпрН.БазоваяЕдиница;
СпрН.Записать();
21 MixanM
 
06.12.11
05:40
Нет, создавать не надо, нужно выбрать из существующих уже, в справочнике. У меня в свойствах спрвочника.ОКЕИ в графе подчинен стит : не подчинено"
22 Злопчинский
 
06.12.11
05:40
(16) в типовой ТиС нет справочника "Штрихкод" - штрихкод задается для единицы измерения (Спр.Единицы) номенклатуры.
23 Злопчинский
 
06.12.11
05:41
(21) медитируй над кодом в (20).
Когда скрытый смысл этого кода станет ясен - иди дальше
24 Любопытная
 
06.12.11
05:42
(21) У тебя типовая ТиС?
25 MixanM
 
06.12.11
05:42
Спс, последний штрих остался, думал Спр,ОКЕи - это будет самое легкое
26 MixanM
 
06.12.11
05:43
нет, я думаю, у 90 % пользователей она не типовая
27 Любопытная
 
06.12.11
05:44
(26) Неправильно думаешь. Открой уже конфигурацию, да посмотри, какие типы у реквизитов номенклатуры. А потом думай над (20)
28 MixanM
 
06.12.11
05:45
Я уже давно открыл ) и посмотрел ) и ужаснулся, я до этго работал в другой компании, так вот, различия в 1с - только ЯП одинаковый
29 Нуф-Нуф
 
06.12.11
05:46
сначала нужно записать владельца, а потом подчиненный
30 Simod
 
06.12.11
05:47
(0) Для номенклатуры единицы измерения хранятся в подчиненном справочнике "Единицы". Записать единицу не получится пока не записан элемент-владелец, т.е. Номенклатура. Элемент справочника "ОКЕИ" нужен чтобы определить реквизит справочника "Единицы". Там, как пишет (27) есть и другие реквизиты.

Запись элемента владельца (Номенклатура) и подчиненного элемента "Единица" в твоем случае необходимо проводить в через Попытка-Исключение в транзакции, чтобы в случае невозможности записать отменить операцию.
31 MixanM
 
06.12.11
05:50
Вообщем в коде сделал так:Создание-запись номенклатуры,Создание-запись Единицы, В Единице, выбор из подчиненных справочников Валюты ... И кк оказывается, надо на этом  же этапе выбирать из Справочника.Океи
32 MixanM
 
06.12.11
06:07
Вообщем наваял вот так, Единица создается и привязывается к Номенклатуре нормально, а вот ОКЕИ к Единице привязываться не хочет :( :

СпрЕдиницы.ИспользоватьВладельца(Спр.ТекущийЭлемент());
   Сообщить(Название);
   СпрЕдиницы.Новый();
   Если Спр.НайтиПоКоду(Номер) = 1 Тогда
       НайденныйКод = СпрЕдиницы.ТекущийЭлемент();
   КонецЕсли;
   СпрЕдиницы.Наименование = Название;
   СпрЕдиницы.ОКЕИ            = ОКЕИ;
   СпрЕдиницы.ШтрихКод        = ШК;
   Попытка
       СпрЕдиницы.Записать();
       Сообщить("Загружен Штрихкод :"+ШК);
   Исключение
       Предупреждение( "Не выполнено сохранение   единицы: " + ОписаниеОшибки() +
       РазделительСтрок + "Элемент не сохранен!", 60);
       Возврат;
   КонецПопытки;
   
   СпрОкеи.ИспользоватьВладельца(СпрЕдиницы.ТекущийЭлемент());
   Если СпрЕдиницы.НайтиПоРеквизиту("ШтрихКод", ШК, 1) = 1 Тогда
       СпрОкеи.ВыбратьЭлементы();
       СпрОкеи.НайтиПоНаименованию(СокрЛП(ОКЕИ), 0, 1);
       НайденныйКод = СпрОкеи.ТекущийЭлемент();
   КонецЕсли;
33 Злопчинский
 
06.12.11
06:36
(32) настойчиво курим (20) в части
СпрЕ.ОКЕИ = СпрО.ТекущийЭлемент();
.
мы тут что - зря что ли торчим?
34 Simod
 
06.12.11
06:38
(32) Фигня полная. Ты слабо представляешь, что такое связанные справочники (элемент одного справочника является реквизитом другого) и подчиненные. Посмотри тут: http://www.mista.ru/tutor_1c/sprav.htm
35 Злопчинский
 
06.12.11
06:39
(32) ты вообще помнишь что говоришь/пишешь/программишь..?
.
в (21) > У меня в свойствах спрвочника.ОКЕИ в графе подчинен стит : не подчинено"
и тут же в (32)
СпрОкеи.ИспользоватьВладельца(СпрЕдиницы.ТекущийЭлемент());
- это у тебя не вызывает чувство дискомфорта..???
.
думай!!! думай!!! ТУТ ДУМАТЬ НАДО!!!
36 Злопчинский
 
06.12.11
06:39
(34) правильная ссылка!!!!!
37 ParaWiz
 
06.12.11
06:40
(35) Что там думать то особо, ты ему в (20) готовый код уже в принципе написал
38 Simod
 
06.12.11
06:42
В (20) тоже фигня..
39 Злопчинский
 
06.12.11
06:43
(38) ага, как же...
40 MixanM
 
06.12.11
06:45
Секундочку, я же говрю что Справчоник.ОКЕИ не подчинен, у него в графе "Подчинен" стоит : "не подчинено", я думаю с ним, как с подчиненым справочником и не стоит работать
41 Злопчинский
 
06.12.11
06:45
(37) автору в (34) идти надо, а то из того что он на словах объясняет видно, что (правильно замечено в (34)) слабо себе представляет проекцию метаданных (да и сами метаданные) на реальные объекты, и отображение реальных объектов на реквизиты формы.
42 Злопчинский
 
06.12.11
06:46
(40) а зачем ты тогда пишешь
СпрОкеи.ИспользоватьВладельца(СпрЕдиницы.ТекущийЭлемент());
.
по принципу "попробую, вдруг получится" ..?
43 Злопчинский
 
06.12.11
06:47
(40) я тебе в (20) написал практически готовый код - как встать на конкретный элмент справочника ОКЕИ, как его (элеент ОКЕИ)запихнуть в элемент Справочника.Единицы, а единицы впихнуть в номенклатуру...
44 Злопчинский
 
06.12.11
06:49
ладно, пойду я спать, скучно тут с вами
Успехов!
45 MixanM
 
06.12.11
06:50
Я как раз ковыряю код, кот вы выложили выше, спс
46 MixanM
 
06.12.11
06:55
Спасибо, код чуток допилил и все работает кроме
Спр.СтавкаНДС =    Перечисление.СтавкиНДС.ЗначениеПоИдентификатору("НДС18");
никто не подскажет кк правльно с перечислениями на форме работать?
47 Rie
 
06.12.11
06:56
(46)
А почему не Перечисление.СтавкиНДС.НДС18?
И что такое "работа с перечислениями на форме"?
48 ParaWiz
 
06.12.11
06:59
(46) Например через СписокЗначений
49 MixanM
 
06.12.11
07:04
$на форме есть строка ввода, вот в ней и хочу выбрать ставку НДС, просто у нее тип : "перечисление"