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

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

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

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

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

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

КонецФункции
Показать
7. user633533_encantado 11 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)
Объект.Товары.ВыгрузитьКолонку("Номенклатура")); 


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

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