Автоматическое переименование ЕГАИС номенклатуры

Опубликовал Дмитрий Утенков (automatizator) в раздел Обработки - Обработка справочников

Автоматически создаем наименования алкогольной номенклатуры на основании классификатора ЕГАИС. Товаровед - отдыхает.

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

Обработка полезна, в паре с Инвентаризацией ЕГАИС. При ее применении можно загрузить классификатор ЕГАИС и создать Номенклатуру из НСИ - Сопоставление номенклатуры ЕГАИС. При создании можно допустить стандартную подстановку наименования из классификатора. Затем наступает время данной обработки.

По нажатии кнопки Переформатировать в колонке наименования появляется имя по формату:

[Наименование сопоставленное из Классификатора] [Объем в литрах] [Крепость] [Производитель]

При этом вальяжные наименования классификатора по возможности сокращаются принимая более сжатый вид.

Например:

  • Вино ст. полусл. кр. "Саперави", "Бахчишараб" 0,75л. 12% "Винный Дом Фотисаль"
  • Российский коньяк пятилетний "Золотой резерв" 0,5л 0,5л. 40% АО "УРАЛАЛКО"
  • Текила "Мессикано Альтено Сильвер" 0,75л. 40% ПродуктосФиносДеАгаве
  • Пиво св. "Жатецкий Гусь" ("Zatecky Gus") в ж/б,Тула 1л. 4,6% " "БАЛТИКА"

Наименования можно дополнительно отшлифовать вручную.  По нажатии кнопки Записать изменяется Наименование и Полное наименование номенклатуры у отмеченного галками товара.

Установка

Для подключения обработки нужно зайти в "Администрирование" - "Печатные формы, отчеты, обработки" - "Дополнительные отчеты и обработки" и в появившемся списке добавить файл этой обработки. 

Скачать файлы

Наименование Файл Версия Размер
РеформаторНаименованияПоЕГАИС
.epf 10,69Kb
12.12.16
20
.epf 1.0 10,69Kb 20 Скачать

См. также

Добавить вознаграждение
Комментарии
1. Денис Шеремет (Denya.S) 13.12.16 12:47 Сейчас в теме
Очень было бы удобно засунуть сюда и запрос номенклатуры ЕГАИС по алкокоду, чтобы не грузить всю номенклатуру поставщика.
2. Дмитрий Утенков (automatizator) 171 13.12.16 12:55 Сейчас в теме
(1) Туда-же и сканирование марок... Иначе запрос по каким данным?
Для этого и нужна обозначенная обработка Инвентаризация ЕГАИС.
3. Денис Шеремет (Denya.S) 13.12.16 13:16 Сейчас в теме
а можно ли с помощью данной обработки исправить уже заведенную и сопоставленную номенклатуру?
4. Максим Радченко (coolseo) 14 14.12.16 02:44 Сейчас в теме
(3) Да

Дмитрий, огромное спасибо
Добавьте чекбокс снятия всех галочек и добавления всех.

Баг:
Неважно сколько выбрал галочек все время обрабатывает полностью ТЧ
&НаКлиенте
Процедура Переформатировать(Команда)
	Для Каждого Строка Из Объект.Товары цикл
		Строка.Наименование = ПереформатироватьНаСервере(Строка.НоменклатураЕГАИС);
	КонецЦикла;
КонецПроцедуры
...Показать Скрыть
5. Дмитрий Утенков (automatizator) 171 14.12.16 03:09 Сейчас в теме
(3) Она именно для уже заведеной номенклатуры
6. Дмитрий Утенков (automatizator) 171 14.12.16 03:10 Сейчас в теме
(4) Галочки отрабатывают только на запись
7. Максим Радченко (coolseo) 14 14.12.16 03:14 Сейчас в теме
(6) ок

Вот что еще предлагаю добавить



