//******************************************************************************
// Нач: Интеграция с SE
//******************************************************************************
//******************************************************************************
//Функция, открывающая форму документа.Получает три параметра:
//НомерДокумента - номер сохраненного документа; 
//ДатаДокумента - дата создания документа;
//ТипДокумента - 1 - счет, 2 - накладная, 3 - счет-фактура.
//******************************************************************************************
Функция ПоказатьОкноДокумента(НомерДокумента,ТипДокумента, ДатаДокумента) Экспорт
	ДокПоказ=СоздатьОбъект("Документ");
	Если ТипДокумента=1 Тогда
		Если ДокПоказ.НайтиПоНомеру(НомерДокумента,Дата(ДатаДокумента),"Счет")=1 Тогда
			ОткрытьФорму(ДокПоказ.ТекущийДокумент());
		Иначе
			Сообщить("Документ не найден","!");
		КонецЕсли;	
	ИначеЕсли ТипДокумента=2 Тогда
		Если ДокПоказ.НайтиПоНомеру(НомерДокумента,Дата(ДатаДокумента),"РасходнаяНакладная")=1 Тогда
			ОткрытьФорму(ДокПоказ.ТекущийДокумент());
		Иначе
			Сообщить("Документ не найден","!");
		КонецЕсли;	
	Иначе
		Если ДокПоказ.НайтиПоНомеру(НомерДокумента,Дата(ДатаДокумента),"Счет_фактура")=1 Тогда
			ОткрытьФорму(ДокПоказ.ТекущийДокумент());
		Иначе
			Сообщить("Документ не найден","!");
		КонецЕсли;	
	КонецЕсли;
	Возврат "0";
КонецФункции
//******************************************************************************************
//Функция, удаляющая флаг.
//******************************************************************************************
Функция УСФлаг();
ФС.УдалитьФайл("C:\1CBUSY.KEY");
КонецФункции
//******************************************************************************************
//******************************************************************************************
//Данная функция предназначена для создания документа на основании. Получает следующие параметры:
//НомерДокумента - номер сохраненного документа, который служит основанием;
//ДатаДокумента - дата сохраненного документа, который служит основанием;
//ТипДокумента: 1 - создается накладная, основанием которой является счет,
//2 - создается счет-фактура на основании накладной.
//При создании документа происходит только заполнение его реквизитов и открытие формы.
//Созданные документы требуют сохранения!!!
//******************************************************************************************
Функция ДокументНаОсновании(НомерДокумента, ТипДокумента, ДатаДокумента) Экспорт
	ФайлВоз=СоздатьОбъект("Текст");
	ФайлВоз.КодоваяСтраница(0);
	ФайлВоз.Записать("C:\1CREZ.TXT");
	КонтекстДок="";
	ДокДляПоиска=СоздатьОбъект("Документ");
	Если ТипДокумента=1 Тогда
		Если ДокДляПоиска.НайтиПоНомеру(НомерДокумента,Дата(ДатаДокумента),"Счет")=1 Тогда 
			ОткрытьФорму("Документ.РасходнаяНакладная",КонтекстДок,ДокДляПоиска.ТекущийДокумент()); 
			ФайлВоз.ДобавитьСтроку(КонтекстДок.НомерДок);
			ФайлВоз.Записать("C:\1CREZ.TXT");
			УСФлаг();
			Возврат "0";
		Иначе
			Сообщить("Документ не найден","!");		
			ФайлВоз.ДобавитьСтроку("0");
			ФайлВоз.Записать("C:\1CREZ.TXT");
			УСФлаг();
			Возврат "0";
		КонецЕсли;	
	ИначеЕсли ТипДокумента=2 Тогда
		Если ДокДляПоиска.НайтиПоНомеру(НомерДокумента,Дата(ДатаДокумента),"РасходнаяНакладная")=1 Тогда
			ДокОсн=СоздатьОбъект("Документ");
			ДокОсн=ДокДляПоиска.ТекущийДокумент();
			ДокПодч=СоздатьОбъект("Документ");
			ДокПодч.ВыбратьПодчиненныеДокументы(,ПолучитьДатуТА(),ДокОсн);
			Пока  ДокПодч.ПолучитьДокумент()=1 Цикл
				Если ДокПодч.Вид()="Счет_фактура" Тогда
					Если ДокПодч.ПометкаУдаления()=1 Тогда
						Продолжить
					КонецЕсли;
					ОткрытьФорму(ДокПодч.ТекущийДокумент());	
					ФайлВоз.ДобавитьСтроку("0");
					ФайлВоз.Записать("C:\1CREZ.TXT");
					УСФлаг();
					Возврат "0";
				КонецЕсли;
			КонецЦикла;                                  
			Если ДокДляПоиска.Проведен()=0 Тогда
				Сообщить("Документ 'Счет-Фактура' нельзя вводить на основании непроведенного документа!");	
				ФайлВоз.ДобавитьСтроку("0");
				ФайлВоз.Записать("C:\1CREZ.TXT");
				УСФлаг();
				Возврат "0";
			КонецЕсли;	
			ОткрытьФорму("Документ.Счет_фактура",КонтекстДок,ДокДляПоиска.ТекущийДокумент()); 
			ФайлВоз.ДобавитьСтроку(КонтекстДок.НомерДок);
			ФайлВоз.Записать("C:\1CREZ.TXT");
			УСФлаг();
			Возврат "0";
		Иначе	
			Сообщить("Документ не найден","!");		
			ФайлВоз.ДобавитьСтроку("0");
			ФайлВоз.Записать("C:\1CREZ.TXT");
			УСФлаг();
			Возврат "0";
		КонецЕсли;	
	КонецЕсли;
