Пользовательские макеты для внешних печатных форм (обработок)

Публикация № 795584

Разработка - Печать - Универсальные печатные формы

БСП пользовательские макеты внешние печатные формы обработки расширения программирование

Расширение БСП по реализации механизма пользовательских макетов для обработок внешних печатных форм.

Многие из нас знакомы с замечательным механизмом БСП "Макеты печатных форм", позволяющим пользователю самостоятельно менять макеты из метаданных конфигурации. В этой статье мы рассмотрим, как при помощи механизма расширения (модулей) данный функционал можно распространить на дополнительные обработки внешних печатных форм.

Приступим!

Релизацию задачи можно разделить на три шага перехвата и модернизации механизмов:

  1. Заполнения типового списка макетов
  2. Получения макета по имени объекта метаданных 
  3. Записи модернизированного пользовательского макета

При разработке внешних печатных форм следует придерживаться определенных правил.

Разберем каждый из шагов подробнее.

1. Перехват и модернизации механизма заполнения типового списка макетов

Механизм находится в процедуре формы РегистрСведений.ПользовательскиеМакетыПечати.Форма.МакетыПечатныхФорм.ЗаполнитьТаблицуМакетовПечатныхФорм().

Добавляем форму МакетыПечатныхФорм в расширение, в модуле формы прописываем следующий код:

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

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


Схематично вышеприведенный код работает следующим образом:


 

2. Перехват и модернизации механизма получения макета по имени объекта метаданных

Механизм находится в функции ОбщийМодуль.УправлениеПечатью.МакетПечатнойФормы(ПутьКМакету)

Добавляем общий модуль УправлениеПечатью в расширение. В модуле расширения пишем следующий код:


// Возвращает макет печатной формы по полному пути к макету.
//
// Параметры:
//  ПутьКМакету - Строка - полный путь к макету в формате:
//                         "Документ.<ИмяДокумента>.<ИмяМакета>"
//                         "Обработка.<ИмяОбработки>.<ИмяМакета>"
//                         "ОбщийМакет.<ИмяМакета>".
//						   "ВнешняяОбработка.<ИмяОбработки>.<ИмяМакета>"
// Возвращаемое значение:
//  ТабличныйДокумент - для макета типа MXL.
//  ДвоичныеДанные    - для макетов DOC и ODT.
//
&Вместо("МакетПечатнойФормы")
Функция simПМВПФ_МакетПечатнойФормы(ПутьКМакету) Экспорт
	
	//Вычленим старший тип объекта метаданных
	ЧастиПути = СтрРазделить(ПутьКМакету, ".", Истина);
	
	//Нас интересуют только внешние обработки
	Если ЧастиПути[0]="ВнешняяОбработка" Тогда
		
		//Типовой код
		ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Макет ""%1"" не найден. Операция прервана.'"), ПутьКМакету);
		
		ИмяМакета = ЧастиПути[ЧастиПути.ВГраница()];
		ЧастиПути.Удалить(ЧастиПути.ВГраница());
		ИмяОбъекта = СтрСоединить(ЧастиПути, ".");
		
		ТекстЗапроса = 
		"ВЫБРАТЬ
		|	ПользовательскиеМакетыПечати.Макет КАК Макет
		|ИЗ
		|	РегистрСведений.ПользовательскиеМакетыПечати КАК ПользовательскиеМакетыПечати
		|ГДЕ
		|	ПользовательскиеМакетыПечати.Объект = &Объект
		|	И ПользовательскиеМакетыПечати.ИмяМакета ПОДОБНО &ИмяМакета
		|	И ПользовательскиеМакетыПечати.Использование";
		
		Запрос = Новый Запрос(ТекстЗапроса);
		Запрос.Параметры.Вставить("Объект", ИмяОбъекта);
		Запрос.Параметры.Вставить("ИмяМакета", "%" + ИмяМакета + "%");
		
		УстановитьОтключениеБезопасногоРежима(Истина);
		УстановитьПривилегированныйРежим(Истина);
		
		Выборка = Запрос.Выполнить().Выбрать();
		
		УстановитьПривилегированныйРежим(Ложь);
		УстановитьОтключениеБезопасногоРежима(Ложь);
		
		//+sim если макет нашелся в регистре - берем его
		Если Выборка.Следующий() Тогда
			Возврат Выборка.Макет.Получить();
		Иначе //иначе получаем макет непосредственно из обработки
			_Макет = simПМВПФ_ПолучитьМакетВнешнейОбработки(ИмяОбъекта,ИмяМакета); 
			Если _Макет <> Неопределено Тогда
				Возврат _Макет;
			Иначе
				ВызватьИсключение ТекстОшибки;
			КонецЕсли;
			
		КонецЕсли;
		//-sim
		
	КонецЕсли;	
	
	//!!!Продолжаем типовой вызов
	Возврат ПродолжитьВызов(ПутьКМакету);
	