Наименование = СтрЗаменить(Наименование,"Пастеризованное","");
Наименование = СтрЗаменить(Наименование,"Пастеризованный","");
Наименование = СтрЗаменить(Наименование,"Алюминевый","Алюм.");
Наименование = СтрЗаменить(Наименование,"ароматом","аром.");
Наименование = СтрЗаменить(Наименование,"напиток","нап.");
Наименование = СтрЗаменить(Наименование,"Пивной","Пив.");
8. Егор Иванов (user635667_bolonevegor) 21 14.12.16 04:15 Сейчас в теме
Я уже видел похожую обработку и кидал кое какие совты тому авору, но он что-то так и не соизволил ее доделать. Напишу и вам, мне кажется будет востребованно - Дать возможность выбирать дописывать-ли "л." и "%", а также дописывать-ли вообще крепость и производителя. Бывает нужно просто цифру литража вставить и все.
9. Егор Иванов (user635667_bolonevegor) 21 14.12.16 05:54 Сейчас в теме
и по галочкам - не нашел кнопки убирающей все и ставящей обратно все галочки. а если мне надо только пару из всего списка переименовать?
ну и я так понимаю можно писать сюда что можно допиливать в логике замены?
то что я нашел и хотелось бы что бы вы поправили в своей обработке:
Стеклянная бутылка вместимостью - ст.б.
Металлическая банка - ж.б.
ПЭТФ-бутылка вместимостью - переименовать в просто бут. либо вообще удалять
Бутылка стеклянная - ст.б.
Бутылка полимерная ПЭТ - переименовать в просто бут. либо вообще удалять
СТЕКЛЯННАЯ БУТЫЛКА - ст.б.
Пастеризованное. - вообще удалять, считаю лишним.
10. Егор Иванов (user635667_bolonevegor) 21 14.12.16 07:37 Сейчас в теме
только сейчас понял что штуку с заменой можно через конфигуратор самому допилить. спасибо большое. каждый может под свои нужды сделать как надо)
11. Дмитрий Утенков (automatizator) 171 14.12.16 10:59 Сейчас в теме
(7) Пив. нап. - по моему это перебор )))
12. Дмитрий Утенков (automatizator) 171 14.12.16 11:02 Сейчас в теме
(9) не понимаю откуда брать инфу по таре. В наименовании - почти не встречается
13. Егор Иванов (user635667_bolonevegor) 21 14.12.16 11:41 Сейчас в теме
Надо наверное добавить сортировку по столбикам. и добавить возможность открывать номенклатуру прямо из окна обработки, скажем правой кнопкой на номенклатуре - изменить
14. Дмитрий Утенков (automatizator) 171 14.12.16 11:54 Сейчас в теме
(13) Хорошо. Обработка бесплатная, так что за оперативность не ручаюсь. Пока делитесь предложениями в стиле СтрЗаменить() - т.е. что, на что менять в названии.
15. Егор Иванов (user635667_bolonevegor) 21 15.12.16 07:26 Сейчас в теме
Я сделал кучу всяких исправлений. Теперь мне надо сделать отдельную обработку которая бы чистила лишние пробелы в номенклатуре уже имеющейся. Я не программист 1С. Подскажите пожалуйста что поправить в этом коде, что бы просто убирались лишние пробелы в уже переписанном справочнике номенклатура(накалякал вариант как я его вижу, но не знаю как поменять что бы он брал названия уже не из справочника егаис, а из простого справочника номенклатуры):

Скрытый текст
16. Дмитрий Утенков (automatizator) 171 15.12.16 11:25 Сейчас в теме
(15) Егор надо поискать другую обработку.
17. maxL Любин (maxL) 20.12.16 21:49 Сейчас в теме
Дмитрий, а возможно сделать такую обработку для УТ 10.3 ?
18. Дмитрий Утенков (automatizator) 171 21.12.16 01:20 Сейчас в теме
(17) Готовы оплатить работу?
19. maxL Любин (maxL) 21.12.16 19:44 Сейчас в теме
20. Дмитрий Утенков (automatizator) 171 22.12.16 00:23 Сейчас в теме
21. Егор Иванов (user635667_bolonevegor) 21 07.02.17 07:09 Сейчас в теме
Не пойму что не так - я добавил строку:
Наименование = СтрЗаменить(Наименование,"Вино контролируемого наименования по происхождению","Вино");
Но это условие не работает. Связано это как-то с длинной наименования? Из всех позиций номенклатуры с таким начало самые длинные и у них у всех не срабатывает мое условие.
п.с.
наименование таких позиций выглядит так - Вино контролируемого наименовани по происхождению белое полусладкое "Молоко любимой женщины. Мадонна. Наэ. Ланселот"
ну и плюс мы еще пытаемся добавить емкость, крепость и завод.
22. Дмитрий Утенков (automatizator) 171 07.02.17 10:04 Сейчас в теме
(21) Если это добавлено в конец, то поступает уже раздерганное наименование. Длинные наименования нужно ставить в начало.
23. Егор Иванов (user635667_bolonevegor) 21 08.02.17 11:55 Сейчас в теме
Другой вопрос. Я сделал так что бы цыфры в начале удалялись. А потом выеснилось что у некоторых позиций в названиях тоже есть цыфры. И в итоге у меня напиток "Портвей 777" преврящается просто в напиток "Портвейн". Вопрос - как сделать так что бы условие не проверяло наименования которые в скобках. например удалять 7, но не удалять ее там где " 7 ". ????
24. Дмитрий Утенков (automatizator) 171 08.02.17 13:26 Сейчас в теме
(23) Такого обработка не умеет
25. Дмитрий Анонимный (Ryukenden) 35 10.02.17 12:56 Сейчас в теме
(15)
// Удаление задвоенных пробелов
Пока СтрНайти(ИсходнаяСтрока, " ") <> 0 Цикл
ИсходнаяСтрока= СтрЗаменить(ИсходнаяСтрока, " ", " ");
КонецЦикла;

