Имя: Пароль:
1C
1С v8
v8: Как программно создать элемент в нужной группе справочника
0 amadeus2010
 
27.09.13
10:58
Добрый день пытаюсь создать программно группы справочника и записать в них элементы справочника. Все создается кроме групп. Вот код
/////////////////////////////////////////////////////////////////
Группа = Справочники.Номенклатура.СоздатьГруппу();
    Группа.Наименование = Строка.Родитель;
    Группа.НаименованиеПолное =  Строка.Родитель;
    Группа.ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоНаименованию("məhsulları").Ссылка;
    Группа.Записать();

    Спр = Справочники.Номенклатура.СоздатьЭлемент();
    Спр.Наименование = Строка.Наименование;
    Спр.НаименованиеПолное=Строка.Наименование;
    Спр.БазоваяЕдиницаИзмерения=Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("əd");
    Спр.СтавкаНДС=Перечисления.СтавкиНДС.БезНДС;
    Спр.ВидНоменклатуры=Справочники.ВидыНоменклатуры.НайтиПоНаименованию("məhsulları").Ссылка;
    Спр.Весовой = Ложь;
    Спр.ЕдиницаДляОтчетов =Справочники.ЕдиницыИзмерения.НайтиПоНаименованию("əd").Ссылка ;
    Спр.ЕдиницаХраненияОстатков = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию("əd").Ссылка ;
    Спр.ОсновнойПоставщик = Справочники.Контрагенты.НайтиПоНаименованию(Строка.ОсновнойПоставщик).Ссылка;
    Спр.ЦеноваяГруппа =Справочники.ЦеновыеГруппы.НайтиПоНаименованию("розничная").Ссылка;
    Спр.Родитель = Справочники.Номенклатура.НайтиПоНаименованию(Строка.Родитель).Ссылка;
    Спр.Записать();
    
    Штрихкоды= РегистрыСведений.Штрихкоды.СоздатьМенеджерЗаписи();
    Штрихкоды.ТипШтрихкода = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13;
    Штрихкоды.Владелец = Спр.Ссылка;
    Штрихкоды.ЕдиницаИзмерения = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию("əd").Ссылка;
    Штрихкоды.ПредставлениеШтрихкода = Строка.Штрихкоды;
    Штрихкоды.Штрихкод = Строка.Штрихкоды;
    Штрихкоды.Качество = Справочники.Качество.Новый;
    Штрихкоды.Записать();
////////////////////////////////////////////////////////////////////

В чем может заключаться ошибка?
1 salvator
 
27.09.13
11:00
Спр.Родитель = Справочники.Номенклатура.НайтиПоНаименованию(Строка.Родитель).Ссылка;
а че не
Спр.Родитель = Группа.Ссылка
?
2 amadeus2010
 
27.09.13
11:02
(1) так тоже делал, все равно не создается группа
3 catena
 
27.09.13
11:11
Показывай, что вокруг, этот кусок кода рабочий.
4 vicof
 
27.09.13
11:16
НайтиПоНаименованию уже ссылку возвращает.
Только лишние запросы к базе плодишь.
5 amadeus2010
 
27.09.13
11:19
Немного переделал код:
//////////////////////////////////////////////////////
Таб = Номенклатура.Выгрузить(Новый Структура("Пометка", Истина));
    ПоСтрокам = 1;
    КоличествоИспользуемыхСтрок = Номенклатура.Количество();                
    

  

