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

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

Разработка - Практика программирования

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

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

1. Работа с расшифровками. Получение значений группировок для текущей ячейки

На данную тему уже есть публикации. Но универсальных процедур на эту тему я не нашел. 

Имеем отчет следующего вида

Когда пользователь кликает по ячейке требуется:

  • Определить, например, Подразделение, соответствующее текущей ячейке
  • Определить значения всех группировок, соответствующих текущей ячейке

Предлагаемые процедуры решают данную задачу за несколько строк, например, так:

Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
	СтандартнаяОбработка = Ложь;
	ОчиститьСообщения();
	
	// 1
	ТекущееПодразделение = ПолучитьЗначениеПоИмениГруппировкиВРасшифровке(
								"Подразделение", 
								ДанныеРасшифровки, 
								Расшифровка);
	Сообщить("Подразделение : " + ТекущееПодразделение);
	
	// 2
	ПоляРасшифровкиВВидеТаблицы = ПолучитьПоляРасшифровкиВВидеТаблицы(
								Расшифровка, 
								ДанныеРасшифровки);
	Для Каждого Строка Из ПоляРасшифровкиВВидеТаблицы Цикл
		ТекстСообщения = 
			"Уровень: " + Строка.Уровень + ";	" + 
			"Поле: " + Строка.Поле + ";	" + 
			"Значение: " + Строка.Значение + ";	";
			
			Сообщить(ТекстСообщения);
	КонецЦикла;
	
КонецПроцедуры

При выполнении данного кода получим примерно следующий вывод

Подразделение : Пискаревка

Уровень: 0;     Поле: Количество;       Значение: ;	
Уровень: 1;     Поле: Склад;            Значение: Розничный;	
Уровень: 2;     Поле: Подразделение;    Значение: Пискаревка;	
Уровень: 3;     Поле: Регион;           Значение: Северный р-н;	
Уровень: 1;     Поле: ВидТовара;        Значение: Аксессуары;	
Уровень: 1;     Поле: Товар;            Значение: Термос;

Отмечу несколько моментов:

  • Данные процедуры получают только значения группировок и не получают значения ресурсов. Например, поле Количество в описанном примере содержит значение NULL
  • Поле Уровень в таблице расшифровки рассчитывается от нижней группировки к верхней. Для горизонтальных и вертикальных группировок уровень считается раздельно
Сами процедуры
Функция ПолучитьЗначениеПоИмениГруппировкиВРасшифровке(ИмяГруппировки, ДанныеРасшифровки, ТекущаяРасшифровка) Экспорт
	
	ПоляРасшифровки = ПолучитьПоляРасшифровкиВВидеТаблицы(ТекущаяРасшифровка, ДанныеРасшифровки);
	НайденнаяСтрока = ПоляРасшифровки.Найти(ИмяГруппировки, "Поле");
	Если Не НайденнаяСтрока = Неопределено Тогда
		Возврат НайденнаяСтрока.Значение;
	КонецЕсли;
	
	// Пример вызова:
	//Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
	//	Склад = ПолучитьЗначениеПоИмениГруппировкиВРасшифровке("Склад", ДанныеРасшифровки, Расшифровка);
	//КонецПроцедуры
КонецФункции

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

Процедура ДобавитьПолеРасшифровкиВТаблицуРекурсивно(ТаблицаРасшифровки, ТекущаяРасшифровка, ДанныеРасшифровки, Уровень = 0)
	
	ЭлементРасшифровки = ДанныеРасшифровки.Элементы[ТекущаяРасшифровка];
	
	УровеньРодителя = Уровень;
	Если ТипЗнч(ЭлементРасшифровки) = Тип("ЭлементРасшифровкиКомпоновкиДанныхПоля") Тогда
		УровеньРодителя = УровеньРодителя + 1;
		
		МассивПолей = ЭлементРасшифровки.ПолучитьПоля();
		Для Каждого Поле Из МассивПолей Цикл
			НоваяСтрока = ТаблицаРасшифровки.Добавить();
			НоваяСтрока.Поле = Поле.Поле;
			НоваяСтрока.Значение = Поле.Значение;
			НоваяСтрока.Уровень = Уровень;
			НоваяСтрока.Идентификатор = ЭлементРасшифровки.Идентификатор;
			
		КонецЦикла;
	КонецЕсли;
	
	МассивРодителей = ЭлементРасшифровки.ПолучитьРодителей();
	Для Каждого Родитель Из МассивРодителей Цикл
		ДобавитьПолеРасшифровкиВТаблицуРекурсивно(
				ТаблицаРасшифровки, 
				Родитель.Идентификатор,
				ДанныеРасшифровки,
				УровеньРодителя);
	КонецЦикла;
	
