Внешняя обработка заполнения табличной части из Excel (с созданием Номенклатуры)

17.02.19

Учетные задачи - Оптовая торговля

Внешняя обработка заполнения табличной части из Excel (с созданием Номенклатуры)

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

Наименование Файл Версия Размер
Заполнение табличной части из Excel
.epf 19,18Kb
206
.epf 1.1.0 19,18Kb 206 Скачать

Обработка не претендует на уникальность. Скорее еще один вариант из многих. Суть работы с обработкой

- подключается как внешняя обработка заполнения табличной части (по умолчанию - подключается к документу "Счет на оплату поставщика")

- пользователь выбирает файл xls или xlsx

- в файле Excel не всегда удобно визуально определить номера колонок, в которых указаны реквизиты, необходимые для табличной части. В качестве помощи - кнопка "Прочитать файл (необязательно)". При нажатии на кнопку считывается файл в табличный документ. Определить колонки можно точно

- пользователь указывает номера колонок и номера строк, из которых будут считаны данные, нажимает кнопку "1 - Заполнить таблицу". Таблица заполняется информацией из файла

- теперь необходимо выполнить сопоставление с Номенклатурой, существующей в базе. Выбирается вариант поиска - "По наименования", "По артикулу", "По наименованию и артикулу", "По наименованию, затем по артикулу", "По артикулу, затем по наименованию". Поиск выполнен в виде запросов в цикле (по каждой строке). Понимаю, что в ущерб производительности.

"Наименование" - это Полное наименование Номенклатуры (из-за ограничения длины "Наименования")

- если Номенклатура не найдена, ячейка выделяется оранжевым фоном. Пользователь нажимает кнопку "2 - Создать номенклатуру". Номенклатура создается в указанной папке с указанным "Видом номенклатуры"

- затем нажимается кнопка "3 - Перенести в документ" и происходит окончательная обработка табличной части штатными средствами (по кнопке "Изменить" - устанавливается ставка НДС, например)

Проверено на конфигурации "Бухгалтерия предприятия, редакция 3.0 (3.0.44.188)"

 

Update 17.02.2019

Внесены изменения (проверено на релизе 3.0.67.74)

- Изменено - чтение файла Excel выполняется средствами платформы (режим совместимости, соответственно, должен быть не ниже 8.3.6), наличие установленного MS Office (Exel) на клиентском компьютере или сервере не требуется

- Исправлено - теперь обработка работает и в серверном режиме (ранее при открытии обработки на стороне сервера, если файл находился на компьютере клиента, и путь к файлу был указан не сетевой - возникало сообщение, что файл не найден)

обработка загрузка заполнение табличной части Excel

См. также

SALE! 20%

Автоматический заказ поставщику в 1С: загрузка прайсов и анализ цен поставщиков для УТ 10.3, УТ 11, КА2, УНФ, УПП, ERP, Розница 2

Бюджетирование и планирование Оптовая торговля Розничная торговля Логистика, склад и ТМЦ Анализ продаж Платформа 1С v7.7 Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Розница 2 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Беларусь Украина Россия Казахстан Управленческий учет Платные (руб)

Система управления запасами для 1С помогает работать с запасами правильно: автоматически рассчитывает потребность и делает заказ поставщику, загружает прайсы, перемещает товары по филиалам, анализирует продажи и позволяет управлять ассортиментом.

28500 22800 руб.

21.04.2017    90178    105    39    

190

ЕГАИС++. Опт, производство, импорт

Оптовая торговля Розничная торговля Обмен с ГосИС Платформа 1С v8.3 1С:Управление торговлей 10 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Рестораны, кафе и фаст-фуд Россия Бухгалтерский учет Управленческий учет Акцизы Платные (руб)

Полнофункциональное расширение (ранее известное как Модуль 1С-ЕГАИС) для взаимодействия типовых конфигураций 1С и ЕГАИС, предоставляющее максимум возможностей по работе с УТМ. Получение и отправка ТТН, отправка акта о постановке на баланс и акта о списании. Получение остатков. Загрузка и сопоставление номенклатуры и контрагентов. Оправка в ЕГАИС отчетов о производстве и импорте.