КонецФункции


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

Схематично вышеприведенный код работает следующим образом:

3. Перехват и модернизации механизма записи модернизированного пользовательского макета

Механизм находится в функции ОбщийМодуль.УправлениеПечатью.ЗаписатьМакет(ИмяОбъектаМетаданныхМакета, АдресМакетаВоВременномХранилище).

Общий модуль УправлениеПечатью мы уже добавили в наше расширение, поэтому сразу добавляем в модуль УравлениеПечатью следующий код:

// Сохраняет пользовательский макет печати в информационной базе.
&Вместо("ЗаписатьМакет")
Процедура simПМВПФ_ЗаписатьМакет(ИмяОбъектаМетаданныхМакета, АдресМакетаВоВременномХранилище) Экспорт
	
	//Вычленим старший тип объекта метаданных
	ЧастиИмени = СтрРазделить(ИмяОбъектаМетаданныхМакета, ".");
	
	//Нас интересуют только внешние обработки
	Если ЧастиИмени[0] = "ВнешняяОбработка" Тогда  
		
		//Типовой код
		ИмяМакета = ЧастиИмени[ЧастиИмени.ВГраница()];
		ИзмененныйМакет = ПолучитьИзВременногоХранилища(АдресМакетаВоВременномХранилище);
		ИмяВладельца = "";
		Для НомерЧасти = 0 По ЧастиИмени.ВГраница()-1 Цикл
			Если Не ПустаяСтрока(ИмяВладельца) Тогда
				ИмяВладельца = ИмяВладельца + ".";
			КонецЕсли;
			ИмяВладельца = ИмяВладельца + ЧастиИмени[НомерЧасти];
		КонецЦикла;
		
		//+sim нетиповое получение макета для ВнешнейОбработки
		МакетИзМетаданных = simПМВПФ_ПолучитьМакетВнешнейОбработки(ИмяВладельца,ИмяМакета);
		//-sim
		
		Запись = РегистрыСведений.ПользовательскиеМакетыПечати.СоздатьМенеджерЗаписи();
		Запись.Объект = ИмяВладельца;
		Запись.ИмяМакета = ИмяМакета;
		Если МакетыРазличаются(МакетИзМетаданных, ИзмененныйМакет) Тогда
			Запись.Использование = Истина;
			Запись.Макет = Новый ХранилищеЗначения(ИзмененныйМакет, Новый СжатиеДанных(9));
			Запись.Записать();
		Иначе
			Запись.Прочитать();
			Если Запись.Выбран() Тогда
				Запись.Удалить();
			КонецЕсли;
		КонецЕсли;
		
		Возврат;
		
	КонецЕсли;
	
	//!!! продолжаем вызов тиоповой процедуры
	ПродолжитьВызов(ИмяОбъектаМетаданныхМакета, АдресМакетаВоВременномХранилище);
	
КонецПроцедуры

Схема работы кода выглядит аналогично п.2.

4. Особенности печати пользовательского макета для внешней печатной формы

Разрабатывая внешнюю печатную форму, необходимо помнить о нескольких несложных правилах:

  1. Имя каждой отдельной внешней обработки должно быть уникально
  2. Макеты, которые вы хотите дать на редактирование пользователям, должны префиксироваться согласно правилам БСП (ПФ_MXL_,ПФ_DOC_)
  3. Получать макет необходимо функцией БСП УправлениеПечатью.МакетПечатнойФормы(ПутьКМакету)
  4. Получая область макета для печати, необходимо сначала проверить ее наличие (пользователь мог ее удалить) методом Найти(ИмяОбласти)
    Макет = ЭтотОбъект.ПолучитьМакет("СоставПоказателей");
    ТекОбласть = Макет.Области.Найти(ИмяОбласти);
  5. Заполнять параметры макета следует процедурой ЗаполнитьЗначенияСвойств(Область.Параметры, Источник), ровно по той же причине (пользователь может удалить параметры)