КонецПроцедуры

2. Получение области шапки в отчете СКД

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

Рассмотрим типовую задачу. Есть отчет следующего вида.


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

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
	СтандартнаяОбработка = Ложь;
	ВывестиСКДВТабличныйДокумент(
					СхемаКомпоновкиДанных, 
					ДокументРезультат, 
					КомпоновщикНастроек);
	
	МассивОбластейШапок = ПолучитьМассивОбластейШапокТабличногоДокументаСКД(ДокументРезультат);
	МассивОбластейШапок[0].ГоризонтальноеПоложение = ГоризонтальноеПоложение.Центр;
	
КонецПроцедуры
Сами процедуры
Функция ПолучитьМассивОбластейШапокТабличногоДокументаСКД(ДокументРезультат) Экспорт
	МассивОбластей = Новый Массив;
	
	Для НомерСтроки = 1 По ДокументРезультат.ВысотаТаблицы Цикл
		Если НЕ ЭтоЯчейкаШапки(ДокументРезультат.Область(НомерСтроки, 1)) Тогда
			Продолжить;
		КонецЕсли;
		
		КоординатыПравогоНижнегоУглаШапки = ПолучитьКоординатыПравогоНижнегоУглаШапки(ДокументРезультат, НомерСтроки);
		МассивОбластей.Добавить(
				ДокументРезультат.Область(
							НомерСтроки,
							1, 
							КоординатыПравогоНижнегоУглаШапки.Верх,
							КоординатыПравогоНижнегоУглаШапки.Лево )
								);
		
		НомерСтроки = КоординатыПравогоНижнегоУглаШапки.Верх;
	КонецЦикла;
	
	Возврат МассивОбластей;
КонецФункции
Функция ЭтоЯчейкаШапки(Ячейка)
	Возврат Ячейка.РежимИзмененияРазмераКолонки = РежимИзмененияРазмера.БыстроеИзменение;
КонецФункции
Функция ПолучитьКоординатыПравогоНижнегоУглаШапки(ТабличныйДокумент, ПерваяСтрокаШапки)
	
	ПоследняяСтрокаШапки = ПерваяСтрокаШапки;
	Для НомерСтроки = ПерваяСтрокаШапки+1 По ТабличныйДокумент.ВысотаТаблицы Цикл
		Если НЕ ЭтоЯчейкаШапки(ТабличныйДокумент.Область(НомерСтроки,1)) Тогда
			Прервать;
		КонецЕсли;
		ПоследняяСтрокаШапки = НомерСтроки;
	КонецЦикла;
	
	Для НомерКолонки = -ТабличныйДокумент.ШиринаТаблицы По -1 Цикл
		Если ЭтоЯчейкаШапки(ТабличныйДокумент.Область(ПерваяСтрокаШапки, -НомерКолонки)) Тогда
			Прервать;
		КонецЕсли;
	КонецЦикла;
	
	Возврат Новый Структура("Верх,Лево", ПоследняяСтрокаШапки, -НомерКолонки);
	
КонецФункции

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

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

Процедура ОбъединитьМассивТабличныхДокументовВФайлПДФ(МассивТабличныхДокументов, ИмяФайла) Экспорт
	
	Пакет = Новый ПакетОтображаемыхДокументов;
	
	Для каждого ТабличныйДокумент из МассивТабличныхДокументов Цикл
		ЭлементПакета = Пакет.Состав.Добавить();
		
		ДокументРезультат = Новый ТабличныйДокумент;
		ДокументРезультат.Вывести(ТабличныйДокумент); // если не делать такой финт, то в некоторых случаях программа падает с системной ошибкой
		ЗаполнитьЗначенияСвойств(ДокументРезультат, ТабличныйДокумент);
		
		ЭлементПакета.Данные = ПоместитьВоВременноеХранилище(ДокументРезультат);
	КонецЦикла;
	
	Пакет.ЗаписатьФайлДляПечати(ИмяФайла);
	
КонецПроцедуры

Заключение

Все процедуры тестировались на версии платформы 8.3. 

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

Уточнение 

Хочу особо отметить следующее: в этой и предыдущей статье я привел несколько процедур по постобработке табличного документа СКД. НО я также, как и остальные негативно высказавшиеся комментаторы стараюсь и очень рекомендую всем разработчикам ПО МАКСИМУМУ задействовать возможности СКД, и не использовать доработку кодом, если можно обойтись без этого. 

Постобработка табличного документа СКД - это зло. ОДНАКО, существуют случаи, когда без нее не обойтись. И тогда постобработка уже становится не "злом", а "крайней мерой". В нашей среде принято ссылаться на популярных авторов, которые описывают возможности СКД. Но при этом упускается из вида, что эти возможности покрывают не все возможные случаи, с которыми приходится сталкиваться на практике. Когда напишешь 30-40 отчетов на СКД для капризных клиентов, понимаешь что у этого инструмента есть ограничения. Так вот эти ограничения НИГДЕ не описаны. Сталкиваясь с ними каждый разработчик начинает придумывать свой велосипед. Я постарался восполнить данный пробел и описал решения таких задач, которые нельзя (или очень трудоемко) решать настройками. Существенным недостатком моих двух публикаций является то, что я предлагаю решение проблемы без ее подробного описания. Из-за этого возникает ряд непониманий со стороны других разработчиков, которые с данными проблемами не сталкивались, или им удавалось их обойти (но не  решить)

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

Наименование Файл Версия Размер
Пример к публикации 8.3 (ОФ+УФ).erf

.erf 18,75Kb
36
.erf 18,75Kb 36 Скачать

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

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. r0610201 272 27.09.16 08:51 Сейчас в теме
Выровнять заголовки по центру можно вообще без кода при помощи условного оформления.
2. json 27.09.16 09:15 Сейчас в теме
(1) r0610201, спасибо за комментарий. Но предполагаю, что вы невнимательно прочитали публикацию.
Существует ряд случаев, когда условным оформлением это сделать проблематично. Об этом сказано в статье.
German_Tagil; +1 Ответить
3. soulsteps 74 27.09.16 11:14 Сейчас в теме
В этой процедуре

Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ОчиститьСообщения();

// 1
ТекущееПодразделение = ПолучитьЗначениеПоИмениГруппировкиВРасшифровке(
"Подразделение",
ДанныеРасшифровки,
Расшифровка);
Сообщить("Подразделение : " + ТекущееПодразделение);

// 2
ПоляРасшифровкиВВидеТаблицы = ПолучитьПоляРасшифровкиВВидеТаблицы(
Расшифровка,
ДанныеРасшифровки);
Для Каждого Строка Из ПоляРасшифровкиВВидеТаблицы Цикл
ТекстСообщения =
"Уровень: " + Строка.Уровень + "; " +
"Поле: " + Строка.Поле + "; " +
"Значение: " + Строка.Значение + "; ";

Сообщить(ТекстСообщения);
КонецЦикла;

КонецПроцедуры

не обнаружил передачу (локальное определение) переменной ДанныеРасшифровки? Хотя идет обращение по коду:
ТекущееПодразделение = ПолучитьЗначениеПоИмениГруппировкиВРасшифровке(
"Подразделение",
ДанныеРасшифровки,
Расшифровка);
Обработку не скачивал, смотрю только код. Если это какая-то глобальная переменная или параметр формы, просьба уточнить, возможно ДанныеРасшифровки = Расшифровка?
user717534; +1 Ответить
4. json 27.09.16 11:18 Сейчас в теме
(3) soulsteps,
Расширение формы отчета (Report form extension)
ДанныеРасшифровки (DetailsData)
Использование:

Чтение и запись.
Описание:

Тип: ДанныеРасшифровкиКомпоновкиДанных.
Содержит данные расшифровки последнего выполненного отчета.

Доступность:

