1С БСП 3.х : Добавление обработки в справочник «Дополнительные отчеты и обработки»

Ну собственно кому нужно подробнее, есть хорошая статья тут. Там функционал богатый и навороченый можно накрутить теперь. В моём случае для простой обработки хватило рыбы в модуле объекта вида:

Функция СведенияОВнешнейОбработке() Экспорт

	ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("3.0.0.0");
    ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка();
    ПараметрыРегистрации.Версия = "1.0";
	ПараметрыРегистрации.Наименование = "Формирование реестра СО";
	 ПараметрыРегистрации.Разрешения = Неопределено;
    
    ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);
 
    // Добавляем команду
    Команда = ПараметрыРегистрации.Команды.Добавить();
    Команда.Представление = "Формирование реестра СО";
    Команда.Идентификатор = "ОткрытьНастройкиЗаполнения";
    
    // КРИТИЧЕСКИ ВАЖНО: Указываем тип команды - Открытие формы
    Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();
    Команда.ПоказыватьОповещение = Ложь;
 
    Возврат ПараметрыРегистрации;	

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

И обязательно! Нужно поправить функцию ДополнительныеОтчетыИОбработкиПереопределяемый.ОпределитьРазделыСДополнительнымиОбработками, чтобы отображались все разделы. Я вынес в расширение вот такое, чтоб каждый раз руками не прописывать нужные подсистемы:

&После("ОпределитьРазделыСДополнительнымиОбработками")
Процедура Расш1_ОпределитьРазделыСДополнительнымиОбработками(Разделы)
	
	для каждого стр из Метаданные.Подсистемы цикл
		Разделы.Добавить(стр);
	конеццикла;	            	
    
КонецПроцедуры

1С: Динамическое количество колонок в макете

Задача: создать отчет с динамическим количеством колонок (за ранее не известным). Обычно подобные задачи решаются при помощи СКД, но я его традиционно недолюбливаю и использовать избегаю, по причине того, что спустя пару месяцев боле-менее сложны отчет превращается в абракадабру, которую чтобы понять приходится тратить очень много времени. Потому так.

Решение:

В макете поименовать не только как обычно горизонтальные области, но и вертикальные. Примерно так:

И области тогда получаем соответственно через тег |, примерно так (как в морском бое):

ОбластьШапка=Макет.ПолучитьОбласть("Шапка | Общая");		

Ну и сам код в конечном итоге сводится к такому:

	МесяцГод1=Макет.ПолучитьОбласть("Шапка | МесяцГод");	
	МесяцГод1.Параметры.ном=7;
		
	МесяцГод2=Макет.ПолучитьОбласть("Шапка | МесяцГод");	
	МесяцГод2.Параметры.ном=8;
	
	ТабДок.Вывести(ОбластьШапка);
	ТабДок.Присоединить(МесяцГод1);
	ТабДок.Присоединить(МесяцГод2);
	
	// заполняем тушку
	Тушка=Макет.ПолучитьОбласть("Тушка | Общая");				
	ТабДок.Вывести(Тушка);                              
	
		месгод=Макет.ПолучитьОбласть("Тушка | МесГод");				
		месгод.Параметры.месгод="Январь";
		ТабДок.Присоединить(месгод);
	
		месгод=Макет.ПолучитьОбласть("Тушка | МесГод");				
		месгод.Параметры.месгод="Февраль";
		ТабДок.Присоединить(месгод);
	
	возврат ТабДок;

Получаем:

1С: Добавление функционала прикрепления файлов

Ранее уже была статья.. но 2020 года. Решил обновить чуток. На примере актуальной версии 1С Бухгалтерия (3.0.195.40), добавлю функционал по прикреплению файлов к документу СК_ИскВходящий

  1. Копируем любой справочник с наименованием содержащим на конце словосочетание «ПрисоединенныеФайлы» и переименовываем его в СК_ИскВходящийПрисоединенныеФайлы
  2. Меняем ТИП у реквизита «ВладелецФайла» справочника на «СК_ИскВходящий»
  3. Включаем в состав определяемых типов «ПрисоединенныйФайл» и «ПрисоединенныйФайлОбъект» справочник «СК_ИскВходящийПрисоединенныеФайлы».

4. Расширим состав определяемого типа «ВладелецПрисоединенныхФайлов» нашим документом (ДокументСсылка) «СК_ИскВходящий».

5. Расширим состав типов свойства «Источник» у подписки «ПереопределитьПолучаемуюФормуПрисоединенногоФайла», включив в него справочник «СК_ИскВходящийПрисоединенныеФайлы».

6. Расширим состав типов свойства «Источник» подписки УстановитьПометкуУдаленияПрисоединенныхФайловДокументов, включив в него наш новый документ «ДокументОбъект.СК_ИскВходящий».

7. Расширим состав общей команды «ПрисоединенныеФайлы» и «ПрисоединенныеФайлыБП», включив в него наш новый документ (ДокументСсылка.СК_ИскВходящий).

