Имя: Пароль:
1C
1C 7.7
v7: Сканирование марок на нетленке 7.7
0 Олдж
 
29.08.25
09:40
Доброго всем дня, досталась самописная база на 7.7 (вообще ничего типового).

Из ТиС 7.7 вставлены обработки и процедуры касающиеся подключения оборудования.

Необходимо прикрутить сканирование марок (табак, вода) при отгрузке. По хотению Зака, наборщик должен сплошняком просто "пропикать" марки, а они вносятся в заказ на наборку.

Такое хотение упирается в определение номенклатуры из сканированной марки.

На текущий момент идея: выделение штрих-кода из марки и по штрих-коду определять номенклатуру. Но есть марки, где штрих-кода нет. Например сканируют на отгрузку целиком паллету.

Существует ли такой четкий алгоритм? Или пусть выбирают номенклатуру и только потом сканируют марки?
1 p-soft
 
29.08.25
09:44
надо процессы разложить. между сканированием марки и сканированием паллеты большой логический разрыв.
2 p-soft
 
29.08.25
09:47
(1) да, марки проще сканировать через сканирование товара. но если ввести распознавание типа штрихкода, то можно из марок выдирать товар и сканировать только марки. можно даже ругаться, что вместо марки паллет подсунули.
3 Олдж
 
29.08.25
09:49
(2) Вот, такая же идея. Но бывает отгрузка либо штучно (мелкий клиент), либо паллетой (крупный оптовик)

Если отгрузка паллетой оптовику, вряд ли надо разбирать паллету и сканироватьпоштучно :-) Также передать транспортную марку паллеты да и всё.

Можно ли из паллеты определить номенклатуру ?
4 p-soft
 
29.08.25
09:56
(3) все сделать можно, но тема длинная. должна быть процедура формирования паллета, с хранением содержимого в системе учета. потом уже проще - определили что это паллет - определяем допустимые с ним действия и работаем
5 p-soft
 
29.08.25
09:58
(4) вообще, вы движетесь в сторону wms. тему можем голосом обсудить
6 Злопчинский
 
29.08.25
11:39
(5) работа с марками для 77 полностью поддерживается victuan1
См. www.ais-soft.ru
И как правильно заметили - от сканирования марок до сканирования паллеты может много чего произойти. Начиная с того что совсем не обозначено как и откуда товар принимается. Если приходит паллетами с агрегацией, то при о грузке нетронутой паллеты все может быть просто. А может и какая-то бОльшая складская автоматизация по требуется как выше написали
7 Злопчинский
 
29.08.25
13:02
И начинать надо не с вопросов отгрузки марок, а с приемки.
8 H A D G E H O G s
 
29.08.25
11:55
Кто в курсе, сети карают штрафами за пересорт хотя бы коробок в паллете? Речь про ЧЗ.
9 p-soft
 
29.08.25
11:59
(8) надо договор смотреть, все штрафы пишутся явно. кривой паллет просто отказываются принимать
10 H A D G E H O G s
 
29.08.25
12:02
(9) Они для всех поставщиков типовые, даже для крупных заводов или мелких оптовичков. Но это по ЕГАИС, там все строго. Насколько строго это для ЧЗ?
11 p-soft
 
29.08.25
12:06
(10) ну чз работает только если мы перемещаем марки. если по накладной все совпадает, то остальное зависит от процессов принимающей стороны
12 MWWRuza
 
