• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

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

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

Nastyusha

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

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

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

КонецЕсли;

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

simply1

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

СпрУпаковка.ИспользоватьВладельца(Владелец);

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

Nastyusha

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

puh14

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

simply1

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

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

Nastyusha

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

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

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

puh14

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

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

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

TimeDontWait

Код:
спрупаковка.использоватьдату(дата)
 
S

simply1

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

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

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

Nastyusha

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

puh14

С учетом вышесказанного и выпив кофию

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


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

TimeDontWait

Если СпрЭтикетки.НайтиПоНаименованию(строка(наименованиеЭтикетки),0,0)=1 Тогда
 
N

Nastyusha

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

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

TimeDontWait

Економичнее как выше написал puh14
 
N

Nastyusha

еще раз большое спасибо, все получилось.
Исправила, как посоветовал puh14
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!