8. Если необходимо добавить «Скрепку» на форму списка (в типовом варианте должна добавиться автоматически), чтобы картинка значения появлялась при наличии прикрепленных файлов у документа (строка в списке), то выполняем следующие действия:

В форме списка, у реквизита «Список» имеющего тип «ДинамическийСписок» выставляем галку «ПроизвольныйЗапрос», после чего открываем настройку списка (в там же в свойствах) и добавляем в блок «Выбрать»:

НаличиеФайлов.ЕстьФайлы КАК ЕстьФайлы

а в блок «ИЗ» :

{ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НаличиеФайлов КАК НаличиеФайлов
ПО НашНовыйДокумент.Ссылка = НаличиеФайлов.ОбъектСФайлами}

После того, как поправили запрос, в реквизитах списка появится «ЕстьФайлы». Перетаскиваем реквизит в табличное поле и указываем в свойствах:

  • Вид: «Поле картинки»;
  • Положение заголовка: «Нет»;
  • Картинка значений: «Файл»;
  • Картинка шапки: «Файл».

Update: Иногда людям не нравится когда появляется сверху вот это меню:

Убрать достаточно просто:

1C: Подпись произвольного текста в 1С

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

Решение: воспользуемся стандартным функционалом 1С. Предварительно на сервер необходимо установить в контейнер собственно сам сертификат. Так-же должен соответственно быть установлен крипто про.

&НаСервере
Функция ВыполнитьПодписьНаСервере(СтрокаДляПодписи,ИдентификаторПОдписи)
	answer = Новый Структура("error,result,", Истина, "Не удалось подписать строку");
		
	МенеджерКриптографии = Новый МенеджерКриптографии("Crypto-Pro GOST R 34.10-2012 Cryptographic Service Provider", "", 80);
	Хранилище = МенеджерКриптографии.ПолучитьХранилищеСертификатов(ТипХранилищаСертификатовКриптографии.ПерсональныеСертификаты);
	СертификатыВХранилище = Хранилище.ПолучитьВсе();

	для каждого сертификат из СертификатыВХранилище цикл
		если сертификат.субъект.CN=ИдентификаторПОдписи тогда		
			ИмяВремФайла = ПолучитьИмяВременногоФайла();
		    Текст = Новый ЗаписьТекста(ИмяВремФайла, "CESU-8");
		    Текст.Записать(СтрокаДляПодписи);
		    Текст.Закрыть();					
			Попытка
		        Результат =  МенеджерКриптографии.Подписать(ИмяВремФайла,неопределено,Сертификат);
				answer.error=false;
				answer.result=Результат;
				возврат answer;
			Исключение
				answer.result=ОписаниеОшибки();
		        сообщить(answer.result);
				УдалитьФайлы(ИмяВремФайла);
				возврат answer;
		    КонецПопытки;	
			
	        УдалитьФайлы(ИмяВремФайла);
			
		конецесли;
	конеццикла;	
	
	answer.result="Не найден сертификат для подписи";	
	возврат answer;
	
КонецФункции

&НаКлиенте
Процедура ВыполнитьПодпись(Команда)
	ВыполнитьПодписьНаСервере("SignRTP","!!!");
КонецПроцедуры

1С Бухгалтерия: Добавить файл в справочник Файлы

Есть в 1С Бухгалтерия один справочник, называется «Файлы». И возникла у меня идея использовать его как «файлопомойку» для всяких разных целей. Ну чтобы не плодить разные сущности типа дополнительных справочников. А что? Просто раскладывать всё по нужным папочкам да и всё..

Как оказалось использовать его довольно просто:

	Текст=новый ЗаписьТекста;
    Текст.Открыть(КаталогВременныхФайлов()+"\1.txt",КодировкаТекста.ANSI);
    Текст.ЗаписатьСтроку("Программируем в 1С 8.2");
    Текст.Закрыть(); 
	
	ИмяФайлаНаДиске = КаталогВременныхФайлов()+"\1.txt";	
	ДвоичныеДанные = Новый ДвоичныеДанные(ИмяФайлаНаДиске);
	ВременноеХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанные);
	
	// Подготоваливаем описание файла заполнив все необходимые параметры
	ПараметрыФайла = РаботаСФайлами.ПараметрыДобавленияФайла();
	ПараметрыФайла.Автор = Пользователи.ТекущийПользователь();
	ПараметрыФайла.ВладелецФайлов = Справочники.ПапкиФайлов.НайтиПоНаименованию("Росфинмониторинг").Ссылка;
	ПараметрыФайла.ИмяБезРасширения = "Абырвалг";
	ПараметрыФайла.РасширениеБезТочки = "txt";
	// Используем функцию БСП и добавляем файл к объекту
	РаботаСФайлами.ДобавитьФайл(ПараметрыФайла, ВременноеХранилище);	
1 2 3 … 55