гуру
29.08.25
12:54
(0) Такое хотение упирается в определение номенклатуры из сканированной марки.
У меня так, может пригодится:
// Функция РазобратьШК(ШК) Экспорт - Возвращает тип отсканированного ШтрихКода
// 1 	- EAN(13 или 8)	обычный ШК товара
// 2 	- DataMatrix 		пачки сигарет
// 3 	- DataMatrix 		блока сигарет
// 4 	- PDF-417 			алкоголь, старая марка
// 5 	- DataMatrix 		алкоголь,новая марка
// 6 	- DataMatrix		алкоголь, старая марка, "маленький квадратик"
// 7    - DataMatrix 		прочей упаковки сигарет 
// 8	- Сокращенный код маркировки прочих товаров, в том числе молока
// МРЦ	- максимальная розничная цена сигарет
// Тип  - тип старой марки
// Сер	- серия старой марки
// Ном	- номер старой марки  
Функция РазобратьШК(Знач ШК) Экспорт
	СЗ			= СоздатьОбъект("СписокЗначений");
	СтрШК		= СокрЛП(ШК);
	Если СтрДлина(СтрШК) <= 13 Тогда
		СЗ.ДобавитьЗначение(1, 		"ТипЕд");
		СЗ.ДобавитьЗначение(СтрШК, 	"ЕАН");
		СЗ.ДобавитьЗначение(0);
	ИначеЕсли (СтрДлина(СтрШК) <= 29) И (СтрДлина(СтрШК) >= 21) Тогда
		СЗ.ДобавитьЗначение(2, 		"ТипЕд");
		ВыдЕАН	= СокрЛП(Число(Лев(ШК, 14)));
		СЗ.ДобавитьЗначение(ВыдЕАН, "ЕАН");
		Если СтрДлина(СтрШК) >= 25 Тогда
			МРЦ	= ВернутьМРЦ(Сред(СокрЛП(СтрШК), 22, 4));    
		Иначе	
			МРЦ	= 0;	
		КонецЕсли;
		СЗ.ДобавитьЗначение(МРЦ, "МРЦ");
	ИначеЕсли СтрДлина(СтрШК) = 68 Тогда
		СЗ.ДобавитьЗначение(4, 		"ТипЕд");
		СЗ.ДобавитьЗначение(СтрШК, 	"ЕАН");
		СЗ.ДобавитьЗначение(0);
	ИначеЕсли СтрДлина(СтрШК) = 150 Тогда	
		СЗ.ДобавитьЗначение(5, 		"ТипЕд");
		СЗ.ДобавитьЗначение(СтрШК, 	"ЕАН");
		СЗ.ДобавитьЗначение(0);
	ИначеЕсли (СтрДлина(СтрШК) >= 30) И (СтрДлина(СтрШК) < 68) Тогда	
		Если Сред(СтрШК,4,1) 	= "-" Тогда
			Тип	= Лев(СтрШК,3);
			СтрТипа = "";
			СзТиповМарок	= ЗаполнитьСписокТиповМарок();
			Поз	= СзТиповМарок.НайтиЗначение(Число(Тип));			
			Если Поз 	= 0 Тогда
				Предупреждение("Тип марки не найден!");
			Иначе
				СзТиповМарок.ПолучитьЗначение(Поз,СтрТипа);
			КонецЕсли;			
			Если Найти(СтрТипа,"ФСМ. ") > 0 Тогда
				ДлинаНомераМарки=9; 
			Иначе
				ДлинаНомераМарки=8 
			КонецЕсли;
		 	СЗ.ДобавитьЗначение(6, "ТипЕд");
			СЗ.ДобавитьЗначение(СтрШК);
			СЗ.ДобавитьЗначение(0);
			СЗ.ДобавитьЗначение(Лев(ШК,3), СокрЛП(СтрТипа));
			СЗ.ДобавитьЗначение(Сред(ШК,Найти(ШК,"-") + 1,3));
			СЗ.ДобавитьЗначение(Сред(ШК,Найти(ШК,"-") + 4,ДлинаНомераМарки));
		Иначе
			СтрШК				= СтрЗаменить(СтрШК, "(", "");
			СтрШК				= СтрЗаменить(СтрШК, ")", "");
			Если Лев(СтрШК, 2) 	= "01"  Тогда
				Если Найти(СтрШК, Симв(29)) > 0 Тогда               // Марка полная, со сканера
					СЗ.ДобавитьЗначение(7, 		"ТипЕд");
					GTIN		= Сред(СтрШК, 3, 14);	
					ШК			= СокрЛП(Число(Сред(СтрШК, 3, 14)));
					СЗ.ДобавитьЗначение(ШК, 	"ЕАН");
					СЗ.ДобавитьЗначение(GTIN, 	"GTIN");
					СЗ.ДобавитьЗначение(0, 		"МРЦ");
				Иначе	
					Если  Найти(СтрШК, "8005") = 0 Тогда
						// Упаковка, отличная от блока
						GTIN	= СокрЛП(Число(Сред(СтрШК, 3, 14)));
						МРЦ 	= 0;
						Если Лев(GTIN, 1) = "0" Тогда
						    ЕАН	= Сред(GTIN, 2, 13);
						Иначе
							ЕАН	= Лев(GTIN, 13);
						КонецЕсли;
						СЗ.ДобавитьЗначение(7, 		"ТипЕд");
						СЗ.ДобавитьЗначение(ЕАН, 	"ЕАН");
						СЗ.ДобавитьЗначение(МРЦ, 	"МРЦ");
						СЗ.ДобавитьЗначение(GTIN, 	"GTIN");
						СЗ.ДобавитьЗначение(ПривестиШкБлокаКВидуУПД(СтрШК), "ШКУПД");
					ИначеЕсли Найти(СтрШК, "8005") >= 25 Тогда
				    	ШК	= СокрЛП(Число(Сред(СтрШК, 3, 14)));
						МРЦ = ВычислитьМРЦ_Блока(СтрШК);
						СЗ.ДобавитьЗначение(3, 		"ТипЕд");
						СЗ.ДобавитьЗначение(ШК, 	"ЕАН");
						СЗ.ДобавитьЗначение(МРЦ, 	"МРЦ");
						СЗ.ДобавитьЗначение(ПривестиШкБлокаКВидуУПД(СтрШК), "ШКУПД");	
					КонецЕсли;
				КонецЕсли;	
			КонецЕсли;  
		КонецЕсли;
	ИначеЕсли (СтрДлина(СтрШК) >= 19) И (СтрДлина(СтрШК) < 21) Тогда // Молочка и другой товар сокращенные
		ШК	= СокрЛП(Число(Сред(СтрШК, 3, 14)));
		СЗ.ДобавитьЗначение(8, 								"ТипЕд");
		СЗ.ДобавитьЗначение(ШК, 							"ЕАН");
		СЗ.ДобавитьЗначение(0, 								"МРЦ");
		СЗ.ДобавитьЗначение(ПривестиШкБлокаКВидуУПД(СтрШК), "ШКУПД");		
	КонецЕсли;	
	Возврат СЗ;
КонецФункции
// КонецФункци РазобратьШК(ШК)


А если Вы хотите из палеты что-то получить, то Вам сначала нужно в ЦРПТ запрос на "Разагрегацию" сделать, что-бы получить список марок в ней, вплоть до штук, если конечно поставщик провел в ЧЗ агрегацию и марка на палете не отсебячина чисто для логистики, а реально агрегат от ЧЗ...
Такое у меня тоже есть, по крайней мере, для сигарет, я разбираю короба до блоков, блоки до пачек...
Более крупные не пробовал, у меня только розница, они палетами не получают :-)