8970 руб.

15.12.2015    165966    679    362    

385

SALE! 10%

Загрузка номенклатуры из Excel в УТ11, КА 2, ERP 2, Розница 2. Дополнительные реквизиты и сведения, характеристики, картинки, цены, остатки

Загрузка и выгрузка в Excel Розничная торговля Логистика, склад и ТМЦ Ценообразование, анализ цен Прайсы Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Управленческий учет Платные (руб)

Загрузка из файлов xls, xlsx, ods, csv, mxl в УТ11, КА 2, ERP 2, Розница 2. Задействованы все возможности конфигурации - заполнение реквизитов номенклатуры, дополнительных реквизитов и сведений, характеристики, доп.реквизиты и сведения характеристик. Дополнительные обработки для расширения возможностей.

10560 9504 руб.

29.10.2014    210167    620    524    

439

Обмен с системой ЦРПТ (Универсальная конфигурация ХамелеонЦРПТ + маркировка табака, обуви, одежды, лекарств, фото, молока, духов(парфюма), питьевой воды, велосипедов и шин)

Оптовая торговля Розничная торговля Обмен с ГосИС Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Россия Бухгалтерский учет Управленческий учет Платные (руб)

Данная публикация создана для помощи разработчикам, интеграторам и другим заинтересованным лицам по настройке системы маркировки обуви, одежды, лекарств, табака, фото, молока, духов(парфюма), питьевой воды, велосипедов и шин. Смело задавайте нам вопросы по работе с ЦРПТ, GS1, ЭДО, Национальным каталогом, мы накопили достаточно большую базу знаний по данным темам и готовы ответить на все Ваши вопросы.

104000 руб.

18.03.2019    110326    34    114    

178

Загрузка номенклатуры c картинками (несколько потоков одновременно) и сопутствующими данными в базу и любые документы из yml, xls, xlsx, xlsm, ods, ots, csv для УТ 10.3, УТ 11 (все), БП 3, КА 2, ERP 2, УНФ 1.6/3.0, Розница 2

Загрузка и выгрузка в Excel Логистика, склад и ТМЦ Ценообразование, анализ цен Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Платные (руб)

Эволюция не стоит на месте - новая удобная версия функциональной обработки для Вашего бизнеса! Что же Вы получаете? Удобный и интуитивно понятный интерфейс с 3-мя этапами работы. 2 режима - автоматический и ручной. Чтение XLSX, XLSM, CSV, XML/YML форматов без офиса, на любом сервере! Визуальное связывание колонок файла и реквизитов простым перетаскиванием колонок. Создание или обновление номенклатуры с иерархией, характеристик, доп. реквизитов, упаковок, загрузка практически неограниченного количества картинок на одну номенклатуру (с возможностью загрузки в несколько потоков одновременно), с хранением в томах или в базе. Загрузка номенклатуры поставщиков или поиск по их данным номенклатуры. Загрузка доп. реквизитов в характеристики. Загрузка штрихкодов с генерацией новых. Создание элементов справочников и ПВХ "на лету" для выбранных реквизитов. (Обновление от 11.12.2023, версия 9.5 - 9.9)

13200 руб.

20.11.2015    150714    367    375    

