как проверить, есть ли в справочнике элементы

  • Автор темы Nastyusha
  • Дата начала
N

Nastyusha

Гость
#1
Добрый день
1с 7.7
Есть подчиненный справочник (Упаковка подчинен спр. номенклатура) . Он пустой и раньше не использовался

как программно проверить пустой ли справочник. и как программно его заполнить (находясь в модуле документа)?
(из модуля документа вызываю процедуру), но не работает
СпрУпаковка= СоздатьОбъект("Справочник.Упаковки");
СпрУпаковка.ИспользоватьВладельца(наименованиеЭтикетки); //наименованиеЭтикетки тип спр. номенклатура
СпрУпаковка.ВыбратьЭлементы(0);

Если СпрУпаковка.ПолучитьЭлемент() = 0 Тогда
Сообщить("Справочник+ "+СпрУпаковка+"пустной");
СпрУпаковка.Новый();
СпрУпаковка.Наименование = "Втулка (шт)";

КонецЕсли;

(нужно программно заполнить наименование, размер и расход)
количество наименований=5
 
S

simply1

Гость
#2
СпрУпаковка.ИспользоватьВладельца(наименованиеЭтикетки); //наименованиеЭтикетки тип спр. номенклатура
"наименованиеЭтикетки" - это элемент справочника.
Его нужно предварительно найти и сохранить в переменную.
Например:
Код:
СпрЭтикетки=СоздатьОбъект("Справочник.Этикетки")
Если СпрЭтикетки.НайтиПоНаименованию(наименованиеЭтикетки,0,1)=1 Тогда
Владелец=СпрЭтикетки.ТекущийЭлемент();
КонецЕсли;

СпрУпаковка.ИспользоватьВладельца(Владелец);
И обязательно, в конце создания нового не забыть:
Код:
СпрУпаковка.Записать();
;) Сам иногда забываю ...
 
N

Nastyusha

Гость
#3
Записать() было, просто не скопировала
Не получается..
Сообщение не появляется, записи в справочник не добавляются
 

puh14

Well-Known Member
11.07.2008
1 412
0
#4
Во первых ВыбратьЭлементы(0) - неправильно, поскольку подчинение - это и тоже иерархия, иначе получитьэлемент всегда будет равно 1 (если есть хоть один подчиненный элемент). Надо ВыбратьЭлементы(1)
Во вторых, таки да - записать.
 
S

simply1

Гость
#5
Во первых ВыбратьЭлементы(0) - неправильно, поскольку подчинение - это и тоже иерархия, иначе получитьэлемент всегда будет равно 1 (если есть хоть один подчиненный элемент). Надо ВыбратьЭлементы(1)
Во вторых, таки да - записать.
Совершенно верно!
"ВыбратьЭлементы(<Режим>)" я упустил ...

Еще - при создании нового подчиненного элемента обязательно нужно указывать владелца:
Код:
...
СпрУпаковка.Новый();
...
СпрУпаковка.Владелец=Владелец;
...
А то насоздавались элементы без владельца ...
 
N

Nastyusha

Гость
#8
я правильно поняла:??
СпрЭтикетки=СоздатьОбъект("Справочник.Номенклатура");
Если СпрЭтикетки.НайтиПоНаименованию(наименованиеЭтикетки,0,1)=1 Тогда
Владелец=СпрЭтикетки.ТекущийЭлемент();
КонецЕсли;
СпрУпаковка= СоздатьОбъект("Справочник.Упаковки");
СпрУпаковка.ИспользоватьВладельца(Владелец);
СпрУпаковка.ВыбратьЭлементы(1);

Если СпрУпаковка.ПолучитьЭлемент() = 0 Тогда
Сообщить("Справочник+ "+СпрУпаковка+"пустной");
СпрУпаковка.Новый();
СпрУпаковка.Наименование = "Втулка";
СпрУпаковка.Записать();
КонецЕсли; //СпрУпаковка.ПолучитьЭлемент() = 0 Тогда

но все равно ничего не происходит..
 

puh14

Well-Known Member
11.07.2008
1 412
0
#9
Ну будем ставить проверку на всё

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

Если СпрУпаковка.ПолучитьЭлемент() = 0 Тогда
Сообщить("Справочник+ "+СпрУпаковка+"пустой");
СпрУпаковка.Новый();
СпрУпаковка.Наименование = "Втулка";
СпрУпаковка.Записать();
КонецЕсли; //СпрУпаковка.ПолучитьЭлемент() = 0 Тогда
 
S

simply1

Гость
#13
Ну будем ставить проверку на всё

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

Если СпрУпаковка.ПолучитьЭлемент() = 0 Тогда
Сообщить("Справочник+ "+СпрУпаковка+"пустой");
СпрУпаковка.Новый();
СпрУпаковка.Наименование = "Втулка";
СпрУпаковка.Записать();
КонецЕсли; //СпрУпаковка.ПолучитьЭлемент() = 0 Тогда
С логикой проверок - проблема.
СпрУпаковка.ВыбратьЭлементы()=0 - нужно проверять, на случай отстутствия подчиненных.
А если подчиненные есть, то нужно проверить необходимость создания нового (вдруг уже такой есть?).
 
N

Nastyusha

Гость
#15
когда вызвала из другой процедуры такое сообщение:
Не найден владелец (наименование этикетки) Тип Справочник
 

puh14

Well-Known Member
11.07.2008
1 412
0
#16
С учетом вышесказанного и выпив кофию

Не найден владелец (наименование этикетки) Тип Справочник
Ага - таки уже Элемент, тогда искать не надо.


СпрУпаковка= СоздатьОбъект("Справочник.Упаковки");
Если НаименованиеЭтикетки.Выбран() = 0 Тогда
Сообщить("Не выбран Владелец!");
Возврат;
КонецЕСли;
СпрУпаковка.ИспользоватьВладельца(НаименованиеЭтикетки);
Если СпрУпаковка.ВыбратьЭлементы() = 0 Тогда
Сообщить("Справочник+ "+СпрУпаковка+"пустой, заполняем");
СпрУпаковка.Новый();
СпрУпаковка.Наименование = "Втулка";
СпрУпаковка.Записать();
Иначе
Сообщить("Существуют элементы");
//Тут перезаполнение в цикле выборки если надо
КонецЕсли; //Если НаименованиеЭтикетки.Выбран() = 0 Тогда
 

TimeDontWait

Well-Known Member
04.01.2010
367
0
#17
Если СпрЭтикетки.НайтиПоНаименованию(строка(наименованиеЭтикетки),0,0)=1 Тогда
 
N

Nastyusha

Гость
#18
Спасибо, TimeDontWait,
Создали объект
Нашли владельца.
Но справочник пока еще не заполняется

Добавлено: извиняюсь, не заметила
создался элемент справочника
Спасибо всем огромное за помощь...
 
N

Nastyusha

Гость
#20
еще раз большое спасибо, все получилось.
Исправила, как посоветовал puh14