Вот, собственно, и все. Буду раз вашим комментариям.

Системные требования

Платформа: не ниже v8.3.11

БСП: v2.4.4.145 - v3.0.1.355

Скачать файлы

Наименование Файл Версия Размер
Расширение для конфигураций на БСП 2.4.4.х-3.0.1.355

.cfe 22,70Kb
11
.cfe 1.2.0 22,70Kb 11 Скачать
Печать счета из заказа клиента (УТ 11.4)

.epf 13,81Kb
10
.epf 13,81Kb 10 Скачать

Специальные предложения

Лучшие комментарии
14. Tavalik 2502 24.10.20 10:39 Сейчас в теме
Спасибо. Очень полезное расширение, все работает.
13. nemo2010 23.10.19 14:34 Сейчас в теме
Спасибо! Помогло решить проблему редактирования внешней печ.формы WORD/
Остальные комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. simy4 25 06.03.18 11:10 Сейчас в теме
Мысли об оптимизации.
В этой (1.0) версии, для получения макета непосредственно из внешней обработки, выполнятся запрос к базе данных, хотя контекст, из которого вызывается функция МакетПечатнойФормы(), в большинстве случаев уже несет в себе ОбработкуОбъект.

Можно написать отдельную функцию получения макета, где входящим параметром нужно передавать ОбработкуОбъект, но такое решение усложняет, т.к. необходимо во внешних обработках переписывать место получения макета.

Если бы расширение позволяло добавлять в перехватываемую функцию необязательные параметры...
Смотрю в сторону дополнительных свойств ОбработкиОбъекта. Тогда тем, кому важна временнАя оптимизация получения макета могли бы добавлять ОбработкуОбъект в дополнительные свойства перед вызовом функции МакетПечатнойФормы().
2. simy4 25 06.03.18 19:28 Сейчас в теме
(1)нет, не выйдет ничего с дополнительными свойствами, т.к. они живут только вместе с ОбработкойОбъектом, а её (кажется) можно передать только параметром.
3. ybrjkm 29.08.18 13:33 Сейчас в теме
Добрый день! Есть внешняя печатная обработка, есть макет в формате "Двоичные данные" - документ "Word". Макет попадает в "Макеты печатных форм", редактируется, сохраняется. Но при печати выводится старый, неизмененный макет из внешней обработки, хотя отладчиком я попадаю на строку Возврат Выборка.Макет.Получить(); функции simПМВПФ_МакетПечатнойФормы() (то есть в регистр "Пользовательские макеты печати") я попадаю. Что здесь не так? Может, что-то мною упущено? Спасибо.
8. simy4 25 28.09.18 15:07 Сейчас в теме
(3)Добрый день. К сожалению не смогу вам помочь. Слишком мало данных для анализа. Может стоит попробовать почистить кеш.
4. KliMich 10.09.18 15:59 Сейчас в теме
Добрый день!
Однозначно плюс! Работает и с WORD.

Только маленький вопрос.
В моей обработке используется "ВызовКлиентскогоМетода" в отличии от "ВызовСерверногоМетода" (в примере _ДемоПечатьСчетовНаОплатуПокупателю).

При этом в форме строка кода:
Макет = УправлениеПечатью.МакетПечатнойФормы(ЭтотОбъект.Метаданные().ПолноеИмя() + "." + ИдентификаторКоманды);
выдает ошибку:
{ВнешняяОбработка.ТрудовойДоговорWORD2018.Форма.Форма.Форма(831)}: Метод объекта не обнаружен (Метаданные)
Макет = УправлениеПечатью.МакетПечатнойФормы(ЭтотОбъект.Метаданные().ПолноеИмя() + "." + ИдентификаторКоманды);

Если явно указываю
Макет = УправлениеПечатью.МакетПечатнойФормы("ВнешняяОбработка.ТрудовойДоговорWORD2018" + "." + ИдентификаторКоманды);
то все работает...

Подскажите, как получить имя внешней обработки из формы (&НаКлиенте или &НаСервере)
6. simy4 25 28.09.18 15:03 Сейчас в теме
(4)Добрый день. В принципе, можно сделать так как сделали вы, просто при создании новой печатной формы копированием, нужно не забывать менять данный параметр.

Что бы обратиться к метаданным обработки объекта с клиента, вам нужно вызвать серверную функцию вида:

&НаКлиенте
Процедура ВашаКлиентскаяПроцедура()
	Макет = УправлениеПечатью.МакетПечатнойФормы(ПолучитьИмяМетаданныхОбъекта() + "." + ИдентификаторКоманды);
КонецПроцедуры

&НаСервере
Процедура ПолучитьИмяМетаданныхОбъекта()
	Возврат РеквизитФормыВЗначение("Объект").Метаданные().ПолноеИмя();
КонецПроцедуры
Показать
7. simy4 25 28.09.18 15:06 Сейчас в теме
(6)А еще лучше, что бы лишний раз не дергать сервер, в ПриСозданииНаСервере закешировать полное имя из метаданных в реквизит формы. В последствии вы просто обращаетесь к этому реквизиту при необходимости.
5. kassbar 144 20.09.18 16:19 Сейчас в теме
по моему вот этих 2-х пунктов

- Макеты, которые вы хотите дать на редактирование пользователям, должны префиксироваться согласно правилам БСП (ПФ_MXL_,ПФ_DOC_)
- Получать макет необходимо функцией БСП УправлениеПечатью.МакетПечатнойФормы(ПутьКМакету)

вполне достаточно для редактирования макетов в пользовательском режиме. Для чего весь остальной код ?
9. simy4 25 28.09.18 15:09 Сейчас в теме
(5)Добрый день. Вы проверили ваше утверждение, или только предполагаете?
10. kassbar 144 28.09.18 23:12 Сейчас в теме
(9) я делаю печатные формы только через расширения, чтобы пользователи сами меняли макеты через Еще-Изменить макет.
И точно знаю что Префикс печатной формы + получение макета через путь к нему = автоматическое редактирование макетов пользователем )
11. simy4 25 29.09.18 01:13 Сейчас в теме
(10) в данной публикации речь идет о дополнительных внешних обработках печати, подключение которых не предполагет использования расширения (и редактирования макета пользователем).
12. kassbar 144 29.09.18 13:03 Сейчас в теме
(11) надеюсь кто-то найдет это материал полезным
simy4; triera2000; klaus38; +3 Ответить
13. nemo2010 23.10.19 14:34 Сейчас в теме
Спасибо! Помогло решить проблему редактирования внешней печ.формы WORD/
14. Tavalik 2502 24.10.20 10:39 Сейчас в теме
Спасибо. Очень полезное расширение, все работает.
Оставьте свое сообщение

См. также

FormCodeGenerator Программная доработка форм. Часть 2 (Режим работы "Режим сравнения форм") на примере ERP 2.5 Промо

Практика программирования Адаптация типовых решений Прочие инструменты разработчика v8 1cv8.cf Абонемент ($m)

Данная публикация является продолжением описания функционирования обработки "FormCodeGenerator " в режиме сравнения форм и генерирования кода на основании сравнения. Подходит для перевода уже доработанных форм с интерактивной доработки на программную. Данный режим работы обработки снизит издержки при дальнейших обновлениях конфигураций.

5 стартмани

21.12.2020    5743    21    huxuxuya    11    

Интерактивная справка по объектам 1С (подключаемое расширение)

Практика программирования Работа с интерфейсом v8 ERP2 Абонемент ($m)

База знаний, подключаемая к объектам основной базы. Пополняется интерактивно, формируется в виде статей прямо в 1С (текст, картинки, таблицы, ссылки). Есть возможность прикрепления файлов, привязки к объектам 1С, возможности рейтинга и комментирования пользователями.

3 стартмани

29.09.2020    11638    69    sapervodichka    43    

Конвейер проверки качества кода

Инструментарий разработчика Практика программирования Математика и алгоритмы v8 1cv8.cf Абонемент ($m)

Jenkinsfile для выполнения проверки качества кода. Собирает информацию с АПК, EDT и BSL-LS. Сопоставляет ошибки с гит-репозиторием, выгруженным ГитКонвертором. Отправляет в Сонар.

3 стартмани

04.09.2019    32189    27    Stepa86    46    

Работа с публикациями "Инфостарт"

Практика программирования О сообществе WEB v8 УУ Абонемент ($m)

Работа с рублевыми публикациями на сайте "Инфостарт": ведение клиентов, заказов, обновление файлов публикации, рассылка обновлений.

1 стартмани

13.09.2018    25464    13    RocKeR_13    16    

Вам нравятся запросы в 1С? Промо

Практика программирования Разработка v8 v8::Запросы 1cv8.cf Абонемент ($m)