Для Каждого Строка Из Таб Цикл
    ПоСтрокам = ПоСтрокам + 1;
    Если Строка.Пометка Тогда

     Группа = Справочники.Номенклатура.НайтиПоНаименованию(Строка.Родитель).Ссылка;
    Если Группа = Справочники.Номенклатура.ПустаяСсылка() Тогда
        Группа = Справочники.Номенклатура.СоздатьГруппу();
        Группа.Наименование = Строка.Родитель;
         Группа.НаименованиеПолное = Строка.Родитель;
        Группа.ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоНаименованию("m?hsullar?");
         Группа.Записать();
    КонецЕсли;

    
    

    Спр = Справочники.Номенклатура.СоздатьЭлемент();
    Спр.Наименование = Строка.Наименование;
    Спр.НаименованиеПолное=Строка.Наименование;
    Спр.БазоваяЕдиницаИзмерения=Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("?d");
    Спр.СтавкаНДС=Перечисления.СтавкиНДС.БезНДС;
    Спр.ВидНоменклатуры=Справочники.ВидыНоменклатуры.НайтиПоНаименованию("m?hsullar?").Ссылка;
    Спр.Весовой = Ложь;
    Спр.ЕдиницаДляОтчетов =Справочники.ЕдиницыИзмерения.НайтиПоНаименованию("?d").Ссылка ;
    Спр.ЕдиницаХраненияОстатков = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию("?d").Ссылка ;
    Спр.ОсновнойПоставщик = Справочники.Контрагенты.НайтиПоНаименованию(Строка.ОсновнойПоставщик).Ссылка;
    Спр.ЦеноваяГруппа =Справочники.ЦеновыеГруппы.НайтиПоНаименованию("розничная").Ссылка;
    Спр.Родитель = Группа.Ссылка;
    Спр.Записать();
    
    Штрихкоды= РегистрыСведений.Штрихкоды.СоздатьМенеджерЗаписи();
    Штрихкоды.ТипШтрихкода = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13;
    Штрихкоды.Владелец = Спр.Ссылка;
    Штрихкоды.ЕдиницаИзмерения = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию("?d").Ссылка;
    Штрихкоды.ПредставлениеШтрихкода = Строка.Штрихкоды;
    Штрихкоды.Штрихкод = Строка.Штрихкоды;
    Штрихкоды.Качество = Справочники.Качество.Новый;
    Штрихкоды.Записать();
  КонецЕсли;
КонецЦикла;
////////////////////////////////////////////////////////////
сейчас проверю
6 Aprobator
 
27.09.13
11:47
за подобный код руки надо с корнем выворачивать.
7 amadeus2010
 
27.09.13
12:11
(6) зачем так сразу жестко, не работает только та часть котоая должна создать новые группы и поместить  в них элементы справочника. Поэтому я и обратился за помощью
8 Dzenn
 
гуру
27.09.13
12:14
это что за еретизмы????
9 amadeus2010
 
27.09.13
12:24
господа давайте по существу вопроса, если есть ошибка в коде, то прошу подскажите как исправить
10 Галахад
 
гуру
27.09.13
12:31
А строка.родитель какой тип имеет?
11 catena
 
27.09.13
12:33
(9)По существу: код из (0) рабочий. Хоть и кривой. Я запускаю у себя, у меня всё создается в нужных папках. Либо в другой части кода у тебя что-то портит картину, либо ты что-то не то ожидаешь от этого кода.
12 amadeus2010
 
27.09.13
12:33
текстовый, все переменные имеют текстовый тип
13 amadeus2010
 
27.09.13
12:35
(11) мне от этого кода надо добиться загрузки товаров в новые группы, только у меня создаются элементы справочника без групп.
14 vicof
 
27.09.13
12:36
(13) а ты отладчиком пользовался?
15 catena
 
27.09.13
12:39
(13)Значит ты с ними дальше что-то делаешь. Или с группой.
16 Галахад
 
гуру
27.09.13
12:40
(14) + 1.
Чему равно
   Справочники.Номенклатура.НайтиПоНаименованию(Строка.Родитель)
17 amadeus2010
 
27.09.13
12:42
(16)  Справочники.Номенклатура.НайтиПоНаименованию(Строка.Родитель)=Группа;
18 Галахад
 
гуру
27.09.13
12:43
(17) Посмотри в отладчике, чему равно (16)
19 amadeus2010
 
27.09.13
12:50
сейчас проверю
20 amadeus2010
 
27.09.13
12:58
(18) в отладчике (16) равно имени группы, также по отладчику создаются все элементы и группы,
21 Галахад
 
гуру
27.09.13
12:59
Значит вопрос решен?
22 amadeus2010
 
27.09.13
13:00
в том то и дело что в сам справочник садятся только наименования товаров без групп
23 catena
 
27.09.13
13:02
Эх... Меня игнорируют...
24 Галахад
 
гуру
27.09.13
13:03
(22) Может ты просто не видишь групп?
25 kosts
 
27.09.13
13:06
(24) Ха-ха, в самом деле может быть...
26 catena
 
27.09.13
13:12
(24)Отключенная иерархия?
27 Галахад
 
гуру
27.09.13
13:15
(26) Ну, как вариант. Не понятно какая у него конфигурация.
28 amadeus2010
 
27.09.13
13:56
Конфигурация УТ 10.3.21.2 типовая
29 amadeus2010
 
27.09.13
14:43
есть кто?
30 Rovan
 
