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

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

Проверка сходимости эквайринговых операций для Розница 2.2

Данная обработка предназначена для поиска сомнительных операций по платежным картам, которые требуют проверки.

Данная обработка предназначена для поиска сомнительных операций по платежным картам, которые требуют проверки. Например:

— сумма эквайринговой операции не сходится с суммой реализации (клиент заплатил больше или меньше? документ реализации был изменен менеджером?)
— документ реализации один, а эквайринговых операций более одной (клиент заплатил с разных карточек? документ реализации был изменен менеджером?)

Публикация: https://infostart.ru/public/669370/

Программное сохранение отчета СКД в файл Excel

Задача: по расписанию формировать файл отчета СКД и отправлять его по электронной почте.

Решение:

1. Формируем файл

таб1=новый ТабличныйДокумент();
	
	СКД=Отчеты.ПрибыльЗаПериод.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
	Настройки=СКД.НастройкиПоУмолчанию;
	Дата1=Настройки.ПараметрыДанных.Элементы.Найти("Дата1");
	Дата1.Значение=НачалоМесяца(ТекущаяДата());
	Дата2=Настройки.ПараметрыДанных.Элементы.Найти("Дата2");
	Дата2.Значение=КонецДня(ТекущаяДата());
	ВидЦены=Настройки.ПараметрыДанных.Элементы.Найти("ВидЦены");
	ВидЦены.Значение=Справочники.ВидыЦен.НайтиПоНаименованию("Основная цена закупки");
	Магазин=Настройки.ПараметрыДанных.Элементы.Найти("Магазин");
	Магазин.Значение=Справочники.Магазины.НайтиПоНаименованию("Вологда Торговля");

	 	Расшифровка = Новый ДанныеРасшифровкиКомпоновкиДанных;
		КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;    
		
        //Передаем в макет компоновки схему, настройки и данные расшифровки
        МакетКомпоновки = КомпоновщикМакета.Выполнить(СКД, Настройки, Расшифровка);    
        ВнешниеПараметры = Новый Структура;    
		
        //Выполним компоновку с помощью процессора компоновки
        ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
        ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешниеПараметры, Расшифровка);    
		
        //Выводим результат в табличный документ
        ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
        ПроцессорВывода.УстановитьДокумент(таб1);    
        ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных, Истина);    	 
		
		таб1.Записать("c:\temp\моржа.xls",ТипФайлаТабличногоДокумента.XLS);

2.Отправляем его по почте

	ПараметрыПочты = новый ИнтернетПочтовыйПрофиль;
		ПараметрыПочты.АдресСервераSMTP = пснмп;
		ПараметрыПочты.АутентификацияSMTP = СпособSMTPАутентификации.ПоУмолчанию;
		ПараметрыПочты.ПользовательSMTP = плогин;
		ПараметрыПочты.ПарольSMTP=ппароль;
		
		Письмо=новый ИнтернетПочтовоеСообщение;
		Письмо.Тема="Комплексный отчет по продажам в магазине Вологда Торговля";
		Письмо.ИмяОтправителя="1С отправка отчетов";
		Письмо.Отправитель=побратный;
		Письмо.Получатели.Добавить(пполучатель);	
		Письмо.Получатели.Добавить("blabla@mail.ru");	

		Письмо.Тексты.Добавить("Комплексный отчет по продажам в магазине Вологда Торговля");		
		Письмо.Вложения.Добавить("c:\temp\моржа.xls");
		
		Подключение=новый ИнтернетПочта;
		Попытка
		Подключение.Подключиться(ПараметрыПочты);
		Подключение.Послать(Письмо);        

1001-й способ ограничить пользователей 1С

Задача: разрешить пользователям проводить документы только внутри разрешенных им складов.

Частично данная задача успешно решается при помощи RLE и соответствующих ролей. Но! не полностью. Во всяком случае в конфигурации 1С Розница 2.2 нет возможности ограничить пользователя (без изменения конфигураци)…ну например реализовывать  товар с «чужого» склада/Магазина, делать перемещение товаров на «чужие» склады (ограничения работают только для Ордеров???). 

Решение: используем относительно новую фичу от 1С — подписка на события. А именно на событие «Запись». Данные по которым будем проверять можно пользователю записывать данный документ или нет, будем брать из специально созданного справочника.

В котором перечисленна группа к которой принадлежит пользователь, вид документа по которому его ограничиваем и список складов, с которыми ему позволено это документ использовать.

Далее создадим подписку на событие:

И собственно саму обработку события

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

