Имя: Пароль:
1C
1С v8
Если номенклатура существует выбирать иначе создавать. Не получается((
,
0 EKO LX
 
02.10.12
11:59
Вот что у меня
Если НовыйЭлемент.Пустая() Тогда
           НовыйЭлемент = Справочники.Номенклатура.НайтиПоНаименованию(Наименование, Истина);
       КонецЕсли;
//Если не нашли создаем новый
Если НовыйЭлемент.Пустая() Тогда
           
           НовыйЭлемент = Справочники.Номенклатура.СоздатьЭлемент();
...
//далее подставляю в док
ДокПоступление = НовыйДокПоступление.Товары.Добавить();
ДокПоступление.Номенклатура = НовыйЭлемент.Ссылка;
....
1 acsent
 
02.10.12
12:00
может нету записать
2 chelentano
 
02.10.12
12:00
(0) а что не получается то? ты новый элемент то записываешь хоть?
3 Cube
 
02.10.12
12:00
НовыйЭлемент = Справочники.Номенклатура.СоздатьЭлемент();
НовыйЭлемент.Наименование = Наименование;
НовыйЭлемент.Записать();
4 KindLion
 
02.10.12
12:00
После создания, новый элемент надо записать.
5 EKO LX
 
02.10.12
12:01
записать есть. но когда второй раз гружу создает идентичную номенклатуру, а нужно чтобы выбирала существующую
6 DrShad
 
02.10.12
12:02
значит не удовлетворяет условиям поиска
7 EKO LX
 
02.10.12
12:02
спасибо, уж записать умею))
8 chelentano
 
02.10.12
12:03
(5) значит, не находит по наименованию, чо
9 Aleks73
 
02.10.12
12:04
Отладчик спасет отца русской демократии(С)
10 Darky
 
02.10.12
12:05
Может у тебя длина Наименования 10 символов, а ты туда пихаешь 50?
11 EKO LX
 
02.10.12
12:05
НовыйЭлемент = Справочники.Номенклатура.ПустаяСсылка();
Если НовыйЭлемент.Пустая() Тогда
           НовыйЭлемент = Справочники.Номенклатура.НайтиПоНаименованию(Наименование, Истина);
       КонецЕсли;
//Если не нашли создаем новый

Если НовыйЭлемент.Пустая() Тогда
           
           НовыйЭлемент = Справочники.Номенклатура.СоздатьЭлемент();
...
//далее подставляю в док

ДокПоступление = НовыйДокПоступление.Товары.Добавить();
ДокПоступление.Номенклатура = НовыйЭлемент.Ссылка;
12 EKO LX
 
02.10.12
12:06
(10) длина наименования 100
13 Aleks73
 
02.10.12
12:06
(11) 1 + 2 строка - чушшшшь
14 Рэйв
 
02.10.12
12:07
>>НовыйЭлемент = Справочники.Номенклатура.ПустаяСсылка();
>>Если НовыйЭлемент.Пустая() Тогда

...
ндааа..
15 KabanDeGreat
 
02.10.12
12:08
Может запросом выбирать по наименованию а дальше если
16 Darky
 
02.10.12
12:08
из (11) нам не видно, что ты пишешь в НовыйЭлемент.Наименование и пишешь ли вообще
17 EKO LX
 
02.10.12
12:08
(13) (14) а как?
18 GreyAngel
 
02.10.12
12:09
Наименование откуда берешь? Попробуй
НовыйЭлемент = Справочники.Номенклатура.НайтиПоНаименованию(СокрЛП(Наименование), Истина);

Ну, а вообще, попробуй привести более полный кусок кода, а то ничего не понятно.
19 Рэйв
 
02.10.12
12:10
(17)Никак.  вообще убрать.

так:

НовыйЭлемент = Справочники.Номенклатура.НайтиПоНаименованию(Наименование, Истина);
Если НовыйЭлемент.Пустая() Тогда
    НовыйЭлемент = Справочники.Номенклатура.СоздатьЭлемент();
20 GreyAngel
 
02.10.12
12:10
(17) Что значит а как? Зачем у тебя проверка на пустую ссылку, если она гарантировано пустая?
21 Рэйв
 
02.10.12
12:11
Покажи что ты кладешь в наименование, а потом покажи скрин с этим элемента наименованием.
22 EKO LX
 