501
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Blackie 23.01.17 10:40 Сейчас в теме
Спасибо за обработку. Вроде, удобно. А можете добавить способ загрузки xls-файла не только через com-соединение, но и без установленного на компьютере MS Excel? В 8.3, вроде, у табличного документа уже есть метод Прочитать().
lebedenko; +1 Ответить
2. Batman 165 23.01.17 11:20 Сейчас в теме
С предложением полностью согласен. Начиная с 8.3.6, если мне память не изменяет, появилась эта возможность. На дворе - 8.3.9, разумное пожелание. Будет время - придумаю, спасибо за предложение
3. lebedenko 25.01.17 07:49 Сейчас в теме
Очень существенное пожелание! При работе на сервере часто сталкиваюсь с такой проблемой com-соединений... из за чего приходится переходить на пользовательский компьютер с установленным Экселем.
4. ImHunter 312 25.01.17 07:55 Сейчас в теме
XLSX без Excel - легко. Ибо это зазипованный XML. Из какой-то обработки из состава БСП нужно использовать/скопировать 2-3-4 процедуры. Будет кому интересно - поищу.
5. Batman 165 25.01.17 09:45 Сейчас в теме
(4) ImHunter, информация пригодится, мне точно интересно :) Заранее - спасибо
34. shmax 5 12.11.19 14:00 Сейчас в теме
35. Batman 165 12.11.19 17:10 Сейчас в теме
(34) В почту пришло сообщение с текстом "БП 3.0.73.60 8.3.12.1685 при открытии сразу ошибка :-( {ВнешняяОбработка.изExcel.Форма.Форма.Форма(4)}: Поле объекта не обнаружено (ОбъектыНазначения) Если НЕ Параметры.ОбъектыНазначения...". Думаю, это был Ваш вопрос, хотя у меня видна только часть "БП 3.0.73.60 8.3.12.1685"

