Массовая печать «Счетов на оплату» и «Акт выполненных работ» в Розница 2.2

Задача: в некой таблице перечислены документы, для которых нужно программно вывести печатные формы счетов и актов.

Решение:

&НаСервере
Функция ПолучитьПечатнуюФормуСчета()
	// вхДок это просто ссылка на документ счет на оплату покупателю
	ттт=новый ТабличныйДокумент();
	для каждого стр из объект.Контрагенты цикл
		счДок=стр.Счет;	
		сообщить(счДок);
		ОбъектыПечати = Новый СписокЗначений;
		ОбъектыПечати.Добавить(счДок.ПолучитьОбъект());
		МассивОбъектов = Новый Массив();
		МассивОбъектов.Добавить(счДок); 
		ПараметрыПечати = Новый Структура;
		ТаблицаСведенийСчетНаОплату=Документы.СчетНаОплатуПокупателю.ПолучитьТаблицуСведенийСчетаНаОплату(МассивОбъектов);
		ПараметрыПечати.Вставить("ВидДокументаПечати",  "СчетНаОплатуПокупателю");
		ПараметрыПечати.Вставить("ИмяПараметровПечати", "ПАРАМЕТРЫ_ПЕЧАТИ_СчетНаОплатуПокупателю_Счет");
		ПараметрыПечати.Вставить("ИмяМакетаПечати",     "ОбщийМакет.ПФ_MXL_СчетЗаказ");
		ТаблицаСведенийСчетНаОплату.Колонки.Добавить("Ссылка");
		ТаблицаСведенийСчетНаОплату[0].Ссылка = счДок;       
		ТаблицаСведенийСчетНаОплату[0].Документ = счДок;
		ТабДок = ПечатьТорговыхДокументов.ПечатьСчетаНаОплату(ТаблицаСведенийСчетНаОплату, ОбъектыПечати, ПараметрыПечати);
		ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
	    ттт.Вывести(ТабДок);		
	конеццикла;				
	возврат ттт;
КонецФункции

&НаКлиенте
Процедура ПечатьСчетов(Команда)
	табдок=ПолучитьПечатнуюФормуСчета();
	табдок.показать();
КонецПроцедуры

&НаСервере
Функция ПолучитьСтатусСчета(счет)
	Запрос = Новый Запрос;
 		Запрос.Текст = 		
		"ВЫБРАТЬ
		|	СтатусыДокументов.Статус.Ссылка КАК СтатусСсылка
		|ИЗ
		|	РегистрСведений.СтатусыДокументов КАК СтатусыДокументов
		|ГДЕ
		|	СтатусыДокументов.Организация = &Организация
		|	И СтатусыДокументов.Документ = &Документ";
	
	    Запрос.УстановитьПараметр("Организация", объект.Организация);
		Запрос.УстановитьПараметр("Документ",счет);
		ВыборкаДетальныеЗаписи = Запрос.Выполнить().Выбрать();
		статус=перечисления.СтатусОплатыСчета.НеОплачен;
		Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
			статус=ВыборкаДетальныеЗаписи.СтатусСсылка;
	    конеццикла;	
	возврат статус;
КонецФункции	
&НаСервере
Функция ПечатьАктовНаСервере()
	// вхДок это просто ссылка на документ счет на оплату покупателю
	ттт=новый ТабличныйДокумент();
	для каждого стр из объект.Контрагенты цикл
		счДок=стр.Акт;	
		сообщить(счДок);
		ОбъектыПечати = Новый СписокЗначений;
		ОбъектыПечати.Добавить(счДок.ПолучитьОбъект());
		МассивОбъектов = Новый Массив();
		МассивОбъектов.Добавить(счДок); 
		ПараметрыПечати = Новый Структура;
		ТаблицаСведенийАкт=Документы.РеализацияТоваровУслуг.ПолучитьТаблицуСведенийАктаОбОказанииУслуг(МассивОбъектов);
		ПараметрыПечати.Вставить("ВидДокументаПечати",  "РеализацияТоваровУслуг");
		ПараметрыПечати.Вставить("ИмяПараметровПечати", "ПАРАМЕТРЫ_ПЕЧАТИ_РеализацияТоваровУслуг_Акт");
		ПараметрыПечати.Вставить("ИмяМакетаПечати",     "Документ.РеализацияТоваровУслуг.ПФ_MXL_Акт");
		ТаблицаСведенийАкт.Колонки.Добавить("Ссылка");
		ТаблицаСведенийАкт[0].Ссылка = счДок;       
		ТаблицаСведенийАкт[0].Документ = счДок;
		ТабДок = ПечатьТорговыхДокументов.ПечатьАктаОбОказанииУслуг(ТаблицаСведенийАкт, ОбъектыПечати, ПараметрыПечати);
		ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
	    ттт.Вывести(ТабДок);		
	конеццикла;				
	возврат ттт;
КонецФункции

&НаКлиенте
Процедура ПечатьАктов(Команда)
	табдок=ПечатьАктовНаСервере();
	табдок.показать();
КонецПроцедуры

Розница 2.2 программное получение основного расчетного счета

	УчетДенежныхСредствБП.УстановитьБанковскийСчет(
		нсчет.СтруктурнаяЕдиница, Объект.Организация, справочники.Валюты.НайтиПоНаименованию("руб"), Истина);

Загрузка и исполнение внешнего скрипта javascript на своем сайте

Прилетела давече задача: подключить платежную систему на сайте. «Дело простое» подумал я сначала. Обычно платежные системы сами предоставляют виджет, который остается только вставить на сайт. Но! дьявол как всегда оказался в деталях — а именно сайт сделан на «тильде» — значит никакого PHP. Только javascript+html. Плюс крайне желательно обойтись без «переходов» со страницу на страницу. А именно: пользователь ввел договор, сумму, ФИО, прошла проверка и только после на этой-же странице показалась форма платежной системы.

В принципе всё реализуемо и не сложно. Но! после вставки:

               url="https://paymaster.ru/ru-RU/widget/Basic/1?LMI_MERCHANT_ID=884a7a64-3566-4d75-b413-c4c044b58c02&LMI_PAYMENT_AMOUNT="+summ+"&LMI_PAYMENT_DESC="+clientname+" договор "+dognum+"&LMI_CURRENCY=RUB";
               $.getScript(url, function(){
                    console.log("--загрузили платежную систему..");
                });

браузер стал выдавать ошибку:

Вызов document.write() из асинхронно-загруженного внешнего сценария был проигнорирован.

, и выполнять скрипт откзывался. Как оказалось, создатели виджета вставили в тело скрипта команды вида document.write, что категорически запрещается без перезагрузки страницы. Если бы этот скрипт я просто статически разместил на странице, то всё бы было хорошо. Но нам это не нужно..

Долго думал… Долго Гуглил…

Решение: перед загрузкой скрипта подменить функцию вызова document.write своей «безобидной». В итоге скрипт получился такой:

 <div id='payform'>   
  <label for="clientname">ФИО:</label><br/>    
  <input type="text" name="clientname" id="clientname">
    <div id="result_clientname"><br/></div><br/>    
  <label for="clientid">№ договора:</label><br/>    
  <input type="text" name="clientid" id="clientid">
    <div id="result_clientid"><br/></div><br/>
  <label for="ammount">Сумма платежа:</label><br/>    
  <input type="number" name="ammount" id="ammount">
    <div id="result_ammount"><br/></div><br/>  
  <button id="pay_button_id">Оплатить</button>    
 </div> 
<script>
$(document).ready(function() {         
      function VerifyFormPay(){
          $("#clientname").css("border","");
          $("#clientid").css("border","");
          $("#ammount").css("border","");
          $("#result_clientname").html("<br/>");
          $("#result_clientid").html("<br/>");
          $("#result_ammount").html("<br/>");            
          res=true;
          clientname=$("#clientname").val();
           if (clientname==""){
             $("#clientname").css("border","2px solid red");
             $("#result_clientname").html("Это обязательное поле");
             res=false;
           };
           dognum=Number($("#clientid").val());
           if ((dognum==0)||(isNaN(dognum))){
             $("#clientid").css("border","2px solid red");
             $("#result_clientid").html("Значение не число");
             res=false;               
           };
           summ=Number($("#ammount").val());
           if ((summ==0)||(isNaN(summ))){
             $("#ammount").css("border","2px solid red");
             $("#result_ammount").html("Значение не число");
             res=false;               
           };           
          return res;
      };
      $("#pay_button_id").click(function() {
         if (VerifyFormPay()==true){
             $("#payform").html("");
             document.write = function(input) {                
                $("#payform").append(input)
             }
               url="https://paymaster.ru/ru-RU/widget/Basic/1?LMI_MERCHANT_ID=884a7a64-3566-4d75-b413-c4c044b58c02&LMI_PAYMENT_AMOUNT="+summ+"&LMI_PAYMENT_DESC="+clientname+" договор "+dognum+"&LMI_CURRENCY=RUB";
               $.getScript(url, function(){
                    console.log("--загрузили платежную систему..");
                });
         };
      });           
});      
  </script>

Сохранение части данных баз данных MSSQL

Задача: выгрузить в виде SQL запросов часть данных из баз MSSQL

Решение: используем стандартную оболочку Microsoft SQL Server Management Studio.

1) Правой кнопкой мыши щелкаем по БД, выбираем «Задачи -> Сгенерировать скрипт» (Task -> Generate Script)

2) В открывшемся «мастере» выберите таблицы которые хотите сохранить в виде SQL

В следующем шаге, сохраните запрос в файл

Жизнь замечательных грибов