02.10.12
12:13
(16) (18)
беру из Эксель
Наименование = ФайлXLS.Sheets(ТекНомер).Cells(1,Наим).Value;
Цвет = ФайлXLS.Sheets(ТекНомер).Cells(1,Цвет1).Value;
Размер = ФайлXLS.Sheets(ТекНомер).Cells(1,Размер1).Value;

********

НовыйЭлемент = Справочники.Номенклатура.ПустаяСсылка();
       // Ищем товар в справочнике по наименованию
       Если НовыйЭлемент.Пустая() Тогда
           НовыйЭлемент = Справочники.Номенклатура.НайтиПоНаименованию(Наименование, Истина);
       КонецЕсли;
//Если не нашли создаем новый
       Если НовыйЭлемент.Пустая() Тогда
           
НовыйЭлемент = Справочники.Номенклатура.СоздатьЭлемент();
           
НовыйЭлемент.Наименование = Наименование + " " + Цвет + " " + Размер;
23 DrShad
 
02.10.12
12:14
(22) ну ты и дятел! :))))
24 DrShad
 
02.10.12
12:15
НовыйЭлемент.Наименование = Наименование + " " + Цвет + " " + Размер;

ищешь то совсем другое
25 GreyAngel
 
02.10.12
12:15
(23) Опередил.
26 НЕА123
 
02.10.12
12:15
(22)
п е з д е ц. (с)
27 Рэйв
 
02.10.12
12:16
так и знал что там что-то шедевральное:-)
28 Noroving
 
02.10.12
12:17
(22) спаси и сохрани...
29 EKO LX
 
02.10.12
12:17
рад что развеселил вас, может исправите ошибку?
30 DrShad
 
02.10.12
12:18
Если НовыйЭлемент.Пустая() Тогда
           НовыйЭлемент = Справочники.Номенклатура.НайтиПоНаименованию(Наименование + " " + Цвет + " " + Размер, Истина);
       КонецЕсли;
31 Darky
 
02.10.12
12:18
:)

Справочники.Номенклатура.НайтиПоНаименованию(Наименование + " " + Цвет + " " + Размер, Истина)
32 Kreont
 
02.10.12
12:19
(0) Для примера через запрос:
   Запрос = Новый Запрос;
   Запрос.Текст = "ВЫБРАТЬ
   |    ФизическиеЛица.Ссылка
   |ИЗ
   |    Справочник.ФизическиеЛица КАК ФизическиеЛица
   |ГДЕ
   |    ФизическиеЛица.Код = &Код";
       
Запрос.УстановитьПараметр("Код", СокрЛП(УникКод));
               
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
       
Если Выборка.Следующий() Тогда
   Объект = Выборка.Ссылка;
Иначе
   Фіз = Справочники.ФизическиеЛица.СоздатьЭлемент();
   Фіз.Код    = СокрЛП(УникКод);
   Фіз.Наименование = ФИО;
// и остальные реквизиты...
   Фіз.Записать();
   
   Объект = Фіз.Ссылка;
КонецЕсли;
А дальше уже использовать присвоение куда надо: Объект
33 НЕА123
 
02.10.12
12:19
...
34 chelentano
 
02.10.12
12:22
(22) вглядись внимательно:
НовыйЭлемент = Справочники.Номенклатура.ПустаяСсылка();
Если НовыйЭлемент.Пустая() Тогда
   НовыйЭлемент = Справочники.Номенклатура.НайтиПоНаименованию(Наименование, Истина);
КонецЕсли;
35 chelentano
 
02.10.12
12:22
(34) тьфу ты блин, не то
36 ОператорПК
 
02.10.12
12:23
Если НовыйЭлемент=Неопределено Тогда
37 chelentano
 
02.10.12
12:25
(30) +100
(36) ты СП почитай, в каких случаях Неопределено возвращается
38 ОператорПК
 
02.10.12
12:27
(37) косанул.
39 EKO LX
 
02.10.12
12:38
(30) (31) опять дублируется
40 DrShad
 
02.10.12
12:39
(39) это ошибка в ДНК, а она уже не лечится - тупо приводит к мутациям и вымиранию
41 Фокусник
 