гуру
27.09.13
14:56
(29) да тут полно народу ... запаслись попкорном
31 amadeus2010
 
27.09.13
15:13
(30)придется запастись терпением народу:))
32 catena
 
27.09.13
15:19
(30)Да ну, он скучный: на контакт не идет, на вопросы не отвечает.
33 amadeus2010
 
27.09.13
15:37
(32)да не Красавица я не скучный, просто занят был этой обработкой, кстати вопрос решился, группы создаются и элементы записываются в свои группы, только пока не записываются
Спр.ЕдиницаДляОтчетов
Спр.ЕдиницаХраненияОстатков
Если указать Спр.ЕдиницаДляОтчетов = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию("?d"); то пишется что не правильно указан владелец для этих переменных, хотя в свойствах реквизита у ЕдиницаДляОтчетов указано СправочникСсылка.ЕдиницыИзмерения
вот исправленный код
////////////////////////////////////////////////////////////
Группа = Справочники.Номенклатура.НайтиПоНаименованию(Строка.Родитель);
    Если Группа = Справочники.Номенклатура.ПустаяСсылка() Тогда
        Группа = Справочники.Номенклатура.СоздатьГруппу();
        Группа.Наименование = Строка.Родитель;
         Группа.ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоНаименованию("m?hsullar?");
         Группа.Записать();
    КонецЕсли;

    
    Спр = Справочники.Номенклатура.СоздатьЭлемент();
    Спр.Наименование = Строка.Наименование;
    Спр.НаименованиеПолное=Строка.Наименование;
    Спр.БазоваяЕдиницаИзмерения=Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("?d");
    Спр.СтавкаНДС=Перечисления.СтавкиНДС.БезНДС;
    Спр.ВидНоменклатуры=Справочники.ВидыНоменклатуры.НайтиПоНаименованию("m?hsullar?");
    Спр.Весовой = Ложь;
    Спр.ЕдиницаДляОтчетов = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("?d");
    Спр.ЕдиницаХраненияОстатков = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("?d");
    Спр.ОсновнойПоставщик = Справочники.Контрагенты.НайтиПоНаименованию(Строка.ОсновнойПоставщик).Ссылка;
    Спр.ЦеноваяГруппа =Справочники.ЦеновыеГруппы.НайтиПоНаименованию("розничная").Ссылка;
    Спр.Родитель = Группа.Ссылка;
    Спр.Записать();
    
    Штрихкоды= РегистрыСведений.Штрихкоды.СоздатьМенеджерЗаписи();
    Штрихкоды.ТипШтрихкода = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13;
    Штрихкоды.Владелец = Спр.Ссылка;
    Штрихкоды.ЕдиницаИзмерения = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию("?d");
    Штрихкоды.ПредставлениеШтрихкода = Строка.Штрихкоды;
    Штрихкоды.Штрихкод = Строка.Штрихкоды;
    Штрихкоды.Качество = Справочники.Качество.Новый;
    Штрихкоды.Записать();
//////////////////////////////////////////////////////////
34 Rovan
 
гуру
27.09.13
15:50
(33) СправочникСсылка.ЕдиницыИзмерения подчинен Справочнику Номенклатура
35 amadeus2010
 
27.09.13
15:57
я пробывал также Спр.ЕдиницаХраненияОстатков = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию("еd"); также выходит ошибка Владельца справочника
36 amadeus2010
 
27.09.13
16:01
там получается что после нажатия кнопки записать автоматически единица измерения от Базовая единица измерения присваивается Единица хранения отчетов или остатков т.е если выбрали шт., то и в других будет шт.
37 catena
 
27.09.13
16:03
(35)Владелец ей нужен, подчиненный же справочник.
38 amadeus2010
 
27.09.13
16:05
(37) т.е для Спр.ЕдиницаДляОтчетов=Спр.Владелец;
39 amadeus2010
 
27.09.13
16:39
есть кто? или попкорн закончился?
40 Franchiser
 
гуру
27.09.13
16:43
Тебе справочник надо 2 раза записывать: перед тем как пишешь единицу измерения, чтобы была ссылка на владельца и после.
41 amadeus2010
 
27.09.13
16:45
(40) не совсем понял,поясни на примере пожалуйста
42 samozvanec
 
27.09.13
16:46
(41) смотри СП метод УстановитьСсылкуНового()
43 amadeus2010
 
