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

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

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

	Конт=0;
	ФайлИмпорта=СоздатьОбъект("Текст");
	ФайлЭкспорта=СоздатьОбъект("Текст");
	ФайлИмпорта.КодоваяСтраница(0);
	ФайлЭкспорта.КодоваяСтраница(0);
	ФайлИмпорта.Открыть("C:\SE1C.txt");
	Контрагенты=СоздатьОбъект("Справочник.Контрагенты");
	Номенклатура=СоздатьОбъект("Справочник.Номенклатура");

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

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

		Если ПустоеЗначение(ДокСч.Валюта) = 1 Тогда
			ДокСч.Валюта	= глРубли;
		КонецЕсли;

		ДокСч.Курс		= глКурсДляВалюты(ДокСч.Валюта, ДокСч.ДатаДок);
		ДокСч.ВидОперации = Перечисление.ВидыОперацийЗаявок.Неподтвержденная;
		
		ДокСч.Контрагент = Контрагенты.ТекущийЭлемент();
		ДокСч.Договор = ДокСч.Контрагент.ОсновнойДоговор;

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