Имя: Пароль:
1C
1С v8
создание штрихкодов для номенклатуры
,
0 Валидатор
 
06.11.13
12:14
Гружу данные из файла в ТЗ, и потом на основании этой ТЗ гружу штрихкоды в номенклатуру, так вот, возникает проблема при загрузке штрихкода, делаю так:
Штрихкоды = РС.Штрихкоды. а что мы выбираем потом? нет варианта про создание новой записи, только: СоздатьНаборЗаписи и СоздатьМенеджерЗаписи(
1 Rie
 
06.11.13
12:15
(0) СоздатьМенеджерЗаписи - что, по-твоему, делает?
2 Валидатор
 
06.11.13
12:16
(1) а точно, не увидел видимо(
3 Валидатор
 
06.11.13
12:26
ругается, что поле недоступно для записи
{Форма.Форма.Форма(140)}: Поле объекта недоступно для записи (ШтрихКодыНоменклатуры)
    ШтрихкодыНоменклатуры = РегистрыСведений.Штрихкоды.СоздатьМенеджерЗаписи();
4 Валидатор
 
06.11.13
12:30
НоменклатураОбъект = Справочники.Номенклатура.СоздатьЭлемент();
    
    НоменклатураОбъект.Наименование = Наименование;
    НоменклатураОбъект.НаименованиеПолное = Наименование;
    НоменклатураОбъект.Родитель = Группа;
    НоменклатураОбъект.Артикул = Артикул;
    
    ЕдиницаИзмерения = "шт";
    
    НоменклатураОбъект.БазоваяЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию(ЕдиницаИзмерения);
    
    НоменклатураОбъект.СтавкаНДС = Перечисления.СтавкиНДС.НДС18;
        
    //Создаем штрихкоды
    ШтрихкодыНоменклатуры = РегистрыСведений.Штрихкоды.СоздатьМенеджерЗаписи();
    ШтрихКодыНоменклатуры.Владелец = НоменклатураОбъект;
    ШтрихКодыНоменклатуры.Штрихкод = Штрихкод;
    ШтрихКодыНоменклатуры.ЕдиницаИзмерения = ЕдиницаИзмерения;
    ШтрихКодыНоменклатуры.ТипШтрихкода = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13;
    Попытка
        ШтрихКодыНоменклатуры.Записать();
    Исключение
        Сообщить(ОписаниеОшибки());
    КонецПопытки;
5 Гефест
 
06.11.13
12:33
Правильно ругается. Нечего переменные как элементы формы обзывать
6 Валидатор
 
06.11.13
12:36
(5) переименовал переменную штрихкод, тоже самое, так что врядли из за наименований
7 Гефест
 
06.11.13
12:38
Следующий уровень сложности? Нужно угадать, где ты накосячил не видя кода?
8 Валидатор
 
06.11.13
12:38
Функция СоздатьНоменклатуру(Артикул,Наименование,Группа, ШтрихкодыНомен)
    
    НоменклатураОбъект = Справочники.Номенклатура.СоздатьЭлемент();
    
    НоменклатураОбъект.Наименование = Наименование;
    НоменклатураОбъект.НаименованиеПолное = Наименование;
    НоменклатураОбъект.Родитель = Группа;
    НоменклатураОбъект.Артикул = Артикул;
    
    ЕдиницаИзмерения = "шт";
    
    НоменклатураОбъект.БазоваяЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию(ЕдиницаИзмерения);
    
    НоменклатураОбъект.СтавкаНДС = Перечисления.СтавкиНДС.НДС18;
        
    //Создаем штрихкоды
    ШтрихкодыНоменклатуры = РегистрыСведений.Штрихкоды.СоздатьМенеджерЗаписи();
    ШтрихКодыНоменклатуры.Заполнить(
    ШтрихКодыНоменклатуры.Владелец = НоменклатураОбъект;
    ШтрихКодыНоменклатуры.Штрихкод = ШтрихкодыНомен;
    ШтрихКодыНоменклатуры.ЕдиницаИзмерения = ЕдиницаИзмерения;
    ШтрихКодыНоменклатуры.ТипШтрихкода = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13;
    Попытка
        ШтрихКодыНоменклатуры.Записать();
    Исключение
        Сообщить(ОписаниеОшибки());
    КонецПопытки;
    
    
    
    // Создадим ед.изм.
    ЕдИзмОбъект = Справочники.ЕдиницыИзмерения.СоздатьЭлемент();
    ЕдИзмОбъект.Владелец = НоменклатураОбъект;
    ЕдИзмОбъект.Наименование = ЕдиницаИзмерения;
    ЕдИзмОбъект.ЕдиницаПоКлассификатору = ЕдиницаИзмерения;
    ЕдИзмОбъект.Коэффициент = 1;
    Попытка
        ЕдИзмОбъект.Записать();
    Исключение
        Сообщить(ОписаниеОшибки());
    КонецПопытки;
    
    НоменклатураОбъект.ЕдиницаДляОтчетов = ЕдИзмОбъект.Ссылка;
    НоменклатураОбъект.ЕдиницаХраненияОстатков = ЕдИзмОбъект.Ссылка;
    Попытка
        НоменклатураОбъект.Записать();
        Номенклатура = НоменклатураОбъект.Ссылка;
    Исключение
        Сообщить(ОписаниеОшибки());
    КонецПопытки;
    
    Возврат Номенклатура;
КонецФункции    //СоздатьНоменклатуру

вот функция по созданию номенклатуры
9 Ненавижу 1С
 
гуру
06.11.13
12:39
НоменклатураОбъект = Справочники.Номенклатура.СоздатьЭлемент();
ШтрихКодыНоменклатуры.Владелец = НоменклатураОбъект; //так нельзя
10 hhhh
 
06.11.13
12:39
(8) ну ошибка

Поле объекта недоступно для записи (ШтрихКодыНоменклатуры)

зачем вы переменную Штрихкод переименовывали?
11 Rie
 
06.11.13
12:41
(8) Не, даже гадать не буду. Поскольку это - не тот код, который исполняется.
12 Валидатор
 
06.11.13
12:43
(11) там сначала все в ТЗ грузится, а потом данные из тз передаются в эту функцию:
Для каждого Строчка из ТаблицаЗначений Цикл
            
            НоменклатураПоискПоНаименованию = Справочники.Номенклатура.НайтиПоНаименованию(Строчка.Артикул);
            Если НоменклатураПоискПоНаименованию = Справочники.Номенклатура.ПустаяСсылка() Тогда
                НоменклатураПоискПоНаименованию = СоздатьНоменклатуру(Строчка.Артикул, Строчка.Номенклатура, ГруппаТоваровНов,Строчка.Штрихкод);
                НоменклатураПоискПоНаименованию = НоменклатураПоискПоНаименованию.Ссылка;    
            КонецЕсли;
13 Валидатор
 
06.11.13
12:43
(10) ошибка летит все равно на строке когда я создаю менеджер записей в РС в коде из (8)
14 hhhh
 
06.11.13
12:45
(13) а так?

ОфигительныеШтрихкодыНоменклатуры = РегистрыСведений.Штрихкоды.СоздатьМенеджерЗаписи();
    

???
15 Alex S D
 
06.11.13
12:45
см (5)
16 Валидатор
 
06.11.13
12:45
отладчиком смотрел, доходит суда:
ШтрихкодыНоменклатуры = РегистрыСведений.Штрихкоды.СоздатьМенеджерЗаписи();
и валит ошибку
17 Rie
 
06.11.13
12:46
(12) Не знаю, что там куда грузится. Но код с синтаксическими ошибками - не исполняется. Давай реальный код.
18 Гефест
 
06.11.13
12:47
(13) Зачем ты переименовал постороннюю переменную, а не ту, на которую у тебя ошибка?

А вообще, выбрось весь этот код
19 hhhh
 
06.11.13
12:50
(16) ШтрихкодыНоменклатуры - это переменная, элемент твоей формы. Зачем ты в нее регистр сведений какой-то впихиваешь?
20 Валидатор
 
06.11.13
12:51
да с переменной я уже понял, что надо было переименовать ее, теперь тут вылезает проблема при записи, сейчас скину ошибку, не записывается штрихкод
21 Валидатор
 
06.11.13
12:52
ругается на владельца, хоть я и ставлю Номенклатуру в владельцы штрихкодов только после записи уже созданной номенклатуры
22 Ненавижу 1С
 
гуру
06.11.13
12:54
(21) см (9)
23 hhhh
 
06.11.13
12:56
(21) это не номенклатуру ставите, а НоменклатуруОбъект.
24 Валидатор
 
06.11.13
12:59
{Форма.Форма.Форма(148)}: Ошибка при вызове метода контекста (Записать): Значение поля "Номенклатура" не заполнено или заполнено неверно
Штрихкод: 4602634334795<неи уже имеет владельца "ОБЛОЖКА ДЛЯ ПРАВ,ДОВЕРЕН.".
{Форма.Форма.Форма(171)}: Ошибка при вызове метода контекста (Записать): Не удалось записать: "Штрихкоды"!
При первом запуске обработке, номенклатура создается, и пишется в нее штрихкод, потом вылетает ошибка:
{Форма.Форма.Форма(148)}: Ошибка при вызове метода контекста (Записать): Значение поля "Номенклатура" не заполнено или заполнено неверно
Когда повторно запускаю обработку вылетает:
Штрихкод: 4602634334795<неи уже имеет владельца "ОБЛОЖКА ДЛЯ ПРАВ,ДОВЕРЕН.".
{Форма.Форма.Форма(171)}: Ошибка при вызове метода контекста (Записать): Не удалось записать: "Штрихкоды"!
1 вопрос: почему при первом создании валится ошибка
2. как сделать проверку на наличие данных в РС? через срез последних?
25 Валидатор
 
06.11.13
12:59
Функция СоздатьНоменклатуру(Артикул,Наименование,Группа, Штрихкод)
    
    НоменклатураОбъект = Справочники.Номенклатура.СоздатьЭлемент();
    
    НоменклатураОбъект.Наименование = Наименование;
    НоменклатураОбъект.НаименованиеПолное = Наименование;
    НоменклатураОбъект.Родитель = Группа;
    НоменклатураОбъект.Артикул = Артикул;
    
    ЕдиницаИзмерения = "шт";
    
    НоменклатураОбъект.БазоваяЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию(ЕдиницаИзмерения);
    
    НоменклатураОбъект.СтавкаНДС = Перечисления.СтавкиНДС.НДС18;
        
    // Создадим ед.изм.
    ЕдИзмОбъект = Справочники.ЕдиницыИзмерения.СоздатьЭлемент();
    ЕдИзмОбъект.Владелец = НоменклатураОбъект;
    ЕдИзмОбъект.Наименование = ЕдиницаИзмерения;
    ЕдИзмОбъект.ЕдиницаПоКлассификатору = ЕдиницаИзмерения;
    ЕдИзмОбъект.Коэффициент = 1;
    Попытка
        ЕдИзмОбъект.Записать();
    Исключение
        Сообщить(ОписаниеОшибки());
    КонецПопытки;
    
    НоменклатураОбъект.ЕдиницаДляОтчетов = ЕдИзмОбъект.Ссылка;
    НоменклатураОбъект.ЕдиницаХраненияОстатков = ЕдИзмОбъект.Ссылка;
    Попытка
        НоменклатураОбъект.Записать();
        Номенклатура = НоменклатураОбъект.Ссылка;
    Исключение
        Сообщить(ОписаниеОшибки());
    КонецПопытки;
    
    //Создаем штрихкоды
    Штрихкоды = РегистрыСведений.Штрихкоды.СоздатьМенеджерЗаписи();
    ШтрихКоды.Владелец = Номенклатура;
    ШтрихКоды.Штрихкод = Штрихкод;
    ШтрихКоды.ЕдиницаИзмерения = ЕдиницаИзмерения;
    ШтрихКоды.ТипШтрихкода = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13;
    Штрихкоды.Качество = Справочники.Качество.Новый;

    Попытка
        ШтрихКоды.Записать();
    Исключение
        Сообщить(ОписаниеОшибки());
    КонецПопытки;
    
    

    Возврат Номенклатура;
КонецФункции    //СоздатьНоменклатуру
26 Rie
 
06.11.13
13:04
(25) Вот это:
ЕдИзмОбъект.Владелец = НоменклатураОбъект;
впечатляет!

Друг! Разберись с системой типов в 1С!
27 Валидатор
 
06.11.13
13:05
(26) эту строку я убрал, там Неопределено потому что присвается тип спр.номенклатуры
28 Rie
 
06.11.13
13:07
(27) "Друг! Разберись с системой типов в 1С!" (с)
Ну, пожалуйста!
Убрал строку - а дальше-то что? Кто владельцем будет?
И - показывай _рабочий_ код. А то с телепятией что-то сегодня туговато, кто знает, что там у тебя на самом деле выполняется...
29 Валидатор
 
06.11.13
13:09
(28) а какого владельца я тогда присвою, если у владельца тип неопределено?
30 Валидатор
 
06.11.13
13:10
(28) выполняется тот код, который я присылал где функция создать номенклатуру
31 hhhh
 
06.11.13
13:12
ЕдИзмОбъект = Справочники.ЕдиницыИзмерения.СоздатьЭлемент();
     Попытка
        НоменклатураОбъект.Записать();
        Номенклатура = НоменклатураОбъект.Ссылка;
    Исключение
        Сообщить(ОписаниеОшибки());
    КонецПопытки;   ЕдИзмОбъект.Владелец = Номенклатура;
    ЕдИзмОбъект.Наименование = ЕдиницаИзмерения;
    ЕдИзмОбъект.ЕдиницаПоКлассификатору = ЕдиницаИзмерения;
    ЕдИзмОбъект.Коэффициент = 1;
    Попытка
        ЕдИзмОбъект.Записать();
    Исключение
        Сообщить(ОписаниеОшибки());
    КонецПопытки;
    
    НоменклатураОбъект.ЕдиницаДляОтчетов = ЕдИзмОбъект.Ссылка;
    НоменклатураОбъект.ЕдиницаХраненияОстатков = ЕдИзмОбъект.Ссылка;
    Попытка
        НоменклатураОбъект.Записать();
        Номенклатура = НоменклатураОбъект.Ссылка;
    Исключение
        Сообщить(ОписаниеОшибки());
    КонецПопытки;
32 Валидатор
 
06.11.13
13:13
с владельцем разобрался, сотался штрихкод
33 Валидатор
 
06.11.13
13:15
Функция СоздатьНоменклатуру(Артикул,Наименование,Группа, Штрихкод)
    
    НоменклатураОбъект = Справочники.Номенклатура.СоздатьЭлемент();
    
    НоменклатураОбъект.Наименование = Наименование;
    НоменклатураОбъект.НаименованиеПолное = Наименование;
    НоменклатураОбъект.Родитель = Группа;
    НоменклатураОбъект.Артикул = Артикул;
    
    ЕдиницаИзмерения = "шт";
    
    НоменклатураОбъект.БазоваяЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию(ЕдиницаИзмерения);
    
    НоменклатураОбъект.СтавкаНДС = Перечисления.СтавкиНДС.НДС18;
    
    Попытка
        НоменклатураОбъект.Записать();
        Номенклатура = НоменклатураОбъект.Ссылка;
    Исключение
        Сообщить(ОписаниеОшибки());
    КонецПопытки;

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

    Возврат Номенклатура;
КонецФункции    //СоздатьНоменклатуру

ругается что уже есть владелец

Штрихкод: 4602634334795<неи уже имеет владельца "ОБЛОЖКА ДЛЯ ПРАВ,ДОВЕРЕН.".
{Форма.Форма.Форма(175)}: Ошибка при вызове метода контекста (Записать): Не удалось записать: "Штрихкоды"!

какую проверку сделать на наличие владельца?
34 Rie
 
06.11.13
13:19
(32) Измерения - уникальны. Вот это и смотри. IMHO.
35 Валидатор
 
06.11.13
13:24
При поиске по реквизиту, мы указываем ведь 2 нужных параметра из 4 по сути, это наименование реквизита в объекте, и какое значение ищем, так ведь?
36 Валидатор
 
06.11.13
13:25
То есть если я хочу найти значение(Строчка.Артикул) по реквизиту в справочнике номенклатура, буду делать так:
Поиск = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул", Строчка.Артикул); так?
37 Валидатор
 
06.11.13
13:26
да точно, спс