КонецФункции
//******************************************************************************************
//Функция для получения оплат по счету.
//НомерДокумента - номер счета;
//ТипДокумента - для дальнейшего развития скрипта, в данном тексте всегда равен 1!!!
//ДатаДокумента - дата создания счета;
//ДатаНачала - дата начала поиска. Поиск оплат производится с "ДатаНачала" по текущую рабочую дату.
//Если "ДатаНачала" отсутствует, то начальной датой поиска считается дата создания документа.
//Для получения таких данных, необходимо, что бы все оплаты разносились по счетам.
//******************************************************************************************
Функция ОплатаПоДокументу(НомерДокумента, ТипДокумента, ДатаДокумента, ДатаНачала) Экспорт
	ФайлВоз=СоздатьОбъект("Текст");
	ФайлВоз.КодоваяСтраница(0);
	ФайлВоз.Записать("C:\1CREZ.TXT");
	Сообщить("Для получения оплат по счету в конфигурации должен вестись учет оплат в разрезе счетов");
	Сообщить("Обратитесь к специалисту по 1С для настройки этой функции");
	ФайлВоз.ДобавитьСтроку("0");
	ФайлВоз.Записать("C:\1CREZ.TXT");
	УСФлаг();
	Возврат "0";
КонецФункции
//******************************************************************************************
//******************************************************************************************
//Данная функция предназначена для создания счета и розничной накладной.
//Все необходимые реквизиты передаются через файл.Параметр ТипДокумента принимает два значения:
//1 - счет, 2 - розничная накладная. Если клиент, переданный через файл, не существует, то он  
//с пустыми реквизитами будет добавлен в группу "Клиенты SE", которая в свою очередь тоже будет
//создана автоматически. Если товар, переданный через файл, не существует, то он  
//с пустыми реквизитами будет добавлен в группу "Номенклатура SE", которая в свою очередь тоже будет
//создана автоматически (поиск всех елементов в справочниках производится по наименованию)
//Если все необходимые элементы в справочниках будут найдены, то будет создан новый документ, сохранен,
//после чего будет открыта его форма.
//******************************************************************************************
Функция ДокументИзSE(ТипДокумента) Экспорт
	ФайлВоз=СоздатьОбъект("Текст");
	ФайлВоз.КодоваяСтраница(0);
	ФайлВоз.Записать("C:\1CREZ.TXT");
	Конт=0;
	ФайлИмпорта=СоздатьОбъект("Текст");
	ФайлЭкспорта=СоздатьОбъект("Текст");
	ФайлИмпорта.КодоваяСтраница(0);
	ФайлЭкспорта.КодоваяСтраница(0);
	ФайлИмпорта.Открыть("C:\SE1C.txt");
	Если ТипДокумента=1 Тогда
		ДокЭксп=СоздатьОбъект("Документ.Счет");
	КонецЕсли;	
	Контрагенты=СоздатьОбъект("Справочник.Контрагенты");
	Номенклатура=СоздатьОбъект("Справочник.Номенклатура");
	
	КолСтрок=ФайлИмпорта.КоличествоСтрок()-1;
	ФайлИмпорта.УдалитьСтроку(КолСтрок+1);
	//Проверяем наличие клиента в базе 1С, если его нет, создаем
	Если Контрагенты.НайтиПоНаименованию(ФайлИмпорта.ПолучитьСтроку(3),0,0)=0 Тогда
		Спр=СоздатьОбъект("Справочник.Контрагенты");
		Если Спр.НайтиПоНаименованию("Клиенты SE",0,0)=0 Тогда
			Спр.НоваяГруппа();
			Спр.Наименование="Клиенты SE";
			Спр.Записать();
			Спр.НайтиПоНаименованию("Клиенты SE",0,0);
			Сообщить("В справочник контрагентов добавлена группа Клиенты SE","!");
		КонецЕсли;  
        Контрагенты.ИспользоватьДату('01.01.1980');
		Контрагенты.Новый();                  
		Контрагенты.Родитель=Спр.ТекущийЭлемент();
		Контрагенты.Наименование=ФайлИмпорта.ПолучитьСтроку(3);
		Контрагенты.ПолнНаименование = ФайлИмпорта.ПолучитьСтроку(3);
		Контрагенты.ВидКонтрагента = Перечисление.ВидыКонтрагентов.Организация;		
		Контрагенты.ВалютаВзаиморасчетов = Константа.ВалютаВзаиморасчетов;
		Контрагенты.ВалютаКредита = Константа.ОсновнаяВалюта;
		Контрагенты.ВалютаКредитаПоставщика = Константа.ОсновнаяВалюта;
		Контрагенты.Записать();
		Контрагенты.НайтиПоНаименованию(ФайлИмпорта.ПолучитьСтроку(3),0,0);
		Сообщить("В справочник контрагентов в группу Клиенты SE добавлен контрагент "+ФайлИмпорта.ПолучитьСтроку(3),"!");
		ОткрытьФорму(Контрагенты.ТекущийЭлемент(),,0);
	КонецЕсли;
	//Проверяем наличие товаров в базе 1С, если их нет, создаем
	Для ПеремЦикла=4 По КолСтрок Цикл
		Если Номенклатура.НайтиПоНаименованию(ФайлИмпорта.ПолучитьСтроку(ПеремЦикла),0,0)=0 Тогда
			Спр=СоздатьОбъект("Справочник.Номенклатура");
			Если Номенклатура.НайтиПоНаименованию("Номенклатура SE",0,0)=0 Тогда
				Спр.НоваяГруппа();
				Спр.Наименование="Номенклатура SE";
				Спр.Записать();
				Сообщить("В справочник номенклатуры добавлена группа Номенклатура SE","!");
			КонецЕсли;  
			Спр.НайтиПоНаименованию("Номенклатура SE",0,0);
	        Номенклатура.ИспользоватьДату('01.01.1980');
			Номенклатура.Новый();
			Номенклатура.Родитель=Спр.ТекущийЭлемент();
			Номенклатура.Наименование=ФайлИмпорта.ПолучитьСтроку(ПеремЦикла);
			Номенклатура.ПолнНаименование=ФайлИмпорта.ПолучитьСтроку(ПеремЦикла);
			Номенклатура.ВалютаУчета=Константа.ОсновнаяВалюта;
			Номенклатура.БазоваяЕдиница=Константа.ТипБазовойЕдиницыПоУмолчанию;
			Номенклатура.СтавкаНДС=Константа.ОсновнаяСтавкаНДС;
			Номенклатура.СтавкаНП=Константа.ОсновнаяСтавкаНП;
			Номенклатура.ВидТовара=Перечисление.ВидыТоваров.Товар;
			Номенклатура.ТипТовара=Перечисление.ТипыТоваров.Штучный;
			Номенклатура.Записать();
			
			ЕдиницыТовара = СоздатьОбъект("Справочник.Единицы");
			ЕдиницыТовара.ИспользоватьВладельца(Номенклатура.ТекущийЭлемент());
			ЕдиницыТовара.Новый();
			ЕдиницыТовара.Наименование	= Номенклатура.БазоваяЕдиница.Наименование;
			ЕдиницыТовара.ТипЕдиницы	= Номенклатура.БазоваяЕдиница;
			ЕдиницыТовара.Вес			= Номенклатура.Вес;
			ЕдиницыТовара.Коэффициент	= 1;
			ЕдиницыТовара.Штрихкод		= Номенклатура.Штрихкод;
			ЕдиницыТовара.Записать();
		    Номенклатура.ЕдиницаПоУмолчанию = ЕдиницыТовара.ТекущийЭлемент();
			Номенклатура.Записать();
			
			Номенклатура.НайтиПоНаименованию(ФайлИмпорта.ПолучитьСтроку(ПеремЦикла),0,0);
			Сообщить("В справочник номенклатуры в группу Номенклатура SE добавлен товар "+ФайлИмпорта.ПолучитьСтроку(ПеремЦикла),"!");
			ОткрытьФорму(Номенклатура.ТекущийЭлемент(),,0);
		КонецЕсли;	
		ПеремЦикла=ПеремЦикла+2;
	КонецЦикла;
	//Создаем новый счет
	ДокЭксп.Новый();
	глЗаполнитьШапку(ДокЭксп);
	ДокЭксп.КатегорияЦен = ДокЭксп.Клиент.КатегорияЦен;
	ДокЭксп.Дата_Курса = ДокЭксп.ДатаДок;
	ДокЭксп.Валюта = Рубли;
	ДокЭксп.Курс=Число(ФайлИмпорта.ПолучитьСтроку(2));

	Если ПустоеЗначение(ДокЭксп.КатегорияЦен)=1 Тогда
		ДокЭксп.КатегорияЦен = ДокЭксп.Автор.КатегорияЦен;
	КонецЕсли;
	ДокЭксп.СрокРезервирования=Константа.ОсновнойСрокРезервирования;
	ДокЭксп.УчитыватьНП=0;
	ДокЭксп.Клиент=Контрагенты.ТекущийЭлемент();
	Если Константа.ПодставлятьОсновнойДоговор = Да Тогда
		ДокЭксп.Договор = ДокЭксп.Клиент.ОсновнойДоговорТорг;
	Иначе
		ДокЭксп.Договор = ПолучитьПустоеЗначение("Справочник.Договора");
	КонецЕсли;
	Для ПеремЦикла=4 По КолСтрок Цикл
		ДокЭксп.НоваяСтрока();
		Номенклатура.НайтиПоНаименованию(ФайлИмпорта.ПолучитьСтроку(ПеремЦикла),0,0);
		ДокЭксп.Товар=Номенклатура.ТекущийЭлемент();
		ДокЭксп.Единица = ДокЭксп.Товар.ЕдиницаПоУмолчанию;
		ДокЭксп.Коэффициент = ДокЭксп.Единица.Коэффициент;
		ДокЭксп.Количество=Число(ФайлИмпорта.ПолучитьСтроку(ПеремЦикла+1));
		ДокЭксп.Цена=Число(ФайлИмпорта.ПолучитьСтроку(ПеремЦикла+2))/Число(ФайлИмпорта.ПолучитьСтроку(ПеремЦикла+1));
		глВыч_суммы_накл(ДокЭксп);
		ПеремЦикла=ПеремЦикла+2;
	КонецЦикла;
	ДокЭксп.Записать();
	ФайлВоз.ДобавитьСтроку(ДокЭксп.НомерДок);
	ФайлВоз.Записать("C:\1CREZ.TXT");
	УСФлаг();
	ОткрытьФорму(ДокЭксп.ТекущийДокумент());
	Возврат "0";
КонецФункции
//******************************************************************************
// Кон: Интеграция с SE
//******************************************************************************