Речь не только о том, что простейший запрос с "легальным" оформлением растянется на пол-экрана, речь еще обо всем, что нужно написать "в нагрузку" к тексту запроса. Все эти "Новый Запрос", "УстановитьПараметр" и последующие пляски с обработкой результата... Пора с этим заканчивать!

1 стартмани

03.07.2019    25100    7    m-rv    90    

HTTP Сервисы: Путь к своему сервису. Часть 3

Инструментарий разработчика Практика программирования v8 1cv8.cf Абонемент ($m)

Продолжение статьи «HTTP Сервисы: Путь к своему сервису. Часть 2». В предыдущих частях мы использовали только Get, в этой части поговорим о других методах и длительных операциях.

1 стартмани

27.08.2018    47995    66    dsdred    17    

Позиционирование в помещении с помощью нейросети по сигналу Wi-Fi. Интерактивная карта склада в 1С с показом позиции

Инструментарий разработчика Практика программирования v8 Абонемент ($m)

Данная публикация содержит в себе редактор и интерактивную карту склада или иного помещения, на которой в реальном времени отображается позиция устройства, координаты которого вычисляются по уровням сигнала нескольких роутеров Wi-Fi. В статье и приложенным к ней разработкам предлагаются инструменты и методика для реализации вычисления точной геопозиции внутри помещений с помощью нейронной сети. Конфигурация написана на релизе 1С:Предприятие 8.3.12.1412, клиентское приложение имеет минимальный уровень совместимости SDK -16.

5 стартмани

09.08.2018    33101    29    informa1555    30    

Работа с данными выбора

Практика программирования Работа с интерфейсом v8 Россия Абонемент ($m)

В управляемом интерфейсе заложена мощная возможность описывать связи реквизитов формы через параметры. Установка параметров связей позволяет ограничить выбор данных так, чтобы целостность данных была обеспечена на этапе ввода. Однако без дополнительного программирования задать можно только самые простые связи. Такие условия связи, как зависимость от реквизита через точку или зависимость через дополнительное отношение, заданное в регистре сведений - уже задать без программирования не получится.

1 стартмани

17.07.2018    60006    24    kalyaka    16    

ВСТАВИТЬ В Справочник.Номенклатура (Код, Наименование) ЗНАЧЕНИЯ ("001", "Новый товар") Промо

Практика программирования v8 v8::Запросы 1cv8.cf Абонемент ($m)

Вас не обманывают ваши глаза, это запрос на изменение данных! И это работает без прямого доступа к БД, регистрации и смс.

1 стартмани

01.06.2018    34106    91    m-rv    58    

Полезные примеры составления схемы компоновки данных #2

Практика программирования v8 v8::СКД 1cv8.cf Абонемент ($m)

Еще один набор примеров как решить частные задачи в СКД

1 стартмани

22.05.2018    37047    11    SITR-utyos    13    

Печатная форма, сделанная как расширение конфигурации для БП 3.0. Новые возможности БСП

Практика программирования Универсальные печатные формы v8 БП3.0 Абонемент ($m)

Печатные формы на внешних обработках скоро канут в лету. На смену им приходят ПФ, реализованные в виде расширений конфигурации. Не нашел на сайте примеров таких расширений. Привожу пример подобного расширения для БП 3.0.

1 стартмани

06.12.2017    30654    56    kwazi    6    

Паузы при исполнении кода (Sleep для 1С)

Практика программирования v8 v8::УФ 1cv8.cf Абонемент ($m)

Решил проверить все найденные варианты паузы для 1С. В результате получилась обработка для тестирования и небольшая статья с итогом.

1 стартмани

28.11.2017    60244    17    swimdog    46    

Заполняем по шаблону (по умолчанию) Промо

Практика программирования v8 v8::УФ 1cv8.cf Абонемент ($m)

Простой в подключении, универсальный и достаточно удобный механизм заполнения реквизитов произвольных документов/справочников значениями по умолчанию. Реализован в расширении, но может быть и непосредственно включен практически в любую конфигурацию на управляемых формах простым копированием одной формы и двух команд. Весь код в статье.

1 стартмани

08.02.2018    32137    20    mvxyz    17    

Telegram-боты

Практика программирования v8 Абонемент ($m)

Описание теории, разбор архитектуры и пример реализации telegram-ботов. Сразу скажу, со структурированием изложения мало что могу поделать. :) редакция от 18.07.2018 Правки последней редакции выделены жирным.

1 стартмани

01.09.2017    38948    143    PLAstic    68    

Умный дом на 1С + ардуино

Практика программирования v8 Абонемент ($m)

Конфигурация для автоматизации быта программиста 1C и не только. В данной статье будет рассказано, как можно использовать 1С для задач, не входящих в стандартные рамки этой платформы. Например, управление домом. В качестве периферии для подключения будет использован микроконтроллер (МК) Ардуино, но на нём не будет никакой логической нагрузки, весь процесс будет проходить на сервере 1С. Работа с пинами ввода/вывода происходит напрямую из 1С.

1 стартмани

07.08.2017    26144    21    sasha777666    64    

Расширения конфигураций 1С: учимся перехватывать методы

Практика программирования v8 v8::УФ 1cv8.cf Абонемент ($m)

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

1 стартмани

30.05.2017    154019    13    signum2009    48    

Нечеткий поиск одним запросом Промо

Практика программирования v8 1cv8.cf Абонемент ($m)

Использование механизма полнотекстового поиска в 1С не всегда оправдано, т.к. построение индекса и поддержание его в актуальном состоянии может значительно нагружать систему. Предлагаемая реализация нечеткого поиска методом N-грамм выполняется одним запросом, что позволяет производить поиск в любой таблице и не требует предварительного построения индекса.

1 стартмани

28.12.2015    31896    72    vasvl123    9    

СКД. Использование встроенного макета, разделителя страниц

Практика программирования v8::СКД 1cv8.cf Абонемент ($m)

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

1 стартмани

31.03.2017    17494    18    Vin_Tik    0    

Регулярные выражения – это просто. Построитель и отладчик регулярных выражений

Инструментарий разработчика Практика программирования v8 1cv8.cf Абонемент ($m)

Предлагается к использованию построитель регулярных выражений. Выполненный в виде внешней обработки, он позволит строить сложно-структурированные выражения на основе параметрического описания, тестировать их, и в результате получить программный код 1С.

1 стартмани

13.03.2017    36151    120    romasna    52    

Распознавание текста с помощью нейросетей Google Cloud Vision и 1С

Практика программирования v8 1cv8.cf Абонемент ($m)

Возможности Google Cloud Vision в распознавании текста.

1 стартмани

08.02.2017    35150    141    kiv1c    18    

1С: Предприятие + корпоративный чат, как наладить оперативные уведомления за 10 минут Промо

Практика программирования v8 Абонемент ($m)

Как сделать автоматические уведомления о разных событиях из 1С в корпоративный чат MyChat для сотрудников компании

1 стартмани

14.08.2016    52314    36    Demanoidos    60    

Графическая схема. Управление при помощи XDTO.

Практика программирования v8 Абонемент ($m)

В статье описывается методика программного управления элементами графической схемы при помощи механизма XDTO. Приложена готовая к использованию библиотека функций для создания и удаления графических объектов, а также для связи элементов схемы соединительными линиями.

2 стартмани

16.01.2017    26914    118    Alxby    23    

Несколько шаблонов для доработки типовых конфигураций

Практика программирования Инструментарий разработчика v8 v8::УФ Абонемент ($m)

Предлагаю несколько каркасов для создания новых объектов в типовых конфигурациях. Это выжимка из кода нескольких конфигураций, которая позволит быстро и красиво создавать и дорабатывать объекты метаданных с соблюдением идеологии исходной системы

1 стартмани

03.10.2016    40161    98    json    25    

Полезные процедуры по работе с СКД и табличными документами (часть 2)

Практика программирования v8::СКД 1cv8.cf Абонемент ($m)

Еще несколько универсальных процедур

1 стартмани

27.09.2016    34519    36    json    19    

Быстрое определение интервалов в запросе Промо

Практика программирования v8 Абонемент ($m)

В статье описывается новый метод определения интервалов между данными различных записей в запросе. В отличие от общеизвестного метода, время работы предлагаемого метода зависит от объема данных ЛИНЕЙНО. Это обеспечивает ему значительный выигрыш по быстродействию на больших объемах данных. В качестве иллюстрации возможностей метода приведен отчет, показывающий гистограмму распределения времени между продажами.

1 стартмани

01.10.2015    57443    35    ildarovich    41    

Редактирование табличной части объекта с помощью СКД

Инструментарий разработчика Практика программирования v8::СКД 1cv8.cf Россия Абонемент ($m)

