Загрузка данных


&НаКлиенте
Процедура ЗагрузитьПартииWMS(Команда)
	
	ПараметрыДиалога = Новый ПараметрыДиалогаПомещенияФайлов;
	ПараметрыДиалога.Заголовок 			= "Выберите файл для загрузки партий WMS";
	ПараметрыДиалога.МножественныйВыбор	= Ложь;
	ПараметрыДиалога.Фильтр 			= "*.mxl";
	ДополнительныеПараметры = Новый Структура;
	ОписаниеОпопвещенияЗавершенияЗагрузки = Новый ОписаниеОповещения("ОбработкаЗагрузкиФайла", ЭтотОбъект, ДополнительныеПараметры);
	НачатьПомещениеФайлаНаСервер(ОписаниеОпопвещенияЗавершенияЗагрузки,,,,ПараметрыДиалога,);
	
КонецПроцедуры

#Область ЗагрузкаДанных

&НаКлиенте
Процедура ОбработкаЗагрузкиФайла(ОписаниеПомещенногоФайла, ДополнительныеПараметры) Экспорт
	
	Если НЕ ОписаниеПомещенногоФайла = Неопределено И
		НЕ ОписаниеПомещенногоФайла.ПомещениеФайлаОтменено Тогда
		
		ЧтениеФайла(ОписаниеПомещенногоФайла.Адрес);
	КонецЕсли;
	
	ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Загрузка завершена");
	
КонецПроцедуры

&НаСервереБезКонтекста
Процедура ЧтениеФайла(Адрес)
	
	ИмяФайла = ПолучитьИмяВременногоФайла("mxl");
	
	ДвоичныеДанные = ПолучитьИзВременногоХранилища(Адрес);
	ДвоичныеДанные.Записать(ИмяФайла);
	
	ТабДок = Новый ТабличныйДокумент;
	ТабДок.Прочитать(ИмяФайла);
	
	КоличествоСтрок = ТабДок.ВысотаТаблицы;
	
	Для стр = 2 По КоличествоСтрок Цикл
		
		ПартияУИДСтрока	= СокрЛП(ЗначениеОбластиТаблицы(ТабДок, стр, "1"));
		ПартияУИД		= Новый УникальныйИдентификатор(ПартияУИДСтрока);
		
		Наименование			= СокрЛП(ЗначениеОбластиТаблицы(ТабДок, стр, "2"));
		ПройденВходнойКонтроль	= ?(СокрЛП(ЗначениеОбластиТаблицы(ТабДок, стр, "3")) = "Да", Истина, Ложь);
		ЭтоКатушка				= ?(СокрЛП(ЗначениеОбластиТаблицы(ТабДок, стр, "4")) = "Да", Истина, Ложь);
		НомерПартии				= СокрЛП(ЗначениеОбластиТаблицы(ТабДок, стр, "5"));
		ДатаПартии				= СтроковыеФункцииКлиентСервер.СтрокаВДату(СокрЛП(ЗначениеОбластиТаблицы(ТабДок, стр, "6")));
		ДатаСрокаГодностиПартии	= СтроковыеФункцииКлиентСервер.СтрокаВДату(СокрЛП(ЗначениеОбластиТаблицы(ТабДок, стр, "7")));
		
		ДокументПоступленияУИДСтрока	= СокрЛП(ЗначениеОбластиТаблицы(ТабДок, стр, "8"));
		ДокументПоступленияУИД			= Новый УникальныйИдентификатор(ДокументПоступленияУИДСтрока);
		
		ТипПоступления = СокрЛП(ЗначениеОбластиТаблицы(ТабДок, стр, "11"));
		Если ЗначениеЗаполнено(ДокументПоступленияУИД) Тогда
			ДокументПоступления = ПолучитьДокументПоступления(ДокументПоступленияУИД, ТипПоступления);
		Иначе
			ДокументПоступления = Неопределено;
		КонецЕсли;
		
		Штрихкод						= СокрЛП(ЗначениеОбластиТаблицы(ТабДок, стр, "9"));
		
		НоменклатураУИДСтрока			= СокрЛП(ЗначениеОбластиТаблицы(ТабДок, стр, "10"));
		НоменклатураУИД					= Новый УникальныйИдентификатор(НоменклатураУИДСтрока);
		Если ЗначениеЗаполнено(НоменклатураУИД) Тогда
			Номенклатура = Справочники.Номенклатура.ПолучитьСсылку(НоменклатураУИД);
		Иначе
			Номенклатура = Справочники.Номенклатура.ПустаяСсылка();
		КонецЕсли;
		
		СпрПартия = Справочники.ак_ПартииWMS.ПолучитьСсылку(ПартияУИД);
		Если ОбщегоНазначения.СсылкаСуществует(СпрПартия) Тогда
			СпрОбъект = СпрПартия.ПолучитьОбъект();
		Иначе
			СпрОбъект = Справочники.ак_ПартииWMS.СоздатьЭлемент();
			СпрОбъект.УстановитьСсылкуНового(СпрПартия);
		КонецЕсли;
		
		СпрОбъект.Наименование = Наименование;
		СпрОбъект.ПройденВходнойКонтроль = ПройденВходнойКонтроль;
		СпрОбъект.ЭтоКатушка = ЭтоКатушка;
		СпрОбъект.НомерПартии = НомерПартии;
		СпрОбъект.ДатаПартии = ДатаПартии;
		СпрОбъект.ДатаСрокаГодностиПартии = ДатаСрокаГодностиПартии;
		СпрОбъект.Штрихкод = Штрихкод;
		СпрОбъект.Номенклатура = Номенклатура;
		
		Если Не ЗначениеЗаполнено(СпрОбъект.ДокументПоступления)
				Или (ТипЗнч(СпрОбъект.ДокументПоступления) <> Тип("ДокументСсылка.РасходныйОрдерНаТовары")) Тогда
			СпрОбъект.ДокументПоступления = ДокументПоступления;
		КонецЕсли;
		
		Попытка
			СпрПартия.Записать();
		Исключение
			
			ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
			
		КонецПопытки;
		
	КонецЦикла;
	