Толстый клиент.

В тексте приведен пример для обычных форм. В управляемых формах в этой переменной хранится не сам объект, а ссылка на него во временном хранилище. Эти нюансы учтены в приложенном к статье примере
5. soulsteps 74 27.09.16 13:42 Сейчас в теме
(4) я это и хотел услышать (уточнение))
user717534; +1 Ответить
14. ol_xak 16 06.02.19 17:42 Сейчас в теме
(3)А ведь вопрос был правильный
15. json 2849 07.02.19 08:34 Сейчас в теме
(14) ответил же на вопрос. Или ответ не понятен?
В управляемых формах есть реквизит формы ДанныеРасшифровки, в котором хранится адрес во временном хранилище, а в обычных формах в этом реквизите хранятся сами данные

Для обычных форм:
	// 1
	ТекущееПодразделение = ПолучитьЗначениеПоИмениГруппировкиВРасшифровке(
								"Подразделение", 
								ДанныеРасшифровки, 
								Расшифровка);


Для управляемых:
	// 1
	ТекущееПодразделение = ПолучитьЗначениеПоИмениГруппировкиВРасшифровке(
								"Подразделение", 
								ПолучитьИзВременногоХранилища(ДанныеРасшифровки), 
								Расшифровка);
16. ol_xak 16 07.02.19 15:47 Сейчас в теме
(15) Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
откуда в данной процедуре появляется переменная ДанныеРасшифровки
17. json 2849 07.02.19 15:59 Сейчас в теме
(16) читайте внимательно предыдущее сообщение. Там все разжевано.
В управляемых формах есть реквизит формы ДанныеРасшифровки
18. ol_xak 16 07.02.19 16:51 Сейчас в теме
(17)А в обычной форме? Я не критикую, просто пытаюсь использовать предложенный метод, но не получается. Где взять ДанныеРасшифровки в процедуре РезультатОбработкаРасшифровки? Использую неуправляемую форму обработки.
19. json 2849 07.02.19 16:58 Сейчас в теме
(18) по обычной форме цитата из справки

Расширение формы отчета (Report form extension)
ДанныеРасшифровки (DetailsData)
Использование:

Чтение и запись.
Описание:

Тип: ДанныеРасшифровкиКомпоновкиДанных.
Содержит данные расшифровки последнего выполненного отчета.

Доступность:

Толстый клиент.
Показать


То есть расширение формы отчета имеет такой реквизит ДанныеРасшифровки. В форме отчета он есть по умолчанию (если основной реквизит формы - внешний или внутренний отчет).

Разница между параметрами Расшифровка и ДанныеРасшифровки следующая:
в ДанныеРасшифровки - хранятся данные по всему сформированному отчету
в Расшифровка - хранится ключ, по которому можно искать в ДанныеРасшифровки. Этот ключ хранится в значении ячейки, по которой кликает пользователь
6. Поручик 4485 27.09.16 19:59 Сейчас в теме
(0) Не обращай внимания на критиканов.
user717534; +1 Ответить
7. PrinzOfMunchen 78 29.09.16 05:19 Сейчас в теме
Недавно писал нечто подобное, описанному в первом примере. Только мне надо было получить ВСЕ значения полей группировки и детальных записей (без ресурсов) в виде плоской таблицы, где колонки - это выбранные поля. Знатные извращения...))
8. Nuuq 76 02.11.16 13:13 Сейчас в теме
А есть пример по образу сделать получение области итогов СКД по вертикали и общие по горизонтали - программно добавить туда новое поле и заполнить его?
9. Yashazz 3734 07.11.16 21:01 Сейчас в теме
Забавно. Тоже буквально вчера понадобилось выгрести значения текущей расшифровки, всех полей уровня и, естесссно, родительских группировок. Тоже сделал через таблицу значений. Подумывал сериализовать "ДанныеРасшифровки" и поиграться с её xdto, но там не оказалось ничего интересного. Остальное - тоже, в общем, очевидные вещи.