Проверьте, пожалуйста, для каких документов подключена эта обработка (картинку с примером прилагаю)
Прикрепленные файлы:
6. ImHunter 312 25.01.17 10:05 Сейчас в теме
// Передираем из БСП, обработка ЗагрузкаДанныхИзФайла
Функция ТаблицаИзФайлаExcel2007(ПутьКФайлу)
	
	ВременныйКаталог = КаталогВременныхФайлов() + ПолучитьРазделительПути() + "excel2007";
	УдалитьФайлы(ВременныйКаталог);
	
	РаспаковатьФайл(ПутьКФайлу, ВременныйКаталог);
	
	ФайлСтрок = ВременныйКаталог + ПолучитьРазделительПути() + "xl" + ПолучитьРазделительПути() +"sharedStrings.xml";
	СписокСтрок = ПрочитатьСписокСтрок(ФайлСтрок);
	
	ФайлФорматов = ВременныйКаталог + ПолучитьРазделительПути() + "xl" + ПолучитьРазделительПути() +"styles.xml";
	СписокФорматов = ПрочитатьСписокФорматов(ФайлФорматов);
	
	НомерЛиста = 1;
	ФайлЛиста = ВременныйКаталог + ПолучитьРазделительПути() + "xl" + ПолучитьРазделительПути() + "worksheets" + ПолучитьРазделительПути() + "sheet" + НомерЛиста + ".xml";
	Файл = Новый Файл(ФайлЛиста);
	Если НЕ Файл.Существует() Тогда
		Возврат Неопределено;
	КонецЕсли;
	
	МассивБукв = ПолучитьМассивБукв();
	ДеревоДанных = ПолучитьДеревоДанных(ФайлЛиста);
	
	Таблица = Новый ТаблицаЗначений;
	
	// Создаем колонки
	Колонки = ДеревоДанных.Строки.Найти("dimension", "Объект", Истина);
	Счетчик = 0;
	Для Каждого Строка Из Колонки.Строки Цикл
		Если Строка.Объект = "ref" Тогда
			Диапазон = Строка.Значение; 
			// Поиск максимального значения колонки.
			Счетчик = МассивБукв.Количество();
			Пока Счетчик > 0 Цикл 
				Счетчик = Счетчик - 1;
				Если Найти(Диапазон, МассивБукв[Счетчик]) > 0 Тогда
					Для Индекс = 0 По Счетчик Цикл
						Таблица.Колонки.Добавить(МассивБукв[Индекс]);
					КонецЦикла;
					Счетчик = 0;
				КонецЕсли;
			КонецЦикла;
			Прервать;
		КонецЕсли;
	КонецЦикла;
	
	// читаем строки
	СтрСтрок = ДеревоДанных.Строки.Найти("sheetData", "Объект", Истина);
	Для Каждого Строка Из СтрСтрок.Строки Цикл
		НоваяСтрока = Таблица.Добавить();
		
		Для Каждого Колонка Из Строка.Строки Цикл
			Если Колонка.Объект <> "c" Тогда
				Продолжить;
			КонецЕсли;
			
			ЗначениеЯчейки = Неопределено;
			
			СтрЗначение = Колонка.Строки.Найти("v", "Объект");
			Если СтрЗначение <> Неопределено Тогда
				ЗначениеЯчейки = СтрЗначение.Значение;
			КонецЕсли;
			
			ЯчейкаСодержитТекст = Ложь;
			СтрЗначение = Колонка.Строки.Найти("t", "Объект");
			Если СтрЗначение <> Неопределено И СтрЗначение.Значение = "s" И ЗначениеЯчейки <> Неопределено Тогда
				ЯчейкаСодержитТекст = Истина;
				Позиция = Число(ЗначениеЯчейки); 
				Если СписокСтрок.Количество() > Позиция Тогда
					ЗначениеЯчейки = СписокСтрок.Получить(Позиция).Значение;
				КонецЕсли;
			КонецЕсли;
			
			сОбъект = Колонка.Строки.Найти("s", "Объект");
			Если сОбъект <> Неопределено Тогда
				СтрЗначение = СтрокуВЧисло(Колонка.Строки.Найти("s", "Объект").Значение, -1);
				Если СтрЗначение >= 0 Тогда
					ИмяФормата = СписокФорматов.Получить(СтрЗначение);
					Если ИмяФормата = "Дата" ИЛИ ИмяФормата = "ДатаВремя" ИЛИ ИмяФормата = "Время" Тогда
						Если ЗначениеЗаполнено(ЗначениеЯчейки) И НЕ ЯчейкаСодержитТекст Тогда
							ПозицияРазделителя = Найти(ЗначениеЯчейки, ".");
							Если ПозицияРазделителя > 0 Тогда 
								КоличествоДней = СтрокуВЧисло(Лев(ЗначениеЯчейки, ПозицияРазделителя - 1)) * 86400 - 2 * 86400;
								КоличествоСекунд = СтрокуВЧисло(Сред(ЗначениеЯчейки, ПозицияРазделителя + 1)) - 2 * 60;
							Иначе
								КоличествоДней = СтрокуВЧисло(ЗначениеЯчейки) * 86400 - 2 * 86400;
								КоличествоСекунд = 0;
							КонецЕсли;
							ПолученнаяДата = Дата(1900, 1, 1, 0, 0, 0) + КоличествоДней + КоличествоСекунд;
							Если ИмяФормата = "Дата" Тогда 
								ЗначениеЯчейки = Формат(ПолученнаяДата, "ДЛФ=D");
							ИначеЕсли ИмяФормата = "ДатаВремя" Тогда 
								ЗначениеЯчейки = Формат(ПолученнаяДата, "ДЛФ=DT");
							ИначеЕсли ИмяФормата = "Время" Тогда 
								ЗначениеЯчейки = Формат(ПолученнаяДата, "ДЛФ=T");
							КонецЕсли;
						КонецЕсли;
					Иначе
						Если ИмяФормата = "Число" Тогда
							ЗначениеЯчейкиЧисло = Формат(СтрокуВЧисло(ЗначениеЯчейки), "ЧРГ=''; ЧГ=0");
							Если НЕ ЗначениеЗаполнено(ЗначениеЯчейкиЧисло) Тогда
								ЗначениеЯчейки = Формат(ЗначениеЯчейки, "ЧРГ=''; ЧГ=0");
							Иначе
								ЗначениеЯчейки = ЗначениеЯчейкиЧисло;
							КонецЕсли;
						КонецЕсли;
					КонецЕсли;
				КонецЕсли;
			КонецЕсли;
			
			// поиск колонки
			СтрЗначение = Колонка.Строки.Найти("r", "Объект");
			Если СтрЗначение <> Неопределено Тогда
				ИмяКолонки = СтрЗначение.Значение;
			КонецЕсли;
			ИндексСтроки = Неопределено;
			Счетчик = МассивБукв.Количество();
			Пока Счетчик > 0 Цикл 
				Счетчик = Счетчик - 1;
				Если Найти(ИмяКолонки, МассивБукв[Счетчик])>0 Тогда
					ИндексСтроки = Счетчик;
					Счетчик = 0;
				КонецЕсли;   
			КонецЦикла;
			
			НоваяСтрока[МассивБукв[ИндексСтроки]] = ЗначениеЯчейки;
		КонецЦикла;
	КонецЦикла;
	Возврат Таблица;
	