КонецПроцедуры

&НаСервереБезКонтекста
Функция ПолучитьДокументПоступления(ГУИД, ТипПоступления)
	
	Если ТипПоступления = "Возврат сырья от переработчика" Тогда
		ДокументПоступления = Документы.ВозвратСырьяОтПереработчика.ПолучитьСсылку(ГУИД);
	ИначеЕсли ТипПоступления = "Возврат товаров от клиента" Тогда
		ДокументПоступления = Документы.ВозвратТоваровОтКлиента.ПолучитьСсылку(ГУИД);
	ИначеЕсли ТипПоступления = "Перемещение с других складов" Тогда
		ДокументПоступления = Документы.ПеремещениеТоваров.ПолучитьСсылку(ГУИД);
	ИначеЕсли ТипПоступления = "Поступление от внешнего поставщика" Тогда
		ДокументПоступления = Документы.ПриобретениеТоваровУслуг.ПолучитьСсылку(ГУИД);
	ИначеЕсли ТипПоступления = "Поступление от переработчика" Тогда
		ДокументПоступления = Документы.ПоступлениеОтПереработчика.ПолучитьСсылку(ГУИД);
	ИначеЕсли ТипПоступления = "Поступление с производства" Тогда
		ДокументПоступления = Документы.РасходныйОрдерНаТовары.ПолучитьСсылку(ГУИД);
	ИначеЕсли ТипПоступления = "Поступление сырья от давальца" Тогда
		ДокументПоступления = Документы.ПоступлениеСырьяОтДавальца.ПолучитьСсылку(ГУИД);
	ИначеЕсли ТипПоступления = "Приемка товаров на хранение" Тогда
		ДокументПоступления = Документы.ПриемкаТоваровНаХранение.ПолучитьСсылку(ГУИД);
	Иначе
		ДокументПоступления = Неопределено;
	КонецЕсли;
	
	Возврат ДокументПоступления;
	
КонецФункции

&НаСервереБезКонтекста
Функция ЗначениеОбластиТаблицы(Таб, Строка, Колонка)
	
	РезультатТекст	= Таб.Область(Строка, Колонка, Строка, Колонка).Текст;
	
	Возврат РезультатТекст;
	
КонецФункции

#КонецОбласти