//******************************************************************************
// Нач: Интеграция с SE (Бухгалтерский учет, редакция 4.2)
//******************************************************************************
//******************************************************************************
//Функция, открывающая форму документа.Получает четыре параметра:
//ИмяПуть - путь к временной папке пользователя
//НомерДокумента - номер сохраненного документа; 
//ДатаДокумента - дата создания документа;
//ТипДокумента - 1 - счет, 2 - накладная, 3 - счет-фактура, 4-др. документ.
//******************************************************************************************
Функция ПоказатьОкноДокумента(ИмяПуть, НомерДокумента,ТипДокумента, ДатаДокумента) Экспорт

	ФайлКл=СоздатьОбъект("Текст");
	ФайлКл.КодоваяСтраница(0);
	ФайлКл.Открыть(ИмяПуть+"comp.txt");
	СписокКомп = СоздатьОбъект("СписокЗначений");
	СписокКомп.ИзСтрокиСРазделителями(ФайлКл.ПолучитьСтроку(1));
	ИмяКлиента = СокрЛП(ФайлКл.ПолучитьСтроку(СписокКомп.НайтиЗначение("Компания")+1));

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

	Если ТипДокумента = 1 Тогда
		Сообщить("Для получения оплат по счету, необходимо настроить такую возможность в скрипте 1С ");
	ИначеЕсли ТипДокумента = 2 Тогда
		Сообщить("Для получения оплат по накладной, необходимо настроить такую возможность в скрипте 1С ");
	ИначеЕсли ТипДокумента = 3 Тогда
		Сообщить("Для получения оплат по счету-фактуре, необходимо настроить такую возможность в скрипте 1С ");
	ИначеЕсли ТипДокумента = 4 Тогда
		Сообщить("Для получения оплат по договору, необходимо настроить такую возможность в скрипте 1С ");
	КонецЕсли;
	Сообщить("Обратитесь к специалисту по 1С для настройки этой функции");

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

	Если ТипДокумента=2 Тогда
		Сообщить("В текущей редации скрипта накладная оформляется только на основании счета!");
		ФайлВоз.Записать(ИмяПуть+"1CREZ.TXT");
		УСФлаг(ИмяПуть);
		Возврат "0";
	ИначеЕсли ТипДокумента=3 Тогда
		ФайлВоз.Записать(ИмяПуть+"1CREZ.TXT");
		УСФлаг(ИмяПуть);
		Возврат "0";
	ИначеЕсли ТипДокумента=4 Тогда
		ФайлВоз.Записать(ИмяПуть+"1CREZ.TXT");
		УСФлаг(ИмяПуть);
		Возврат "0";
	КонецЕсли;	

	Конт=0;
	ФайлИмпорта=СоздатьОбъект("Текст");
	ФайлЭкспорта=СоздатьОбъект("Текст");
	ФайлКл=СоздатьОбъект("Текст");
	ФайлИмпорта.КодоваяСтраница(0);
	ФайлЭкспорта.КодоваяСтраница(0);
	ФайлКл.КодоваяСтраница(0);
	ФайлИмпорта.Открыть(ИмяПуть+"SE1C.txt");    
	ФайлКл.Открыть(ИмяПуть+"comp.txt");
	
	Контрагенты=СоздатьОбъект("Справочник.Контрагенты");
	Номенклатура=СоздатьОбъект("Справочник.Номенклатура");
	
	КолСтрок=ФайлИмпорта.КоличествоСтрок()-1;
	ФайлИмпорта.УдалитьСтроку(КолСтрок+1);
	
	СписокКомп = СоздатьОбъект("СписокЗначений");
	СписокКомп.ИзСтрокиСРазделителями(ФайлКл.ПолучитьСтроку(1));
	ИмяКлиента = СокрЛП(ФайлКл.ПолучитьСтроку(СписокКомп.НайтиЗначение("Компания")+1));
	
	//Проверяем наличие клиента в базе 1С, если его нет, создаем
	Если Контрагенты.НайтиПоНаименованию(ИмяКлиента,0,0)=0 Тогда
		Спр=СоздатьОбъект("Справочник.Контрагенты");
		Если Спр.НайтиПоНаименованию("Клиенты SE",0,0)=0 Тогда
			Спр.НоваяГруппа();
			Спр.Наименование="Клиенты SE";
			Спр.Записать();
			Спр.НайтиПоНаименованию("Клиенты SE",0,0);
			Сообщить("В справочник контрагентов добавлена группа Клиенты SE","!");
		КонецЕсли;  
		Контрагенты.Новый();                  
		Контрагенты.Родитель=Спр.ТекущийЭлемент();
		Контрагенты.Наименование=ИмяКлиента;
		Контрагенты.ВидКонтрагента = Перечисление.ВидыКонтрагентов.Организация;		
		Контрагенты.Записать();
		Сообщить("В справочник контрагентов в группу Клиенты SE добавлен контрагент "+ИмяКлиента,"!");
		ОткрытьФорму(Контрагенты.ТекущийЭлемент(),,0);
	КонецЕсли;
	
	//Проверяем наличие товаров в базе 1С, если их нет, создаем
	Для ПеремЦикла=3 По КолСтрок Цикл
		Если Номенклатура.НайтиПоНаименованию(ФайлИмпорта.ПолучитьСтроку(ПеремЦикла),0,0)=0 Тогда
			Спр=СоздатьОбъект("Справочник.Номенклатура");
			Если Спр.НайтиПоНаименованию("Номенклатура SE",0,0)=0 Тогда
				Спр.НоваяГруппа();
				Спр.Наименование="Номенклатура SE";
				Спр.Записать();
				Сообщить("В справочник номенклатуры добавлена группа Номенклатура SE","!");
			КонецЕсли;  
			Номенклатура.ИспользоватьДату('01.01.1980');
			Номенклатура.Новый();
			Номенклатура.Родитель=Спр.ТекущийЭлемент();
			Номенклатура.Наименование=ФайлИмпорта.ПолучитьСтроку(ПеремЦикла);
			Номенклатура.ТипНоменклатуры = Перечисление.ТипыНоменклатуры.Товар;
			Номенклатура.ТипТовара = Перечисление.ТипыТоваров.Собственный;
			Номенклатура.СтавкаНДС = глЗначениеПоУмолчанию("ОсновнаяСтавкаНДС");
			Номенклатура.СтавкаНП = глЗначениеПоУмолчанию("ОсновнаяСтавкаНП");
			Номенклатура.ЕдиницаИзмерения = глЗначениеПоУмолчанию("ОсновнаяЕдиницаИзмерения");
			Если Константа.ОсновнойВариантОтпускнойЦены = Перечисление.ВариантыОтпускныхЦен.БезНП Тогда
				Номенклатура.ПорядокХраненияОтпускнойЦены = 2;
			ИначеЕсли Константа.ОсновнойВариантОтпускнойЦены = Перечисление.ВариантыОтпускныхЦен.ВключаяНП Тогда
				Номенклатура.ПорядокХраненияОтпускнойЦены = 3;
			Иначе
				Номенклатура.ПорядокХраненияОтпускнойЦены = 1;
			КонецЕсли;
			Номенклатура.Записать();
			Сообщить("В справочник номенклатуры в группу Номенклатура SE добавлен товар "+ФайлИмпорта.ПолучитьСтроку(ПеремЦикла),"!");
			ОткрытьФорму(Номенклатура.ТекущийЭлемент(),,0);
		КонецЕсли;
		ПеремЦикла=ПеремЦикла+2;
	КонецЦикла;
	
	Если ТипДокумента=1 Тогда //Создаем новый счет
		ДокСч = СоздатьОбъект("Документ.Счет");
		ДокСч.Новый();
		ДокСч.РасчетныйСчет = глЗначениеПоУмолчанию("ОсновнойБанковскийСчет");
		ДокСч.ВариантОтправки = 1;
		ДокСч.Контрагент=Контрагенты.ТекущийЭлемент();
		ДокСч.ВариантРасчетаНалогов = Константа.ОсновнойВариантРасчетаНалоговОтгрузки;;
		ДокСч.ДатаДок=Дата(ФайлИмпорта.ПолучитьСтроку(1));
		Для ПеремЦикла=3 По КолСтрок Цикл
			ДокСч.НоваяСтрока();
			Номенклатура.НайтиПоНаименованию(ФайлИмпорта.ПолучитьСтроку(ПеремЦикла),0,0);
			ДокСч.Товар=Номенклатура.ТекущийЭлемент();
			ДокСч.Количество=Число(ФайлИмпорта.ПолучитьСтроку(ПеремЦикла+1));
			ДокСч.Всего=Число(ФайлИмпорта.ПолучитьСтроку(ПеремЦикла+2));
			СтНДС = глСтавкаНалога(ДокСч, "НДС").Ставка;
			НДС = ДокСч.Всего * (1 - (100/(СтНДС+100)));
			Сумма = ДокСч.Всего - НДС;
			ДокСч.НДС = НДС;
		    ДокСч.Сумма = Сумма;
			ДокСч.Цена=ДокСч.Сумма/ДокСч.Количество;
			ПеремЦикла=ПеремЦикла+2;
		КонецЦикла;

		ДокСч.Записать();
		ФайлВоз.ДобавитьСтроку(ДокСч.НомерДок);
		ФайлВоз.Записать(ИмяПуть+"1CREZ.TXT");
		УСФлаг(ИмяПуть);
		ОткрытьФорму(ДокСч.ТекущийДокумент());
	КонецЕсли;
	Возврат "0";
КонецФункции
//******************************************************************************
// Кон: Интеграция с SE
//******************************************************************************