КонецФункции

Функция ПолучитьДвоичныеДанныеДляЗагрузки(АдресХранилищаИлиДвоичныеДанные)
	// анализируем входной параметр	
	ТипВходногоПараметра = ТипЗнч(АдресХранилищаИлиДвоичныеДанные);
	Если ТипВходногоПараметра=Тип("Строка") Тогда 
		Если Не ЭтоАдресВременногоХранилища(АдресХранилищаИлиДвоичныеДанные) Тогда 
			ВызватьИсключение("Недопустимый адрес загружаемого реестра: " + АдресХранилищаИлиДвоичныеДанные);
		КонецЕсли;
		ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресХранилищаИлиДвоичныеДанные);
		ТипДанныхИзХранилища = ТипЗнч(ДвоичныеДанные);
		Если ТипДанныхИзХранилища<>Тип("ДвоичныеДанные") Тогда
			ВызватьИсключение("По переданному адресу " + АдресХранилищаИлиДвоичныеДанные + " содержатся НЕ двоичные данные. Тип: " + ТипДанныхИзХранилища);
		КонецЕсли;
	ИначеЕсли ТипВходногоПараметра=Тип("ДвоичныеДанные") Тогда 
		ДвоичныеДанные = АдресХранилищаИлиДвоичныеДанные;
	Иначе 
		ВызватьИсключение("Недопустимый вид данных загружаемого реестра: " + ТипВходногоПараметра);
	КонецЕсли;
	Возврат ДвоичныеДанные;
КонецФункции

// Локальная замена штатной функции из платформы 8.3
Функция ПолучитьРазделительПути()
	Возврат "\";
КонецФункции

Процедура РаспаковатьФайл(Файл, Каталог)
	Архив = Новый ЧтениеZipФайла;
	Архив.Открыть(Файл);
	Архив.ИзвлечьВсе(Каталог, РежимВосстановленияПутейФайловZIP.Восстанавливать);
