Есть такая задача: Документ "Заказ покупателя", в нем номенклатура, характеристика, единица измерения. Поле штрихкода. Штрихкод подвязан к характеристике и единице змерения. Выбор номенклатуры, характеристики, единицы - срабатывает собитые, которое вытягивает штрихкод в его клетку.
Проблема... Ничего не вытягивается из регистра. Знаний в 1С программировании минимум, так что сделано было вот так:
В общем модуле -
Функция ПолучитьШтрихКод(АктуальнаяДата, мВладелец, мЕдиницаИзмерения, мХарактеристикаНоменклатуры)Экспорт
Отбор = Новый Структура;
Отбор.Вставить("Владелец", мВладелец);
ЗначенияРесурсов = РегистрыСведений.Штрихкоды.ПолучитьПоследнее(АктуальнаяДата, Отбор);
Возврат ЗначенияРесурсов.Штрихкод;
КонецФункции
В документе -
ШтрихКод = РаботаСДокументами.ПолучитьШтрихКод();
Что то не так, потому как и "много фактических параметров" и разная фигня происходит в виде "метод объекта не найден". Из других регистров таким образом данные вытянуть получается, вот с ШК ничего не выходит!
А, вот что получил в итоге в выводе: {ОбщийМодуль.РаботаСДокументами.Модуль(220)}: Значение не является значением объектного типа (Штрихкод) Возврат ЗначенияРесурсов.Штрихкод;
Из любых других регистров нормально тянутся данные, а вот с штрихкодами как то провис...
Живет на форуме
Группа: Местный
Сообщений: 2752
Из: Проскуров
Спасибо сказали: 709 раз
Рейтинг: 688.5
1.Штрихкоды - непериодический регистр 2. Попробуйте запросом - ибо отбор надо брать и по характеристике и Единице измерения 3. Надо проверять полученное значение - может такого ШК нет?
sava1 @ Сегодня, 17:49
, Проверять наличие ШК нет надобности. Он там однозначно есть. Отбор да... И по характеристике и по единице измерения. Может подскажете как сформировать запрос?
В общем модуле наворотил что то вот такое:
ШК="";
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1
|Штрихкоды.Штрихкод КАК Штрихкод
|ИЗ
| РегистрСведений.Штрихкоды КАК Штрихкоды
|ГДЕ
| Штрихкоды.Владелец = &Владелец
|
|СГРУППИРОВАТЬ ПО
| Штрихкоды.Штрихкод
|
|УПОРЯДОЧИТЬ ПО
| Штрихкод УБЫВ";
Запрос.УстановитьПараметр("Владелец",Номенклатура);
Выб = Запрос.Выполнить().Выбрать();
Если Выб.Следующий() Тогда
ШК=Выб.Штрихкод;
КонецЕсли;
Возврат(ШК);
КонецФункции
Через какое то время неведомого колдовства родилась вот такая процедура, которая из штрихкода тянет коды мерной и немерной бухты. У нас код товара - последние 6 цифр штрихкода... Вручную обработать огромный заказ, просто ад.
Процедура ПолучитьКодыБухтКнопка(Элемент)
Стр12 = ЭлементыФормы.Товары.ТекущиеДанные;
Длякаждого Стр12Из Товары Цикл
ЗапросКодН = Новый Запрос;
ЗапросКодН.Текст =("
| ВЫБРАТЬ
| Штрихкоды.Штрихкод
|ИЗ
| РегистрСведений.Штрихкоды КАК Штрихкоды
|ГДЕ
| Штрихкоды.Владелец = &Владелец
| И Штрихкоды.ХарактеристикаНоменклатуры = &ХарактеристикаНоменклатуры
| И Штрихкоды.ЕдиницаИзмерения = &ЕдиницаИзмерения
|");
ЗапросКодН.УстановитьПараметр("Владелец", Стр12.Номенклатура);
ЗапросКодН.УстановитьПараметр("ХарактеристикаНоменклатуры", Стр12.ХарактеристикаНоменклатуры);
ЗапросКодН.УстановитьПараметр("ЕдиницаИзмерения", Стр12.ЕдиницаИзмерения);
РезультатКодН = ЗапросКодН.Выполнить().Выбрать();
Пока РезультатКодН.Следующий() Цикл
НШК = РезультатКодН.Штрихкод;
Стр12.КодН = НШК - 2000000000000;
КонецЦикла;
ЗапросКодМ = Новый Запрос;
ЗапросКодМ.Текст =("
| ВЫБРАТЬ
| Штрихкоды.Штрихкод
|ИЗ
| РегистрСведений.Штрихкоды КАК Штрихкоды
|ГДЕ
| Штрихкоды.Владелец = &Владелец
| И Штрихкоды.ХарактеристикаНоменклатуры = &ХарактеристикаНоменклатуры
| И Штрихкоды.ЕдиницаИзмерения = &ЕдиницаИзмерения
|");
ЗапросКодМ.УстановитьПараметр("Владелец", Стр12.Номенклатура);
ЗапросКодМ.УстановитьПараметр("ХарактеристикаНоменклатуры", Стр12.ХарактеристикаНоменклатуры);
ЗапросКодМ.УстановитьПараметр("ЕдиницаИзмерения", Стр12.Разбухтовка);
РезультатКодМ = ЗапросКодМ.Выполнить().Выбрать();
Пока РезультатКодМ.Следующий() Цикл
МШК = РезультатКодМ.Штрихкод;
Стр12.КодМ = МШК - 2000000000000;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Живет на форуме
Группа: Местный
Сообщений: 2752
Из: Проскуров
Спасибо сказали: 709 раз
Рейтинг: 688.5
Цитата(Lexveritas @ 20.09.17, 14:00)
Может кому пригодится!
Никому такое не прогодится : 1. Запрос в цикле - вооще-то можно, если очень хочется. 2. Текста запроса достаточно одного и объявить вне цикла 3. зачем нужны текущиеДанные, если Вы их не используете ?
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!