02.10.12
12:41
(0) Строго говоря, нужно не по каждой номенклатуре делать: Справочники.Номенклатура.НайтиПоНаименованию(
("запрос в цикле")

Лучше так: собрать всю номенклатуру, например в таблицу значений, затем _одним_ запросом найти все ссылки для этой номенклатуры, не найденные - уже создавать.
42 Darky
 
02.10.12
12:43
(39) Пора уже запустить отладчик и посмотреть, что и как ищеЦо
43 EKO LX
 
02.10.12
14:58
сорри. исправил как (30) не дублируется, но творится другая херня...
44 EKO LX
 
03.10.12
11:50
второй раз когда загружаю ту же накладную, в табличной части документа элемент номенклатура выбирается только первая созданная. т.е. есть
наименование артикул цвет      размер
номен1       а1      красный   Л
номен1       а1      красный   М
номен2       а2      желтый    Л
номен2       а2      желтый    М

в док добавляются
номен1       а1      красный   Л
номен1       а1      красный   Л
номен2       а2      желтый    Л
номен2       а2      желтый    Л

ДокПоступление = НовыйДокПоступление.Товары.Добавить();
ДокПоступление.Номенклатура = НовыйЭлемент.Ссылка;
ДокПоступление.Количество = Количество;
ДокПоступление.Цена = Цена;
ДокПоступление.Склад = Склад;
ДокПоступление.ЕдиницаИзмерения = НовыйЭлемент.ЕдиницаХраненияОстатков;
ДокПоступление.Коэффициент = НовыйЭлемент.ЕдиницаХраненияОстатков.Коэффициент;
ДокПоступление.СтавкаНДС = СтавкаНДС;
ДокПоступление.Сумма = Количество * Цена;                    
Сообщить(Наименование+"-"+ШтрихКод+ " -- "+"Элемент записан");
45 EKO LX
 
03.10.12
11:53
а сама номенклатура создается следующим образом

НовыйЭлемент = Справочники.Номенклатура.ПустаяСсылка();
       // Ищем товар в справочнике по наименованию
       Если НовыйЭлемент.Пустая() Тогда
           НовыйЭлемент = Справочники.Номенклатура.НайтиПоНаименованию(Наименование + " " + Цвет + " " + Размер, Истина);
       КонецЕсли;
       //Если не нашли создаем новый
       Если НовыйЭлемент.Пустая() Тогда
           
           НовыйЭлемент = Справочники.Номенклатура.СоздатьЭлемент();
           Родитель = ГрпНом;
           НовыйЭлемент.Родитель = Родитель;
           НовыйЭлемент.Артикул = Артикул;
           НовыйЭлемент.Коллекция = Коллекция;
           НовыйЭлемент.Цвет = Цвет;
           НовыйЭлемент.Размер = Размер;
           НовыйЭлемент.Наименование = Наименование + " " + Цвет + " " + Размер;
           НовыйЭлемент.НаименованиеПолное = Наименование + " " + Цвет + " " + Размер;
           НовыйЭлемент.ВидНоменклатуры = ПолеВвода1;
           НовыйЭлемент.БазоваяЕдиницаИзмерения = ЕдИзмер;        
           НовыйЭлемент.Записать();
           НовыйЕдИзмер = Справочники.ЕдиницыИзмерения.СоздатьЭлемент();
           НовыйЕдИзмер.ЕдиницаПоКлассификатору = ЕдИзмер;
           НовыйЕдИзмер.Наименование = ЕдИзмер.Наименование;
           НовыйЕдИзмер.Коэффициент = 1;
           НовыйЕдИзмер.Владелец = НовыйЭлемент.Ссылка;
           НовыйЕдИзмер.Записать();
           НовыйЭлемент.ЕдиницаХраненияОстатков = НовыйЕдИзмер.Ссылка;
           НовыйЭлемент.СтавкаНДС = СтавкаНДС;
           //НовыйЭлемент.ВестиУчетПоХарактеристикам = Истина;
           НовыйЭлемент.Записать();
46 DrShad
 
03.10.12
12:01
(45) ты достиг совершенства в части теоремы БЖ-Соболя
47 EKO LX
 
03.10.12
12:13
(46)я не 1С-ник, а пользователь
48 hhhh
 
03.10.12
12:14
(44) и гдг тут добавляется первая? Вроде не первая.
49 alxxsssar
 
03.10.12
12:18
попробуй не наименование пользовать а СокрЛП(Наименование)
50 DrShad
 
03.10.12
12:18
(47) это не помешало достичь совершенства :)
51 zladenuw
 
03.10.12
12:21
может надо и этот реквизит ТЧ заполнять. ХарактеристикаНоменклатуры
52 zladenuw
 
03.10.12
12:27
(51) не та опера.
А весь цикл. где ты записал и потом добавляешь. покажи.
53 EKO LX
 
03.10.12
12:39
нашел ошибку)
54 EKO LX
 
03.10.12
12:43
(49) хорошая вещь, только не знаю как использовать. куда ее вставить?

НовыйЭлемент = Справочники.Номенклатура.НайтиПоНаименованию(Наименование, Истина);
55 EKO LX
 
03.10.12
12:48
(51) первоначально так и хотел, но не знаю как добавить в характеристики. а то добавляю эти характеристики в наименование номенклатуры. а можно штрихкоды к характеристикам привязать? т.е. номенклатура одна, а характеристики разные, т.е. цвет, коллекция, размер, и разных характеристиках разные ШК
56 НЕА123
 
03.10.12
12:51
(55)
исходя из (47)
мудрый совет: не надо.
57 НЕА123
 
03.10.12
12:51
+(56)
позовите программиста. (с)
58 hhhh
 
03.10.12
13:05
если размер и цвет прямо в наименование заносятся, то характеристики тогда не нужны.
59 zladenuw
 
03.10.12
13:06
если по феншую то надо, а так зачем лишний гемор :)
60 EKO LX
 
03.10.12
13:08
(58) ясное дело, я и не заношу. такое ощущение что код разваливается. не знаю проверял ли раньше, ШК не записывается

НовыйЭлемент = Справочники.Номенклатура.ПустаяСсылка();
       // Ищем товар в справочнике по наименованию
       Если НовыйЭлемент.Пустая() Тогда
           НовыйЭлемент = Справочники.Номенклатура.НайтиПоНаименованию(Наименование + " " + Цвет + " " + Размер);
       КонецЕсли;
       //Если не нашли создаем новый
       Если НовыйЭлемент.Пустая() Тогда
           
           НовыйЭлемент = Справочники.Номенклатура.СоздатьЭлемент();
           Родитель = ГрпНом;
           НовыйЭлемент.Родитель = Родитель;
           НовыйЭлемент.Артикул = Артикул;
           НовыйЭлемент.Коллекция = Коллекция;
           НовыйЭлемент.Цвет = Цвет;
           НовыйЭлемент.Размер = Размер;
           НовыйЭлемент.Наименование = СокрЛП(Наименование + " " + Цвет + " " + Размер);
           НовыйЭлемент.НаименованиеПолное = СокрЛП(Наименование + " " + Цвет + " " + Размер);
           НовыйЭлемент.ВидНоменклатуры = ПолеВвода1;
           НовыйЭлемент.БазоваяЕдиницаИзмерения = ЕдИзмер;        
           НовыйЭлемент.Записать();
           НовыйЕдИзмер = Справочники.ЕдиницыИзмерения.СоздатьЭлемент();
           НовыйЕдИзмер.ЕдиницаПоКлассификатору = ЕдИзмер;
           НовыйЕдИзмер.Наименование = ЕдИзмер.Наименование;
           НовыйЕдИзмер.Коэффициент = 1;
           НовыйЕдИзмер.Владелец = НовыйЭлемент.Ссылка;
           НовыйЕдИзмер.Записать();
           НовыйЭлемент.ЕдиницаХраненияОстатков = НовыйЕдИзмер.Ссылка;
           НовыйЭлемент.СтавкаНДС = СтавкаНДС;
           //НовыйЭлемент.ВестиУчетПоХарактеристикам = Истина;
           НовыйЭлемент.Записать();
           
             //Запись РегистраСведений Штрихкоды
           
           ЗаписьШК = Истина;
           РегСведШК = РегистрыСведений.Штрихкоды;
           ВыборкаРегСведШК = РегистрыСведений.Штрихкоды.Выбрать();
           Пока ВыборкаРегСведШК.Следующий() Цикл
               Если ВыборкаРегСведШК.Штрихкод = ШтрихКод Тогда
                   ЗаписьШК = Ложь;
               КонецЕсли;
           КонецЦикла;
           ЗаписьВРегистрСвед = РегистрыСведений.Штрихкоды.СоздатьМенеджерЗаписи();
           ЗаписьВРегистрСвед.Владелец = НовыйЭлемент.Ссылка;
           ЗаписьВРегистрСвед.ЕдиницаИзмерения = НовыйЭлемент.ЕдиницаХраненияОстатков;
           ЗаписьВРегистрСвед.Штрихкод = ШтрихКод;
           ЗаписьВРегистрСвед.ТипШтрихкода = ЭлементыФормы.ТипШК.Значение;//ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13;
           ЗаписьВРегистрСвед.Качество = Справочники.Качество.Новый;
           Если (ШК = 0) или (ШК > КолКолонок) Тогда
           Сообщить("ШтрихКод не будет добавлен к данному элементу: "+Наименование);
           ИначеЕсли ЗаписьВРегистрСвед.Выбран() Тогда
           ЗаписьВРегистрСвед.Записать();
           КонецЕсли;
       иначе
           НовыйЭлемент = Справочники.Номенклатура.НайтиПоНаименованию(Наименование + " " + Цвет + " " + Размер, Истина);
       КонецЕсли;        
       
       //Создадим Док Поступления товаров и услуг
       
       ДокПоступление = НовыйДокПоступление.Товары.Добавить();
       ДокПоступление.Номенклатура = НовыйЭлемент.Ссылка;
       ДокПоступление.Количество = Количество;
       ДокПоступление.Цена = Цена;
       ДокПоступление.Склад = Склад;
       ДокПоступление.ЕдиницаИзмерения = НовыйЭлемент.ЕдиницаХраненияОстатков;
       ДокПоступление.Коэффициент = НовыйЭлемент.ЕдиницаХраненияОстатков.Коэффициент;
       ДокПоступление.СтавкаНДС = СтавкаНДС;
       ДокПоступление.Сумма = Количество * Цена;                    
       Сообщить(Наименование+"-"+ШтрихКод+ " -- "+"Элемент записан");
       
       ////////////////////////////////////////////////////////
       //Создадим Док Поступления товаров и услуг
