Имя: Пароль:
1C
 
Как получть штрих код для товара?
0 krava_vlad
 
19.07.07
18:12
Делаю так, но выдает ошибку на ШтрихКода.ШтрихКод; Значение не является значением объектного типа (ШтрихКод)
       СтруктураШтрихКода = Новый Структура();
       СтруктураШтрихКода.Вставить("Владелец", ДанныеСтроки.Ссылка);
       СтруктураШтрихКода.Вставить("ТипШтрихкода", ДанныеСтроки.Ссылка.УдалитьТипШтрихкода);
       ШтрихКода  = РегистрыСведений.ШтрихКоды.ПолучитьПоследнее(ДатаОстатков, СтруктураШтрихКода);
       ОформлениеСтроки.Ячейки.ШтрихКод.Текст           = ШтрихКода.ШтрихКод;
       ОформлениеСтроки.Ячейки.ШтрихКод.ОтображатьТекст = Истина;
1 Злобный Фей
 
19.07.07
18:16
(0) Отладчик для кого придумали?
2 krava_vlad
 
19.07.07
18:19
И при чем здесь отладчик?
Он не выполняет запрос болеее всего к регистру сведений...
3 krava_vlad
 
19.07.07
18:24
ШтрихКода пишет в конфигураторе неопределено почему
4 krava_vlad
 
19.07.07
19:03
Разве никто не пользовался штрих кодами?
5 Андрюха
 
19.07.07
19:06
(2) Фей дело говорит. В отладчике можешь поэкспериментировать с вызовом  РегистрыСведений.ШтрихКоды.ПолучитьПоследнее
6 SADA
 
19.07.07
19:07
переменной "ШтрихКода" ничего не присваевается.
7 SADA
 
19.07.07
19:11
Погоди 5 мин я тебе напишу как получить !
8 krava_vlad
 
19.07.07
19:12
нашел функцию для получения штрих кода но и она возвращает выборку = 0. Передавл владельца, владельца и еденицу измерения все равно ноль на масу
// Функция возвращает штрих-код для требуемой номенклатуры,
// на заданную дату, за заданную единицу измерения, пересчитанную в требуемую валюту по заданному курсу.
//
// Параметры:
//  ТипШтрихкода                   - ссылка на элемент плана видов характеристик "ТипыШтрихкодов",
//  Владелец                       - ссылка на элемент справочника "Номенклатура",
//  ЕдиницаИзмерения               - ссылка на элемент справочника "Единицы измерения", определяет
//                                   для какой единицы надо получить штрихкод,
//  ХарактеристикаНоменклатуры     - ссылка на элемент справочника "Характеристики номенклатуры", определяет
//                                   для какой характеристики надо получить штрихкод,
//  СерияНоменклатуры              - ссылка на элемент справочника "Характеристики номенклатуры", определяет
//                                   для какой характеристики надо получить штрихкод,
//  КачествоНоменклатуры           - ссылка на элемент справочника "Характеристики номенклатуры", определяет
//                                   для какой характеристики надо получить штрихкод.
//
// Возвращаемое значение:
//  Строка таблицы значений - результата запроса.
//
Функция ПолучитьШтрихКод(Владелец, ЕдиницаИзмерения = Неопределено, ХарактеристикаНоменклатуры = Неопределено,
                        СерияНоменклатуры = Неопределено, Качество = Неопределено) Экспорт

   ПолученныйШтрихкод = Неопределено;
   Запрос = Новый Запрос;
   
   Если ТипЗнч(ЕдиницаИзмерения) = Тип ("Неопределено") Тогда
       ЕдиницаИзмерения = Справочники.ЕдиницыИзмерения.ПустаяСсылка();
   КонецЕсли;
   
   Если ТипЗнч(ХарактеристикаНоменклатуры) = Тип ("Неопределено") Тогда
       ХарактеристикаНоменклатуры = Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка();
   КонецЕсли;
   Если ТипЗнч(СерияНоменклатуры) = Тип ("Неопределено") Тогда
       СерияНоменклатуры = Справочники.СерииНоменклатуры.ПустаяСсылка();
   КонецЕсли;
   Если ТипЗнч(Качество) = Тип ("Неопределено") Тогда
       Качество = Справочники.Качество.ПустаяСсылка();
   КонецЕсли;
   Запрос.УстановитьПараметр("Владелец", Владелец);
   Запрос.УстановитьПараметр("ЕдиницаИзмерения", ЕдиницаИзмерения);
   Запрос.УстановитьПараметр("ХарактеристикаНоменклатуры", ХарактеристикаНоменклатуры);
   Запрос.УстановитьПараметр("СерияНоменклатуры", СерияНоменклатуры);
   Запрос.УстановитьПараметр("Качество", Качество);
   Запрос.Текст = "
   |ВЫБРАТЬ //ПЕРВЫЕ 1
   |    РегШтрихкоды.ТипШтрихкода,
   |    РегШтрихкоды.Штрихкод,
   |    РегШтрихкоды.Код
   |    ИЗ РегистрСведений.Штрихкоды КАК РегШтрихкоды
   |
   |ГДЕ
   |    НЕ РегШтрихкоды.Штрихкод Есть NULL И
   |    РегШтрихкоды.Владелец = &Владелец И
   |    РегШтрихкоды.ЕдиницаИзмерения = &ЕдиницаИзмерения И
   |    РегШтрихкоды.ХарактеристикаНоменклатуры = &ХарактеристикаНоменклатуры И
   |    РегШтрихкоды.СерияНоменклатуры = &СерияНоменклатуры И
   |    РегШтрихкоды.Качество = &Качество
   |";

   Выборка = Запрос.Выполнить().Выгрузить();
   
   Если Выборка.Количество() > 0 Тогда
       ПолученныйШтрихкод = Выборка[0];
   КонецЕсли;

   Возврат ПолученныйШтрихкод;

