Версия для печати темы (https://pro1c.org.ua/index.php?s=1a6c085bdd8fa410b7484f4a56fc4ab3&showtopic=40399)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ ШтрихКод в документе заказа

Автор: Lexveritas 19.09.17, 14:26

Всем доброго времени!

Есть такая задача: Документ "Заказ покупателя", в нем номенклатура, характеристика, единица измерения. Поле штрихкода. Штрихкод подвязан к характеристике и единице змерения. Выбор номенклатуры, характеристики, единицы - срабатывает собитые, которое вытягивает штрихкод в его клетку.

Проблема... Ничего не вытягивается из регистра. Знаний в 1С программировании минимум, так что сделано было вот так:

В общем модуле -

Функция ПолучитьШтрихКод(АктуальнаяДата, мВладелец, мЕдиницаИзмерения, мХарактеристикаНоменклатуры) Экспорт
    Отбор = Новый Структура;
    Отбор.Вставить("Владелец", мВладелец);
    ЗначенияРесурсов = РегистрыСведений.Штрихкоды.ПолучитьПоследнее(АктуальнаяДата, Отбор);
    Возврат ЗначенияРесурсов.Штрихкод;
КонецФункции


В документе -
ШтрихКод = РаботаСДокументами.ПолучитьШтрихКод();


Что то не так, потому как и "много фактических параметров" и разная фигня происходит в виде "метод объекта не найден". Из других регистров таким образом данные вытянуть получается, вот с ШК ничего не выходит!

Буду очень рад любой помощи и свежим идеям!

1С8.3.10, УПП.

Автор: sava1 19.09.17, 14:48

Дак в УПП все стандартно работает - без "костылей". К чему эти "примочки" ?

Автор: Vofka 19.09.17, 15:15

Lexveritas, для того, что бы вызвать эту функцию, в неё нужно передать 4 параметра, а вы не одного не передаёте.

sava1, ну так подскажите человеку, как решить его проблему без костылей. Или какой смысл вашего сообщения?

Автор: Lexveritas 19.09.17, 16:05

sava1 @ Сегодня, 15:48 * ,

Просто для того, чтоб вручную не переносить штрихкод в документ. А, так в УПП с ШК всё нормально и костылей не требует!

Vofka @ Сегодня, 16:15 * ,

Передал параметры.

Вот полный текст функции:

Процедура ПолучитьКодыБухтКнопка(Элемент)
    Стр12 = ЭлементыФормы.Товары.ТекущиеДанные;
    Для каждого Стр12 Из Товары Цикл
    АктуальнаяДата = Дата;
    КодН = РаботаСДокументами.ПолучитьШтрихКод(АктуальнаяДата, Стр12.Номенклатура, Стр12.ЕдиницаИзмерения, Стр12.ХарактеристикаНоменклатуры);
    КонецЦикла;
КонецПроцедуры


А, вот что получил в итоге в выводе:
{ОбщийМодуль.РаботаСДокументами.Модуль(220)}: Значение не является значением объектного типа (Штрихкод)
Возврат ЗначенияРесурсов.Штрихкод;

Из любых других регистров нормально тянутся данные, а вот с штрихкодами как то провис...

Автор: sava1 19.09.17, 16:49

1.Штрихкоды - непериодический регистр
2. Попробуйте запросом - ибо отбор надо брать и по характеристике и Единице измерения
3. Надо проверять полученное значение - может такого ШК нет?

Автор: Lexveritas 19.09.17, 18:01

sava1 @ Сегодня, 17:49 * ,
Проверять наличие ШК нет надобности. Он там однозначно есть.
Отбор да... И по характеристике и по единице измерения.
Может подскажете как сформировать запрос?

В общем модуле наворотил что то вот такое:

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

Автор: sava1 19.09.17, 18:58

Цитата(Lexveritas @ 19.09.17, 19:01) *
|ГДЕ | Штрихкоды.Владелец = &Владелец


И Характеристика=.....
И ЕдиницаИзмерения=....


соответственно УстановитьПарамерты

Группировки не надо, упорядочивать не надо

Автор: Lexveritas 19.09.17, 19:23

Цитата(sava1 @ 19.09.17, 19:58) *
И Характеристика=.....
И ЕдиницаИзмерения=....


Вообще ничего не понял. Я с запросами не дружен...

Можна подробнее как это выглядит?

Автор: sava1 19.09.17, 20:41

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

Автор: Lexveritas 20.09.17, 9:26

sava1 @ Вчера, 21:41 * ,
Понял.
Примерно так и колдовал, но как то в строку... Соответственно ничего и не выходило!
Буду пробовать!

Автор: Lexveritas 20.09.17, 13:00

sava1 @ Вчера, 21:41 * ,
Премного благодарствую!

Понял целую гору своих ошибок!

Через какое то время неведомого колдовства родилась вот такая процедура, которая из штрихкода тянет коды мерной и немерной бухты. У нас код товара - последние 6 цифр штрихкода... Вручную обработать огромный заказ, просто ад.

Процедура ПолучитьКодыБухтКнопка(Элемент)
    Стр12 = ЭлементыФормы.Товары.ТекущиеДанные;
    Для каждого Стр12 Из Товары Цикл
    ЗапросКодН = Новый Запрос;
    ЗапросКодН.Текст =("
    | ВЫБРАТЬ
    |    Штрихкоды.Штрихкод
    |ИЗ
    |    РегистрСведений.Штрихкоды КАК Штрихкоды
    |ГДЕ
    |    Штрихкоды.Владелец = &Владелец
    |    И Штрихкоды.ХарактеристикаНоменклатуры = &ХарактеристикаНоменклатуры
    |    И Штрихкоды.ЕдиницаИзмерения = &ЕдиницаИзмерения
    |");
    ЗапросКодН.УстановитьПараметр("Владелец", Стр12.Номенклатура);
    ЗапросКодН.УстановитьПараметр("ХарактеристикаНоменклатуры", Стр12.ХарактеристикаНоменклатуры);
    ЗапросКодН.УстановитьПараметр("ЕдиницаИзмерения", Стр12.ЕдиницаИзмерения);
    РезультатКодН = ЗапросКодН.Выполнить().Выбрать();
    Пока РезультатКодН.Следующий() Цикл
        НШК = РезультатКодН.Штрихкод;
        Стр12.КодН = НШК - 2000000000000;
    КонецЦикла;
    ЗапросКодМ = Новый Запрос;
    ЗапросКодМ.Текст =("
    | ВЫБРАТЬ
    |    Штрихкоды.Штрихкод
    |ИЗ
    |    РегистрСведений.Штрихкоды КАК Штрихкоды
    |ГДЕ
    |    Штрихкоды.Владелец = &Владелец
    |    И Штрихкоды.ХарактеристикаНоменклатуры = &ХарактеристикаНоменклатуры
    |    И Штрихкоды.ЕдиницаИзмерения = &ЕдиницаИзмерения
    |");
    ЗапросКодМ.УстановитьПараметр("Владелец", Стр12.Номенклатура);
    ЗапросКодМ.УстановитьПараметр("ХарактеристикаНоменклатуры", Стр12.ХарактеристикаНоменклатуры);
    ЗапросКодМ.УстановитьПараметр("ЕдиницаИзмерения", Стр12.Разбухтовка);
    РезультатКодМ = ЗапросКодМ.Выполнить().Выбрать();
    Пока РезультатКодМ.Следующий() Цикл
        МШК = РезультатКодМ.Штрихкод;
        Стр12.КодМ = МШК - 2000000000000;
        КонецЦикла;

КонецЦикла;
КонецПроцедуры


Может кому пригодится!

Автор: sava1 20.09.17, 13:39

Цитата(Lexveritas @ 20.09.17, 14:00) *
Может кому пригодится!


Никому такое не прогодится :
1. Запрос в цикле - вооще-то можно, если очень хочется.
2. Текста запроса достаточно одного и объявить вне цикла
3. зачем нужны текущиеДанные, если Вы их не используете ?

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua