Акт постановки на баланс ЕГАИС / Модуль менеджера

файл
#Область ОбработчикиСобытий

Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка)
	
	ИнтеграцияЕГАИСВызовСервера.ПриПолученииФормыДокумента(
		"АктПостановкиНаБалансЕГАИС",
		ВидФормы,
		Параметры,
		ВыбраннаяФорма,
		ДополнительнаяИнформация,
		СтандартнаяОбработка);
	
КонецПроцедуры

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

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

#Область ПрограммныйИнтерфейс

#Область ДействияПриОбменеЕГАИС

// Статус после подготовки к передаче данных.
//
// Параметры:
//  ДокументСсылка - ДокументСсылка.АктПостановкиНаБалансЕГАИС - Ссылка на документ.
//  Операция - ПеречислениеСсылка.ВидыДокументовЕГАИС - Операция ЕГАИС.
// 
// Возвращаемое значение:
//  Структура - Структура со свойствами:
//   * НовыйСтатус - ПеречислениеСсылка.СтатусыОбработкиАктаПостановкиНаБалансЕГАИС - Новый статус.
//   * ДальнейшееДействие1 - ПеречислениеСсылка.ДальнейшиеДействияПоВзаимодействиюЕГАИС - Дальнейшее действие 1.
//   * ДальнейшееДействие2 - ПеречислениеСсылка.ДальнейшиеДействияПоВзаимодействиюЕГАИС - Дальнейшее действие 2.
//   * ДальнейшееДействие3 - ПеречислениеСсылка.ДальнейшиеДействияПоВзаимодействиюЕГАИС - Дальнейшее действие 3.
//
Функция СтатусПослеПодготовкиКПередачеДанных(ДокументСсылка, Операция) Экспорт
	
	Если Операция = Перечисления.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр1
		Или Операция = Перечисления.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр2
		Или Операция = Перечисления.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр3 Тогда
		
		ПараметрыОбновления = РегистрыСведений.СтатусыДокументовЕГАИС.РассчитатьСтатусыКПередаче(
			ДокументСсылка,
			Перечисления.СтатусыОбработкиАктаПостановкиНаБалансЕГАИС.КПередаче);
		
	ИначеЕсли Операция = Перечисления.ВидыДокументовЕГАИС.ЗапросНаОтменуПроведенияАктаПостановкиНаБаланс Тогда
		
		ПараметрыОбновления = РегистрыСведений.СтатусыДокументовЕГАИС.РассчитатьСтатусыКПередаче(
			ДокументСсылка,
			Перечисления.СтатусыОбработкиАктаПостановкиНаБалансЕГАИС.ЗапросНаОтменуПроведенияКПередаче);
		
	Иначе
		ВызватьИсключение ОбщегоНазначенияИС.ТекстИсключенияОбработкиСтатуса(ДокументСсылка, Операция);
	КонецЕсли;
	
	Возврат ПараметрыОбновления;
	
КонецФункции

// Статус после передачи данных
//
// Параметры:
//  ДокументСсылка - ДокументСсылка.АктПостановкиНаБалансЕГАИС - Ссылка на документ
//  Операция - ПеречислениеСсылка.ВидыДокументовЕГАИС - Операция ЕГАИС
//  СтатусОбработки - ПеречислениеСсылка.СтатусыОбработкиСообщенийЕГАИС - Статус обработки сообщения
// 
// Возвращаемое значение:
//  Структура - Структура со свойствами:
//   * НовыйСтатус - ПеречислениеСсылка.СтатусыОбработкиАктаПостановкиНаБалансЕГАИС - Новый статус.
//   * ДальнейшееДействие1 - ПеречислениеСсылка.ДальнейшиеДействияПоВзаимодействиюЕГАИС - Дальнейшее действие 1.
//   * ДальнейшееДействие2 - ПеречислениеСсылка.ДальнейшиеДействияПоВзаимодействиюЕГАИС - Дальнейшее действие 2.
//   * ДальнейшееДействие3 - ПеречислениеСсылка.ДальнейшиеДействияПоВзаимодействиюЕГАИС - Дальнейшее действие 3.
//
Функция СтатусПослеПередачиДанных(ДокументСсылка, Операция, СтатусОбработки) Экспорт
	
	Если СтатусОбработки = Неопределено Тогда
		СтатусОбработки = Перечисления.СтатусыОбработкиСообщенийЕГАИС.ПереданоВУТМ;
	КонецЕсли;
	
	Если Операция = Перечисления.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр1
		Или Операция = Перечисления.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр2
		Или Операция = Перечисления.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр3 Тогда
		
		СтатусыБазовыйПроцесс = РегистрыСведений.СтатусыДокументовЕГАИС.СтруктураСтатусы();
		
		СтатусыБазовыйПроцесс.Принят = Перечисления.СтатусыОбработкиАктаПостановкиНаБалансЕГАИС.ПереданВУТМ;
		СтатусыБазовыйПроцесс.ПринятДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ОжидайтеПолучениеКвитанцииПолученЕГАИС);
		СтатусыБазовыйПроцесс.ПринятДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ОжидайтеПолучениеКвитанцииПроведенЕГАИС);
		СтатусыБазовыйПроцесс.ПринятДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ОжидайтеПолучениеУведомленияОРегистрацииДвижения);
		
		СтатусыБазовыйПроцесс.Ошибка = Перечисления.СтатусыОбработкиАктаПостановкиНаБалансЕГАИС.ОшибкаПередачи;
		СтатусыБазовыйПроцесс.ОшибкаДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ПередайтеДанные);
		
		ПараметрыОбновления = РегистрыСведений.СтатусыДокументовЕГАИС.РассчитатьСтатусы(ДокументСсылка, СтатусОбработки, СтатусыБазовыйПроцесс);
		
	ИначеЕсли Операция = Перечисления.ВидыДокументовЕГАИС.ЗапросНаОтменуПроведенияАктаПостановкиНаБаланс Тогда
		
		СтатусыБазовыйПроцесс = РегистрыСведений.СтатусыДокументовЕГАИС.СтруктураСтатусы();
		
		СтатусыБазовыйПроцесс.Принят = Перечисления.СтатусыОбработкиАктаПостановкиНаБалансЕГАИС.ЗапросНаОтменуПроведенияПереданВУТМ;
		СтатусыБазовыйПроцесс.ПринятДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ОжидайтеПолучениеКвитанцииПолученЕГАИС);
		СтатусыБазовыйПроцесс.ПринятДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ОжидайтеПолучениеКвитанцииПроведенЕГАИС);
		
		СтатусыБазовыйПроцесс.Ошибка = Перечисления.СтатусыОбработкиАктаПостановкиНаБалансЕГАИС.ЗапросНаОтменуПроведенияОшибка;
		СтатусыБазовыйПроцесс.ОшибкаДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ЗапроситеОтменуПроведения);
		СтатусыБазовыйПроцесс.ОшибкаДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ОтменитеОперацию);
		
		ПараметрыОбновления = РегистрыСведений.СтатусыДокументовЕГАИС.РассчитатьСтатусы(ДокументСсылка, СтатусОбработки, СтатусыБазовыйПроцесс);
		
	Иначе
		ВызватьИсключение ОбщегоНазначенияИС.ТекстИсключенияОбработкиСтатуса(ДокументСсылка, Операция);
	КонецЕсли;
	
	Возврат ПараметрыОбновления;
	
КонецФункции

// Статус после получения данных из ЕГАИС.
//
// Параметры:
//  ДокументСсылка - ДокументСсылка.АктПостановкиНаБалансЕГАИС - Документ, для которого требуется обновить статус.
//  Операция - ПеречислениеСсылка.ВидыДокументовЕГАИС - Операция обмена с ЕГАИС.
//  ДополнительныеПараметры - Неопределено, Структура - дополнительные параметры со свойствами:
//   * СтатусОбработки - ПеречислениеСсылка.СтатусыОбработкиСообщенийЕГАИС - Статус обработки сообщения.
//   * ОперацияКвитанции - ПеречислениеСсылка.ВидыДокументовЕГАИС - Операция, на которую получена квитанция.
// 
// Возвращаемое значение:
//  Структура - Структура со свойствами:
//   * НовыйСтатус - ПеречислениеСсылка.СтатусыОбработкиАктаПостановкиНаБалансЕГАИС - Новый статус.
//   * ДальнейшееДействие1 - ПеречислениеСсылка.ДальнейшиеДействияПоВзаимодействиюЕГАИС - Дальнейшее действие 1.
//   * ДальнейшееДействие2 - ПеречислениеСсылка.ДальнейшиеДействияПоВзаимодействиюЕГАИС - Дальнейшее действие 2.
//   * ДальнейшееДействие3 - ПеречислениеСсылка.ДальнейшиеДействияПоВзаимодействиюЕГАИС - Дальнейшее действие 3.
//
Функция СтатусПослеПолученияДанных(ДокументСсылка, Операция, ДополнительныеПараметры = Неопределено) Экспорт
	
	ВидДокумента = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ДокументСсылка, "ВидДокумента");
	
	СтатусыБазовыйПроцесс = РегистрыСведений.СтатусыДокументовЕГАИС.СтруктураСтатусы();
	СтатусыБазовыйПроцесс.Принят           = Перечисления.СтатусыОбработкиАктаПостановкиНаБалансЕГАИС.ПроведенЕГАИС;
	СтатусыБазовыйПроцесс.Обрабатывается   = Перечисления.СтатусыОбработкиАктаПостановкиНаБалансЕГАИС.ОбрабатываетсяЕГАИС;
	СтатусыБазовыйПроцесс.ОшибкаПроведения = Неопределено;
	СтатусыБазовыйПроцесс.Ошибка           = Перечисления.СтатусыОбработкиАктаПостановкиНаБалансЕГАИС.ОшибкаПередачи;
	СтатусыБазовыйПроцесс.ОшибкаДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ПередайтеДанные);
	СтатусыБазовыйПроцесс.ПринятДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.НеТребуется);
	Если ВидДокумента = Перечисления.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр1 Тогда
		СтатусыБазовыйПроцесс.ПринятДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ЗапроситеОтменуПроведения);
	КонецЕсли;
	СтатусыБазовыйПроцесс.УведомлениеОРегистрацииДвижения = (ВидДокумента = Перечисления.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр1);
	
	СтатусыЗапросНаОтменуПроведения = РегистрыСведений.СтатусыДокументовЕГАИС.СтруктураСтатусы();
	СтатусыЗапросНаОтменуПроведения.Принят           = Перечисления.СтатусыОбработкиАктаПостановкиНаБалансЕГАИС.Отменен;
	СтатусыЗапросНаОтменуПроведения.Обрабатывается   = Перечисления.СтатусыОбработкиАктаПостановкиНаБалансЕГАИС.ЗапросНаОтменуПроведенияОбрабатываетсяЕГАИС;
	СтатусыЗапросНаОтменуПроведения.ОтменаПроведения = Перечисления.СтатусыОбработкиАктаПостановкиНаБалансЕГАИС.Отменен;
	СтатусыЗапросНаОтменуПроведения.ОшибкаПроведения = Перечисления.СтатусыОбработкиАктаПостановкиНаБалансЕГАИС.ЗапросНаОтменуПроведенияОшибка;
	СтатусыЗапросНаОтменуПроведения.Ошибка           = Перечисления.СтатусыОбработкиАктаПостановкиНаБалансЕГАИС.ЗапросНаОтменуПроведенияОшибка;
	СтатусыЗапросНаОтменуПроведения.ОшибкаДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ЗапроситеОтменуПроведения);
	СтатусыЗапросНаОтменуПроведения.ОшибкаДействия.Добавить(Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ОтменитеОперацию);
	СтатусыЗапросНаОтменуПроведения.УведомлениеОРегистрацииДвижения = Ложь;
	
	ВыполнитьРасчетТекущегоСостояния = Истина;
	Если ДополнительныеПараметры <> Неопределено
		И ДополнительныеПараметры.Свойство("ТекущееСостояние")
		И ДополнительныеПараметры.ТекущееСостояние <> Неопределено Тогда
		ВыполнитьРасчетТекущегоСостояния = ДополнительныеПараметры.ТекущееСостояние;
	КонецЕсли;
	
	Если Операция = Перечисления.ВидыДокументовЕГАИС.УведомлениеОРегистрацииДвиженияАктаПостановкиНаБаланс Тогда
		
		ПараметрыОбновления = РегистрыСведений.СтатусыДокументовЕГАИС.РассчитатьСтатусыПриПолученииКвитанции(
			ДокументСсылка,
			"УведомлениеОРегистрацииДвижения", Перечисления.СтатусыОбработкиСообщенийЕГАИС.ПринятИзЕГАИС,
			СтатусыБазовыйПроцесс, ВыполнитьРасчетТекущегоСостояния);
		
	ИначеЕсли Операция = Перечисления.ВидыДокументовЕГАИС.КвитанцияПолученЕГАИС Тогда
		
		Статусы = Неопределено;
		Если ДополнительныеПараметры.ОперацияКвитанции = Перечисления.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр1
			Или ДополнительныеПараметры.ОперацияКвитанции = Перечисления.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр2
			Или ДополнительныеПараметры.ОперацияКвитанции = Перечисления.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр3 Тогда
			
			Статусы = СтатусыБазовыйПроцесс;
			
		ИначеЕсли ДополнительныеПараметры.ОперацияКвитанции = Перечисления.ВидыДокументовЕГАИС.ЗапросНаОтменуПроведенияАктаПостановкиНаБаланс Тогда
			
			Статусы = СтатусыЗапросНаОтменуПроведения;
			
		Иначе
			ВызватьИсключение ОбщегоНазначенияИС.ТекстИсключенияОбработкиСтатуса(ДокументСсылка, Операция);
		КонецЕсли;
		
		Если Статусы <> Неопределено Тогда
			ПараметрыОбновления = РегистрыСведений.СтатусыДокументовЕГАИС.РассчитатьСтатусыПриПолученииКвитанции(
				ДокументСсылка,
				"КвитанцияПолученЕГАИС", ДополнительныеПараметры.СтатусОбработки,
				Статусы, ВыполнитьРасчетТекущегоСостояния);
		КонецЕсли;
		
	ИначеЕсли Операция = Перечисления.ВидыДокументовЕГАИС.КвитанцияПроведенЕГАИС Тогда
		
		Статусы = Неопределено;
		Если ДополнительныеПараметры.ОперацияКвитанции = Перечисления.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр1
			Или ДополнительныеПараметры.ОперацияКвитанции = Перечисления.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр2
			Или ДополнительныеПараметры.ОперацияКвитанции = Перечисления.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр3 Тогда
			
			Статусы = СтатусыБазовыйПроцесс;
			
		ИначеЕсли ДополнительныеПараметры.ОперацияКвитанции = Перечисления.ВидыДокументовЕГАИС.ЗапросНаОтменуПроведенияАктаПостановкиНаБаланс Тогда
			
			Статусы = СтатусыЗапросНаОтменуПроведения;
			
		Иначе
			ВызватьИсключение ОбщегоНазначенияИС.ТекстИсключенияОбработкиСтатуса(ДокументСсылка, Операция);
		КонецЕсли;
		
		Если Статусы <> Неопределено Тогда
			ПараметрыОбновления = РегистрыСведений.СтатусыДокументовЕГАИС.РассчитатьСтатусыПриПолученииКвитанции(
				ДокументСсылка,
				"КвитанцияПроведенЕГАИС", ДополнительныеПараметры.СтатусОбработки,
				Статусы, ВыполнитьРасчетТекущегоСостояния);
		КонецЕсли;
		
	Иначе
		ВызватьИсключение ОбщегоНазначенияИС.ТекстИсключенияОбработкиСтатуса(ДокументСсылка, Операция);
	КонецЕсли;
	
	Возврат ПараметрыОбновления;
	
КонецФункции

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

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

// Обновить статус после получения данных из ЕГАИС.
//
// Параметры:
//  ДокументСсылка - ДокументСсылка.АктПостановкиНаБалансЕГАИС - Документ, для которого требуется обновить статус.
//  Операция - ПеречислениеСсылка.ВидыДокументовЕГАИС - Операция обмена с ЕГАИС.
//  ДополнительныеПараметры - Неопределено, Структура - дополнительные параметры со свойствами:
//   * СтатусОбработки - ПеречислениеСсылка.СтатусыОбработкиСообщенийЕГАИС - Статус обработки сообщения.
//   * ОперацияКвитанции - ПеречислениеСсылка.ВидыДокументовЕГАИС - Операция, на которую получена квитанция.
// 
// Возвращаемое значение:
//  ПеречислениеСсылка.СтатусыОбработкиАктаПостановкиНаБалансЕГАИС - Новый статус.
//
Функция ОбновитьСтатусПослеПолученияДанных(ДокументСсылка, Операция, ДополнительныеПараметры = Неопределено) Экспорт
	
	ПараметрыОбновления = СтатусПослеПолученияДанных(ДокументСсылка, Операция, ДополнительныеПараметры);
	
	Если ПараметрыОбновления = Неопределено Тогда
		Возврат Неопределено;
	КонецЕсли;
	
	НовыйСтатусПослеОбновления = РегистрыСведений.СтатусыДокументовЕГАИС.ОбновитьСтатус(
		ДокументСсылка,
		ПараметрыОбновления, ДополнительныеПараметры);
	
	Возврат НовыйСтатусПослеОбновления;
	
КонецФункции

// Изменяет и возвращает статус документа ЕГАИС.
//
// Параметры:
//  ДокументСсылка - ДокументСсылка.АктПостановкиНаБалансЕГАИС - Документ ЕГАИС.
//  ПараметрыОбновления - Структура - со свойствами:
//   * НовыйСтатус - ПеречислениеСсылка.СтатусыИнформированияЕГАИС - Новый статус.
//   * ДальнейшееДействие1 - ПеречислениеСсылка.ДальнейшиеДействияПоВзаимодействиюЕГАИС - Дальнейшее действие 1.
//   * ДальнейшееДействие2 - ПеречислениеСсылка.ДальнейшиеДействияПоВзаимодействиюЕГАИС - Дальнейшее действие 2.
//   * ДальнейшееДействие3 - ПеречислениеСсылка.ДальнейшиеДействияПоВзаимодействиюЕГАИС - Дальнейшее действие 3.
//  ДополнительныеПараметры - Неопределено, Структура - со свойствами:
//   * СтатусОбработки - ПеречислениеСсылка.СтатусыОбработкиСообщенийЕГАИС - Статус обработки сообщения.
//   * ОперацияКвитанции - ПеречислениеСсылка.ВидыДокументовЕГАИС - Операция, на которую получена квитанция.
// Возвращаемое значение:
//  ПеречислениеСсылка.СтатусыИнформированияЕГАИС - новый статус документа ЕГАИС.
Функция ОбновитьСтатус(ДокументСсылка, ПараметрыОбновления, ДополнительныеПараметры) Экспорт
	
	НовыйСтатусПослеОбновления = РегистрыСведений.СтатусыДокументовЕГАИС.ОбновитьСтатус(
		ДокументСсылка,
		ПараметрыОбновления, ДополнительныеПараметры);
	
	Возврат НовыйСтатусПослеОбновления;
	
КонецФункции

// Получить последовательность операций в течении жизненного цикла документа.
//
// Параметры:
//  ДокументСсылка - ДокументСсылка.АктПостановкиНаБалансЕГАИС - Документ, для которого требуется обновить статус.
// 
// Возвращаемое значение:
//  ТаблицаЗначений - см. функцию ОбменДаннымиЕГАИС.ПустаяТаблицаПоследовательностьОпераций().
//
Функция ПоследовательностьОпераций(ДокументСсылка) Экспорт
	
	Операция = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ДокументСсылка, "ВидДокумента");
	
	Таблица = ОбменДаннымиЕГАИС.ПустаяТаблицаПоследовательностьОпераций();
	
	Исходящий = Перечисления.ТипыЗапросовИС.Исходящий;
	Входящий  = Перечисления.ТипыЗапросовИС.Входящий;
	
	Если Операция = Перечисления.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр1 Тогда
		
		ОбменДаннымиЕГАИС.ДобавитьОперациюВПоследовательность(Таблица, 0, Исходящий, Перечисления.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр1,                 ДокументСсылка);
		ОбменДаннымиЕГАИС.ДобавитьОперациюВПоследовательность(Таблица, 0, Входящий,  Перечисления.ВидыДокументовЕГАИС.УведомлениеОРегистрацииДвиженияАктаПостановкиНаБаланс);
		ОбменДаннымиЕГАИС.ДобавитьОперациюВПоследовательность(Таблица, 0, Исходящий, Перечисления.ВидыДокументовЕГАИС.ЗапросНаОтменуПроведенияАктаПостановкиНаБаланс, ДокументСсылка);
		
	ИначеЕсли Операция = Перечисления.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр2 Тогда
		
		ОбменДаннымиЕГАИС.ДобавитьОперациюВПоследовательность(Таблица, 0, Исходящий, Перечисления.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр2, ДокументСсылка);
		
	ИначеЕсли Операция = Перечисления.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр3 Тогда
		
		ОбменДаннымиЕГАИС.ДобавитьОперациюВПоследовательность(Таблица, 0, Исходящий, Перечисления.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр3, ДокументСсылка);
		
	КонецЕсли;
	
	Возврат Таблица;
	
КонецФункции

// Обработчик изменения статуса документа.
//
// Параметры:
//  ДокументСсылка - ДокументСсылка.АктПостановкиНаБалансЕГАИС - Документ.
//  ПредыдущийСтатус - ПеречислениеСсылка.СтатусыОбработкиАктаПостановкиНаБалансЕГАИС - Предыдущий статус.
//  НовыйСтатус - ПеречислениеСсылка.СтатусыОбработкиАктаПостановкиНаБалансЕГАИС - Предыдущий статус.
//  ПараметрыОбновленияСтатуса - Структура - см. функцию ОбменДаннымиЕГАИС.ПараметрыОбновленияСтатуса().
//
Процедура ПриИзмененииСтатусаДокумента(ДокументСсылка, ПредыдущийСтатус, НовыйСтатус, ПараметрыОбновленияСтатуса) Экспорт
	
	СтатусыДвижений = СтатусыДвижений();
	
	ДобавитьДвижения = ИнтеграцияЕГАИС.СтатусТребуетДобавленияДвижений(СтатусыДвижений, ПредыдущийСтатус, НовыйСтатус);
	УдалитьДвижения = ИнтеграцияЕГАИС.СтатусТребуетУдаленияДвижений(СтатусыДвижений, ПредыдущийСтатус, НовыйСтатус);
	
	Если ПараметрыОбновленияСтатуса.ОбновлятьДвижения
		И (ДобавитьДвижения Или УдалитьДвижения) Тогда
		
		ИмяРегистра = "ОстаткиАлкогольнойПродукцииЕГАИС";
		
		НаборЗаписей = РегистрыНакопления[ИмяРегистра].СоздатьНаборЗаписей();
		НаборЗаписей.Отбор.Регистратор.Установить(ДокументСсылка);
		
		ДополнительныеСвойстваДляПроведения = Новый Структура;
		ИнтеграцияИС.ИнициализироватьДополнительныеСвойстваДляПроведения(ДокументСсылка, ДополнительныеСвойстваДляПроведения);
		
		ИнициализироватьДанныеДокумента(ДокументСсылка, ДополнительныеСвойстваДляПроведения, ИмяРегистра);
		НаборЗаписей.Загрузить(ДополнительныеСвойстваДляПроведения.ТаблицыДляДвижений["Таблица" + ИмяРегистра]);
		НаборЗаписей.Записать();
		
	КонецЕсли;
	
	// Для постановки на баланс в регистр №1 и регистр №3
	Если ДобавитьДвижения Тогда
		
		Если ПараметрыОбновленияСтатуса.ДокументОбъект = Неопределено Тогда
			Товары = ИнтеграцияЕГАИС.Справки2ПоДокументу(ДокументСсылка);
		Иначе
			Товары = ПараметрыОбновленияСтатуса.ДокументОбъект.Товары;
		КонецЕсли;
		
		ШтрихкодыУпаковок = ШтрихкодированиеЕГАИС.ВложенныеШтрихкодыУпаковокПоДокументу(ДокументСсылка);
		Для Каждого СтрокаТЧ Из ШтрихкодыУпаковок.МаркированныеТовары Цикл
			
			Если ЗначениеЗаполнено(СтрокаТЧ.Справка2)
				И СтрокаТЧ.Статус = Перечисления.СтатусыАкцизныхМарок.ОшибкаЧтенияСтатуса Тогда
				АкцизныеМаркиЕГАИС.СообщитьОбОшибкеЧтенияСтатуса(СтрокаТЧ.ШтрихкодУпаковки);
				Продолжить;
			КонецЕсли;
			
			СтрокаТовара = Неопределено;
			
			ДанныеЗаписиСтатуса = РегистрыСведений.АкцизныеМаркиЕГАИС.ПоляЗаписиСтатусаУпаковки();
			ДанныеЗаписиСтатуса.ОрганизацияЕГАИС = СтрокаТЧ.ОрганизацияЕГАИС;
			ДанныеЗаписиСтатуса.АкцизнаяМарка    = СтрокаТЧ.ШтрихкодУпаковки;
			ДанныеЗаписиСтатуса.Статус           = Перечисления.СтатусыАкцизныхМарок.ВНаличии;
			
			Если ЗначениеЗаполнено(СтрокаТЧ.Справка2) Тогда
				ДанныеЗаписиСтатуса.Справка2 = СтрокаТЧ.Справка2;
			Иначе
				Если СтрокаТовара = Неопределено Тогда
					СтрокаТовара = Товары.Найти(СтрокаТЧ.ИдентификаторСтроки);
				КонецЕсли;
				Если ЗначениеЗаполнено(СтрокаТовара) Тогда
					ДанныеЗаписиСтатуса.Справка2 = СтрокаТовара.Справка2;
				Иначе
					АкцизныеМаркиЕГАИС.СообщитьОбОшибкеЗаполненияСправки2(СтрокаТЧ.ШтрихкодУпаковки);
					Продолжить;
				КонецЕсли;
			КонецЕсли;
			
			Если ЗначениеЗаполнено(СтрокаТЧ.АлкогольнаяПродукция) Тогда
				ДанныеЗаписиСтатуса.АлкогольнаяПродукция = СтрокаТЧ.АлкогольнаяПродукция;
			Иначе
				Если СтрокаТовара = Неопределено Тогда
					СтрокаТовара = Товары.Найти(СтрокаТЧ.ИдентификаторСтроки);
				КонецЕсли;
				Если ЗначениеЗаполнено(СтрокаТовара) Тогда
					ДанныеЗаписиСтатуса.АлкогольнаяПродукция = СтрокаТовара.АлкогольнаяПродукция;
				Иначе
					АкцизныеМаркиЕГАИС.СообщитьОбОшибкеЗаполненияСправки2(СтрокаТЧ.ШтрихкодУпаковки);
					Продолжить;
				КонецЕсли;
			КонецЕсли;
			
			ДанныеЗаписиСтатуса.Основание = ДокументСсылка;
			РегистрыСведений.АкцизныеМаркиЕГАИС.ВыполнитьЗаписьВРегистр(ДанныеЗаписиСтатуса);
			
		КонецЦикла;
		
	КонецЕсли;
	
	// Только при отмене проведения по регистру №1
	Если УдалитьДвижения Тогда
		
		Если ПараметрыОбновленияСтатуса.ДокументОбъект = Неопределено Тогда
			Товары = ИнтеграцияЕГАИС.Справки2ПоДокументу(ДокументСсылка);
		Иначе
			Товары = ПараметрыОбновленияСтатуса.ДокументОбъект.Товары;
		КонецЕсли;
		
		ШтрихкодыУпаковок = ШтрихкодированиеЕГАИС.ВложенныеШтрихкодыУпаковокПоДокументу(ДокументСсылка);
		Для Каждого СтрокаТЧ Из ШтрихкодыУпаковок.МаркированныеТовары Цикл
			
			Если ЗначениеЗаполнено(СтрокаТЧ.Справка2)
				И СтрокаТЧ.Статус = Перечисления.СтатусыАкцизныхМарок.ОшибкаЧтенияСтатуса Тогда
				АкцизныеМаркиЕГАИС.СообщитьОбОшибкеЧтенияСтатуса(СтрокаТЧ.ШтрихкодУпаковки);
				Продолжить;
			КонецЕсли;
			
			СтрокаТовара = Неопределено;
			
			ДанныеЗаписиСтатуса = РегистрыСведений.АкцизныеМаркиЕГАИС.ПоляЗаписиСтатусаУпаковки();
			ДанныеЗаписиСтатуса.ОрганизацияЕГАИС     = СтрокаТЧ.ОрганизацияЕГАИС;
			ДанныеЗаписиСтатуса.АкцизнаяМарка        = СтрокаТЧ.ШтрихкодУпаковки;
			ДанныеЗаписиСтатуса.Статус               = Перечисления.СтатусыАкцизныхМарок.Отсутствует;
			
			Если ЗначениеЗаполнено(СтрокаТЧ.Справка2) Тогда
				ДанныеЗаписиСтатуса.Справка2 = СтрокаТЧ.Справка2;
			Иначе
				Если СтрокаТовара = Неопределено Тогда
					СтрокаТовара = Товары.Найти(СтрокаТЧ.ИдентификаторСтроки);
				КонецЕсли;
				Если ЗначениеЗаполнено(СтрокаТовара) Тогда
					ДанныеЗаписиСтатуса.Справка2 = СтрокаТовара.Справка2;
				Иначе
					АкцизныеМаркиЕГАИС.СообщитьОбОшибкеЗаполненияСправки2(СтрокаТЧ.ШтрихкодУпаковки);
					Продолжить;
				КонецЕсли;
			КонецЕсли;
			
			Если ЗначениеЗаполнено(СтрокаТЧ.АлкогольнаяПродукция) Тогда
				ДанныеЗаписиСтатуса.АлкогольнаяПродукция = СтрокаТЧ.АлкогольнаяПродукция;
			Иначе
				Если СтрокаТовара = Неопределено Тогда
					СтрокаТовара = Товары.Найти(СтрокаТЧ.ИдентификаторСтроки);
				КонецЕсли;
				Если ЗначениеЗаполнено(СтрокаТовара) Тогда
					ДанныеЗаписиСтатуса.АлкогольнаяПродукция = СтрокаТовара.АлкогольнаяПродукция;
				Иначе
					АкцизныеМаркиЕГАИС.СообщитьОбОшибкеЗаполненияСправки2(СтрокаТЧ.ШтрихкодУпаковки);
					Продолжить;
				КонецЕсли;
			КонецЕсли;
			
			ДанныеЗаписиСтатуса.Основание = ДокументСсылка;
			РегистрыСведений.АкцизныеМаркиЕГАИС.ВыполнитьЗаписьВРегистр(ДанныеЗаписиСтатуса);
			
		КонецЦикла;
		
	КонецЕсли;
	
	ИнтеграцияЕГАИСПереопределяемый.ПриИзмененииСтатусаДокумента(ДокументСсылка, ПредыдущийСтатус, НовыйСтатус, ПараметрыОбновленияСтатуса);
	
	//Получение конечного статуса требующего повторного оформления
	Если КонечныеСтатусы().Найти(НовыйСтатус)<>Неопределено
		И КонечныеСтатусы().Найти(ПредыдущийСтатус)=Неопределено Тогда
		РасчетСтатусовОформленияЕГАИС.РассчитатьСтатусыОформленияДокументовЕГАИС(ДокументСсылка);
	КонецЕсли;
	
КонецПроцедуры

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

#Область Статусы

// Возвращает статус по умолчанию.
// 
// Возвращаемое значение:
//  ПеречислениеСсылка.СтатусыОбработкиАктаПостановкиНаБалансЕГАИС - Статус по-умолчанию.
//
Функция СтатусПоУмолчанию() Экспорт
	
	Возврат Перечисления.СтатусыОбработкиАктаПостановкиНаБалансЕГАИС.Черновик;
	
КонецФункции

// Возвращает статусы ошибок.
//
// Возвращаемое значение:
//  Массив - Статусы ошибок.
//
Функция СтатусыОшибок() Экспорт
	
	Статусы = Новый Массив;
	
	Статусы.Добавить(Перечисления.СтатусыОбработкиАктаПостановкиНаБалансЕГАИС.ОшибкаПередачи);
	Статусы.Добавить(Перечисления.СтатусыОбработкиАктаПостановкиНаБалансЕГАИС.ОшибкаПроведенияЕГАИС);
	Статусы.Добавить(Перечисления.СтатусыОбработкиАктаПостановкиНаБалансЕГАИС.ЗапросНаОтменуПроведенияОшибка);
	
	Возврат Статусы;
	
КонецФункции

// Возвращает конечные статусы.
//
// Возвращаемое значение:
//  Массив - Конечные статусы.
//
Функция КонечныеСтатусы(ТребуетсяПовторноеОформление = Истина) Экспорт
	
	Статусы = Новый Массив;
	
	Статусы.Добавить(Перечисления.СтатусыОбработкиАктаПостановкиНаБалансЕГАИС.Отменен);
	Статусы.Добавить(Перечисления.СтатусыОбработкиАктаПостановкиНаБалансЕГАИС.ОшибкаПроведенияЕГАИС);
	
	Возврат Статусы;
	
КонецФункции

// Возвращает дальнейшее действие по умолчанию.
// 
// Возвращаемое значение:
//  ПеречислениеСсылка.ДальнейшиеДействияПоВзаимодействиюЕГАИС - Дальнейшее действие по-умолчанию.
//
Функция ДальнейшееДействиеПоУмолчанию() Экспорт
	
	Возврат Перечисления.ДальнейшиеДействияПоВзаимодействиюЕГАИС.ПередайтеДанные;
	
КонецФункции

// Возвращает статусы движений.
//
// Возвращаемое значение:
//  Массив - Статусы.
//
Функция СтатусыДвижений()
	
	Результат = Новый Массив;
	Результат.Добавить(Перечисления.СтатусыОбработкиАктаПостановкиНаБалансЕГАИС.ПроведенЕГАИС);
	
	Возврат Результат;
	
КонецФункции

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

#Область ПанельОбменСЕГАИС

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

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

// Возвращает текст запроса для получения количества документов для оформления
// 
// Возвращаемое значение:
//  Строка - Текст запроса
//
Функция ТекстЗапросаПанельОбменСЕГАИСОформите() Экспорт
	
	ТекстЗапроса = "
	|ВЫБРАТЬ 0 КАК КоличествоДокументов
	|";
	
	ИнтеграцияЕГАИСПереопределяемый.ТекстЗапросаАктПостановкиНаБалансЕГАИСОформите(ТекстЗапроса);
	Возврат ТекстЗапроса;
	
КонецФункции

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