КонецФункции // ПолучитьШтрихКод()
9 SADA
 
19.07.07
19:13
//-----------------------------------------------  
Функция ПолучитьШтрихкоды(Штрихкод = "", Все = Ложь, Владелец,
                                                            ЕдиницаИзмерения = Неопределено,
                                                            ХарактеристикаНоменклатуры = Неопределено,
                                                            СерияНоменклатуры = Неопределено,
                                                          Качество = Неопределено)
//    Получает штрихкоды номенклатурной позиции
//    
   // Создадим запрос по регистру сведений
   Запрос = Новый Запрос;
   Запрос.УстановитьПараметр("Владелец",                    Владелец);
   Запрос.УстановитьПараметр("ЕдиницаИзмерения",            ЕдиницаИзмерения);
   Запрос.УстановитьПараметр("ХарактеристикаНоменклатуры",    ХарактеристикаНоменклатуры);
   Запрос.УстановитьПараметр("СерияНоменклатуры",            СерияНоменклатуры);
   Запрос.УстановитьПараметр("Качество",                    Качество);
   Запрос.УстановитьПараметр("ШК",                            Штрихкод);
   
   ТекстЗапроса = "
   |ВЫБРАТЬ РАЗЛИЧНЫЕ"+?(Все, "", " ПЕРВЫЕ 1")+"
   |    Штрихкоды.Штрихкод
   |ИЗ
   |    РегистрСведений.Штрихкоды КАК Штрихкоды
   |
   |ГДЕ
   |    Штрихкоды.Владелец = &Владелец
   |"+?(НЕ ЗначениеНеЗаполнено(ЕдиницаИзмерения),            " И Штрихкоды.ЕдиницаИзмерения = &ЕдиницаИзмерения","")+"
   |"+?(НЕ ХарактеристикаНоменклатуры=Неопределено," И Штрихкоды.ХарактеристикаНоменклатуры = &ХарактеристикаНоменклатуры","")+"
   |"+?(НЕ ЗначениеНеЗаполнено(СерияНоменклатуры),            " И Штрихкоды.СерияНоменклатуры = &СерияНоменклатуры","")+"
   |"+?(НЕ ЗначениеНеЗаполнено(Качество),                    " И Штрихкоды.Качество = &Качество","")+"
   |
   |УПОРЯДОЧИТЬ ПО
   |    Штрихкод";

   Запрос.Текст= ТекстЗапроса;
   Рез        = Запрос.Выполнить();
   Выборка = Рез.Выбрать(ОбходРезультатаЗапроса.Прямой);
   ШК = ""; Массив = Новый Массив();
   Пока Выборка.Следующий() Цикл
       ШК    = Выборка.Штрихкод;
       Если НЕ Все Тогда Прервать; КонецЕсли;
       Массив.Добавить(ШК);
   КонецЦикла;
   
   // Вернем штрих-код или массив найденных ШК
   Если НЕ Все Тогда Возврат ШК; Иначе Возврат Массив; КонецЕсли;
КонецФункции // ПолучитьШтрихкоды
10 SADA
 
19.07.07
19:20
В качестве отботра ты передаешь структуру которая содержит ресурсы регистра
а надо передавать ИЗМЕРЕНИЯ
"Структура, содержащая отбор по измерениям регистра. Имя ключа структуры должно совпадать с именем измерения регистра, заданного в конфигураторе, а значение элемента структуры - задает отбираемое по данному измерению значение."

Но в данном случае измерение у регистра ШК только одно ото "Код" но ты его незнаешь, по этому приходится получать значение запросом !
11 krava_vlad
 
19.07.07
19:21
(5) ррр = РегистрыСведений.ШтрихКоды.ПолучитьПоследнее();
в отладчике ррр = неопределено;
(7) Ок. Очень буду благодарен, а то уже никак не могу догнать (или еще опыта маловато) + жара невозможно сидеть, а менеджера хотят сразу видеть шитрих кода в справочнике
12 krava_vlad
 
19.07.07
19:24
(9) Спаисбо, щас попробую.
А можно еще попросить сразу: Как по штрих коду найти товар?
13 SADA
 