61 НЕА123
 
03.10.12
13:09
62 НЕА123
 
03.10.12
13:11
ТС таки ведь положит базу...
63 hhhh
 
03.10.12
13:32
(60) ну вот эту строчку выбросьте

   ИначеЕсли ЗаписьВРегистрСвед.Выбран() Тогда
       

на какой фиг вы проверяете выбран или не выбран, вам нужно ведь записать - так и записывайте.
64 EKO LX
 
03.10.12
13:37
(63) ее не было, а добавил потому что есть некоторые повторяющие шрихкоды, обработка ругалась владелец ШК уже существует
65 hhhh
 
03.10.12
13:40
(64) так она всегда не выбран(). Вы же не выбирали ее.
66 EKO LX
 
03.10.12
13:42
(65) а как сделать так чтобы если находила идентичный ШК все равно добавляла к другой номенклатуре?
67 EKO LX
 
03.10.12
13:44
(63) проверил без
ИначеЕсли ЗаписьВРегистрСвед.Выбран() Тогда

не добавляет
68 EKO LX
 
03.10.12
13:47
минутку, разве ЗаписьШК = Ложь; не оно?
Пока ВыборкаРегСведШК.Следующий() Цикл
               Если ВыборкаРегСведШК.Штрихкод = ШтрихКод Тогда
                   ЗаписьШК = Ложь;
               КонецЕсли;
           КонецЦикла;
69 hhhh
 
03.10.12
13:49
(68) ну она у вас Ложь. Это правда. Но дальше по программе вы нигде к ней не обращаетесь. Вашей программе в дальнейшем глубоко наплевать ложь там или не Ложь.
70 EKO LX
 
03.10.12
13:55
(68) ладно к черту проверка...а почему не записывает существующие?
71 EKO LX
 
03.10.12
13:55
(69)
72 hhhh
 
03.10.12
13:57
ну еще проверка

   Если (ШК = 0) или (ШК > КолКолонок) Тогда

похоже там не те ШК и КолКолонок. Вам же говорили использвать отладчик, вы не хотите.
73 EKO LX
 
03.10.12
14:46
(72) бинго!)) ШК это значение полученная из эксель, только ШК это имя поля ввода, а сама переменная называется ШтрихКод

ШтрихКод = ФайлXLS.Sheets(ТекНомер).Cells(1,ШК).Value;

только теперь ругается

Штрихкод: хххххххх уже имеет владельца уууууууу". как принудительно записать?