Автор прав, пост-обработка это зло. Но иногда зла не хватает)) Могу от себя добавить, что ввиду непредсказуемости внешнего вида результатного табличного документа делаю такие пост-обработки, привязываясь к специально заданным расшифровкам, перегоняя моксель в его сериализованный вид xml и орудуя уже в нём. Так хоть меньше шансов обломаться, если юзверь перенастроит СКД. Так что рекомендую отказаться от дикости вроде "ВысотаТаблицы" и работать через xpath или объекты DOM. Ей-ей, надёжнее)

10. rasswet 82 09.11.16 08:07 Сейчас в теме
спасибо, интересные вещи.
11. German_Tagil 27 10.11.16 20:33 Сейчас в теме
12. Makushimo 157 11.11.16 06:31 Сейчас в теме
13. AzagTot 39 11.11.16 12:00 Сейчас в теме
Спасибо! Очень полезный цикл статей.
А кто знает как можно сдвинуть таблицу на несколько колонок? Чтобы вывод начинался не с первой колонки, а, например, с 3-й. При этом другие таблицы в отчете должны остаться без изменения.
Оставьте свое сообщение

См. также

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

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

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

5 стартмани

21.12.2020    3957    19    huxuxuya    11    

Свойства общих модулей

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

Надоело каждый раз искать, какие общие модули глобальные? какие повторно используемые? хочется взглянуть на все контексты выполнения?

1 стартмани

вчера в 12:45    256    0    kuzyara    2    

Отчет с настройкой роли поля СКД со свойством период

Практика программирования Работа с интерфейсом v8 v8::СКД Платформа 1C v8.2 1cv8.cf УУ Абонемент ($m)

Отчёт демонстрирует правильную настройку роли СКД со свойством «Период», по которой рассчитывается остаток. Этот отчет тестировался на конфигурации Управление торговым предприятием для Казахстана, редакции 2.0.19.2. Может работать на любой конфигурации, если имеется регистр накопления «ТоварыНаСкладах».

1 стартмани

01.04.2021    558    0    softmaker    0    

Расшифровка СКД. Фильтр отчета по диапазону чисел. Переопределение обработки расшифровки. Не модальный режим

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

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

1 стартмани

08.02.2021    935    1    denmon88    1    

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

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

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

1 стартмани

03.07.2019    23622    6    m-rv    90    

Простой пример отчета на СКД. Программное формирование, расшифровка, работа с параметрами и отборами

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

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

1 стартмани

15.10.2020    3032    6    Stivens    10    

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

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

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

3 стартмани

29.09.2020    9841    61    sapervodichka    43    

Быстрое формирование наборов данных Объект схемы СКД

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

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

1 стартмани

05.07.2020    5391    5    Алексей Воробьев    16    

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

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

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

1 стартмани

01.06.2018    32865    88    m-rv    58    

Построение графика в диапазоне изменений без точек

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

График изменений каких-либо величин во всем диапазоне и в области изменения, без точек.

1 стартмани

30.05.2020    2262    2    yc_2011    4    

Метод восстановления битых ссылок в настройках СКД при консольно-конфигураторной разработке отчетов

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

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

1 стартмани

30.04.2020    5453    0    zaxarovsky    4    

Задачка: Список всех документов за заданный период, используя СКД

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

Вывести все документы за заданный период, используя СКД.

2 стартмани

11.03.2020    3373    5    MaxxiMiliSan    9    

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

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

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

1 стартмани

08.02.2018    30867    20    mvxyz    17    

Получение курса валюты за период с помощью СКД

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

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

1 стартмани

04.02.2020    3439    1    KawaNoNeko    2    

Преобразование объекта Отбор компоновки данных в Запрос

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

Преобразует объект Отбор компоновки данных в объект Запрос (с заполнением текста и параметров).

1 стартмани

20.12.2019    4725    6    okon-teh    2    

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

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

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

3 стартмани

04.09.2019    29969    27    Stepa86    46    

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

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

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

1 стартмани

28.12.2015    30487    72    vasvl123    9    

Проверка несуществующих полей в настройках СКД

Практика программирования Работа с интерфейсом Разработка v8 v8::СКД ERP2 УТ11 КА2 Абонемент ($m)

Обработка находит все поля настроек СКД, которые утратили свою актуальность Подходит для УТ 11, ERP, КА 2.

1 стартмани

20.06.2019    5600    3    MuI_I_Ika    2    