Функция ПроверкаВсяческихПрав(Источник, Отказ) Экспорт
	отказываем=истина;
	естьправила=ложь;
 	гп=	ПолучитьГруппуПользователя();
	естьОтправитель=ложь;
	естьПолучатель=ложь;
    отказываемОтправитель=истина;
	отказываемПолучатель=истина;
	// проверяем соответствие складам "Откуда"
	 Запрос = Новый Запрос;
  	 Запрос.Текст = 
	 "ВЫБРАТЬ
	 |	ДополнительныеНастройкиПравГрибовСкладыОткуда.Склад.Ссылка КАК СкладСсылка
	 |ИЗ
	 |	Справочник.ДополнительныеНастройкиПравГрибов.РазрешенныеСклады КАК ДополнительныеНастройкиПравГрибовСкладыОткуда
	 |ГДЕ
	 |	ДополнительныеНастройкиПравГрибовСкладыОткуда.Ссылка.ГруппаПользователей.Наименование = &ИмяГруппы
	 |	И ДополнительныеНастройкиПравГрибовСкладыОткуда.Ссылка.ВидДокумента.Наименование = &ИмяДокумента";	 
	Запрос.УстановитьПараметр("ИмяГруппы", гп);
	Запрос.УстановитьПараметр("ИмяДокумента", Источник.Ссылка.Метаданные().Имя);
	РезультатЗапроса = Запрос.Выполнить();	
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
		естьправила=Истина;		
		если Источник.Ссылка.Метаданные().Реквизиты.Найти("Склад")<>Неопределено тогда			
			если источник.Склад.Ссылка=ВыборкаДетальныеЗаписи.СкладСсылка тогда отказываем=Ложь;
			конецесли;	
		конецесли;
		если Источник.Ссылка.Метаданные().Реквизиты.Найти("СкладОтправитель")<>Неопределено тогда		
			естьОтправитель=Истина;
			если источник.СкладОтправитель.Ссылка=ВыборкаДетальныеЗаписи.СкладСсылка тогда 
				отказываем=Ложь;				
				отказываемОтправитель=Ложь;
			конецесли;	
		конецесли;		
		если Источник.Метаданные().Реквизиты.Найти("СкладПолучатель")<>Неопределено тогда		
			естьПолучатель=Истина;
			если источник.Ссылка.СкладПолучатель.Ссылка=ВыборкаДетальныеЗаписи.СкладСсылка тогда 
				отказываем=Ложь;
				отказываемОтправитель=Ложь;
			конецесли;	
		конецесли;									
	конеццикла;	
 если естьправила=Ложь тогда
	 Отказ=ложь;
 иначе
	  //отрабатываем вариант что два склада отправитель и получатель!
	  если (естьОтправитель=Истина и естьПолучатель=Истина) тогда
		  если отказываемОтправитель=Ложь и отказываемПолучатель=Ложь тогда
		   отказ=ложь;	  
	   иначе
		   отказ=Истина;
		  конецесли;	  
		  иначе
			  отказ=отказываем;			  
	  конецесли
	  
  конецесли;
  
	 если отказ=Истина тогда сообщить("- вы не можете записать данный документ с данными складами - не хватает прав! Обратитесь к Кочанову Сергею.");
	 конецесли;	 	  
  
КонецФункции	

Програмное получение группы пользователя в 1С

Например можно так:

Функция ПолучитьГруппуПользователя()
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ГруппыПользователей.Наименование КАК Наименование
|ИЗ
| Справочник.ГруппыПользователей КАК ГруппыПользователей
|ГДЕ
| ГруппыПользователей.Состав.Пользователь.Ссылка = &amp;Ссылка";

Запрос.УстановитьПараметр("Ссылка", ПараметрыСеанса.ТекущийПользователь);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
группа="";
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
сообщить(ВыборкаДетальныеЗаписи.Наименование);
группа=ВыборкаДетальныеЗаписи.Наименование;
конеццикла;
возврат группа;

КонецФункции

Функция ПроверкаВсяческихПрав(Источник, Отказ) Экспорт

сообщить("-- какойто негодяй из "+ПолучитьГруппуПользователя()+" хочет записать документ! Проверяем а нужно ли?");
КонецФункции

Ошибка вывода шаблона этикетки поле обновления 1С Розница с 2.2.5 до 2.2.6

После обновления конфигурации, все шаблоны начали выводить ошибку вида «Не верные параметры «Справочник.СправкиБЕГАИС.ПустаяСсылка»:

Решение достаточно простое и тупое, ну если вы конечно при создании шаблонов правили только макеты и не правили сам запрос в СКД под свои нужды. А именно, создаем новый пустой шаблон, заходим в «Редактировать СКД», копируем запрос и вставляем его в «поломаный» и сохраняем.