19.07.07
19:25
проблема в том что у одной номенклатуры может быть несколько ШК, они могут назначатся как на сам товат
так и на его характеристики и серии , единици измерения, качество
по этому тебе надо определится какой ШК ты будешь брать
но в принципе моя процедурка подойдет !
14 SADA
 
19.07.07
19:26
Функция ШтрихкодыНоменклатуры(Штрихкод)
//    Получает информацию по заданному штрихкоду
//    
   // Создадим запрос по регистру сведений
   Запрос = Новый Запрос;
   Запрос.УстановитьПараметр("ШК",Штрихкод);
   
   ТекстЗапроса = "
   |ВЫБРАТЬ РАЗЛИЧНЫЕ
   |    Штрихкоды.Владелец                КАК Номенклатура,
   |    Штрихкоды.Владелец.Наименование    КАК Наименование,
   |    Штрихкоды.ЕдиницаИзмерения        КАК ЕдиницаИзмерения
   |ИЗ
   |    РегистрСведений.Штрихкоды КАК Штрихкоды
   |
   |ГДЕ
   |    Штрихкоды.Штрихкод = &ШК
   |
   |УПОРЯДОЧИТЬ ПО
   |    Номенклатура,
   |    ЕдиницаИзмерения";

   Запрос.Текст= ТекстЗапроса;
   Возврат    Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.Прямой);
КонецФункции // ШтрихкодыНоменклатуры()
15 SADA
 
19.07.07
19:29
еще скорее всего это реально затормозит отображение номенклатуры
потому как ты по каждому елементу запрос выполняешь в цикле
в идеале тебе нужно сразу одним запросом получить все ШК н аотоброшаемый товар!!
но это уже сложнее :)))
16 krava_vlad
 
19.07.07
19:32
(15) Потом все равно его надо перебирать в циклке для того чтобы присвоить нужному артикулу. Я вывожу в форме списка и это процедура  срабатывает для строк которые новые отображаются, тоесть за один раз отображается гдето до 20 артикулов.
17 krava_vlad
 
19.07.07
19:34
(13) У меня в базе стоит контроль на штрих коды. И я так понимаю штрих код у пары обуви и у ящика всегда разный? Поэтому 1 штрих код = одному товару с определеными характеристиками
18 SADA
 
19.07.07
19:36
(17) да но никто не мешает пользователям завести второй ШК но эту же характеристику :)) !!!!
19 SADA
 
19.07.07
19:38
База разрешает заведение у одной номенклатуры сколько угодно ШК на одну и туже характеристику !
20 krava_vlad
 
19.07.07
19:47
(19) Да точно. Тогда с товара выходить на штрих  код не всегда правьно.
А вот с штрих на товар это нормально. Ну а в базе повторений штрих кодов не должно быть?
21 krava_vlad
 
19.07.07
19:49
(9) Функция не обрабатывает еденицу измерения. как именно для конкретной еденицы товара?
22 SADA
 
19.07.07
19:52
Повторения ШК теоретически возможны
потому как сам ШК в регистре сидит не в измерении а в ресурсе.
если ты хочешь использовать данную возможность то тебе надо в настройках параметров включить флажек "Разрешить назначение не уникальных ШК" по умлчаению эта возможность отключена !
23 krava_vlad
 
19.07.07
19:54
(21) Нет сори все работает. Выбирает в зависимости от еденицы.
24 SADA
 
19.07.07
19:55
В чем проблема с единицей измерения ?
если ты передаешь единицу измерения в функцию
то она ищет ШК назначеный на эту единицу, если нет, то ее не учитывает!
25 krava_vlad
 
19.07.07
19:57
(22) Нет мне надо чтобы ШК были уникальны. И надо запретить пользователям на один товар (еденицу измерения) вбивать разные ШК -- как это можно сделать?
26 SADA
 
19.07.07
20:00
ШК назначаются только в справочнике номенклатуры, там и проверяй при записи строки есть ли с на эти параметры назанченый ШК или нет
если есть, громко ругайся .
27 krava_vlad
 
19.07.07
20:10
(24) проблема действительно есть. Если у товара нету такой единица на которою я делаю проверку, оно возвращает мне ШК на базовцю единицу товара. В чем ошибка?
28 SADA
 
19.07.07
20:17
У тебя случаено в локальном (глобальном) контексте нет переменой ЕдиницаИзмерения со значением базовой единици) посмотри в отладчике
что в параметр запроса передается
29 SADA
 
19.07.07
20:19
ладно я домой, напиши в почту если что...
30 krava_vlad
 
19.07.07
20:29
В функцию передат значение неопределено, и в ней через отладчик также видно неопределено. Ок. Спасибо за помощь
31 krava_vlad
 
19.07.07
21:22
+ (30) Исправил код в запросе, написал

?(НЕ ЕдиницаИзмерения=Неопределено,            " И Штрихкоды.ЕдиницаИзмерения = &ЕдиницаИзмерения","")

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