// Возвращает текст запроса для получения количества документов, находящихся в состоянии ожидания
// 
// Возвращаемое значение:
//  Строка - Текст запроса
//
Функция ТекстЗапросаПанельОбменСЕГАИСОжидайте() Экспорт
	
	ТекстЗапроса = "
	|ВЫБРАТЬ РАЗРЕШЕННЫЕ
	|	КОЛИЧЕСТВО (РАЗЛИЧНЫЕ СтатусыДокументовЕГАИС.Документ) КАК КоличествоДокументов
	|ИЗ
	|	РегистрСведений.СтатусыДокументовЕГАИС КАК СтатусыДокументовЕГАИС
	|ЛЕВОЕ СОЕДИНЕНИЕ
	|	Документ.АктПостановкиНаБалансЕГАИС КАК АктПостановкиНаБалансЕГАИС
	|ПО
	|	СтатусыДокументовЕГАИС.Документ = АктПостановкиНаБалансЕГАИС.Ссылка
	|ГДЕ
	|	АктПостановкиНаБалансЕГАИС.Ссылка ЕСТЬ НЕ NULL
	|	И НЕ АктПостановкиНаБалансЕГАИС.ПометкаУдаления
	|	И СтатусыДокументовЕГАИС.ДальнейшееДействие1 В(&ВсеТребующиеОжидания)
	|	И (АктПостановкиНаБалансЕГАИС.ОрганизацияЕГАИС В(&ОрганизацияЕГАИС)
	|		ИЛИ &БезОтбораПоОрганизацииЕГАИС)
	|	И (АктПостановкиНаБалансЕГАИС.Ответственный = &Ответственный
	|		ИЛИ &Ответственный = НЕОПРЕДЕЛЕНО)
	|";
	
	ИнтеграцияЕГАИСПереопределяемый.ТекстЗапросаАктПостановкиНаБалансЕГАИСОжидайте(ТекстЗапроса);
	Возврат ТекстЗапроса;
	
КонецФункции

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

#Область СообщенияЕГАИС

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

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

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

#Область СлужебныеПроцедурыИФункции

#Область СообщенияЕГАИС