Тема не нова - похожие решения были и на 8.0. К написанию статьи меня подтолкнул коллега, т.к. я это чудом не считаю. Несколько раз я видел тонны сложнейшего, и посему нерабочего кода, целью которого было сделать нечто похожее средствами, которые для этого не предназначены. В статье дан простейший пример, показывающий, как можно применять средства СКД для редактирования сложной структуры данных, например, табличных частей документов. В частности, рассмотрена работа с набором данных типа "Объект" и событием "Обработка расшифровки"

2 стартмани

16.09.2016    30244    108    Hatson    28    

Полезные процедуры по работе с СКД и табличными документами (часть 1)

Практика программирования v8::СКД 1cv8.cf Абонемент ($m)

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

1 стартмани

03.09.2016    64266    103    json    24    

HTTP-сервис: отчеты [Расширение]

Практика программирования Работа с интерфейсом v8 1cv8.cf Абонемент ($m)

Это HTTP-сервис, который возвращает почти любой отчет в HTML, XLSX или в JSON. Сохраните вариант отчета, получите на него ссылку и можно получить данные без захода в 1С. Работает в конфигурациях на основе БСП 2.3.3+, для отчетов на СКД и в 1С 8.3.8+

2 стартмани

30.08.2016    31101    146    Stepa86    15    

Использование методов глобального контекста в системе компоновки данных или недокументированные возможности СКД

Практика программирования Математика и алгоритмы v8::УФ v8::СКД 1cv8.cf Абонемент ($m)

Прочитал на форуме, что СтрРазделить() и ТекущаяДата() работают в языке выражений системы компоновки данных. Почитал справку, там ничего не нашёл, поэтому не поверил. Посмотрел на практике – и правда работает… В данной статье попытался привести весь перечень методов, работающих в СКД, но не описанных в документации.

1 стартмани

05.08.2016    41444    27    klinval    40    

Недокументированное использование стандартных форм Upd.

Практика программирования v8 v8::УФ 1cv8.cf Абонемент ($m)

Вам не хватает возможностей в платформе 1С или у Вас нет времени на углубленное изучение платформы 1С? Рассмотрены возможности использования стандартных форм, вызываемых из платформы.

1 стартмани

26.07.2016    31930    95    ZhokhovM    65    

Конструктор внешних печатных форм NEW beta (обычные и управляемые приложения!)

Универсальные печатные формы Инструментарий разработчика v8 v8::УФ 1cv8.cf Россия Абонемент ($m)

Исходная обработка http://infostart.ru/public/162019/, здесь просто исправлены некоторые процедуры и функции для управляемого приложения. (Публикуется с согласия автора SeiOkami) 12.07.2016 - Версия 4.3 - убрал модальность для управляемой формы, изменена встроенная ВПФ . 23.11.2016 - Версия 4.4 - изменена встроенная ВПФ . 03.04.2018 - Версия 4.7 - исправлено сохранение ВПФ в клиент-серверном варианте от vshish. 11.05.2018 - Версия 4.8 - исправление от VovkaPutin плюс убрал из текста модуля ВПФ директивы препроцессора (то, что начинается с "#"), убрал модальность при открытии ВПФ из конструктора. 17.10.2019 - Версия 5.1 - тестировалось на платформе 8.3.15.1700, БП 3.0.73.54

1 стартмани

10.07.2016    56706    522    Alex_E    136    

Хранение файлов в томах на диске (для УПП 1.3)

Практика программирования v8 УПП1 Абонемент ($m)

Доработка типовой УПП 1.3 в плане хранения присоединенных файлов вне базы данных

2 стартмани

05.06.2016    63982    11    wowik    32    

БСП 2.3 и БСП 3.0: Просто про выполнение внешней обработки в фоне (c индикацией прогресса выполнения)

Инструментарий разработчика Практика программирования БСП (Библиотека стандартных подсистем) v8 1cv8.cf Абонемент ($m)

Простое пояснение о том, как сделать внешнюю обработку с фоновым выполнением и индикацией процесса для любой конфигурации на основе БСП 2.3.2. UPDATE 20/09/19: добавлен вариант обработки с индикацией процента выполнения и статусом выполнения для БСП 3.0.

1 стартмани

18.05.2016    69879    207    rozer    67    

Остатки на каждый день в запросе

Практика программирования Учет ТМЦ Учет ТМЦ v8 1cv8.cf УУ Абонемент ($m)

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