Результат = СокрЛП(ИсходнаяСтрока);
26. Егор Иванов (user635667_bolonevegor) 21 14.02.17 09:17 Сейчас в теме
(25) в какую строку это можно вставить?
27. Дмитрий Анонимный (Ryukenden) 35 14.02.17 10:41 Сейчас в теме
(26)
в какую строку это можно вставить?


Это для вашей задачи очистки всей номенклатуры от лишних пробелов. Я для Розницы 2.2 такой код использую:

&НаКлиенте
Процедура ОбработатьНоменклатуру(Команда)
	ОбработатьНоменклатуруНаСервере();
КонецПроцедуры

&НаСервере
Процедура ОбработатьНоменклатуруНаСервере()
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	Номенклатура.Ссылка КАК Номенклатура,
		|	Номенклатура.Наименование,
		|	Номенклатура.НаименованиеПолное
		|ИЗ
		|	Справочник.Номенклатура КАК Номенклатура
		|ГДЕ
		|	НЕ Номенклатура.ЭтоГруппа";
	
	РезультатЗапроса = Запрос.Выполнить();
	
	Выборка = РезультатЗапроса.Выбрать();
	
	Пока Выборка.Следующий() Цикл
		
		НоменклатураОбъект = Выборка.Номенклатура;
		
		НоменклатураОбъект.Наименокание = УдалитьЛишниеСимволы(Выборка.Наименование);
		НоменклатураОбъект.НаименованиеПолное = УдалитьЛишниеСимволы(Выборка.НаименованиеПолное);
		
		НоменклатураОбъект.Записать();
		
	КонецЦикла;
	
КонецПроцедуры

&НаСервереБезКонтекста
Функция УдалитьЛишниеСимволы(Текст) 
	
	Если Текст = "" Тогда
		Возврат "";
	КонецЕсли;
	
	Результат = Текст;
	
	// Удаление задвоенных символов
	УдаляемыеСимволы = """.,;\/_";
	
	Для Поз = 1 По СтрДлина(УдаляемыеСимволы) Цикл
		Симв = Лев(УдаляемыеСимволы, Поз);
		
		Пара = Симв + Симв;
		
		Пока СтрНайти(Результат, Пара) <> 0 Цикл
			Результат = СтрЗаменить(Результат, Пара, " ");
		КонецЦикла;
		
	КонецЦикла;
	
	// Удаление недопустимых символов в начале и конце строки:
	// Чистим слева
	УдаляемыеСимволы = ".:,;\/_";
	Работаем = Истина;
	Пока Работаем Цикл		
		Симв = Лев(Результат, 1);
		Если СтрНайти(УдаляемыеСимволы, Симв) <> 0 Тогда
			Результат = Прав(Результат, СтрДлина(Результат) - 1);
		Иначе
			Работаем = Ложь;
		КонецЕсли;
	КонецЦикла;
	
	//Чистим справа
	УдаляемыеСимволы = ":,;\/_";
	Работаем = Истина;
	Пока Работаем Цикл
		Симв = Прав(Результат, 1);
		Если СтрНайти(УдаляемыеСимволы, Симв) <> 0 Тогда
			Результат = Лев(Результат, СтрДлина(Результат) - 1);
		Иначе
			Работаем = Ложь;
		КонецЕсли;
	КонецЦикла;
	
	// Удаление задвоенных пробелов
	Пока СтрНайти(Результат, "  ") <> 0 Цикл
		Результат = СтрЗаменить(Результат, "  ", " ");
	КонецЦикла;
	
	Результат = СокрЛП(Результат);
	
	Возврат Результат;
	
КонецФункции
...Показать Скрыть