Выводить штрихкод в ТЧ документа

1. HaIIpuKoJIe 15.06.18 14:56 Сейчас в теме
Добрый день. Не могу разобраться как в документ "Заказ на производство" в табличную часть добавить поле штрихкод. Необходимо проверять есть ли у номенклатуры штрихкод перед тем как отдать заказ в производство.
1С:Предприятие 8.3 (8.3.11.3034)
1С:ERP Управление предприятием 2 (2.2.4.81)
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
6. independ 1556 18.06.18 10:07 Сейчас в теме
(5) Примерно так, только в запросе нужно добавить группировку
&НаСервере
Функция ШтрихКодЭлемента(Номенклатура)
    
Запрос = Новый Запрос;    
   
Запрос.Текст = "ВЫБРАТЬ
               |    ШтрихкодыНоменклатуры.Владелец
               |   МАКСИМУМ( ШтрихкодыНоменклатуры.Штрихкод)
               |ИЗ
               |    РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры
               |ГДЕ
               |    ШтрихкодыНоменклатуры.Номенклатура = В (&СписокНоменклатуры)";
    Запрос.УстановитьПараметр("СписокНоменклатуры",
    Объект.Товары.Выгрузить(,"Номенклатура").ВыгрузитьКолонку("Номенклатура"));
    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
        
        ПараметрыОтбора = Новый Структура;
        ПараметрыОтбора.Вставить("Номенклатура", Выборка.Номенклатура);
        НайденныеСтроки = Объект.Товары.НайтиСтроки(ПараметрыОтбора);
        
        Если НайденныеСтроки.Количество()>0 Тогда
            НайденныеСтроки[0].Штрихкод=Выборка.Штрихкод;
        КонецЕсли;
        
    КонецЦикла;    

КонецФункции
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. user633533_encantado 12 15.06.18 15:06 Сейчас в теме
ШтрихКод номенклатуры хранится в регистре сведений и их там может быть несколько.

Запросом нужно будет получать штрихкод из этого регистра и заполнять значение в отдельной колонке, соответственно менять его при изменении номенклатуры и т.п.

В общем без изменения конфигурации никак.
3. HaIIpuKoJIe 15.06.18 16:14 Сейчас в теме
Посмотрел как это делается в "Рознице и намудрил вот такой запрос"
&НаСервере
Функция ШтрихКодЭлемента(Номенклатура)
    
Штрихкод = "";
Запрос = Новый Запрос;    
    
Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1
               |    ШтрихкодыНоменклатуры.Штрихкод
               |ИЗ
               |    РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры
               |ГДЕ
               |    ШтрихкодыНоменклатуры.Номенклатура = &Номенклатура";
Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
        Штрихкод = Выборка.Штрихкод;
    КонецЦикла;
    
    Возврат Штрихкод;
КонецФункции

Показать

Подскажите как вывести колонку со штрихкодом на форму.
4. user633533_encantado 12 15.06.18 16:40 Сейчас в теме
Добавляешь колонку в табличную часть и заполняешь в ней значением полученным из запроса.
5. HaIIpuKoJIe 18.06.18 09:03 Сейчас в теме
(4)
В том то и дело, что не могу понять как ее добавить
6. independ 1556 18.06.18 10:07 Сейчас в теме
(5) Примерно так, только в запросе нужно добавить группировку
&НаСервере
Функция ШтрихКодЭлемента(Номенклатура)
    
Запрос = Новый Запрос;    
   
Запрос.Текст = "ВЫБРАТЬ
               |    ШтрихкодыНоменклатуры.Владелец
               |   МАКСИМУМ( ШтрихкодыНоменклатуры.Штрихкод)
               |ИЗ
               |    РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры
               |ГДЕ
               |    ШтрихкодыНоменклатуры.Номенклатура = В (&СписокНоменклатуры)";
    Запрос.УстановитьПараметр("СписокНоменклатуры",
    Объект.Товары.Выгрузить(,"Номенклатура").ВыгрузитьКолонку("Номенклатура"));
    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
        
        ПараметрыОтбора = Новый Структура;
        ПараметрыОтбора.Вставить("Номенклатура", Выборка.Номенклатура);
        НайденныеСтроки = Объект.Товары.НайтиСтроки(ПараметрыОтбора);
        
        Если НайденныеСтроки.Количество()>0 Тогда
            НайденныеСтроки[0].Штрихкод=Выборка.Штрихкод;
        КонецЕсли;
        
    КонецЦикла;    