27.09.13
16:46
как бы так
    Спр = Справочники.Номенклатура.СоздатьЭлемент();
    Спр.Наименование = Строка.Наименование;
    Спр.НаименованиеПолное=Строка.Наименование;
    Спр.БазоваяЕдиницаИзмерения=Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("?d");
    Спр.СтавкаНДС=Перечисления.СтавкиНДС.БезНДС;
    Спр.ВидНоменклатуры=Справочники.ВидыНоменклатуры.НайтиПоНаименованию("m?hsullar?");
    Спр.Весовой = Ложь;
    Спр.ОсновнойПоставщик = Справочники.Контрагенты.НайтиПоНаименованию(Строка.ОсновнойПоставщик).Ссылка;
    Спр.ЦеноваяГруппа =Справочники.ЦеновыеГруппы.НайтиПоНаименованию("розничная").Ссылка;
    Спр.Родитель = Группа.Ссылка;
    Спр.Записать();
    Спр.ЕдиницаДляОтчетов = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию("?d").Ссылка;
    Спр.ЕдиницаХраненияОстатков = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию("?d").Ссылка;
    Спр.Записать();
44 Franchiser
 
гуру
27.09.13
16:48
Тебе надо создавать элемент спавочника единицы измерения. Создавать элемент, получать объект и т.д.
45 Franchiser
 
гуру
27.09.13
16:51
Единица измерения подчинена владельцу, то есть номенклатуре. Пишу с планшета поэтому пример не напишу
46 User_Agronom
 
27.09.13
16:54
Нормально группа создается. Возможно переменная Строка в поле Родитель ничего не содержит.

    Группа = Справочники.Номенклатура.СоздатьГруппу();
    Группа.Наименование = "Группа номенклатуры";    
    Группа.ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Товар");
    Группа.Записать();
47 amadeus2010
 
27.09.13
17:03
(46) сейчас вопрос по Спр.ЕдиницаДляОтчетов = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию("?d").Ссылка;
    Спр.ЕдиницаХраненияОстатков = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию("?d").Ссылка;
При загрузке выходит ошибка Владельца справочника
48 Franchiser
 
гуру
27.09.13
17:34
Делай поиск запросом с учетом владельца -ссылки на справочник номенклатура....
49 Franchiser
 
гуру
27.09.13
17:37
Или так: справочники.единицыизмерения.найтипонаименованию(наименование,,спр.ссылка)

Справочники.<НазваниеСправочника>.НайтиПоНаименованию (<Значение>, <ПоискПоПолномуСоответсвию>, <Родитель>, <Владелец>)
50 Franchiser
 
гуру
27.09.13
17:38
точнее справочники.единицыизмерения.найтипонаименованию(наименование,,,спр.ссылка)
51 Franchiser
 
гуру
27.09.13
17:43
Только если номенклатура новая то ты ничего не найдешь, надо создавать
52 User_Agronom
 
27.09.13
17:46
(47) Ну вот про единицы измерения точно нужно man покурить. Ибо искать по наименованию не совсем правильно: так как в организации может числиться автомобиль Mersedes 1 шт и ручка шариковая тоже 1 шт.
Наименование одно, а вот владельцы разные.
53 SanGvin
 
27.09.13
17:50
пятнично
54 amadeus2010
 
28.09.13
10:25
тогда можно по коду товара
55 amadeus2010
 
28.09.13
12:08
или можно создать так
//////////////////////////////////////////////
Спр.ЕдиницаДляОтчетов = Спр.Ссылка.БазоваяЕдиницаИзмерения.Владелец;
    Спр.ЕдиницаХраненияОстатков = Спр.Ссылка.БазоваяЕдиницаИзмерения.Владелец;
///////////////////////////////////////////////
56 Franchiser
 
гуру
28.09.13
13:59
(55) перед тем как что то делать посмотри какой тип у конкретного реквизита в конфигураторе,. Так нельзя, типы не совпадут...
57 amadeus2010
 
30.09.13
15:19
добрый день снова обращаюсь со старым вопросом, при загрузке обработкой списка товаров в справочник номенклатура не записываются реквизиты ЕдХраненияОстатков и ЕдДляОтчетов.
Вот исходный код
///////////////////////////////////////////////////////
Группа = Справочники.Номенклатура.НайтиПоНаименованию(Строка.Родитель);
    Если Группа = Справочники.Номенклатура.ПустаяСсылка() Тогда
        Группа = Справочники.Номенклатура.СоздатьГруппу();
        Группа.Наименование = Строка.Родитель;
         Группа.ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоНаименованию("m?hsullar?");
         Группа.Записать();
    КонецЕсли;

    
    Спр = Справочники.Номенклатура.СоздатьЭлемент();
    Спр.Наименование = Строка.Наименование;
    Спр.НаименованиеПолное=Строка.Наименование;
    Спр.БазоваяЕдиницаИзмерения=Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("?d");
    //Спр.ЕдиницаДляОтчетов = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию("?d");
    //Спр.ЕдиницаХраненияОстатков = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию("?d");
    Спр.СтавкаНДС=Перечисления.СтавкиНДС.БезНДС;
    Спр.ВидНоменклатуры=Справочники.ВидыНоменклатуры.НайтиПоНаименованию("m?hsullar?");
    Спр.Весовой = Ложь;
    Спр.ОсновнойПоставщик = Справочники.Контрагенты.НайтиПоНаименованию(Строка.ОсновнойПоставщик).Ссылка;
    Спр.ЦеноваяГруппа =Справочники.ЦеновыеГруппы.НайтиПоНаименованию("розничная").Ссылка;
    Спр.Родитель = Группа.Ссылка;
    Спр.Записать();
    
    Штрихкоды= РегистрыСведений.Штрихкоды.СоздатьМенеджерЗаписи();
    Штрихкоды.ТипШтрихкода = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13;
    Штрихкоды.Владелец = Спр.Ссылка;
    Штрихкоды.ЕдиницаИзмерения = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию("?d");
    Штрихкоды.ПредставлениеШтрихкода = Строка.Штрихкоды;
    Штрихкоды.Штрихкод = Строка.Штрихкоды;
    Штрихкоды.Качество = Справочники.Качество.Новый;
    Штрихкоды.Записать();
    
    Выборка = Справочники.ЕдиницыИзмерения.Выбрать(, Спр.Ссылка);
    Если  Не Выборка.Следующий() Тогда
        
        ЕдИзмерения = Справочники.ЕдиницыИзмерения.СоздатьЭлемент();
        ЕдИзмерения.Владелец = Спр.Ссылка;
        ЕдИзмерения.ЕдиницаПоКлассификатору = Спр.БазоваяЕдиницаИзмерения;
        ЕдИзмерения.Коэффициент = 1;
        ЕдИзмерения.Наименование = Спр.БазоваяЕдиницаИзмерения.Наименование;
        ЕдИзмерения.Записать();
    КонецЕсли;

    
    Спр.ЕдиницаДляОтчетов = ЕдИзмерения.Ссылка;
    Спр.ЕдиницаХраненияОстатков = ЕдИзмерения.Ссылка;
    
/////////////////////////////////////////////////////////
58 amadeus2010
 
30.09.13
15:19
остальные реквизиты записаны
59 amadeus2010
 
30.09.13
15:28
есть кто?
60 hhhh
 
30.09.13
15:39
(59) снова пятница?

Спр.Записать();
61 User_Agronom
 
30.09.13
15:39
(57) Выбрось отсюда лишнее, оставь только то, что связано с вопросом.
62 amadeus2010
 
30.09.13
15:43
(61) с вопросом по коду связано то что не могу загрузить Единицы измерения для отчетов и для хранения остатков.
(60) Спр.записать надо 2 раза повторить насколько я понял из вашего ответа?
63 hhhh
 
30.09.13
15:47
(62) ну смотрите (43), ведь правильно у вас было.
64 amadeus2010
 
30.09.13
15:48
(60) спасибо за совет получилось, упустил из виду что Спр.записать(); надо указать и после присвоения значения Ед хранения остатков и отчетов
65 amadeus2010
 
30.09.13
16:16
еще один вопрос призагрузке 20140 наименований товара вышла ошибка
{Обработка.ЗагрузкаСправочникаНоменклатуры.Форма.Форма.Форма(255)}: Ошибка при вызове метода контекста (Записать)
    Спр.Записать();
по причине:
Значение поля "Родитель" должно быть группой
хотя когда тестировал с 15 записями и разными группами такой ошибки не было
66 amadeus2010
 
30.09.13
16:21
кажется понял в листе ексель клиент дал записи вперемешку, в поле наименование товара попали пустые группы
67 hhhh
 
30.09.13
16:21
значит есть группа и элемент с одинаковыми наименованиями
68 amadeus2010
 
30.09.13
16:56
у клиента есть группа и элемент с одинаковым именем