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

//******************************************************************************************
//Функция для получения оплат по счету.
//НомерДокумента - номер счета;
//ТипДокумента - для дальнейшего развития скрипта, в данном тексте всегда равен 1!!!
//ДатаДокумента - дата создания счета;
//ДатаНачала - дата начала поиска. Поиск оплат производится с "ДатаНачала" по текущую рабочую дату.
//Если "ДатаНачала" отсутствует, то начальной датой поиска считается дата создания документа.
//******************************************************************************************
Функция ОплатаПоДокументу(НомерДокумента, ТипДокумента, ДатаДокумента, ДатаНачала) Экспорт
ФайлВоз=СоздатьОбъект("Текст");
ФайлВоз.КодоваяСтраница(0);
ФайлВоз.Записать("C:\1CREZ.TXT");
ФайлЭкспорта=СоздатьОбъект("Текст");
КурсДоллара=СоздатьОбъект("Справочник.Валюты");
КурсДоллара.НайтиПоНаименованию("USD",0,0);
КурсВалюты=СоздатьОбъект("Периодический");
КурсВалюты.ИспользоватьОбъект("Курс",КурсДоллара);
ФайлЭкспорта.КодоваяСтраница(0);
ФайлЭкспорта.Записать("C:\MONEY1C.txt");
ДатаКонца=ТекущаяДата();
КолСтрок=1;
ДокДляПоиска=СоздатьОбъект("Документ");
ВидыДокументов=СоздатьОбъект("СписокЗначений");
 Если ТипДокумента=1 Тогда
     Если ДокДляПоиска.НайтиПоНомеру(НомерДокумента,Дата(ДатаДокумента),"Счет")=0 Тогда
	 	  Сообщить("Документ не найден","!");
	 	  ФайлВоз.ДобавитьСтроку("0");
          ФайлВоз.Записать("C:\1CREZ.TXT");
          УСФлаг();
	 	  Возврат "0";
	 КонецЕсли;	
 ВидыДокументов.ДобавитьЗначение("Счет");
 КонецЕсли;
//Для поиска оплат используем запрос
Запрос=СоздатьОбъект("Запрос");
 	ТекстЗапроса="
		|ПЕРИОД С ДатаНачала По ДатаКонца;
		|Док=Документ.ПриходныйОрдерТБ.ТекущийДокумент,
		|Документ.ДвиженияДенежныхСредств.ТекущийДокумент;
		|ДокОсн=Документ.ПриходныйОрдерТБ.ДокументОснование,
        |Документ.ДвиженияДенежныхСредств.ДокументОснование;
        |СуммаПрихода=Документ.ПриходныйОрдерТБ.Сумма,
        |Документ.ДвиженияДенежныхСредств.Приход;
        |Функция СумПоДок=Сумма(СуммаПрихода);
              |Группировка ДокОсн;
		      |Группировка Док;
		|Условие ((ДокОсн.НомерДок=НомерДокумента) И (ДокОсн.Вид() В ВидыДокументов));";
    Если Запрос.Выполнить(ТекстЗапроса)=0 Тогда
		Сообщить("Запрос по Продажам не выполнился","!");
    	  ФайлВоз.ДобавитьСтроку("0");
          ФайлВоз.Записать("C:\1CREZ.TXT");
		УСФлаг();
		Возврат "0";
	КонецЕсли;          
Пока Запрос.Группировка("ДокОсн")=1 Цикл
 Пока Запрос.Группировка("Док")=1 Цикл
 КолСтрок=КолСтрок+1;
 ФайлЭкспорта.ДобавитьСтроку(Строка(Запрос.СумПоДок));
 ФайлЭкспорта.ДобавитьСтроку(Строка(Запрос.Док.ДатаДок));
 ФайлЭкспорта.ДобавитьСтроку(Строка(КурсВалюты.ЗначениеНаДату(Запрос.Док.ДатаДок)));
 ФайлЭкспорта.Записать("C:\MONEY1C.txt");
 КонецЦикла;
КонецЦикла;
 Если КолСтрок>0 Тогда
    ФайлВоз.ДобавитьСтроку("1");
    ФайлВоз.Записать("C:\1CREZ.TXT");
   	УСФлаг();
 	Возврат "0";
 Иначе	
    ФС.УдалитьФайл("C:\MONEY1C.txt");
    ФайлВоз.ДобавитьСтроку("0");
    ФайлВоз.Записать("C:\1CREZ.TXT");
  	УСФлаг();
    Возврат "0";
 КонецЕсли;	
КонецФункции
//******************************************************************************************

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

КолСтрок=ФайлИмпорта.КоличествоСтрок()-1;
ФайлИмпорта.УдалитьСтроку(КолСтрок+1);
Валюты.НайтиПоНаименованию("руб.",0,0);

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

Если НенайденнаяНоменклатура.КоличествоСтрок()=0 Тогда
ДокЭксп.Новый();
ДокЭксп.Валюта=Валюты.ТекущийЭлемент();
ДокЭксп.Клиент=Контрагенты.ТекущийЭлемент();
ДокЭксп.ДатаДок=Дата(ФайлИмпорта.ПолучитьСтроку(1));
ДокЭксп.Дата_курса=Дата(ФайлИмпорта.ПолучитьСтроку(1));
ДокЭксп.Курс=Число(ФайлИмпорта.ПолучитьСтроку(2));

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