КонецФункции
Показать
7. user633533_encantado 12 18.06.18 11:48 Сейчас в теме
(6) Не очень оптимально. Если при открытии формы надо будет указать штрихкод, то запрос будет вызван в цикле много раз.

Лучше сразу получить штрихкоды по всей номенклатуры документа, засунуть их в соответствие номенклатура - штрихкод. А потом заполнить с помощью соответствия табличную часть.
8. HaIIpuKoJIe 20.06.18 12:57 Сейчас в теме
Спасибо за советы, пока слишком сложно для меня. Сделаю отчет который будет вызываться из документа.
9. 028 14.05.23 21:50 Сейчас в теме
Всем Добрый день я сделал так
Запрос = Новый Запрос;    
    
    Запрос.Текст = "ВЫБРАТЬ
                   |    ШтрихкодыНоменклатуры.Номенклатура КАК Номенклатура,
                   |    ШтрихкодыНоменклатуры.Штрихкод КАК Штрихкод
                   |ИЗ
                   |    РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры
                   |ГДЕ
                   |    ШтрихкодыНоменклатуры.Номенклатура В(&МассивНом)";
    
    МассивТМЗ = Новый Массив;   
    
    Для Каждого Стр Из Объект.Товары Цикл //Заполнить Массив для запроса
        МассивТМЗ.Добавить(Стр.Номенклатура);
    КонецЦикла;  
    
    Запрос.УстановитьПараметр("МассивНом", МассивТМЗ);
    Выборка = Запрос.Выполнить().Выгрузить();  
    
    СоответствиеШК = Новый Соответствие;
    
    Для Каждого Выб Из Выборка Цикл //заполнить соответствие Номенклатура и Штрихкод из Результата запроса
        СоответствиеШК.Вставить(Выб.Номенклатура, Выб.Штрихкод);
    КонецЦикла;
    
    Для Каждого Стр Из Объект.Товары Цикл // заполить штрихкода в табл части согласно соответствию 
        Стр.Штрихкод = СоответствиеШК.Получить(Стр.Номенклатура);
    КонецЦикла;
Показать


Можете сказать можно ли здесь оптимизировать код?
Заранее благодарю.
10. PlatonStepan 38 15.05.23 02:48 Сейчас в теме
(9)
Для отчёта сойдёт
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ
| ШтрихкодыНоменклатуры.Номенклатура КАК Номенклатура,
| ШтрихкодыНоменклатуры.Штрихкод КАК Штрихкод
|ИЗ
| РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры
|ГДЕ
| ШтрихкодыНоменклатуры.Номенклатура В(&МассивНом)";

Запрос.УстановитьПараметр("МассивНом", Объект.Товары.ВыгрузитьКолонку("Номенклатура"));
Выборка = Запрос.Выполнить().Выбрать();
СтруктураПоиска = Новый Структура("Номенклатура");

Пока Выборка.Следующий() Цикл
    СтруктураПоиска.Номенклатура = Выборка.Номенклатура;
    массивСтрокТЧ = Объект.Товары.НайтиСтроки(СтруктураПоиска);
    Для Каждого СтрокаТЧ Из массивСтрокТЧ Цикл
        СтрокаТЧ.Штрихкод = Выборка.Штрихкод;
    КонецЦикла;
КонецЦикла;
Показать
11. 028 15.05.23 07:43 Сейчас в теме
12. 028 15.05.23 07:51 Сейчас в теме
(10) Запрос.УстановитьПараметр("МассивНом", Объект.Товары.Выгрузить(, "Номенклатура"));

Вот так работает у меня
13. PlatonStepan 38 15.05.23 08:26 Сейчас в теме
(12) Ну, по идее не должно. В запрос должен попасть список или массив, а не таблица значений.
14. 028 15.05.23 09:24 Сейчас в теме
(13)
Объект.Товары.ВыгрузитьКолонку("Номенклатура")); 


так не работает
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот