Архив рубрики: 1C

Разработки на платформе 1С

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

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

Решение:

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

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

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

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

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

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

Диалоговое окно в 1С

Можно реализовать стандартным способом, что-то типа:

&НаКлиенте
Процедура ВыключитьИнтернет(Команда)
	Оповещение = Новый ОписаниеОповещения("ПослеЗакрытияВопроса",ЭтотОбъект);	
	ПоказатьВопрос(Оповещение,
        "Вы убеждены что хотите отключить несчастного контрагента?",
        РежимДиалогаВопрос.ДаНет,
        0, // таймаут в секундах
        КодВозвратаДиалога.нет, // (необ.) кнопка по умолчанию
        "Хороший вопрос" // (необ.) заголовок
    );    
КонецПроцедуры
&НаКлиенте
Процедура ПослеЗакрытияВопроса(Результат,Параметры)  Экспорт
	если Результат=КодВозвратаДиалога.Да тогда
		сообщить("--жаль..");
	иначе
		сообщить("");
	конецесли;	
КонецПроцедуры

Передача параметров при создании Формы.

Задача: по нажатии кнопки, открыть форму обработки с заполненным реквизитом ИНН.

Собственно вот классический способ:  по нажатию кнопки выполняем код:

&НаКлиенте
Процедура Расш1_ДействияБиллингаПосле(Команда)
	ПП = Новый Структура("ИНН", "100");
	Форма=ПолучитьФорму("Обработка.ДействияLanBilling.Форма.Форма",ПП);
	Форма.Открыть() 	
КонецПроцедуры

Далее обрабатываем параметр в самой форме, в процедуре ПриСозданииНаСервере:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	Если Параметры.Свойство("ИНН") Тогда
        объект.ИНН=Параметры["ИНН"];
    КонецЕсли;	
КонецПроцедуры

Атол 55Ф + терминал эквайринга VeriFone 802, ошибка 4321

При проведении эквайринговой операции 1С Розница 2.2 выводит ошибку:

При выполнении операции возникла ошибка:
«Ошибка отмены операции транзакции. Обратитесь в банк. Ошибка при выполнении функции АварийнаяОтменаОперации, ответ терминала — Ошибка 4321».
Оплата по карте не была произведена.

1) Тест драйверов кассы ККМ проходит
2) Тест драйверов терминала проходит
2) SBRFCOM.dll зарегистрирована regsvr на 7 параметров (пробовал и на 3)

Ошибка происходит только при выводе чека экваринговой операции на ККМ. Деньги с карточки снимаются.

Решение: заработало когда переставили терминал в порт USB3.0 (синенький). Возможно и правда не хватало питания, а может быть особенность реализации конкретно на этой материнской плате. Т.к. на других ПК всё работало в любых портах.