Функция АктПостановкиНаБалансЕГАИСXML(ДокументСсылка)
	
	СообщенияXML = Новый Массив;
	
	ТекстыЗапроса = Новый СписокЗначений;
	
	ТекстыЗапроса.Добавить(
		"ВЫБРАТЬ
		|	ЕГАИСПрисоединенныеФайлы.Документ      КАК Ссылка,
		|	КОЛИЧЕСТВО(ЕГАИСПрисоединенныеФайлы.Ссылка) КАК ПоследнийНомер
		|ПОМЕСТИТЬ Версии
		|ИЗ
		|	Справочник.ЕГАИСПрисоединенныеФайлы КАК ЕГАИСПрисоединенныеФайлы
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.АктПостановкиНаБалансЕГАИС КАК Шапка
		|		ПО Шапка.Ссылка       = &Ссылка
		|		 И Шапка.ВидДокумента = ЕГАИСПрисоединенныеФайлы.Операция
		|		 И Шапка.Ссылка       = ЕГАИСПрисоединенныеФайлы.Документ
		|ГДЕ
		|	ЕГАИСПрисоединенныеФайлы.ТипСообщения = ЗНАЧЕНИЕ(Перечисление.ТипыЗапросовИС.Исходящий)
		|СГРУППИРОВАТЬ ПО
		|	ЕГАИСПрисоединенныеФайлы.Документ
		|;
		|
		|//#РезультатЗапроса#////////////////////////////////////////////////////////////
		|ВЫБРАТЬ
		|	Шапка.Номер                           КАК Номер,
		|	Шапка.Дата                            КАК Дата,
		|	ЕСТЬNULL(Версии.ПоследнийНомер, 0)    КАК ПоследнийНомерВерсии,
		|	Шапка.Идентификатор                   КАК Идентификатор,
		|	Шапка.ВидДокумента                    КАК Операция,
		|	Шапка.ДокументОснование               КАК ДокументОснование,
		|	
		|	Шапка.ПричинаПостановкиНаБаланс КАК ПричинаПостановкиНаБаланс,
		|	ВЫБОР
		|		КОГДА Шапка.ПричинаПостановкиНаБаланс = ЗНАЧЕНИЕ(Перечисление.ПричиныПостановкиНаБалансЕГАИС.Пересортица)
		|			ТОГДА ЕСТЬNULL(Шапка.АктСписанияЕГАИС.ИдентификаторЕГАИС, НЕОПРЕДЕЛЕНО)
		|		ИНАЧЕ НЕОПРЕДЕЛЕНО
		|	КОНЕЦ КАК ИдентификаторАктаСписания,
		|	ВЫРАЗИТЬ(Шапка.Комментарий КАК Строка(500)) КАК Комментарий,
		|	
		|	Шапка.ОрганизацияЕГАИС              КАК ОрганизацияЕГАИС,
		|	Шапка.ОрганизацияЕГАИС.Код          КАК ИдентификаторФСРАР,
		|	Шапка.ОрганизацияЕГАИС.ФорматОбмена КАК ФорматОбмена,
		|	Шапка.Ответственный                 КАК Ответственный
		|ИЗ
		|	Документ.АктПостановкиНаБалансЕГАИС КАК Шапка,
		|		ЛЕВОЕ СОЕДИНЕНИЕ Версии КАК Версии
		|		ПО Шапка.Ссылка = Версии.Ссылка
		|ГДЕ
		|	Шапка.Ссылка = &Ссылка
		|",
		"Шапка");
	
	ТекстыЗапроса.Добавить(
		"ВЫБРАТЬ
		|	Товары.АлкогольнаяПродукция КАК АлкогольнаяПродукция,
		|	Товары.Номенклатура         КАК Номенклатура,
		|	Товары.Характеристика       КАК Характеристика,
		|	Товары.Серия                КАК Серия
		|ПОМЕСТИТЬ ВТТовары
		|ИЗ
		|	Документ.АктПостановкиНаБалансЕГАИС.Товары КАК Товары
		|ГДЕ
		|	Товары.Ссылка = &Ссылка
		|");
	
	ТекстыЗапроса.Добавить(
		ИнтеграцияЕГАИС.ТекстЗапросаВТКоэффициентыПересчетаВЕдиницыЕГАИС(
			"ВТТовары",
			"ВТКоэффициентыПересчетаВЕдиницыЕГАИС"));
	
	ТекстЗапросаАлкогольнаяПродукция = 
	"ВЫБРАТЬ РАЗЛИЧНЫЕ
	|	Товары.АлкогольнаяПродукция КАК АлкогольнаяПродукция
	|ПОМЕСТИТЬ АлкогольнаяПродукция
	|ИЗ
	|	ВТТовары КАК Товары
	|;
	|
	|//#РезультатЗапроса#////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	Товары.АлкогольнаяПродукция КАК АлкогольнаяПродукция,
	|	// Выгрузка информации о товарах в сокращенном виде
	|	Продукция.Код                                          КАК ПродукцияКод,
	|	ВЫРАЗИТЬ(Продукция.НаименованиеПолное КАК Строка(255)) КАК ПродукцияНаименованиеПолное,
	|	Продукция.ТипПродукции                                 КАК ПродукцияТипПродукции,
	|	ЕСТЬNULL(ВидыПродукции.Код, """")                      КАК ПродукцияКодВидаПродукции,
	|	
	|	Производители.Код                                            КАК ПроизводительКод,
	|	ВЫРАЗИТЬ(Производители.Наименование КАК Строка(64))          КАК ПроизводительНаименование,
	|	ВЫРАЗИТЬ(Производители.НаименованиеПолное КАК Строка(255))   КАК ПроизводительНаименованиеПолное,
	|	Производители.ИНН                                            КАК ПроизводительИНН,
	|	Производители.КПП                                            КАК ПроизводительКПП,
	|	Производители.КодСтраны                                      КАК ПроизводительКодСтраны,
	|	Производители.КодРегиона                                     КАК ПроизводительКодРегиона,
	|	Производители.ПочтовыйИндекс                                 КАК ПроизводительПочтовыйИндекс,
	|	ВЫРАЗИТЬ(Производители.ПредставлениеАдреса КАК Строка(1000)) КАК ПроизводительПредставлениеАдреса,
	|	Производители.ТипОрганизации                                 КАК ПроизводительТипОрганизации,
	|	Производители.ИдентификаторОрганизацииТС                     КАК ПроизводительИдентификаторОрганизацииТС
	|ИЗ
	|	АлкогольнаяПродукция КАК Товары
	|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КлассификаторАлкогольнойПродукцииЕГАИС КАК Продукция
	|		ПО Продукция.Ссылка = Товары.АлкогольнаяПродукция
	|		
	|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыАлкогольнойПродукции КАК ВидыПродукции
	|		ПО Продукция.ВидПродукции = ВидыПродукции.Ссылка
	|		
	|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КлассификаторОрганизацийЕГАИС КАК Производители
	|		ПО Производители.Ссылка = Продукция.Производитель
	|";
	
	ТекстыЗапроса.Добавить(
		ТекстЗапросаАлкогольнаяПродукция,
		"АлкогольнаяПродукция");
		
	ТекстыЗапроса.Добавить(
		"ВЫБРАТЬ
		|	Товары.НомерСтроки                      КАК НомерСтроки,
		|	Товары.ИдентификаторСтроки              КАК ИдентификаторСтроки,
		|	Товары.Номенклатура                     КАК Номенклатура,
		|	Товары.АлкогольнаяПродукция             КАК АлкогольнаяПродукция,
		|	Товары.Количество
		|	* ЕСТЬNULL(ЕдиницыЕГАИС.Коэффициент, 1) КАК Количество,
		|	Товары.КоличествоПоСправке1             КАК КоличествоПоСправке1,
		|	Товары.НомерТТН                         КАК НомерТТН,
		|	Товары.ДатаТТН                          КАК ДатаТТН,
		|	Товары.ДатаРозлива                      КАК ДатаРозлива,
		|	Товары.НомерПодтвержденияЕГАИС          КАК НомерПодтвержденияЕГАИС,
		|	Товары.ДатаПодтвержденияЕГАИС           КАК ДатаПодтвержденияЕГАИС,
		|	Товары.Справка2                         КАК Справка2,
		|	Товары.Справка2.НомерСправки1           КАК НомерСправки1,
		|	Товары.Справка2.РегистрационныйНомер    КАК НомерСправки2,
		|	
		|	ЕСТЬNULL(ЕдиницыЕГАИС.ПроверятьОбъемДАЛ, ЛОЖЬ) КАК ПроверятьОбъемДАЛ,
		|	ЕСТЬNULL(ЕдиницыЕГАИС.ОбъемДАЛ, 0)             КАК ОбъемДАЛ
		|ИЗ
		|	Документ.АктПостановкиНаБалансЕГАИС.Товары КАК Товары
		|		ЛЕВОЕ СОЕДИНЕНИЕ ВТКоэффициентыПересчетаВЕдиницыЕГАИС КАК ЕдиницыЕГАИС
		|		ПО ЕдиницыЕГАИС.АлкогольнаяПродукция = Товары.АлкогольнаяПродукция
		|		 И ЕдиницыЕГАИС.Номенклатура = Товары.Номенклатура
		|		 И ЕдиницыЕГАИС.Характеристика = Товары.Характеристика
		|		 И ЕдиницыЕГАИС.Серия = Товары.Серия
		|ГДЕ
		|	Товары.Ссылка = &Ссылка
		|",
		"Товары");
	
	ПараметрыФормированияТекстаЗапроса = ШтрихкодированиеЕГАИС.ПараметрыФормированияТекстаЗапросаВложенныхШтрихкодов();
	ПараметрыФормированияТекстаЗапроса.ДокументСсылка                  = ДокументСсылка;
	ПараметрыФормированияТекстаЗапроса.ИспользоватьИдентификаторСтроки = Истина;
	ТекстыЗапроса.Добавить(
		ШтрихкодированиеЕГАИС.ТекстЗапросаВложенныхШтрихкодовПоДокументу(ПараметрыФормированияТекстаЗапроса),
		"ВложенныеШтрихкоды");
	
	МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
	
	Запрос = Новый Запрос;
	Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
	Запрос.УстановитьПараметр("Ссылка", ДокументСсылка);
	Запрос.УстановитьПараметр("ПустыеЗначенияНоменклатуры", ИнтеграцияИС.НезаполненныеЗначенияОпределяемогоТипа("Номенклатура"));
	РезультатыЗапроса = ОбщегоНазначенияИС.ВыполнитьПакетЗапросов(Запрос, ТекстыЗапроса);
	
	//@skip-warning
	Шапка                = РезультатыЗапроса["Шапка"].Выбрать();
	//@skip-warning
	АлкогольнаяПродукция = РезультатыЗапроса["АлкогольнаяПродукция"].Выгрузить();
	//@skip-warning
	Товары               = РезультатыЗапроса["Товары"].Выгрузить();
	
	Если Не Шапка.Следующий()
		Или Товары.Количество() = 0 Тогда
		
		СообщениеXML = ОбменДаннымиЕГАИС.СтруктураСообщенияXML();
		СообщениеXML.Документ = ДокументСсылка;
		СообщениеXML.Описание = ОбменДаннымиЕГАИС.ОписаниеОперацииПередачиДанных(
			Шапка.Операция, ДокументСсылка);
		
		ОбменДаннымиЕГАИСКлиентСервер.ДобавитьТекстОшибки(СообщениеXML, НСтр("ru = 'Нет данных для выгрузки.'"));
		
		СообщенияXML.Добавить(СообщениеXML);
		Возврат СообщенияXML;
		
	КонецЕсли;
	
	НомерВерсии = Шапка.ПоследнийНомерВерсии + 1;
	ФорматОбмена = ОбменДаннымиЕГАИСКлиентСервер.ФорматОбмена(Шапка.ФорматОбмена);
	
	СообщениеXML = ОбменДаннымиЕГАИС.СтруктураСообщенияXML();
	СообщениеXML.Описание = ОбменДаннымиЕГАИС.ОписаниеОперацииПередачиДанных(
		Шапка.Операция, ДокументСсылка, НомерВерсии);
	
	ПространствоИмен = Перечисления.ВидыДокументовЕГАИС.ПространствоИмен(Шапка.Операция, ФорматОбмена);
	ИмяТипа          = Перечисления.ВидыДокументовЕГАИС.ТипЕГАИС(Шапка.Операция, ФорматОбмена);
	
	Если ПространствоИмен = Неопределено
		Или ИмяТипа = Неопределено Тогда
		ОбменДаннымиЕГАИСКлиентСервер.ДобавитьТекстОшибки(
			СообщениеXML,
			СтрШаблон(НСтр("ru = 'Операция не поддерживается в версии формата обмена: %1.'"), ФорматОбмена));
		СообщенияXML.Добавить(СообщениеXML);
		Возврат СообщенияXML;
	КонецЕсли;
	
	Если Шапка.Операция = Перечисления.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр1 Тогда
		
		#Область ПодготовкаДанных
		
		ОписаниеНоменклатуры = ОбщегоНазначенияИС.ОписаниеНоменклатуры(Товары.ВыгрузитьКолонку("Номенклатура"));
		
		ТоварыИтоги = Новый ТаблицаЗначений;
		ТоварыИтоги.Колонки.Добавить("АлкогольнаяПродукция");
		ТоварыИтоги.Колонки.Добавить("КоличествоПоСправке1");
		ТоварыИтоги.Колонки.Добавить("ДатаРозлива");
		ТоварыИтоги.Колонки.Добавить("НомерТТН");
		ТоварыИтоги.Колонки.Добавить("ДатаТТН");
		ТоварыИтоги.Колонки.Добавить("НомерПодтвержденияЕГАИС");
		ТоварыИтоги.Колонки.Добавить("ДатаПодтвержденияЕГАИС");
		ТоварыИтоги.Колонки.Добавить("Количество");
		
		Для Каждого СтрокаТЧ Из Товары Цикл
			
			Если СтрокаТЧ.ПроверятьОбъемДАЛ
				И Не ЗначениеЗаполнено(СтрокаТЧ.ОбъемДАЛ) Тогда
				ОбменДаннымиЕГАИСКлиентСервер.ДобавитьТекстОшибки(СообщениеXML, СтрШаблон(НСтр("ru = 'Для номенклатуры в строке %1 не установлен объем в декалитрах.'"), СтрокаТЧ.НомерСтроки));
			КонецЕсли;
			
			ДанныеОписанияНоменклатуры = ОписаниеНоменклатуры[СтрокаТЧ.Номенклатура];
			Если СтрокаТЧ.ПроверятьОбъемДАЛ
				Или ДанныеОписанияНоменклатуры = Неопределено
				Или ДанныеОписанияНоменклатуры.КоличествоВПотребительскойУпаковке = 0 Тогда
				Количество = СтрокаТЧ.Количество;
			Иначе
				Количество = Окр(СтрокаТЧ.Количество / ДанныеОписанияНоменклатуры.КоличествоВПотребительскойУпаковке, 0);
			КонецЕсли;
			
			НоваяСтрока = ТоварыИтоги.Добавить();
			НоваяСтрока.АлкогольнаяПродукция    = СтрокаТЧ.АлкогольнаяПродукция;
			НоваяСтрока.КоличествоПоСправке1    = СтрокаТЧ.КоличествоПоСправке1;
			НоваяСтрока.ДатаРозлива             = СтрокаТЧ.ДатаРозлива;
			НоваяСтрока.НомерТТН                = СтрокаТЧ.НомерТТН;
			НоваяСтрока.ДатаТТН                 = СтрокаТЧ.ДатаТТН;
			НоваяСтрока.НомерПодтвержденияЕГАИС = СтрокаТЧ.НомерПодтвержденияЕГАИС;
			НоваяСтрока.ДатаПодтвержденияЕГАИС  = СтрокаТЧ.ДатаПодтвержденияЕГАИС;
			НоваяСтрока.Количество              = Количество;
			
		КонецЦикла;
		
		ТоварыИтоги.Свернуть(
			"АлкогольнаяПродукция,
			|КоличествоПоСправке1,
			|ДатаРозлива,
			|НомерТТН,
			|ДатаТТН,
			|НомерПодтвержденияЕГАИС,
			|ДатаПодтвержденияЕГАИС",
			"Количество");
		
		#КонецОбласти
		
		#Область ПодготовкаДанныхАкцизныеМарки
		
		АкцизныеМарки = Новый ТаблицаЗначений;
		
		АкцизныеМарки.Колонки.Добавить("АлкогольнаяПродукция");
		АкцизныеМарки.Колонки.Добавить("КоличествоПоСправке1");
		АкцизныеМарки.Колонки.Добавить("ДатаРозлива");
		АкцизныеМарки.Колонки.Добавить("НомерТТН");
		АкцизныеМарки.Колонки.Добавить("ДатаТТН");
		АкцизныеМарки.Колонки.Добавить("НомерПодтвержденияЕГАИС");
		АкцизныеМарки.Колонки.Добавить("ДатаПодтвержденияЕГАИС");
		АкцизныеМарки.Колонки.Добавить("КодАкцизнойМарки");
		
		//@skip-warning
		Выборка = РезультатыЗапроса["ВложенныеШтрихкоды"].Выбрать();
		ВложенныеШтрихкодыУпаковок = ШтрихкодированиеЕГАИС.ВложенныеШтрихкодыУпаковокПоВыборкеИМенеджеруВТ(
									 Выборка, МенеджерВременныхТаблиц);
		
		Для Каждого СтрокаТЧ Из ВложенныеШтрихкодыУпаковок.МаркированныеТовары Цикл
			
			Если ЗначениеЗаполнено(СтрокаТЧ.Статус) Тогда
				ОбменДаннымиЕГАИСКлиентСервер.ДобавитьТекстОшибки(
					СообщениеXML,
					СтрШаблон(
						НСтр("ru = 'Акцизная марка %1 со статусом %2 не может быть поставлена на баланс в регистр №1'"),
						СтрокаТЧ.Штрихкод,
						СтрокаТЧ.Статус));
			КонецЕсли;
			
			Если Не ЗначениеЗаполнено(СтрокаТЧ.ИдентификаторСтроки) Тогда
				ОбменДаннымиЕГАИСКлиентСервер.ДобавитьТекстОшибки(СообщениеXML, НСтр("ru = 'Не заполнен идентификатор строки акцизной марки.'"));
			КонецЕсли;
			
			НайденнаяСтрока = Товары.Найти(СтрокаТЧ.ИдентификаторСтроки, "ИдентификаторСтроки");
			Если НайденнаяСтрока = Неопределено Тогда
				ОбменДаннымиЕГАИСКлиентСервер.ДобавитьТекстОшибки(СообщениеXML, НСтр("ru = 'Ошибка при связывании акцизных марок и алкогольной продукции'"));
			КонецЕсли;
			
			НоваяСтрока = АкцизныеМарки.Добавить();
			НоваяСтрока.КодАкцизнойМарки = СтрокаТЧ.Штрихкод;
			
			НоваяСтрока.АлкогольнаяПродукция    = НайденнаяСтрока.АлкогольнаяПродукция;
			НоваяСтрока.КоличествоПоСправке1    = НайденнаяСтрока.КоличествоПоСправке1;
			НоваяСтрока.ДатаРозлива             = НайденнаяСтрока.ДатаРозлива;
			НоваяСтрока.НомерТТН                = НайденнаяСтрока.НомерТТН;
			НоваяСтрока.ДатаТТН                 = НайденнаяСтрока.ДатаТТН;
			НоваяСтрока.НомерПодтвержденияЕГАИС = НайденнаяСтрока.НомерПодтвержденияЕГАИС;
			НоваяСтрока.ДатаПодтвержденияЕГАИС  = НайденнаяСтрока.ДатаПодтвержденияЕГАИС;
			
		КонецЦикла;
		
		#КонецОбласти
		
		#Область АктПостановкиНаБалансВРегистр1
		
		Если ФорматОбмена = Перечисления.ФорматыОбменаЕГАИС.V1 Тогда
			
			#Область ФорматОбмена_V1
			
			АктXDTO = РаботаСXMLЕГАИС.ОбъектXDTO(ПространствоИмен, "ActChargeOnType");
			
			РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO, "Identity", Шапка.Идентификатор, СообщениеXML, 3);
			
			АктXDTO.Header = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(АктXDTO, "Header");
			
			РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "Number",  СокрЛП(Шапка.Номер), СообщениеXML);
			РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "ActDate", Шапка.Дата, СообщениеXML);
			РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "Note",    Шапка.Комментарий, СообщениеXML);
			
			АктXDTO.Content = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(АктXDTO, "Content");
			
			Для Каждого СтрокаТЧ Из ТоварыИтоги Цикл
				
				НомерСтроки = Формат(ТоварыИтоги.Индекс(СтрокаТЧ) + 1, "ЧГ=0");
				
				Position = РаботаСXMLЕГАИС.ОбъектXDTO(ПространствоИмен, "ActChargeOnPositionType");
				
				РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(Position, "Identity", НомерСтроки, СообщениеXML, 5);
				Position.Product = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(Position, "Product");
				РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(Position, "Quantity", СтрокаТЧ.Количество, СообщениеXML);
				
				Position.InformAB = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(Position, "InformAB");
				Position.InformAB.InformABReg = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(Position.InformAB, "InformABReg");
				Position.InformAB.InformABReg.InformA = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(Position.InformAB.InformABReg, "InformA");
				
				РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(Position.InformAB.InformABReg.InformA, "Quantity",       СтрокаТЧ.КоличествоПоСправке1,    СообщениеXML);
				РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(Position.InformAB.InformABReg.InformA, "BottlingDate",   СтрокаТЧ.ДатаРозлива,             СообщениеXML);
				РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(Position.InformAB.InformABReg.InformA, "TTNNumber",      СтрокаТЧ.НомерТТН,                СообщениеXML);
				РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(Position.InformAB.InformABReg.InformA, "TTNDate",        СтрокаТЧ.ДатаТТН,                 СообщениеXML);
				РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(Position.InformAB.InformABReg.InformA, "EGAISFixNumber", СтрокаТЧ.НомерПодтвержденияЕГАИС, СообщениеXML);
				РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(Position.InformAB.InformABReg.InformA, "EGAISFixDate",   СтрокаТЧ.ДатаПодтвержденияЕГАИС,  СообщениеXML);
				
				ИнтеграцияЕГАИС.ЗаполнитьВXDTOАлкогольнуюПродукцию_v1(
					Position.Product,
					АлкогольнаяПродукция.Найти(СтрокаТЧ.АлкогольнаяПродукция, "АлкогольнаяПродукция"),
					"Продукция", СообщениеXML);
				
				ПараметрыОтбораАкцизныМарок = Новый Структура;
				ПараметрыОтбораАкцизныМарок.Вставить("АлкогольнаяПродукция",    СтрокаТЧ.АлкогольнаяПродукция);
				ПараметрыОтбораАкцизныМарок.Вставить("КоличествоПоСправке1",    СтрокаТЧ.КоличествоПоСправке1);
				ПараметрыОтбораАкцизныМарок.Вставить("ДатаРозлива",             СтрокаТЧ.ДатаРозлива);
				ПараметрыОтбораАкцизныМарок.Вставить("НомерТТН",                СтрокаТЧ.НомерТТН);
				ПараметрыОтбораАкцизныМарок.Вставить("ДатаТТН",                 СтрокаТЧ.ДатаТТН);
				ПараметрыОтбораАкцизныМарок.Вставить("НомерПодтвержденияЕГАИС", СтрокаТЧ.НомерПодтвержденияЕГАИС);
				ПараметрыОтбораАкцизныМарок.Вставить("ДатаПодтвержденияЕГАИС",  СтрокаТЧ.ДатаПодтвержденияЕГАИС);
				
				ИнтеграцияЕГАИС.ЗаполнитьВXDTOАкцизныеМаркиПоОтбору(Position, ПараметрыОтбораАкцизныМарок, АкцизныеМарки, "MarkCode", СообщениеXML);
				
				АктXDTO.Content.Position.Добавить(Position);
				
			КонецЦикла;
			
			#КонецОбласти
			
		Иначе
			
			#Область ФорматОбмена_V2
			
			АктXDTO = РаботаСXMLЕГАИС.ОбъектXDTO(ПространствоИмен, "ActChargeOnType_v2");
			
			РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO, "Identity", Шапка.Идентификатор, СообщениеXML, 3);
			
			АктXDTO.Header = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(АктXDTO, "Header");
			
			РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "Number",       СокрЛП(Шапка.Номер),                     СообщениеXML);
			РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "ActDate",      Шапка.Дата,                              СообщениеXML);
			РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "TypeChargeOn", Строка(Шапка.ПричинаПостановкиНаБаланс), СообщениеXML);
			
			Если Шапка.ПричинаПостановкиНаБаланс = Перечисления.ПричиныПостановкиНаБалансЕГАИС.Пересортица Тогда
				Если ЗначениеЗаполнено(Шапка.ИдентификаторАктаСписания) Тогда
					РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "ActWriteOff", Шапка.ИдентификаторАктаСписания, СообщениеXML);
				Иначе
					ОбменДаннымиЕГАИСКлиентСервер.ДобавитьТекстОшибки(СообщениеXML, НСтр("ru = 'Акт списания не проведен в ЕГАИС.'"));
				КонецЕсли;
			КонецЕсли;
			
			РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "Note", Шапка.Комментарий, СообщениеXML);
			
			АктXDTO.Content = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(АктXDTO, "Content");
			
			Для Каждого СтрокаТЧ Из ТоварыИтоги Цикл
				
				СтрокаАП = АлкогольнаяПродукция.Найти(СтрокаТЧ.АлкогольнаяПродукция, "АлкогольнаяПродукция");
				Если СтрокаАП = Неопределено
					Или Не ЗначениеЗаполнено(СтрокаАП.ПроизводительТипОрганизации) Тогда
					ОбменДаннымиЕГАИСКлиентСервер.ДобавитьТекстОшибки(СообщениеXML,
						СтрШаблон(НСтр("ru = 'Для продукции %1 не указан производитель'"),
							СтрокаТЧ.АлкогольнаяПродукция));
					Продолжить;
				КонецЕсли;
				
				НомерСтроки = Формат(ТоварыИтоги.Индекс(СтрокаТЧ) + 1, "ЧГ=0");
				
				Position = РаботаСXMLЕГАИС.ОбъектXDTO(ПространствоИмен, "ActChargeOnPositionType");
				
				РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(Position, "Identity", НомерСтроки,         СообщениеXML, 5);
				Position.Product = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(Position, "Product");
				РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(Position, "Quantity", СтрокаТЧ.Количество, СообщениеXML);
				
				Position.InformF1F2 = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(Position, "InformF1F2");
				Position.InformF1F2.InformF1F2Reg = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(Position.InformF1F2, "InformF1F2Reg");
				Position.InformF1F2.InformF1F2Reg.InformF1 = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(Position.InformF1F2.InformF1F2Reg, "InformF1");
				
				РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(Position.InformF1F2.InformF1F2Reg.InformF1, "Quantity",       СтрокаТЧ.КоличествоПоСправке1,    СообщениеXML);
				РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(Position.InformF1F2.InformF1F2Reg.InformF1, "BottlingDate",   СтрокаТЧ.ДатаРозлива,             СообщениеXML);
				РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(Position.InformF1F2.InformF1F2Reg.InformF1, "TTNNumber",      СтрокаТЧ.НомерТТН,                СообщениеXML);
				РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(Position.InformF1F2.InformF1F2Reg.InformF1, "TTNDate",        СтрокаТЧ.ДатаТТН,                 СообщениеXML);
				РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(Position.InformF1F2.InformF1F2Reg.InformF1, "EGAISFixNumber", СтрокаТЧ.НомерПодтвержденияЕГАИС, СообщениеXML);
				РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(Position.InformF1F2.InformF1F2Reg.InformF1, "EGAISFixDate",   СтрокаТЧ.ДатаПодтвержденияЕГАИС,  СообщениеXML);
				
				ИнтеграцияЕГАИС.ЗаполнитьВXDTOАлкогольнуюПродукцию_v2(
					Position.Product,
					СтрокаАП,
					"Продукция", СообщениеXML);
				
				ПараметрыОтбораАкцизныМарок = Новый Структура;
				ПараметрыОтбораАкцизныМарок.Вставить("АлкогольнаяПродукция",    СтрокаТЧ.АлкогольнаяПродукция);
				ПараметрыОтбораАкцизныМарок.Вставить("КоличествоПоСправке1",    СтрокаТЧ.КоличествоПоСправке1);
				ПараметрыОтбораАкцизныМарок.Вставить("ДатаРозлива",             СтрокаТЧ.ДатаРозлива);
				ПараметрыОтбораАкцизныМарок.Вставить("НомерТТН",                СтрокаТЧ.НомерТТН);
				ПараметрыОтбораАкцизныМарок.Вставить("ДатаТТН",                 СтрокаТЧ.ДатаТТН);
				ПараметрыОтбораАкцизныМарок.Вставить("НомерПодтвержденияЕГАИС", СтрокаТЧ.НомерПодтвержденияЕГАИС);
				ПараметрыОтбораАкцизныМарок.Вставить("ДатаПодтвержденияЕГАИС",  СтрокаТЧ.ДатаПодтвержденияЕГАИС);
				
				ИнтеграцияЕГАИС.ЗаполнитьВXDTOАкцизныеМаркиПоОтбору(Position, ПараметрыОтбораАкцизныМарок, АкцизныеМарки, "MarkCode", СообщениеXML);
				
				АктXDTO.Content.Position.Добавить(Position);
				
			КонецЦикла;
			
			#КонецОбласти
			
		КонецЕсли;
		
		#КонецОбласти
	
	ИначеЕсли Шапка.Операция = Перечисления.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр2 Тогда
		
		#Область ПодготовкаДанных
		
		ТоварыИтоги = Новый ТаблицаЗначений;
		ТоварыИтоги.Колонки.Добавить("АлкогольнаяПродукция");
		ТоварыИтоги.Колонки.Добавить("Количество");
		
		Для Каждого СтрокаТЧ Из Товары Цикл
			
			Если СтрокаТЧ.ПроверятьОбъемДАЛ
				И Не ЗначениеЗаполнено(СтрокаТЧ.ОбъемДАЛ) Тогда
				ОбменДаннымиЕГАИСКлиентСервер.ДобавитьТекстОшибки(СообщениеXML, СтрШаблон(НСтр("ru = 'Для номенклатуры в строке %1 не установлен объем в декалитрах.'"), СтрокаТЧ.НомерСтроки));
			КонецЕсли;
			
			НоваяСтрока = ТоварыИтоги.Добавить();
			НоваяСтрока.АлкогольнаяПродукция = СтрокаТЧ.АлкогольнаяПродукция;
			НоваяСтрока.Количество           = СтрокаТЧ.Количество;
			
		КонецЦикла;
		
		ТоварыИтоги.Свернуть(
			"АлкогольнаяПродукция",
			"Количество");
		
		#КонецОбласти
		
		#Область АктПостановкиНаБалансВРегистр2
		
		АктXDTO = РаботаСXMLЕГАИС.ОбъектXDTO(ПространствоИмен, "ActChargeOnShopType_v2");
		
		РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO, "Identity", Шапка.Идентификатор, СообщениеXML, 3);
		
		АктXDTO.Header = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(АктXDTO, "Header");
		
		РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "Number",       СокрЛП(Шапка.Номер),                     СообщениеXML);
		РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "ActDate",      Шапка.Дата,                              СообщениеXML);
		РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "TypeChargeOn", Строка(Шапка.ПричинаПостановкиНаБаланс), СообщениеXML);
		
		Если Шапка.ПричинаПостановкиНаБаланс = Перечисления.ПричиныПостановкиНаБалансЕГАИС.Пересортица Тогда
			Если ЗначениеЗаполнено(Шапка.ИдентификаторАктаСписания) Тогда
				РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "ActWriteOff", Шапка.ИдентификаторАктаСписания, СообщениеXML);
			Иначе
				ОбменДаннымиЕГАИСКлиентСервер.ДобавитьТекстОшибки(СообщениеXML, НСтр("ru = 'Акт списания не проведен в ЕГАИС.'"));
			КонецЕсли;
		КонецЕсли;
		
		РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "Note", Шапка.Комментарий, СообщениеXML);
		
		АктXDTO.Content = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(АктXDTO, "Content");
		
		Для Каждого СтрокаТЧ Из ТоварыИтоги Цикл
			
			СтрокаАП = АлкогольнаяПродукция.Найти(СтрокаТЧ.АлкогольнаяПродукция, "АлкогольнаяПродукция");
			Если СтрокаАП = Неопределено
				Или Не ЗначениеЗаполнено(СтрокаАП.ПроизводительТипОрганизации) Тогда
				ОбменДаннымиЕГАИСКлиентСервер.ДобавитьТекстОшибки(СообщениеXML,
					СтрШаблон(НСтр("ru = 'Для продукции %1 не указан производитель'"),
						СтрокаТЧ.АлкогольнаяПродукция));
				Продолжить;
			КонецЕсли;
			
			НомерСтроки = Формат(ТоварыИтоги.Индекс(СтрокаТЧ) + 1, "ЧГ=0");
			
			Position = РаботаСXMLЕГАИС.ОбъектXDTO(ПространствоИмен, "ActChargeOnShopPositionType");
			
			РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(Position, "Identity", НомерСтроки, СообщениеXML, 5);
			Position.Product = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(Position, "Product");
			РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(Position, "Quantity", СтрокаТЧ.Количество, СообщениеXML);
			
			ИнтеграцияЕГАИС.ЗаполнитьВXDTOАлкогольнуюПродукцию_v2(
				Position.Product,
				СтрокаАП,
				"Продукция", СообщениеXML);
			
			АктXDTO.Content.Position.Добавить(Position);
			
		КонецЦикла;
		
		#КонецОбласти
	
	ИначеЕсли Шапка.Операция = Перечисления.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр3 Тогда
		
		#Область ПодготовкаДанных
		
		ТоварыИтоги = Новый ТаблицаЗначений;
		ТоварыИтоги.Колонки.Добавить("АлкогольнаяПродукция");
		ТоварыИтоги.Колонки.Добавить("Справка2");
		ТоварыИтоги.Колонки.Добавить("НомерСправки2");
		ТоварыИтоги.Колонки.Добавить("Количество");
		
		Для Каждого СтрокаТЧ Из Товары Цикл
			
			Если СтрокаТЧ.ПроверятьОбъемДАЛ
				И Не ЗначениеЗаполнено(СтрокаТЧ.ОбъемДАЛ) Тогда
				ОбменДаннымиЕГАИСКлиентСервер.ДобавитьТекстОшибки(СообщениеXML, СтрШаблон(НСтр("ru = 'Для номенклатуры в строке %1 не установлен объем в декалитрах.'"), СтрокаТЧ.НомерСтроки));
			КонецЕсли;
			
			НоваяСтрока = ТоварыИтоги.Добавить();
			НоваяСтрока.АлкогольнаяПродукция = СтрокаТЧ.АлкогольнаяПродукция;
			НоваяСтрока.Справка2             = СтрокаТЧ.Справка2;
			НоваяСтрока.НомерСправки2        = СтрокаТЧ.НомерСправки2;
			НоваяСтрока.Количество           = СтрокаТЧ.Количество;
			
		КонецЦикла;
		
		ТоварыИтоги.Свернуть("АлкогольнаяПродукция, Справка2, НомерСправки2", "Количество");
		
		АкцизныеМарки = Новый ТаблицаЗначений;
		АкцизныеМарки.Колонки.Добавить("Справка2");
		АкцизныеМарки.Колонки.Добавить("КодАкцизнойМарки");
		
		СтатусыДоступныхАкцизныхМарок = СтатусыДоступныхАкцизныхМарок();
		
		//@skip-warning
		ВложенныеШтрихкодыУпаковок = ШтрихкодированиеЕГАИС.ВложенныеШтрихкодыУпаковокПоВыборкеИМенеджеруВТ(
			РезультатыЗапроса["ВложенныеШтрихкоды"].Выбрать(), МенеджерВременныхТаблиц);
		
		Для Каждого СтрокаТЧ Из ВложенныеШтрихкодыУпаковок.МаркированныеТовары Цикл
			
			Справка2 = Неопределено;
			
			Если СтатусыДоступныхАкцизныхМарок.Найти(СтрокаТЧ.Статус) = Неопределено Тогда
				ОбменДаннымиЕГАИСКлиентСервер.ДобавитьТекстОшибки(
					СообщениеXML,
					СтрШаблон(
						НСтр("ru = 'Акцизная марка %1 со статусом %2 не может быть поставлена на баланс в регистр №3'"),
						СтрокаТЧ.Штрихкод,
						СтрокаТЧ.Статус));
			КонецЕсли;
			
			Если ЗначениеЗаполнено(СтрокаТЧ.Справка2) Тогда
				Справка2 = СтрокаТЧ.Справка2;
			Иначе
				НайденнаяСтрока = Товары.Найти(СтрокаТЧ.ИдентификаторСтроки, "ИдентификаторСтроки");
				Если НайденнаяСтрока = Неопределено Тогда
					ОбменДаннымиЕГАИСКлиентСервер.ДобавитьТекстОшибки(
						СообщениеXML,
						СтрШаблон(
							НСтр("ru = 'Не удалось определить справку 2 для акцизной марки %1'"),
							СтрокаТЧ.Штрихкод));
				Иначе
					Справка2 = НайденнаяСтрока.Справка2;
				КонецЕсли;
			КонецЕсли;
			
			Если Справка2 = Неопределено Тогда
				Продолжить;
			КонецЕсли;
			
			НоваяСтрока = АкцизныеМарки.Добавить();
			НоваяСтрока.Справка2         = Справка2;
			НоваяСтрока.КодАкцизнойМарки = СтрокаТЧ.Штрихкод;
			
		КонецЦикла;
		
		#КонецОбласти
		
		#Область АктПостановкиНаБалансВРегистр3
		
		АктXDTO = РаботаСXMLЕГАИС.ОбъектXDTO(ПространствоИмен, "ActFixBarCode");
		
		РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO, "Identity", Шапка.Идентификатор, СообщениеXML, 3);
		
		АктXDTO.Header = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(АктXDTO, "Header");
		
		РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "Number",  СокрЛП(Шапка.Номер),    СообщениеXML);
		РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "ActDate", Шапка.Дата,             СообщениеXML);
		РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(АктXDTO.Header, "Note",    Шапка.Комментарий,      СообщениеXML);
		
		АктXDTO.Content = РаботаСXMLИС.ОбъектXDTOПоИмениТипа(АктXDTO, "Content");
		
		Для Каждого СтрокаТЧ Из ТоварыИтоги Цикл
			
			НомерСтроки = Формат(ТоварыИтоги.Индекс(СтрокаТЧ) + 1, "ЧГ=0");
			
			Position = РаботаСXMLЕГАИС.ОбъектXDTO(ПространствоИмен, "ActFixBarCodePositionType");
			
			РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(Position, "Identity",     НомерСтроки,            СообщениеXML, 5);
			РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(Position, "Inform2RegId", СтрокаТЧ.НомерСправки2, СообщениеXML);
			
			ИнтеграцияЕГАИС.ЗаполнитьВXDTOАкцизныеМаркиПоСправке2_v3(Position, СтрокаТЧ, АкцизныеМарки, СообщениеXML);
			
			АктXDTO.Content.Position.Добавить(Position);
			
		КонецЦикла;
		
		#КонецОбласти
	
	КонецЕсли;
	
	ТекстСообщенияXML = РаботаСXMLЕГАИС.ОбъектXDTOВXML(АктXDTO, Шапка.ИдентификаторФСРАР, ПространствоИмен, ИмяТипа);
	
	СообщениеXML.ТекстСообщенияXML = ТекстСообщенияXML;
	СообщениеXML.ТипСообщения      = Перечисления.ТипыЗапросовИС.Исходящий;
	СообщениеXML.ОрганизацияЕГАИС  = Шапка.ОрганизацияЕГАИС;
	СообщениеXML.Операция          = Шапка.Операция;
	СообщениеXML.ФорматОбмена      = ФорматОбмена;
	СообщениеXML.Документ          = ДокументСсылка;
	СообщениеXML.ДокументОснование = Шапка.ДокументОснование;
	СообщениеXML.Версия            = НомерВерсии;
	
	СообщенияXML.Добавить(СообщениеXML);
	
	Возврат СообщенияXML;
	
КонецФункции

Функция ЗапросНаОтменуПроведенияXML(ДокументСсылка)
	
	СообщенияXML = Новый Массив;
	
	Операция = Перечисления.ВидыДокументовЕГАИС.ЗапросНаОтменуПроведенияАктаПостановкиНаБаланс;
	
	Запрос = Новый Запрос(
	"ВЫБРАТЬ
	|	ЕГАИСПрисоединенныеФайлы.Документ КАК Ссылка,
	|	КОЛИЧЕСТВО(ЕГАИСПрисоединенныеФайлы.Ссылка) КАК ПоследнийНомер
	|ПОМЕСТИТЬ Версии
	|ИЗ
	|	Справочник.ЕГАИСПрисоединенныеФайлы КАК ЕГАИСПрисоединенныеФайлы
	|ГДЕ
	|	ЕГАИСПрисоединенныеФайлы.Документ = &Ссылка
	|	И ЕГАИСПрисоединенныеФайлы.Операция = &Операция
	|	И ЕГАИСПрисоединенныеФайлы.ТипСообщения = ЗНАЧЕНИЕ(Перечисление.ТипыЗапросовИС.Исходящий)
	|СГРУППИРОВАТЬ ПО
	|	ЕГАИСПрисоединенныеФайлы.Документ
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	Шапка.Номер                           КАК Номер,
	|	Шапка.Дата                            КАК Дата,
	|	ЕСТЬNULL(Версии.ПоследнийНомер, 0)    КАК ПоследнийНомерВерсии,
	|	Шапка.ДокументОснование               КАК ДокументОснование,
	|	
	|	Шапка.ИдентификаторЕГАИС              КАК ИдентификаторЕГАИС,
	|	Шапка.ОрганизацияЕГАИС                КАК ОрганизацияЕГАИС,
	|	Шапка.ОрганизацияЕГАИС.Код            КАК ИдентификаторФСРАР,
	|	Шапка.ОрганизацияЕГАИС.ФорматОбмена   КАК ФорматОбмена,
	|	Шапка.Ответственный                   КАК Ответственный
	|ИЗ
	|	Документ.АктПостановкиНаБалансЕГАИС КАК Шапка,
	|		ЛЕВОЕ СОЕДИНЕНИЕ Версии КАК Версии
	|		ПО Шапка.Ссылка = Версии.Ссылка
	|ГДЕ
	|	Шапка.Ссылка = &Ссылка
	|");
	
	Запрос.УстановитьПараметр("Ссылка", ДокументСсылка);
	Запрос.УстановитьПараметр("Операция", Операция);
	
	Шапка = Запрос.Выполнить().Выбрать();
	
	Если Не Шапка.Следующий() Тогда
		
		СообщениеXML = ОбменДаннымиЕГАИС.СтруктураСообщенияXML();
		СообщениеXML.Документ = ДокументСсылка;
		СообщениеXML.Описание = ОбменДаннымиЕГАИС.ОписаниеОперацииПередачиДанных(
			Операция, ДокументСсылка);
		
		ОбменДаннымиЕГАИСКлиентСервер.ДобавитьТекстОшибки(СообщениеXML, НСтр("ru = 'Нет данных для выгрузки.'"));
		
		СообщенияXML.Добавить(СообщениеXML);
		Возврат СообщенияXML;
		
	КонецЕсли;
	
	НомерВерсии = Шапка.ПоследнийНомерВерсии + 1;
	ФорматОбмена = ОбменДаннымиЕГАИСКлиентСервер.ФорматОбмена(Шапка.ФорматОбмена);
	
	СообщениеXML = ОбменДаннымиЕГАИС.СтруктураСообщенияXML();
	СообщениеXML.Описание = ОбменДаннымиЕГАИС.ОписаниеОперацииПередачиДанных(
		Операция, ДокументСсылка, НомерВерсии);
	
	ПространствоИмен = Перечисления.ВидыДокументовЕГАИС.ПространствоИмен(Операция, ФорматОбмена);
	ИмяТипа          = Перечисления.ВидыДокументовЕГАИС.ТипЕГАИС(Операция, ФорматОбмена);
	
	Если ПространствоИмен = Неопределено
		Или ИмяТипа = Неопределено Тогда
		ОбменДаннымиЕГАИСКлиентСервер.ДобавитьТекстОшибки(
			СообщениеXML,
			СтрШаблон(НСтр("ru = 'Операция не поддерживается в версии формата обмена: %1.'"), ФорматОбмена));
		СообщенияXML.Добавить(СообщениеXML);
		Возврат СообщенияXML;
	КонецЕсли;
	
	ЗапросXDTO = РаботаСXMLЕГАИС.ОбъектXDTO(ПространствоИмен, "RequestRepealACO");
	
	РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(ЗапросXDTO, "ClientId",      Шапка.ИдентификаторФСРАР, СообщениеXML);
	РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(ЗапросXDTO, "RequestNumber", СокрЛП(Шапка.Номер),      СообщениеXML);
	РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(ЗапросXDTO, "RequestDate",   ТекущаяДатаСеанса(),      СообщениеXML);
	РаботаСXMLЕГАИС.ЗаполнитьСвойствоXDTO(ЗапросXDTO, "ACORegId",      Шапка.ИдентификаторЕГАИС, СообщениеXML);
	
	ТекстСообщенияXML = РаботаСXMLЕГАИС.ОбъектXDTOВXML(ЗапросXDTO, Шапка.ИдентификаторФСРАР, ПространствоИмен, ИмяТипа);
	
	СообщениеXML.ТекстСообщенияXML = ТекстСообщенияXML;
	СообщениеXML.ТипСообщения      = Перечисления.ТипыЗапросовИС.Исходящий;
	СообщениеXML.ОрганизацияЕГАИС  = Шапка.ОрганизацияЕГАИС;
	СообщениеXML.Операция          = Операция;
	СообщениеXML.ФорматОбмена      = ФорматОбмена;
	СообщениеXML.Документ          = ДокументСсылка;
	СообщениеXML.ДокументОснование = Шапка.ДокументОснование;
	СообщениеXML.Версия            = НомерВерсии;
	
	СообщенияXML.Добавить(СообщениеXML);
	
	Возврат СообщенияXML;
	
КонецФункции

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

#Область СканированиеАлкогольнойПродукции

Функция ТаблицаАлкогольнойПродукцииКОпределениюСправок2(ДокументСсылка) Экспорт
	
	Запрос = Новый Запрос;
	Запрос.Текст = "
	|ВЫБРАТЬ РАЗРЕШЕННЫЕ
	|	АктПостановкиНаБалансЕГАИСТовары.АлкогольнаяПродукция    КАК АлкогольнаяПродукция,
	|	АктПостановкиНаБалансЕГАИСТовары.Номенклатура            КАК Номенклатура,
	|	АктПостановкиНаБалансЕГАИСТовары.Характеристика          КАК Характеристика,
	|	АктПостановкиНаБалансЕГАИСТовары.Серия                   КАК Серия,
	|	ВЫБОР
	|		КОГДА ЕСТЬNULL(ВидыАлкогольнойПродукции.Маркируемый, ЛОЖЬ)
	|			ТОГДА ЗНАЧЕНИЕ(Справочник.Справки2ЕГАИС.ПустаяСсылка)
	|		ИНАЧЕ АктПостановкиНаБалансЕГАИСТовары.Справка2
	|	КОНЕЦ                                                    КАК Справка2,
	|	СУММА(АктПостановкиНаБалансЕГАИСТовары.Количество)       КАК Количество,
	|	ЕСТЬNULL(ВидыАлкогольнойПродукции.Маркируемый, ЛОЖЬ)     КАК Маркируемая
	|ИЗ
	|	Документ.АктПостановкиНаБалансЕГАИС.Товары КАК АктПостановкиНаБалансЕГАИСТовары
	|	ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КлассификаторАлкогольнойПродукцииЕГАИС КАК КлассификаторАлкогольнойПродукцииЕГАИС
	|		ПО АктПостановкиНаБалансЕГАИСТовары.АлкогольнаяПродукция = КлассификаторАлкогольнойПродукцииЕГАИС.Ссылка
	|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыАлкогольнойПродукции КАК ВидыАлкогольнойПродукции
	|		ПО КлассификаторАлкогольнойПродукцииЕГАИС.ВидПродукции = ВидыАлкогольнойПродукции.Ссылка
	|ГДЕ
	|	АктПостановкиНаБалансЕГАИСТовары.Ссылка = &ДокументСсылка
	|
	|СГРУППИРОВАТЬ ПО
	|	АктПостановкиНаБалансЕГАИСТовары.Номенклатура,
	|	АктПостановкиНаБалансЕГАИСТовары.АлкогольнаяПродукция,
	|	АктПостановкиНаБалансЕГАИСТовары.Характеристика,
	|	АктПостановкиНаБалансЕГАИСТовары.Серия,
	|	ЕСТЬNULL(ВидыАлкогольнойПродукции.Маркируемый, ЛОЖЬ),
	|	ВЫБОР
	|		КОГДА ЕСТЬNULL(ВидыАлкогольнойПродукции.Маркируемый, ЛОЖЬ)
	|			ТОГДА ЗНАЧЕНИЕ(Справочник.Справки2ЕГАИС.ПустаяСсылка)
	|		ИНАЧЕ АктПостановкиНаБалансЕГАИСТовары.Справка2
	|	КОНЕЦ";
	
	Запрос.УстановитьПараметр("ДокументСсылка", ДокументСсылка);
	
	Возврат Запрос.Выполнить().Выгрузить();
	
КонецФункции

Функция ШтрихкодыУпаковок(ДокументСсылка, ЗаполнитьСправки2ИзРегистра = Ложь) Экспорт
	
	Возврат ШтрихкодированиеЕГАИС.ВложенныеШтрихкодыУпаковокПоДокументу(ДокументСсылка, ЗаполнитьСправки2ИзРегистра);

КонецФункции

Функция СтатусыДоступныхАкцизныхМарок()
	
	Результат = Новый Массив;
	Результат.Добавить(Перечисления.СтатусыАкцизныхМарок.КПостановкеНаБаланс);
	Результат.Добавить(Перечисления.СтатусыАкцизныхМарок.Отсутствует);
	Результат.Добавить(Перечисления.СтатусыАкцизныхМарок.ПустаяСсылка());
	
	Возврат Результат;
	
КонецФункции

Функция ОбработатьДанныеШтрихкода(Форма, ДанныеШтрихкода, ПараметрыСканирования, ВложенныеШтрихкоды = Неопределено) Экспорт
	
	Если ИнтеграцияИСКлиентСервер.ЭтоУпаковка(ДанныеШтрихкода.ТипУпаковки) Тогда
		
		Возврат ОбработатьДанныеШтрихкодаЛогистическойУпаковки(Форма, ДанныеШтрихкода, ВложенныеШтрихкоды, ПараметрыСканирования);
		
	ИначеЕсли ДанныеШтрихкода.ТипУпаковки = Перечисления.ТипыУпаковок.МаркированныйТовар Тогда
		
		Возврат ОбработатьДанныеШтрихкодаПотребительскойУпаковки(Форма, ДанныеШтрихкода, ПараметрыСканирования);
		
	ИначеЕсли ДанныеШтрихкода.ТипШтрихкода = Перечисления.ТипыШтрихкодов.DataMatrix Тогда
		
		Возврат ОбработатьДанныеШтрихкодаСНомеромИСерией(Форма, ДанныеШтрихкода, ПараметрыСканирования);
		
	ИначеЕсли ДанныеШтрихкода.ВидУпаковки = Перечисления.ВидыУпаковокИС.Потребительская
		И ДанныеШтрихкода.МаркируемаяПродукция <> Истина
		И ДанныеШтрихкода.ЭтоШтрихкодНоменклатуры Тогда
		
		Возврат ОбработатьДанныеШтрихкодаПотребительскойУпаковки(Форма, ДанныеШтрихкода, ПараметрыСканирования);	
		
	КонецЕсли;
	
	Возврат Неопределено;
	
КонецФункции

Функция ОбработатьДанныеШтрихкодаПотребительскойУпаковки(Форма, ДанныеШтрихкода, ПараметрыСканирования)
	
	Результат = ШтрихкодированиеОбщегоНазначенияИС.ИнициализироватьРезультатОбработкиШтрихкода(ПараметрыСканирования, ДанныеШтрихкода);
	
	ПараметрыЗаполнения = АкцизныеМаркиЕГАИС.ПараметрыЗаполненияТоваровИАкцизныхМарок(Форма, Истина, ПараметрыСканирования);
	ПараметрыЗаполнения.ТолькоПустаяСправка2 = Форма.Объект.ВидДокумента <> Перечисления.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр3;
	
	Если Форма.Элементы.Товары.ТекущаяСтрока <> Неопределено Тогда
		ПараметрыЗаполнения.ТекущаяСтрока = Форма.Объект.Товары.НайтиПоИдентификатору(Форма.Элементы.Товары.ТекущаяСтрока);
	КонецЕсли;
	
	Если ПараметрыЗаполнения.ТолькоПустаяСправка2 Тогда
		Справка2 = Справочники.Справки2ЕГАИС.ПустаяСсылка();
	Иначе
		Справка2 = ДанныеШтрихкода.Справка2;
	КонецЕсли;
	
	ПараметрыОтбора = Новый Структура;
	ПараметрыОтбора.Вставить("Номенклатура",   ДанныеШтрихкода.Номенклатура);
	ПараметрыОтбора.Вставить("Характеристика", ДанныеШтрихкода.Характеристика);
	
	Если ПараметрыЗаполнения.УчитыватьСерии Тогда
		ПараметрыОтбора.Вставить("Серия", ДанныеШтрихкода.Серия);
	КонецЕсли;
	
	Если ДанныеШтрихкода.ТипШтрихкода = Перечисления.ТипыШтрихкодов.PDF417
		Или ДанныеШтрихкода.ТипШтрихкода = Перечисления.ТипыШтрихкодов.DataMatrix Тогда
		ТипШтрихкода = ДанныеШтрихкода.ТипШтрихкода;
	Иначе
		ТипШтрихкода = Неопределено;
	КонецЕсли;
	
	Если ДанныеШтрихкода.Коэффициент <> Неопределено И ДанныеШтрихкода.Коэффициент > 0 Тогда
		КоличествоПродукции = ДанныеШтрихкода.Коэффициент;
	Иначе
		КоличествоПродукции = ДанныеШтрихкода.Количество;
	КонецЕсли;
	
	РаспределенноеКоличество = 0;
	Пока РаспределенноеКоличество < КоличествоПродукции Цикл
		
		ОсталосьРаспределить = КоличествоПродукции - РаспределенноеКоличество;
		
		РезультатПоиска = АкцизныеМаркиЕГАИС.НайтиСтрокиТоваров(
			Форма.Объект.Товары, ПараметрыОтбора,
			Справка2, ДанныеШтрихкода.АлкогольнаяПродукция, ПараметрыЗаполнения, ТипШтрихкода);
			
		Если Не РезультатПоиска.ПолноеСоответствие <> Неопределено
			И ЗначениеЗаполнено(РезультатПоиска.КЗаполнению) <> Неопределено Тогда
			ПараметрыОтбора.Вставить("ТипШтрихкода", Перечисления.ТипыШтрихкодов.ПустаяСсылка());
			РезультатПоиска = АкцизныеМаркиЕГАИС.НайтиСтрокиТоваров(
				Форма.Объект.Товары, ПараметрыОтбора,
				Справка2, ДанныеШтрихкода.АлкогольнаяПродукция, ПараметрыЗаполнения);
		КонецЕсли;
		
		СтрокаТЧ                        = РезультатПоиска.ПолноеСоответствие;
		СтрокиТЧДляУменьшенияКоличества = РезультатПоиска.КЗаполнению;
		
		Если СтрокиТЧДляУменьшенияКоличества = Неопределено
			И СтрокаТЧ = Неопределено Тогда
			
			СтрокаТЧ = Форма.Объект.Товары.Добавить();
			СтрокаТЧ.Номенклатура         = ДанныеШтрихкода.Номенклатура;
			СтрокаТЧ.Характеристика       = ДанныеШтрихкода.Характеристика;
			СтрокаТЧ.Серия                = ДанныеШтрихкода.Серия;
			
			СтрокаТЧ.АлкогольнаяПродукция = ДанныеШтрихкода.АлкогольнаяПродукция;
			СтрокаТЧ.Справка2             = Справка2;
			
			АкцизныеМаркиЕГАИС.ОбработатьДобавленнуюСтроку(
				СтрокаТЧ, ПараметрыЗаполнения,
				ОсталосьРаспределить, ДанныеШтрихкода.МаркируемаяПродукция);
			
			РаспределенноеКоличество = РаспределенноеКоличество + ОсталосьРаспределить;
			
		ИначеЕсли СтрокиТЧДляУменьшенияКоличества = Неопределено
			И СтрокаТЧ <> Неопределено Тогда
			
			АкцизныеМаркиЕГАИС.ОбработатьИзмененнуюСтроку(
				СтрокаТЧ, ПараметрыЗаполнения,
				ОсталосьРаспределить, ДанныеШтрихкода.МаркируемаяПродукция);
			
			РаспределенноеКоличество = РаспределенноеКоличество + ОсталосьРаспределить;
			
		Иначе
			
			Для Каждого СтрокаТЧДляУменьшенияКоличества Из СтрокиТЧДляУменьшенияКоличества Цикл
				
				Если СтрокаТЧДляУменьшенияКоличества.Количество >= ОсталосьРаспределить Тогда
					КоличествоКОбработке = ОсталосьРаспределить;
				Иначе
					КоличествоКОбработке = СтрокаТЧДляУменьшенияКоличества.Количество;
				КонецЕсли;
				
				Если СтрокаТЧДляУменьшенияКоличества.Количество <= КоличествоКОбработке Тогда
					
					Если СтрокаТЧ = Неопределено Тогда
						
						СтрокаТЧ = СтрокаТЧДляУменьшенияКоличества;
						
						СтрокаТЧ.АлкогольнаяПродукция = ДанныеШтрихкода.АлкогольнаяПродукция;
						СтрокаТЧ.Справка2             = Справка2;
						
					Иначе
						
						Форма.Объект.Товары.Удалить(СтрокаТЧДляУменьшенияКоличества);
						
						Индекс = ПараметрыЗаполнения.ИзмененныеСтроки.Найти(СтрокаТЧДляУменьшенияКоличества);
						Если Индекс <> Неопределено Тогда
							ПараметрыЗаполнения.ИзмененныеСтроки.Удалить(Индекс);
						КонецЕсли;
						
						АкцизныеМаркиЕГАИС.ОбработатьИзмененнуюСтроку(
							СтрокаТЧ, ПараметрыЗаполнения,
							КоличествоКОбработке, ДанныеШтрихкода.МаркируемаяПродукция);
						
					КонецЕсли;
					
					РаспределенноеКоличество = РаспределенноеКоличество + КоличествоКОбработке;
					
				Иначе
					
					СтрокаТЧДляУменьшенияКоличества.Количество = СтрокаТЧДляУменьшенияКоличества.Количество - КоличествоКОбработке;
					ПараметрыЗаполнения.ИзмененныеСтроки.Добавить(СтрокаТЧДляУменьшенияКоличества);
					
					Если СтрокаТЧ = Неопределено Тогда
						
						СтрокаТЧ = Форма.Объект.Товары.Вставить(Форма.Объект.Товары.Индекс(СтрокаТЧДляУменьшенияКоличества) + 1);
						ЗаполнитьЗначенияСвойств(
							СтрокаТЧ, СтрокаТЧДляУменьшенияКоличества,,
							"Количество, КоличествоУпаковок, ИдентификаторСтроки, ТипШтрихкода");
						
						СтрокаТЧ.АлкогольнаяПродукция = ДанныеШтрихкода.АлкогольнаяПродукция;
						СтрокаТЧ.Справка2             = Справка2;
						
						АкцизныеМаркиЕГАИС.ОбработатьДобавленнуюСтроку(
							СтрокаТЧ, ПараметрыЗаполнения,
							КоличествоКОбработке, ДанныеШтрихкода.МаркируемаяПродукция);
						
					Иначе
						
						АкцизныеМаркиЕГАИС.ОбработатьИзмененнуюСтроку(
							СтрокаТЧ, ПараметрыЗаполнения,
							КоличествоКОбработке, ДанныеШтрихкода.МаркируемаяПродукция);
						
					КонецЕсли;
					
					РаспределенноеКоличество = РаспределенноеКоличество + КоличествоКОбработке;
					
				КонецЕсли;
				
				Прервать;
				
			КонецЦикла;
			
		КонецЕсли;
		
		Если Не ЗначениеЗаполнено(СтрокаТЧ.ТипШтрихкода) Тогда
			СтрокаТЧ.ТипШтрихкода = ТипШтрихкода;
		КонецЕсли;
		
		Если Не ЗначениеЗаполнено(СтрокаТЧ.ИдентификаторСтроки) Тогда
			СтрокаТЧ.ИдентификаторСтроки = Строка(Новый УникальныйИдентификатор);
		КонецЕсли;
		
	КонецЦикла;
	
	Если Форма.Объект.ВидДокумента <> Перечисления.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр2
		И ДанныеШтрихкода.МаркируемаяПродукция = Истина Тогда
		
		АкцизныеМаркиСтрокаТЧ = Форма.Объект.АкцизныеМарки.Добавить();
		АкцизныеМаркиСтрокаТЧ.АкцизнаяМарка = ДанныеШтрихкода.ШтрихкодУпаковки;
		АкцизныеМаркиСтрокаТЧ.Количество    = 1;
		Если ЗначениеЗаполнено(Справка2) Тогда
			АкцизныеМаркиСтрокаТЧ.Справка2 = Справка2;
		Иначе
			АкцизныеМаркиСтрокаТЧ.ИдентификаторСтроки = СтрокаТЧ.ИдентификаторСтроки;
		КонецЕсли;
		
	КонецЕсли;

	Результат.ДобавленныеСтроки = ПараметрыЗаполнения.ДобавленныеСтроки;
	Результат.ИзмененныеСтроки  = ПараметрыЗаполнения.ИзмененныеСтроки;
	
	Возврат Результат;
	
КонецФункции

Функция ОбработатьДанныеШтрихкодаЛогистическойУпаковки(Форма, ДанныеШтрихкода, ВложенныеШтрихкоды, ПараметрыСканирования)
	
	Результат = ШтрихкодированиеОбщегоНазначенияИС.ИнициализироватьРезультатОбработкиШтрихкода(ПараметрыСканирования, ДанныеШтрихкода);
	
	ПараметрыЗаполнения = АкцизныеМаркиЕГАИС.ПараметрыЗаполненияТоваровИАкцизныхМарок(Форма, Истина, ПараметрыСканирования);
	ПараметрыЗаполнения.ТолькоПустаяСправка2 = Форма.Объект.ВидДокумента <> Перечисления.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр3;
	ПараметрыЗаполнения.УчитыватьСерии       = Форма.Объект.ВидДокумента = Перечисления.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр3;
	Если Форма.Элементы.Товары.ТекущаяСтрока <> Неопределено Тогда
		ПараметрыЗаполнения.ТекущаяСтрока = Форма.Объект.Товары.НайтиПоИдентификатору(Форма.Элементы.Товары.ТекущаяСтрока);
	КонецЕсли;
	
	ЗаполнятьТолькоТовары = (Форма.Объект.ВидДокумента = Перечисления.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр2);
	
	АкцизныеМаркиЕГАИС.ЗаполнитьТоварыИАкцизныеМарки(
		Форма.Объект, ВложенныеШтрихкоды.ДеревоУпаковок, ПараметрыЗаполнения,,
		ЗаполнятьТолькоТовары);
	
	Результат.ИзмененныеСтроки  = ПараметрыЗаполнения.ИзмененныеСтроки;
	Результат.ДобавленныеСтроки = ПараметрыЗаполнения.ДобавленныеСтроки;
	
	Возврат Результат;
	
КонецФункции

Функция ОбработатьДанныеШтрихкодаСНомеромИСерией(Форма, ДанныеШтрихкода, ПараметрыСканирования)
	
	Результат = ШтрихкодированиеОбщегоНазначенияИС.ИнициализироватьРезультатОбработкиШтрихкода(ПараметрыСканирования, ДанныеШтрихкода);
	
	Если ПараметрыСканирования.Операция = Перечисления.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр1 Тогда
		
		ПараметрыОтбора = Новый Структура;
		ПараметрыОтбора.Вставить("Номенклатура",         ДанныеШтрихкода.Номенклатура);
		ПараметрыОтбора.Вставить("Характеристика",       ДанныеШтрихкода.Характеристика);
		ПараметрыОтбора.Вставить("АлкогольнаяПродукция", ДанныеШтрихкода.АлкогольнаяПродукция);
		ПараметрыОтбора.Вставить("Серия",                ДанныеШтрихкода.Серия);
		
		Если ЗначениеЗаполнено(ДанныеШтрихкода.Справка2) Тогда
			
			Запрос = Новый Запрос(
			"ВЫБРАТЬ
			|	Справки2ЕГАИС.Справка1.НомерТТН КАК НомерТТН,
			|	Справки2ЕГАИС.Справка1.ДатаТТН КАК ДатаТТН,
			|	Справки2ЕГАИС.Справка1.ДатаРозлива КАК ДатаРозлива,
			|	Справки2ЕГАИС.Справка1.НомерПодтвержденияЕГАИС КАК НомерПодтвержденияЕГАИС,
			|	Справки2ЕГАИС.Справка1.ДатаПодтвержденияЕГАИС КАК ДатаПодтвержденияЕГАИС,
			|	Справки2ЕГАИС.Справка1.Количество КАК КоличествоПоСправке1,
			|	Справки2ЕГАИС.Справка1 КАК Справка1
			|ИЗ
			|	Справочник.Справки2ЕГАИС КАК Справки2ЕГАИС
			|ГДЕ
			|	Справки2ЕГАИС.Ссылка = &Справка2");
			
			Запрос.УстановитьПараметр("Справка2", ДанныеШтрихкода.Справка2);
			
			ВыборкаПоСправке1 = Запрос.Выполнить().Выбрать();
			Если ВыборкаПоСправке1.Следующий() Тогда
				
				Если ЗначениеЗаполнено(ВыборкаПоСправке1.Справка1) Тогда
					
					ПараметрыОтбора.Вставить("ДатаТТН",                 ВыборкаПоСправке1.ДатаТТН);
					ПараметрыОтбора.Вставить("НомерТТН",                ВыборкаПоСправке1.НомерТТН);
					ПараметрыОтбора.Вставить("ДатаПодтвержденияЕГАИС",  ВыборкаПоСправке1.ДатаПодтвержденияЕГАИС);
					ПараметрыОтбора.Вставить("НомерПодтвержденияЕГАИС", ВыборкаПоСправке1.НомерПодтвержденияЕГАИС);
					ПараметрыОтбора.Вставить("КоличествоПоСправке1",    ВыборкаПоСправке1.КоличествоПоСправке1);
					ПараметрыОтбора.Вставить("ДатаРозлива",             ВыборкаПоСправке1.ДатаРозлива);
					
				КонецЕсли;
				
			КонецЕсли;
			
		Иначе
			
			ПараметрыОтбора.Вставить("ДатаТТН",                 '00010101');
			ПараметрыОтбора.Вставить("НомерТТН",                "");
			ПараметрыОтбора.Вставить("ДатаПодтвержденияЕГАИС",  '00010101');
			ПараметрыОтбора.Вставить("НомерПодтвержденияЕГАИС", "");
			ПараметрыОтбора.Вставить("КоличествоПоСправке1",    0);
			ПараметрыОтбора.Вставить("ДатаРозлива",             '00010101');
			
		КонецЕсли;
		
		МассивСтрок = Форма.Объект.Товары.НайтиСтроки(ПараметрыОтбора);
		Если МассивСтрок.Количество() > 0 Тогда
			СтрокаТЧ = МассивСтрок[0];
		Иначе
			СтрокаТЧ = Неопределено;
		КонецЕсли;
		
	Иначе
		
		ПараметрыОтбора = Новый Структура;
		ПараметрыОтбора.Вставить("Номенклатура",         ДанныеШтрихкода.Номенклатура);
		ПараметрыОтбора.Вставить("Характеристика",       ДанныеШтрихкода.Характеристика);
		ПараметрыОтбора.Вставить("АлкогольнаяПродукция", ДанныеШтрихкода.АлкогольнаяПродукция);
		ПараметрыОтбора.Вставить("Серия",                ДанныеШтрихкода.Серия);
		Если ПараметрыСканирования.Операция = Перечисления.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр3 Тогда
			ПараметрыОтбора.Вставить("Справка2", ДанныеШтрихкода.Справка2);
		Иначе
			ПараметрыОтбора.Вставить("Справка2", Справочники.Справки2ЕГАИС.ПустаяСсылка());
		КонецЕсли;
		
		МассивСтрок = Форма.Объект.Товары.НайтиСтроки(ПараметрыОтбора);
		Если МассивСтрок.Количество() > 0 Тогда
			СтрокаТЧ = МассивСтрок[0];
		Иначе
			СтрокаТЧ = Неопределено;
		КонецЕсли;
		
	КонецЕсли;
	
	Если СтрокаТЧ <> Неопределено Тогда
		
		СтрокаТЧ.Количество = СтрокаТЧ.Количество + 1;
		
		Результат.ИзмененныеСтроки.Добавить(СтрокаТЧ);
		
	Иначе
		
		СтрокаТЧ = Форма.Объект.Товары.Добавить();
		СтрокаТЧ.ИдентификаторСтроки = Строка(Новый УникальныйИдентификатор);
		
		СтрокаТЧ.АлкогольнаяПродукция = ДанныеШтрихкода.АлкогольнаяПродукция;
		СтрокаТЧ.Номенклатура         = ДанныеШтрихкода.Номенклатура;
		СтрокаТЧ.Характеристика       = ДанныеШтрихкода.Характеристика;
		СтрокаТЧ.Серия                = ДанныеШтрихкода.Серия;
		
		// Заполнение данных для акта постановки на баланс в регистр №1
		Если ПараметрыСканирования.Операция = Перечисления.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр1
			И ВыборкаПоСправке1 <> Неопределено Тогда
			СтрокаТЧ.ДатаТТН                 = ВыборкаПоСправке1.ДатаТТН;
			СтрокаТЧ.НомерТТН                = ВыборкаПоСправке1.НомерТТН;
			СтрокаТЧ.ДатаПодтвержденияЕГАИС  = ВыборкаПоСправке1.ДатаПодтвержденияЕГАИС;
			СтрокаТЧ.НомерПодтвержденияЕГАИС = ВыборкаПоСправке1.НомерПодтвержденияЕГАИС;
			СтрокаТЧ.КоличествоПоСправке1    = ВыборкаПоСправке1.КоличествоПоСправке1;
			СтрокаТЧ.ДатаРозлива             = ВыборкаПоСправке1.ДатаРозлива;
		КонецЕсли;
		
		Если ПараметрыСканирования.Операция = Перечисления.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр3 Тогда
			СтрокаТЧ.Справка2 = ДанныеШтрихкода.Справка2;
		КонецЕсли;
		
		СтрокаТЧ.КоличествоУпаковок = 1;
	
		Результат.ДобавленныеСтроки.Добавить(СтрокаТЧ);
		
	КонецЕсли;
	
	Возврат Результат;
	
КонецФункции

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

#Область ЗавершениеПроверкиИПодбораМаркируемойПродукции

// Отражает результаты проверки и подбора в документе, из которого была вызвана соответствующая форма.
//
// Параметры:
// 	ПараметрыОкончанияПроверки - Структура - (См. ПроверкаИПодборЕГАИС.ЗафиксироватьРезультатПроверкиИПодбора)
Процедура ОтразитьРезультатыПроверкиИПодбора(ПараметрыОкончанияПроверки) Экспорт
	
	ТаблицаНеМаркируемойПродукции = ПараметрыОкончанияПроверки.ТаблицаНеМаркируемойПродукции;
	ДеревоМаркируемойПродукции    = ПараметрыОкончанияПроверки.ДеревоМаркируемойПродукции;
	
	ДокументОбъект = ПараметрыОкончанияПроверки.ПроверяемыйДокумент.ПолучитьОбъект();
	ДокументОбъект.СтатусПроверкиИПодбора = Перечисления.СтатусыПроверкиИПодбораИС.Завершено;
	
	ОчиститьДанныеПередЗаполнением(ДокументОбъект);
	
	ПараметрыЗаполнения = АкцизныеМаркиЕГАИС.ПараметрыЗаполненияТоваровИАкцизныхМарок(ДокументОбъект, Ложь);
	Если ДокументОбъект.ВидДокумента = Перечисления.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр3 Тогда
		ПараметрыЗаполнения.МаркируемаяАлкогольнаяПродукция = Истина;
	КонецЕсли;
	
	ПараметрыЗаполнения.ТолькоПустаяСправка2 = ДокументОбъект.ВидДокумента <> Перечисления.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр3;
	
	АкцизныеМаркиЕГАИС.ЗаполнитьТоварыИАкцизныеМарки(
		ДокументОбъект, ДеревоМаркируемойПродукции, ПараметрыЗаполнения);
		
	АкцизныеМаркиЕГАИС.ЗаполнитьНеМаркируемыеТовары(
		ДокументОбъект, ТаблицаНеМаркируемойПродукции, ПараметрыЗаполнения);
	
	ОбработатьСтрокиТЧ(ДокументОбъект, ПараметрыЗаполнения);
	
	СтруктураПоискаПустыхСтрок = Новый Структура("Количество", 0);
	
	ПустыеСтроки = ДокументОбъект.Товары.НайтиСтроки(СтруктураПоискаПустыхСтрок);
	
	Для Каждого ПустаяСтрока Из ПустыеСтроки Цикл
		ДокументОбъект.Товары.Удалить(ПустаяСтрока);
	КонецЦикла;
	
	Если ДокументОбъект.Проведен Тогда
		Если ДокументОбъект.ПроверитьЗаполнение() Тогда
			ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
		Иначе
			ДокументОбъект.Записать(РежимЗаписиДокумента.ОтменаПроведения);
		КонецЕсли;
	Иначе
		ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);
	КонецЕсли;
		
КонецПроцедуры

Процедура ОчиститьДанныеПередЗаполнением(ДокументОбъект)
	
	ДокументОбъект.АкцизныеМарки.Очистить();
	
	ИменаКолонокДляОчистки = Новый Массив();
	ИменаКолонокДляОчистки.Добавить("Количество");
	ИменаКолонокДляОчистки.Добавить("КоличествоУпаковок");
	
	Для Каждого СтрокаТовары Из ДокументОбъект.Товары Цикл
		Для Каждого ИмяКолонки Из ИменаКолонокДляОчистки Цикл
			СтрокаТовары[ИмяКолонки] = 0;
		КонецЦикла;
	КонецЦикла;
	
КонецПроцедуры

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

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

#Область Проведение

Функция ДополнительныеИсточникиДанныхДляДвижений(ИмяРегистра) Экспорт

	ИсточникиДанных = Новый Соответствие;

	Возврат ИсточникиДанных;

КонецФункции

Процедура ИнициализироватьДанныеДокумента(ДокументСсылка, ДополнительныеСвойства, Регистры = Неопределено) Экспорт
	
	////////////////////////////////////////////////////////////////////////////
	// Создадим запрос инициализации движений
	
	Запрос = Новый Запрос;
	ЗаполнитьПараметрыИнициализации(Запрос, ДокументСсылка);
	
	////////////////////////////////////////////////////////////////////////////
	// Сформируем текст запроса
	
	ТекстыЗапроса = Новый СписокЗначений;
	ТекстЗапросаТаблицаОстаткиАлкогольнойПродукцииЕГАИС(Запрос, ТекстыЗапроса, Регистры);
	ТекстЗапросаТаблицаДвиженияСерийТоваров(Запрос, ТекстыЗапроса, Регистры);
	
	ИнтеграцияИС.ИнициализироватьТаблицыДляДвижений(Запрос, ТекстыЗапроса, ДополнительныеСвойства.ТаблицыДляДвижений, Истина);
	
КонецПроцедуры

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

Функция ТекстЗапросаТаблицаОстаткиАлкогольнойПродукцииЕГАИС(Запрос, ТекстыЗапроса, Регистры)
	
	ИмяРегистра = "ОстаткиАлкогольнойПродукцииЕГАИС";
	
	Если НЕ ИнтеграцияИС.ТребуетсяТаблицаДляДвижений(ИмяРегистра, Регистры) Тогда
		Возврат "";
	КонецЕсли;
	
	Если НЕ ИнтеграцияЕГАИС.ЕстьТаблицаЗапроса("ВТТовары", ТекстыЗапроса) Тогда
		ТекстЗапросаВТТовары(Запрос, ТекстыЗапроса);
	КонецЕсли;
	
	Если НЕ ИнтеграцияЕГАИС.ЕстьТаблицаЗапроса("ВТКоэффициентыПересчетаВЕдиницыЕГАИС", ТекстыЗапроса) Тогда
		ТекстЗапросаВТКоэффициентыПересчетаВЕдиницыЕГАИС(Запрос, ТекстыЗапроса);
	КонецЕсли;

	ТекстЗапроса =
	"ВЫБРАТЬ
	|	ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)  КАК ВидДвижения,
	|	&Период                                 КАК Период,
	|	&ОрганизацияЕГАИС                       КАК ОрганизацияЕГАИС,
	|	ТаблицаТовары.АлкогольнаяПродукция      КАК АлкогольнаяПродукция,
	|	ТаблицаТовары.Справка2                  КАК Справка2,
	|	ВЫБОР
	|		КОГДА ЕСТЬNULL(ОписаниеНоменклатуры.КоличествоВПотребительскойУпаковке, 0) > 0
	|		ТОГДА ВЫРАЗИТЬ(ТаблицаТовары.Количество * ЕСТЬNULL(ЕдиницыЕГАИС.Коэффициент, 1) /
	|			ОписаниеНоменклатуры.КоличествоВПотребительскойУпаковке КАК ЧИСЛО(12, 0))
	|		ИНАЧЕ ТаблицаТовары.Количество * ЕСТЬNULL(ЕдиницыЕГАИС.Коэффициент, 1)
	|	КОНЕЦ                                   КАК СвободныйОстаток,
	|	0                                       КАК Количество,
	|	ТаблицаТовары.НомерСтроки               КАК НомерСтроки
	|ИЗ
	|	ВТТовары КАК ТаблицаТовары
	|		ЛЕВОЕ СОЕДИНЕНИЕ ВТКоэффициентыПересчетаВЕдиницыЕГАИС КАК ЕдиницыЕГАИС
	|		ПО ЕдиницыЕГАИС.АлкогольнаяПродукция = ТаблицаТовары.АлкогольнаяПродукция
	|		 И ЕдиницыЕГАИС.Номенклатура = ТаблицаТовары.Номенклатура
	|		 И ЕдиницыЕГАИС.Характеристика = ТаблицаТовары.Характеристика
	|		 И ЕдиницыЕГАИС.Серия = ТаблицаТовары.Серия
	|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОписаниеНоменклатурыИС КАК ОписаниеНоменклатуры
	|			ПО ТаблицаТовары.Номенклатура = ОписаниеНоменклатуры.Номенклатура
	|			 И ТаблицаТовары.АлкогольнаяПродукция.ТипПродукции <> ЗНАЧЕНИЕ(Перечисление.ТипыПродукцииЕГАИС.Неупакованная)
	|ГДЕ
	|	&УдалитьСтатусОбработки В (&СтатусыДвижений)
	|	И &ВидДокумента = ЗНАЧЕНИЕ(Перечисление.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр1)
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ
	|	ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)  КАК ВидДвижения,
	|	&ДатаРегистрацииДвижений                КАК ДатаРегистрацииДвижений,
	|	&ОрганизацияЕГАИС                       КАК ОрганизацияЕГАИС,
	|	ТаблицаТовары.АлкогольнаяПродукция      КАК АлкогольнаяПродукция,
	|	ТаблицаТовары.Справка2                  КАК Справка2,
	|	0                                       КАК СвободныйОстаток,
	|	ВЫБОР
	|		КОГДА ЕСТЬNULL(ОписаниеНоменклатуры.КоличествоВПотребительскойУпаковке, 0) > 0
	|		ТОГДА ВЫРАЗИТЬ(ТаблицаТовары.Количество * ЕСТЬNULL(ЕдиницыЕГАИС.Коэффициент, 1) /
	|			ОписаниеНоменклатуры.КоличествоВПотребительскойУпаковке КАК ЧИСЛО(12, 0))
	|		ИНАЧЕ ТаблицаТовары.Количество * ЕСТЬNULL(ЕдиницыЕГАИС.Коэффициент, 1)
	|	КОНЕЦ                                   КАК Количество,
	|	ТаблицаТовары.НомерСтроки               КАК НомерСтроки
	|ИЗ
	|	ВТТовары КАК ТаблицаТовары
	|		ЛЕВОЕ СОЕДИНЕНИЕ ВТКоэффициентыПересчетаВЕдиницыЕГАИС КАК ЕдиницыЕГАИС
	|		ПО ЕдиницыЕГАИС.АлкогольнаяПродукция = ТаблицаТовары.АлкогольнаяПродукция
	|		 И ЕдиницыЕГАИС.Номенклатура = ТаблицаТовары.Номенклатура
	|		 И ЕдиницыЕГАИС.Характеристика = ТаблицаТовары.Характеристика
	|		 И ЕдиницыЕГАИС.Серия = ТаблицаТовары.Серия
	|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОписаниеНоменклатурыИС КАК ОписаниеНоменклатуры
	|			ПО ТаблицаТовары.Номенклатура = ОписаниеНоменклатуры.Номенклатура
	|			 И ТаблицаТовары.АлкогольнаяПродукция.ТипПродукции <> ЗНАЧЕНИЕ(Перечисление.ТипыПродукцииЕГАИС.Неупакованная)
	|ГДЕ
	|	&УдалитьСтатусОбработки В (&СтатусыДвижений)
	|	И &ВидДокумента = ЗНАЧЕНИЕ(Перечисление.ВидыДокументовЕГАИС.АктПостановкиНаБалансВРегистр1)";
	
	ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяРегистра);
	
	Возврат ТекстЗапроса;
	
КонецФункции

Функция ТекстЗапросаВТТовары(Запрос, ТекстыЗапроса)
	
	ИмяРегистра = "ВТТовары";
	
	ТекстЗапроса =
	"ВЫБРАТЬ
	|	ТаблицаТовары.Ссылка               КАК Ссылка,
	|	ТаблицаТовары.НомерСтроки          КАК НомерСтроки,
	|	ТаблицаТовары.АлкогольнаяПродукция КАК АлкогольнаяПродукция,
	|	ТаблицаТовары.Номенклатура         КАК Номенклатура,
	|	ТаблицаТовары.Характеристика       КАК Характеристика,
	|	ТаблицаТовары.Серия                КАК Серия,
	|	ТаблицаТовары.Количество           КАК Количество,
	|	ТаблицаТовары.Справка2             КАК Справка2
	|ПОМЕСТИТЬ ВТТовары
	|ИЗ
	|	Документ.АктПостановкиНаБалансЕГАИС.Товары КАК ТаблицаТовары
	|ГДЕ
	|	ТаблицаТовары.Ссылка = &Ссылка";
	
	ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяРегистра);
	
	Возврат ТекстЗапроса;
	
КонецФункции

Функция ТекстЗапросаВТКоэффициентыПересчетаВЕдиницыЕГАИС(Запрос, ТекстыЗапроса)
	
	ИмяРегистра = "ВТКоэффициентыПересчетаВЕдиницыЕГАИС";
	
	ТекстЗапроса = ИнтеграцияЕГАИС.ТекстЗапросаВТКоэффициентыПересчетаВЕдиницыЕГАИС("ВТТовары", ИмяРегистра);
	
	ТекстыЗапроса.Добавить(ТекстЗапроса, ИмяРегистра);
	
	Возврат ТекстЗапроса;
	
КонецФункции

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

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

#Область Серии

//Имена реквизитов, от значений которых зависят параметры указания серий
//
//	Возвращаемое значение:
//		Строка - имена реквизитов, перечисленные через запятую
//
Функция ИменаРеквизитовДляЗаполненияПараметровУказанияСерий() Экспорт
	
	Возврат ИнтеграцияИС.ИменаРеквизитовДляЗаполненияПараметровУказанияСерий(Метаданные.Документы.АктПостановкиНаБалансЕГАИС);
	
КонецФункции

// Возвращает параметры указания серий для товаров, указанных в документе.
//
// Параметры:
//  Объект - Структура - структура значений реквизитов объекта, необходимых для заполнения параметров указания серий.
// 
// Возвращаемое значение:
//  Произвольный - (См. ИнтеграцияИСПереопределяемый.ЗаполнитьПараметрыУказанияСерий) - особенности указания серий.
//
Функция ПараметрыУказанияСерий(Объект) Экспорт
	
	Возврат ИнтеграцияИС.ПараметрыУказанияСерий(Метаданные.Документы.АктПостановкиНаБалансЕГАИС, Объект);
	
КонецФункции

// Возвращает текст запроса для расчета статусов указания серий
// Параметры:
//   ПараметрыУказанияСерий - Произвольный - См. (ИнтеграцияИСПереопределяемый.ЗаполнитьПараметрыУказанияСерий) - особенности указания серий.
// Возвращаемое значение:
//   Строка - текст запроса
//
Функция ТекстЗапросаЗаполненияСтатусовУказанияСерий(ПараметрыУказанияСерий) Экспорт
	
	Возврат ИнтеграцияИС.ТекстЗапросаЗаполненияСтатусовУказанияСерий(Метаданные.Документы.АктПостановкиНаБалансЕГАИС, ПараметрыУказанияСерий);

КонецФункции

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

#Область Отчеты

// Определяет список команд отчетов.
//
// Параметры:
//   КомандыОтчетов - ТаблицаЗначений - Таблица с командами отчетов. Для изменения.
//       См. описание 1 параметра процедуры ВариантыОтчетовПереопределяемый.ПередДобавлениемКомандОтчетов().
//   Параметры - Структура - Вспомогательные параметры. Для чтения.
//       См. описание 2 параметра процедуры ВариантыОтчетовПереопределяемый.ПередДобавлениемКомандОтчетов().
//
Процедура ДобавитьКомандыОтчетов(КомандыОтчетов, Параметры) Экспорт
	
	ИнтеграцияИСПереопределяемый.ДобавитьКомандуСтруктураПодчиненности(КомандыОтчетов);
	
	ИнтеграцияИСПереопределяемый.ДобавитьКомандуДвиженияДокумента(КомандыОтчетов);
	
	КомандаОтчет = Отчеты.АнализРасхожденийПриДвиженииАлкогольнойПродукции.ДобавитьКомандуОтчета(КомандыОтчетов);
	Если КомандаОтчет <> Неопределено Тогда
		КомандаОтчет.Важность = "Обычное";
		КомандаОтчет.Порядок = 1;
	КонецЕсли;
	
КонецПроцедуры

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

#Область Печать

// Заполняет список команд печати.
// 
// Параметры:
//   КомандыПечати - см. УправлениеПечатью.СоздатьКоллекциюКомандПечати.
//
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
	
	Возврат;
	
КонецПроцедуры

// Сформировать печатные формы объектов.
//
// Параметры:
//   МассивОбъектов        - Массив из Произвольный         - ссылки на объекты, которые нужно распечатать
//   ПараметрыПечати       - Структура                      - дополнительные настройки печати
//   КоллекцияПечатныхФорм - ТаблицаЗначений                - сформированные табличные документы (выходной параметр)
//   ОбъектыПечати         - СписокЗначений из Произвольный - имя области, в которой был выведен объект (выходной параметр)
//   ПараметрыВывода       - Структура                      - дополнительные параметры сформированных табличных документов (выходной параметр)
Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
	
	Возврат;
	
КонецПроцедуры

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

#Область ОбновлениеИнформационнойБазы

Функция АдаптированныйТекстЗапросаДвиженийПоРегистру(ИмяРегистра) Экспорт
	
	Запрос = Новый Запрос;
	ТекстыЗапроса = Новый СписокЗначений();
	ТекстыЗапросаВременныхТаблиц = Новый Массив;
	ПолноеИмяДокумента = "Документ.АктПостановкиНаБалансЕГАИС";
	
	Если ИмяРегистра = "ОстаткиАлкогольнойПродукцииЕГАИС" Тогда
		
		ТекстЗапроса = ТекстЗапросаТаблицаОстаткиАлкогольнойПродукцииЕГАИС(Запрос, ТекстыЗапроса, ИмяРегистра);
		ТекстыЗапросаВременныхТаблиц.Добавить(Новый Структура("Ключ, Значение", "ВТКоэффициентыПересчетаВЕдиницыЕГАИС", ТекстЗапросаВТКоэффициентыПересчетаВЕдиницыЕГАИС(Запрос, ТекстыЗапроса)));
		ТекстыЗапросаВременныхТаблиц.Добавить(Новый Структура("Ключ, Значение", "ВТТовары", ТекстЗапросаВТТовары(Запрос, ТекстыЗапроса)));
		СинонимТаблицыДокумента = "ТаблицаТовары";
		
	Иначе
		ТекстИсключения = НСтр("ru = 'В документе %ПолноеИмяДокумента% не реализована адаптация текста запроса формирования движений по регистру %ИмяРегистра%.'");
		ТекстИсключения = СтрЗаменить(ТекстИсключения, "%ПолноеИмяДокумента%", ПолноеИмяДокумента);
		ТекстИсключения = СтрЗаменить(ТекстИсключения, "%ИмяРегистра%", ИмяРегистра);
		
		ВызватьИсключение ТекстИсключения;
	КонецЕсли;
	
	ПереопределениеРасчетаПараметров = Новый Структура;
	
	Результат = ОбновлениеИнформационнойБазыЕГАИС.РезультатАдаптацииЗапроса();
	Результат.ЗначенияПараметров.Вставить("СтатусыДвижений", СтатусыДвижений());
	
	Результат.ТекстЗапроса = ОбновлениеИнформационнойБазыЕГАИС.АдаптироватьЗапросМеханизмаПроведения(
		ТекстЗапроса,
		ПолноеИмяДокумента,
		СинонимТаблицыДокумента,
		ПереопределениеРасчетаПараметров,
		ТекстыЗапросаВременныхТаблиц);
	
	Возврат Результат;
	
КонецФункции

Процедура ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию(Параметры) Экспорт
	
	Запрос = Новый Запрос;
	Запрос.Текст =
	"ВЫБРАТЬ РАЗЛИЧНЫЕ
	|	АкцизныеМарки.Ссылка КАК Ссылка
	|ИЗ
	|	Документ.АктПостановкиНаБалансЕГАИС.АкцизныеМарки КАК АкцизныеМарки
	|ГДЕ
	|	АкцизныеМарки.КодАкцизнойМарки <> """"
	|	И АкцизныеМарки.АкцизнаяМарка = ЗНАЧЕНИЕ(Справочник.ШтрихкодыУпаковокТоваров.ПустаяСсылка)";
	
	МассивСсылок = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка");
	
	ОбновлениеИнформационнойБазы.ОтметитьКОбработке(Параметры, МассивСсылок);
	
КонецПроцедуры

Процедура ОбработатьДанныеДляПереходаНаНовуюВерсию(Параметры) Экспорт
	
	ПолноеИмяДокумента = "Документ.АктПостановкиНаБалансЕГАИС";
	МетаданныеДокумента = Метаданные.Документы.АктПостановкиНаБалансЕГАИС;
	
	Выборка = ОбновлениеИнформационнойБазы.ВыбратьСсылкиДляОбработки(Параметры.Очередь, ПолноеИмяДокумента);
	
	Пока Выборка.Следующий() Цикл
		
		НачатьТранзакцию();
		
		Попытка
			
			Блокировка = Новый БлокировкаДанных;
			ЭлементБлокировки = Блокировка.Добавить(ПолноеИмяДокумента);
			ЭлементБлокировки.УстановитьЗначение("Ссылка", Выборка.Ссылка);
			ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
			Блокировка.Заблокировать();
			
			ДокументОбъект = Выборка.Ссылка.ПолучитьОбъект();
			Если ДокументОбъект = Неопределено Тогда
				ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(Выборка.Ссылка);
				ЗафиксироватьТранзакцию();
				Продолжить;
			КонецЕсли;
			
			Для каждого ТекСтрока Из ДокументОбъект.АкцизныеМарки Цикл
				Если ЗначениеЗаполнено(ТекСтрока.КодАкцизнойМарки) Тогда
					ТекСтрока.АкцизнаяМарка = Справочники.ШтрихкодыУпаковокТоваров.ПолучитьПоЗначениюШтрихкода(ТекСтрока.КодАкцизнойМарки);
					ТекСтрока.Количество = 1;
				КонецЕсли;
			КонецЦикла;
			
			ОбновлениеИнформационнойБазы.ЗаписатьДанные(ДокументОбъект);
			
			ЗафиксироватьТранзакцию();
			
		Исключение
			
			ОтменитьТранзакцию();
			
			ТекстСообщения = НСтр("ru = 'Не удалось обработать документ: %Ссылка% по причине: %Причина%'");
			ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Ссылка%", Выборка.Ссылка);
			ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Причина%", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
			ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(),
				УровеньЖурналаРегистрации.Предупреждение,
				МетаданныеДокумента,
				Выборка.Ссылка,
				ТекстСообщения);
			ВызватьИсключение;
			
		КонецПопытки;
		
	КонецЦикла;
	
	Параметры.ОбработкаЗавершена = Не ОбновлениеИнформационнойБазы.ЕстьДанныеДляОбработки(Параметры.Очередь, ПолноеИмяДокумента);
	
КонецПроцедуры

Процедура ЗарегистрироватьДанныеКОбработкеДляГенерацииАкцизныхМарок(Параметры) Экспорт
	
	Запрос = Новый Запрос;
	Запрос.Текст =
	"ВЫБРАТЬ РАЗЛИЧНЫЕ
	|	АкцизныеМарки.Ссылка
	|ИЗ
	|	Документ.АктПостановкиНаБалансЕГАИС.АкцизныеМарки КАК АкцизныеМарки
	|ГДЕ
	|	АкцизныеМарки.КодАкцизнойМарки <> """"
	|";
	
	МассивСсылок = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка");
	
	ОбновлениеИнформационнойБазы.ОтметитьКОбработке(Параметры, МассивСсылок);
	
КонецПроцедуры

Процедура ОбработатьДанныеДляПереходаНаНовуюВерсиюГенерацияАкцизныхМарок(Параметры) Экспорт
	
	ПолноеИмяДокумента = "Документ.АктПостановкиНаБалансЕГАИС";
	МетаданныеДокумента = Метаданные.Документы.АктПостановкиНаБалансЕГАИС;
	
	Выборка = ОбновлениеИнформационнойБазы.ВыбратьСсылкиДляОбработки(Параметры.Очередь, ПолноеИмяДокумента);
	
	Пока Выборка.Следующий() Цикл
		НачатьТранзакцию();
		
		Попытка
			
			ОбработкаСсылкиНачата = Ложь;
			ОбработкаСсылкиЗавершена = Ложь;
			
			Блокировка = Новый БлокировкаДанных;
			ЭлементБлокировки = Блокировка.Добавить(ПолноеИмяДокумента);
			ЭлементБлокировки.УстановитьЗначение("Ссылка", Выборка.Ссылка);
			ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый;
			Блокировка.Заблокировать();
			
			ДокументОбъект = Выборка.Ссылка.ПолучитьОбъект();
			
			Если ДокументОбъект = Неопределено Тогда
				ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(Выборка.Ссылка);
				ЗафиксироватьТранзакцию();
				Продолжить;
			КонецЕсли;
			ОбработкаСсылкиНачата = Истина;
			
			Для каждого ТекСтрока Из ДокументОбъект.АкцизныеМарки Цикл
				Если ЗначениеЗаполнено(ТекСтрока.КодАкцизнойМарки) Тогда
					СтрокаТовар = ДокументОбъект.Товары.Найти(ТекСтрока.ИдентификаторСтроки, "ИдентификаторСтроки");
					
					Если СтрокаТовар = Неопределено Тогда
						Продолжить;
					КонецЕсли;
					
					ШтрихкодированиеЕГАИС.ПолучитьСгенерироватьАкцизнуюМарку(ТекСтрока.КодАкцизнойМарки,
						СтрокаТовар.Номенклатура,
						СтрокаТовар.Характеристика,,
						Истина);
				КонецЕсли;
			КонецЦикла;
			
			ОбработкаСсылкиЗавершена = Истина;
			
			ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(Выборка.Ссылка);
			ЗафиксироватьТранзакцию();
		Исключение
			ОтменитьТранзакцию();
			Если НЕ ОбработкаСсылкиНачата Тогда
				ТекстСообщения = НСтр("ru = 'Не удалось заблокировать документ: %Ссылка% по причине: %Причина%'",
					ОбщегоНазначения.КодОсновногоЯзыка());
				ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Ссылка%", Выборка.Ссылка);
			ИначеЕсли НЕ ОбработкаСсылкиЗавершена Тогда
				ТекстСообщения = НСтр("ru = 'Не удалось сгенерировать акцизную марку: %Ключ% по причине: %Причина%'",
					ОбщегоНазначения.КодОсновногоЯзыка());
				ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Ключ%", ТекСтрока.КодАкцизнойМарки);
			Иначе
				ТекстСообщения = НСтр("ru = 'Не удалось обработать документ: %Ссылка% по причине: %Причина%'",
					ОбщегоНазначения.КодОсновногоЯзыка());
				ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Ссылка%", Выборка.Ссылка);
			КонецЕсли;
			ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Причина%", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
			ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(),
				УровеньЖурналаРегистрации.Предупреждение,
				МетаданныеДокумента,
				Выборка.Ссылка,
				ТекстСообщения);
		КонецПопытки;
	КонецЦикла;
	
	Параметры.ОбработкаЗавершена = Не ОбновлениеИнформационнойБазы.ЕстьДанныеДляОбработки(Параметры.Очередь, ПолноеИмяДокумента);
	
КонецПроцедуры

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

#Область Прочее

Процедура ПрименитьРезультатСопоставленияДляШтрихкодовУпаковок(ДокументОбъект) Экспорт
	
	ВложенныеШтрихкоды = ШтрихкодированиеЕГАИС.ВложенныеШтрихкодыУпаковокПоДокументу(ДокументОбъект.Ссылка);
	
	УстановитьПривилегированныйРежим(Истина);
	
	Для Каждого СтрокаТЧ Из ВложенныеШтрихкоды.МаркированныеТовары Цикл
		
		Если ЗначениеЗаполнено(СтрокаТЧ.Справка2) Тогда
			
			ПараметрыОтбора = Новый Структура;
			ПараметрыОтбора.Вставить("Справка2",            СтрокаТЧ.Справка2);
			ПараметрыОтбора.Вставить("ИдентификаторСтроки", "");
			НайденныеСтроки = ДокументОбъект.Товары.НайтиСтроки(ПараметрыОтбора);
			
			Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл
				
				Если НайденнаяСтрока.Номенклатура <> СтрокаТЧ.Номенклатура
					Или НайденнаяСтрока.Характеристика <> СтрокаТЧ.Характеристика
					Или НайденнаяСтрока.Серия <> СтрокаТЧ.Серия Тогда
					
					ШтрихкодУпаковкиОбъект = СтрокаТЧ.ШтрихкодУпаковки.ПолучитьОбъект();
					ШтрихкодУпаковкиОбъект.Номенклатура   = НайденнаяСтрока.Номенклатура;
					ШтрихкодУпаковкиОбъект.Характеристика = НайденнаяСтрока.Характеристика;
					ШтрихкодУпаковкиОбъект.Серия          = НайденнаяСтрока.Серия;
					ШтрихкодУпаковкиОбъект.Записать();
					
				КонецЕсли;
				
				Прервать;
				
			КонецЦикла;
			
		КонецЕсли;
		
		Если ЗначениеЗаполнено(СтрокаТЧ.ИдентификаторСтроки) Тогда
			
			ПараметрыОтбора = Новый Структура;
			ПараметрыОтбора.Вставить("Справка2",            Справочники.Справки2ЕГАИС.ПустаяСсылка());
			ПараметрыОтбора.Вставить("ИдентификаторСтроки", СтрокаТЧ.ИдентификаторСтроки);
			НайденныеСтроки = ДокументОбъект.Товары.НайтиСтроки(ПараметрыОтбора);
			
			Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл
				
				Если НайденнаяСтрока.Номенклатура <> СтрокаТЧ.Номенклатура
					Или НайденнаяСтрока.Характеристика <> СтрокаТЧ.Характеристика
					Или НайденнаяСтрока.Серия <> СтрокаТЧ.Серия Тогда
					
					ШтрихкодУпаковкиОбъект = СтрокаТЧ.ШтрихкодУпаковки.ПолучитьОбъект();
					ШтрихкодУпаковкиОбъект.Номенклатура   = НайденнаяСтрока.Номенклатура;
					ШтрихкодУпаковкиОбъект.Характеристика = НайденнаяСтрока.Характеристика;
					ШтрихкодУпаковкиОбъект.Серия          = НайденнаяСтрока.Серия;
					ШтрихкодУпаковкиОбъект.Записать();
					
				КонецЕсли;
				
				Прервать;
				
			КонецЦикла;
			
		КонецЕсли;
		
	КонецЦикла;
	
КонецПроцедуры

// СтандартныеПодсистемы.ВерсионированиеОбъектов
// Определяет настройки объекта для подсистемы ВерсионированиеОбъектов.
//
// Параметры:
//  Настройки - Структура - настройки подсистемы.
//
Процедура ПриОпределенииНастроекВерсионированияОбъектов(Настройки) Экспорт
	
	Возврат;
	
КонецПроцедуры
// Конец СтандартныеПодсистемы.ВерсионированиеОбъектов

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

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

#КонецЕсли

#Область ДляВызоваИзДругихПодсистем

// СтандартныеПодсистемы.УправлениеДоступом

// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа.
Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт

	Ограничение.Текст =
	"РазрешитьЧтениеИзменение
	|ГДЕ
	|	ВЫБОР КОГДА ОрганизацияЕГАИС.Сопоставлено И ОрганизацияЕГАИС.СоответствуетОрганизации Тогда ЗначениеРазрешено(ОрганизацияЕГАИС.Контрагент)
	|	КОГДА ОрганизацияЕГАИС.Сопоставлено И НЕ ОрганизацияЕГАИС.СоответствуетОрганизации Тогда ЗначениеРазрешено(ОрганизацияЕГАИС.ТорговыйОбъект)
	|	ИНАЧЕ ИСТИНА КОНЕЦ ";

КонецПроцедуры

// Конец СтандартныеПодсистемы.УправлениеДоступом

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

Связанные материалы