1 стартмани

26.04.2016    70412    19    arakelyan    24    

Еще один способ расчета остатков на каждый день в запросе

Математика и алгоритмы Практика программирования v8 Абонемент ($m)

Предлагается новый способ расчета остатков на каждый день (час, минуту, секунду) в запросе. Способ не требует предварительного формирования таблицы дат и также подходит для расчета курсов валют, цен номенклатуры и других периодических сведений на каждую дату периода. На больших объемах данных предлагаемый способ может превосходить по быстродействию ранее известные методы из-за линейной (в лучшем случае) зависимости трудоемкости от длины периода.

1 стартмани

24.04.2016    38510    52    ildarovich    23    

Выполнение JavaScript кода из 1С в объекте Поле HTML Документа (HTML 5) и вызов события в 1С ПриНажатии

Практика программирования v8 1cv8.cf Россия Абонемент ($m)

Пример выполнения JS кода из 1С в Поле HTML Документа под управляемыми формами, с удобным получением результата в 1С(С помощью вызова привязанного события ПриНажатии к элементу ПолеHTMLДокумента)

1 стартмани

22.03.2016    90534    169    igo1    58    

Количество дней недели (понедельников/вторников/...) в заданном диапазоне одним запросом

Практика программирования v8 Абонемент ($m)

При реализации периодического авто-заполнения маршрутных листов по графику (недельному) необходимо было просчитать стоимость всего периода, с условием выездов только по определенным дням. Заморачиваться с обходом результата не хотелось. Пришлось написать "Небольшой" запрос.

1 стартмани

03.03.2016    21237    1    Alexander.Shvets    5    

Простые радости жизни программиста 1С: выбор типа значения

Работа с интерфейсом Практика программирования v8 1cv8.cf Абонемент ($m)

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

1 стартмани

17.02.2016    55794    56    yuraos    18    

Отображение прогресса выполнения длительных операций в БСП и их отладка в текущем сеансе.

Практика программирования БСП (Библиотека стандартных подсистем) v8 1cv8.cf Абонемент ($m)

В статье описан способ исполнения длительных операций в конфигурациях, в которых используется библиотека стандартных подсистем, с визуализацией прогресса исполнения и отображения хода обработки данных. Также дается краткое описание процесса отладки длительных операций в текущем сеансе.

1 стартмани

17.02.2016    64191    209    balanton    23    

Яндекс.Деньги "Благотворительность"

Инструментарий разработчика Практика программирования v8 1cv8.cf Абонемент ($m)

Яндекс.Деньги теперь в 1С. Форма для приема благотворительных взносов. Форму легко сделать и вставить на любую страницу сайта или блога. Платежи будут приходить на ваш кошелек. На форме есть три способа платежа: из кошелька, с банковской карты, с баланса мобильного.

1 стартмани

16.02.2016    26329    8    Tatitutu    5    

Легкое создание пользователем внешних печатных форм методом Drag & Drop

Универсальные печатные формы Печатные формы документов v8 1cv8.cf Абонемент ($m)

Универсальная внешняя печатная форма (ПФ), которая позволяет пользователю, без знаний программирования и не заходя в конфигуратор, создать ПФ любого документа или справочника в Microsoft Word или OpenOffice Writer методом перетаскивания (Drag & Drop). Можно создавать любые ПФ с выводом табличных частей, реквизитов документа, а также вложенных реквизитов и контактной информации. Не требует изменения конфигурации. Работает на версии платформы 8.3 в типовых конфигурациях на управляемых формах (например, Бухгалтерия 3.0, УТ 11, УНФ, Розница, Документооборот), а также и в других конфигурациях на УФ, построенных на БСП.

2 стартмани

04.01.2016    41803    177    CyberCerber    40    

Мастер рассылки e-mail 2.2 для управляемых форм

Практика программирования Email v8 v8::УФ ERP2 БП3.0 УТ11 Абонемент ($m)

Для пользователей: переделанный из старый разработки под 8.2 с использованием библиотеки Мастер рассылки e-mail 2.2 (ERP, УТ, БП) (Только управляемые формы), который теперь может запускаться под любой версией платформы с разрешенными или запрещенными модальными/синхронными вызовами в конфигурации. Также удобный выбор e-mail и их владельцев с помощью отбора динамического списка по любым критериям и галочки исключения.

1 стартмани

29.12.2015    43916    20    milkers    4