КонецПроцедуры
Показать
bow; AlX0id; +2 Ответить
7. Batman 165 25.01.17 10:35 Сейчас в теме
8. rozer 306 26.01.17 20:55 Сейчас в теме
велосипед это конечно хорошо но в БСП есть же "загрузка из файлов" https://youtu.be/ovjumkjtn9I?list=PL8TlceaQF_l_CMirNFV1rgUfXUM_w_JMD .... enjoy ))
9. ir.iv 16.10.17 01:29 Сейчас в теме
Здравствуйте, Бухгалтерия предприятия (базовая), редакция 3.0 (3.0.52.32)
При открытии возникла ошибка:
Поле объекта не обнаружено (ОбъектыНазначения)
Помогите, будьте добры.....
10. Batman 165 16.10.17 10:33 Сейчас в теме
(9) ir.iv, доброго времени суток, отвечаю Вам в личном сообщении
11. ir.iv 16.10.17 14:04 Сейчас в теме
(10) Спасибо огромное-все заработало! Обработку подключила в самой программе (администрирование-подключение внешних печатных форм и обработок). Давно искала такую "без заморочек". Так что +++++
20. llg_44 26 16.02.19 22:20 Сейчас в теме
(10) У меня аналогичная ошибка. Могу я расчитывать на помощь? время прошло, релиз уже 3.0. 67.67.
{ВнешняяОбработка.изExcel.Форма.Форма.Форма(4)}: Поле объекта не обнаружено (ОбъектыНазначения)
Если НЕ Параметры.ОбъектыНазначения = Неопределено Тогда
21. llg_44 26 16.02.19 22:22 Сейчас в теме
(10) У меня аналогичная ошибка. Могу я расчитывать на помощь? время прошло, релиз уже 3.0. 67.67.
{ВнешняяОбработка.изExcel.Форма.Форма.Форма(4)}: Поле объекта не обнаружено (ОбъектыНазначения)
Если НЕ Параметры.ОбъектыНазначения = Неопределено Тогда
(10)
Прикрепление обработки к базе ничего не дало. Я не нахожу следы обработки в базе(
22. Batman 165 16.02.19 23:16 Сейчас в теме
(21) Доброго времени суток. Давайте проверим, к каким типам документов Вы подключили обработку?
Прикрепленные файлы:
23. llg_44 26 17.02.19 14:54 Сейчас в теме
(22) К счету на оплату покупателю.
24. Batman 165 17.02.19 15:32 Сейчас в теме
(23) Проверил на демо-базе релиза 3.0.67.74, серверная, подключив обработку к документу "Счет на оплату покупателю", воспроизвести ситуацию не удалось, к сожалению. В чем еще может быть причина....
В одном из сообщений была фраза, что на версии КОРП не работает. Не проверял на этой версии конфигурации. У Вас, случайно, не КОРП?
25. llg_44 26 17.02.19 18:17 Сейчас в теме
26. Batman 165 18.02.19 09:05 Сейчас в теме
(25) Ответил личным сообщением
12. Batman 165 16.10.17 19:36 Сейчас в теме
Спасибо, приятно знать
13. user777072 22.01.18 12:59 Сейчас в теме
Добрый день,
Не работает в конфигурации КОРП
Ошибка - Поле объекта не обнаружено (объекты назначения)
Как можно исправить?
14. Batman 165 22.01.18 16:28 Сейчас в теме
Добрый день.
При подключении обработки - указали объекты назначения (документы), к которым должна подключиться эта обработка заполнения табличных частей?
15. nata_87 36 20.08.18 15:51 Сейчас в теме
При нажатии на кнопку прочитать файл, данные с файла читаются, а при нажатии на 1-Заполнить таблицу выходит сообщение, что Файл не существует!
16. Batman 165 20.08.18 21:04 Сейчас в теме
Что может быть.... Длина пути к файлу - не превышает ли 255 символов?
17. AlexB1 13.02.19 00:13 Сейчас в теме
не заполняет таблицу. файл видит. бп (3.0.67.43)
18. Batman 165 13.02.19 10:58 Сейчас в теме
(17) Доброго времени суток. Уточните - база файловая или серверная? Пришлите для примера файл, пожалуйста
19. AlexB1 13.02.19 17:08 Сейчас в теме
Доброго дня. Пробую на файловой.Но работать будет на серверной.
Прикрепленные файлы:
Поставка МТР 4 квартала для АБС для загрузки.xls
27. VKuser105103569 21.04.19 19:15 Сейчас в теме
двс!
аудит на фреше пройдет?
29. Batman 165 21.04.19 21:13 Сейчас в теме
(27) Затрудняюсь ответить. С фрешем еще не работал
28. пользователь 21.04.19 21:12
Сообщение было скрыто модератором.
...
30. tsk-ga2011 22.04.19 19:34 Сейчас в теме
Здравствуйте, Бухгалтерия предприятия (базовая), редакция 3.0 (3.0.70.30)
При открытии возникла ошибка:
Поле объекта не обнаружено (Товары)
Помогите, пожалуйста.
31. Batman 165 23.04.19 08:35 Сейчас в теме
(30) Доброго времени суток. Проверьте, для какого документа подключена внешняя обработка. Судя по тексту - либо не подключена к документу, либо подключена к документу, у которого нет табличной части с названием "Товары". Чуть выше в переписке, в ответе с номером 22 показана картинка, проверьте на своей ситуации
32. tsk-ga2011 23.04.19 13:17 Сейчас в теме
Добрый день, высылаю скриншоты, посмотрите пожалуйста.
Прикрепленные файлы:
33. Batman 165 23.04.19 22:02 Сейчас в теме
(32) Верно, у этого документа нет табличных частей с названием "Товар" . Выслал в личном сообщении обработку
Оставьте свое сообщение