Пример внешней обработки с вызовом типового отчета на СКД и передачей ему настроек и вывода результата в таблицу значений (в частности, для новичков)

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

Разрабатывалась на 1С:Зарплата и управление персоналом в кредитных организациях, редакция 3.1 (3.1.5.407), поэтому использует типовой отчет Состояние штатного расписания, но технология работает для любой конфигурации. Пример внешней обработки с вызовом типового отчета на СКД "Состояние штатного расписания" и передачей ему настроек, изменения имен колонок после выполнения на имена указанные в "Пользовательских полях" или "заголовках" и вывода результата в таблицу значений.

1 стартмани

21.03.2019    7290    13    pavel_pss    0    

Вывод характеристик и их значений в динамический список

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

Если в запросе динамического списка используется конструкция {ХАРАКТЕРИСТИКИ ...}, то как вывести на форму колонки с характеристиками?

1 стартмани

22.02.2019    7284    3    kasper076    3    

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

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

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

1 стартмани

13.09.2018    24312    13    RocKeR_13    16    

Модуль, реализующий хранение настроек отчетов СКД в типовом регистре "Сохраненные настройки"

Практика программирования v8 v8::СКД КА1 БП2.0 ЗУП2.5 УТ10 БП1.6 Абонемент ($m)

Модуль, обеспечивающий хранение настроек отчетов на СКД в типовом регистре "Сохраненные настройки", присутствующем в конфигурациях УПП 1.2, 1.3, УТ 10.3, БП 2.0 и т.д.

1 стартмани

12.01.2019    7206    0    lunjio    0    

Передача набора данных типа Объект в отчет СКД

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

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

1 стартмани

12.11.2018    33586    8    evgen7938    4    

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

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

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

1 стартмани

27.08.2018    44480    63    dsdred    17    

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

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

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

5 стартмани

09.08.2018    31330    28    informa1555    26    

Примеры программной работы с СКД, а также программного создания управляемой формы

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

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

1 стартмани

12.08.2018    7281    29    MaxCreator    0    

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

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

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

1 стартмани

17.07.2018    56454    21    kalyaka    16    

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

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

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

1 стартмани

22.05.2018    35106    11    SITR-utyos    13    

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

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

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

1 стартмани

14.08.2016    50913    36    Demanoidos    60    

Условное оформление дерева значений на управляемой форме

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

Пример использования условного оформления дерева значений для создания красивого фильтра на форме.

1 стартмани

28.04.2018    18870    30    Kutuzov    1    

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

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

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

2 стартмани

05.03.2018    21783    20    simy4    14    

Альтернатива ОтборуСтрок() с возможностями условий отборов СКД

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

Типовой ОтборСтрок() использует только условия на равенство. Для таблицы формы, источником которой является "ДеревоЗначений" возможность отбора вообще отсутствует. Но есть возможность использовать всю широту возможностей отборов СКД.

1 стартмани

04.02.2018    7685    4    mszsuz    5    

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

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

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

1 стартмани

01.10.2015    55607    35    ildarovich    41    

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

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

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

1 стартмани

06.12.2017    29388    56    kwazi    6    

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

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

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

1 стартмани

28.11.2017    55991    15    swimdog    46    

Макет в СКД - пример всех возможных типовых вариантов

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

Макет СКД: наглядное представление того, что, как и куда выводится при типовых настройках.

1 стартмани

09.11.2017    24167    77    freelancer    4    

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

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

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

2 стартмани

05.06.2016    61819    11    wowik    32    

Telegram-боты

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

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

1 стартмани

01.09.2017    37064    140    PLAstic    59    

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

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

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

1 стартмани

07.08.2017    25185    21    sasha777666    64    

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

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

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

1 стартмани

30.05.2017    147552    13    signum2009    48    

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

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

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

1 стартмани

31.03.2017    16745    18    Vin_Tik    0    

Расшифровка табличного документа без расширения отчета

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

Быстрая расшифровка в табличном документе вне формы отчета

1 стартмани

29.05.2017    9924    7    smirnov.es    2    

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

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

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

1 стартмани

13.03.2017    34536    119    romasna    49    

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

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

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

1 стартмани

08.02.2017    33300    137    kiv1c    18