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

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

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

СКД Объединение ячеек Процедуры Функции

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

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

1. Объединение, скрытие, замена

Пусть требуется получить отчет следующего вида


Этот отчет имеет несколько особенностей:
- Объединенные ячейки в шапке
 - Количество и состав колонок в группе “Бонусы” - динамические. Выводятся только, если заполнено хотя бы для одного сотрудника в отчете. Если, например, никто из попавших в отчет сотрудников не получил надбавку за сверхурочные, то этой колонки в отчете быть не должно. Проектов в группе “за проекты” может быть неограниченное количество.
- Дополнительные требования к порядку полей: колонка “Оклад” должна выводиться первой, “Всего по сотруднику” - последней

В консоли можно получить следующий результат


Далее приведены универсальные процедуры, с помощью которых можно:
1. Объединить ячейки “Бонусы” и “За проекты” в шапке отчета с помощью процедуры ОбъединтьЯчейкиВТабличномДокументе()
2. Скрыть заголовок ресурса “Сумма” с помощью процедуры СкрытьСтрокиВТабличномДокументе()

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

	СтандартнаяОбработка = Ложь;

	ВывестиСКДВТабличныйДокумент(СхемаКомпоновкиДанных, ДокументРезультат, КомпоновщикНастроек);

	Маркер = "Бонусы";
	ОбъединитьЯчейкиВТабличномДокументе(ДокументРезультат, Маркер);

	Маркер = "За проекты";
	ОбъединитьЯчейкиВТабличномДокументе(ДокументРезультат, Маркер);

	Маркер = "Сумма";
	СкрытьСтрокиВТабличномДокументе(ДокументРезультат, Маркер);

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

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

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

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

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

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

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

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

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

3. Вывод рядом двух независимых таблиц

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

Функция ПрисоединитьТабличныйДокументКТабличномуДокументу(ТабличныйДокументОсновной, ТабличныйДокументПрисоединяемый)
	// идея взята с форума: http://forum.infostart.ru/forum86/topic157420/message1610993/#message1610993
	ТабличныйДокументОбъединенный = Новый ТабличныйДокумент;
	
	Область = ТабличныйДокументОсновной.ПолучитьОбласть(1,1, ТабличныйДокументОсновной.ВысотаТаблицы, ТабличныйДокументОсновной.ШиринаТаблицы);
	
	ТабличныйДокументОбъединенный.Вывести(Область);
	ТабличныйДокументОбъединенный.Присоединить(ТабличныйДокументПрисоединяемый);
	
	Возврат ТабличныйДокументОбъединенный;
КонецФункции

4. Установка собственного формата для табличного документа

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

Процедура ЗадатьФорматСтрокВТабличномДокументе(пТабличныйДокумент)
	// задает индивидуальный формат строк для табличного документа, сохраняя ширину колонок при выводе его в другой табличный документ
	
	пТабличныйДокумент.Область(1,,пТабличныйДокумент.ВысотаТаблицы).СоздатьФорматСтрок();
	
КонецПроцедуры

Процедуры тестировались на платформе 8.3 в режиме совместимости с 8.2 и без режима совмместимости, а также на платформе 8.1.

К статье прилагаются внешние отчеты со сводным примером (запускается в любой конфигурации 8.2/8.3 на обычных или управляемых формах, также отчет на 8.1) 

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

Наименование Файл Версия Размер
Примеры к статье (8.3)

.erf 12,93Kb
07.09.16
90
.erf 12,93Kb 90 Скачать
Примеры к статье (8.1)

.erf 15,49Kb
07.09.16
9
.erf 15,49Kb 9 Скачать

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

Комментарии
Избранное Подписка Сортировка: Древо развёрнутое
Свернуть все
1. Поручик 4411 03.09.16 20:58 Сейчас в теме
Очнь хорошо. Пригодится для использования. Некоторые процедуры у меня тоже есть, с незначительными отличиями в реализации.
2. Makushimo 155 05.09.16 09:59 Сейчас в теме
3. Новиков 291 05.09.16 10:34 Сейчас в теме
4. LexSeIch 206 05.09.16 10:38 Сейчас в теме
Спасибо за статью. Информацию взял на заметку - уверен, что пригодится.
5. kser87 2043 05.09.16 10:42 Сейчас в теме
Почему вместо этого:

Маркер = "Бонусы";
	ОбъединтьЯчейкиВТабличномДокументе(ДокументРезультат, Маркер);


нельзя использовать Группы полей? А вместо скрытия сумм использовать макеты?

И еще наблюдение: на больших объемах данных это:

ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
ПроцессорВывода.УстановитьОбъект(Результат);
	
ПроцессорВывода.Вывести(ПроцессорКомпоновки);


Работает значительно медленнее, чем это:

ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
	ПроцессорВывода.УстановитьОбъект(ДеревоРезультат);
	
	ПроцессорВывода.НачатьВывод();
	
	ЭлементРезультат = ПроцессорКомпоновкиДанных.Следующий();
	
	Пока ЭлементРезультат <> Неопределено Цикл
		
		ПроцессорВывода.ВывестиЭлемент(ЭлементРезультат);
		ЭлементРезультат = ПроцессорКомпоновкиДанных.Следующий();
		
	КонецЦикла;
	
	ПроцессорВывода.ЗакончитьВывод();
Показать
dj_serega; zarucheisky; kuzyara; Yashazz; tehas; корум; Поручик; +7 Ответить
7. Yashazz 3269 05.09.16 19:48 Сейчас в теме
(5) kser87, эхма, почему... да потому что не умеют, видимо, иначе, как курочить готовый моксель. Даже Хрусталёва не впрок, ага.
8. json 05.09.16 19:55 Сейчас в теме
(5) kser87, благодарю за критику.
Со второй частью комментария соглашусь. Редко попадаются отчеты, в которых скорость вывода через конструкцию Вывести() не устраивает заказчика. Но когда попадется, обязательно проверю предложенный вами способ.

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

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

Прикрепленные файлы:
6. Yashazz 3269 05.09.16 19:45 Сейчас в теме
Практически всё - нелепый трюизм и лютый баян. Ламерски беспощадная работа с табличным документом, за которую вообще убивать надо. Не умеете работать с настройками СКД - нечего позориться. Ну и заимствования, да.
А восторгов-то... На целую кучу плюсов... Воистину, скоро "Hello world" будет вызывать восторги.
palsergeich; kuzyara; FirePyres; kser87; +4 9 Ответить
10. json 05.09.16 20:06 Сейчас в теме
(6) Yashazz, (7) Yashazz, в данной статье задачи упрощены для более наглядной демонстрации предлагаемых процедур. Поэтому некорректно делать вывод о сложности решаемых задач по сложности примеров, в которых описываются приемы для их решения.
11. json 05.09.16 22:40 Сейчас в теме
(6) Yashazz,
Не умеете работать с настройками СКД - нечего позориться.


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

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

Сколько из трех случаев Вы сможете реализовать стандартными средствами СКД?
Прикрепленные файлы:
ВнешнийОтчет1.erf
12. kser87 2043 06.09.16 00:03 Сейчас в теме
(11) смешные примеры) случаи 1 и 2. Вы про горизонтальные группировки не знаете что-ли?

Простой пример (вместо "Выбора" могут быть элементы справочника. Для наглядности так сделал)

Выбор когда Условие 1 тогда
"Мебель"
Когда Условие2 Тогда
"Продукты"
...
n вариантов

Конец как ГоризонтальнаяГруппировка

Потом это поле выбираете в качестве горизонтальной группировки в таблице. Еще и плюсик заработаете от того, что оно сворачиваемое и с итогами (возможно).

Случай 3 видимо не реализуем настройками СКД. Однако, следующее требование пользователя будет таким: выведите итог по виду товара. И куда вы его впихнете, позвольте узнать? От такого расположения группировок потому и отказались. Наиболее близкий вариант это поставить в параметре "Расположение полей группировок" значение "Отдельно и только в итогах".

Вообще когда вы корячите макеты СКД помните, что вы с вероятностью 99% что-нибудь сломаете. То есть не будут работать расшифровки, группировки и т.д. и т.п.

В вашем случае 1 недостаток сразу видно. В примере 1 можно вынести подразделение и сотрудника в отдельную группировку. Таблицу сделайте подчиненной сотруднику и в качестве группировки сделайте например Вид расчета. В таком случае, при количестве сотрудников от 1000 ваш отчет просто "умрет" на отрисовке макета. Будет формироваться минут 30, а вэб-морда тупо вылетит.

Да и вообще все примеры хорошо сработают лишь на небольших объемах данных. Нужно использовать механизмы СКД. Для замены текста точно УО нужно.
13. json 06.09.16 00:09 Сейчас в теме
(12) kser87, из описания неточно понятно, что именно вы имеете ввиду. К посту 11 приложен внешний отчет. Попробуйте реализовать вашу идею в этом отчете и выложить. Чтобы можно было увидеть, что вы смогли получить требуемый результат без костылей. Можно переставлять так, как считаете правильным. Главное получить ожидаемый результат в виде готового табличного документа.

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

Вообще когда вы корячите макеты СКД помните, что вы с вероятностью 99% что-нибудь сломаете. То есть не будут работать расшифровки, группировки и т.д. и т.п.

Вероятность вы взяли из головы. Расшифровки в шапке - дело редкое.

В вашем случае 1 недостаток сразу видно. В примере 1 можно вынести подразделение и сотрудника в отдельную группировку. Таблицу сделайте подчиненной сотруднику и в качестве группировки сделайте например Вид расчета.

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


В таком случае, при количестве сотрудников от 1000 ваш отчет просто "умрет" на отрисовке макета. Будет формироваться минут 30, а вэб-морда тупо вылетит.

Снова ваше предположение. Вы не можете знать при каком количестве сотрудников она вылетит, т.к. вы не провели эксперимент. Почему вы решили, что 30 минут а не 30 часов? Какое значение имеет количество сотрудников [строк отчета], если обработка производится только в шапке отчета? Почему нельзя формировать табличный документ на сервере?

По поводу вывода в отчет большого количества данных - я спорить не буду. Вопрос в другом: как часто необходимо выводить в отчет большое количество данных? Как часто в этом случае нужно делать сложные группировки? Действительно ли нельзя оптимизировать мою схему при работе с большим количеством данных?
В моей практике таких отчетов наберется максимум 5%. И какая-то малая доля из них будет со сложными группировками. Поэтому ваш аргумент по поводу больших данных не отменяет применимости методов, описанных в данной статье.

Также хочу уточнить, т.к. может быть это не понятно из статьи. Данная публикация описывает приемы решения задач, которые нельзя сделать настройками СКД. В посте 11 я выложил такие задачи. Поэтому я ожидаю увидеть работающий пример, который доказывает, что описанные случаи все таки решаются настройками. Но пока я вижу, что Ваши высказывания, а также высказывания уважаемого Yashazz содержат больше предположений и эмоций, чем фактов
manu; fomix; eeeio; PowerBoy; dj_serega; headMade; uri1978; yku; Трактор; +9 Ответить
9. Yashazz 3269 05.09.16 19:57 Сейчас в теме
А автор знает про разные макеты для разных фрагментов данных СКД?
14. rus128 2 07.09.16 10:27 Сейчас в теме
Все хорошо, но огорчает опечатка в исходнике - название процедуры ОбъединтьЯчейкиВТабличномДокументе().
Или так было задумано? :-)
15. json 07.09.16 10:41 Сейчас в теме
(14) rus128, спасибо за замечание.
Поправил в тексте статьи и в прилагаемом примере
16. stol6 49 07.09.16 10:58 Сейчас в теме
На какой версии платформы это все дело тестировалось?
17. json 07.09.16 12:04 Сейчас в теме
(16) stol6, хороший вопрос.
Добавил эту информацию в конец статьи.
Одно замечание: описанные процедуры работают на платформе 8.1 без изменения, но т.к. в ней отсутствует обработчик ПриКомпоновкеРезультата(), а также есть еще пара нюансов, то незначительно изменил сводный пример для этой платформы
18. sudmorsh 55 07.09.16 17:42 Сейчас в теме
Спасибо за статью.Уверен, что пригодится.
19. Eriksson 09.09.16 22:12 Сейчас в теме
Как раз задумался о том, как бы реализовать на практике через СКД, пригодится! Спасибо!
20. lomanos 35 17.02.17 04:22 Сейчас в теме
21. mafia 46 27.09.17 23:51 Сейчас в теме
Гениально. Однозначно +5
22. 1C82 45 26.12.17 01:52 Сейчас в теме
23. web_profiler 15.02.19 11:09 Сейчас в теме
Помогите плиз. Третий час туплю
СКД два набора данных - запросы, второй вывожу как колонки дат и их суммы. Связь наборов по контрагенту и датам.
Хочу окультурить вывод дат и сверху над датами (как бы в шапке) написать "Даты ожидаемых платежей".
Че делать - уже всю голову сломал, и группы где угодно создавал (выводит название этой группы над КАЖДОЙ датой) и че только не делал.
Не получается окультурить отчет, помогите плиз
http://i.piccy.info/i9/5b3378e75c26f7bdd38e4e2af709e936/1550217474/11481/12­97933/khelp11.png

http://i.piccy.info/i9/3b1297de8ba10b23160a9e99bdddcef2/1550217609/34019/12­97933/khelp12.png
Оставьте свое сообщение

См. также

Безопасная работа с транзакциями во встроенном языке Промо

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

Разбираемся с опасностями использования транзакций во встроенном языке 1С. Познаем ошибку "В данной транзакции уже происходили ошибки". Учимся защищаться от них.

1 стартмани

25.03.2019    30618    10    tormozit    44    

Настройка колонок для вывода в отчет

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

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

1 стартмани

12.07.2020    758    0    user847462    0    

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

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

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

1 стартмани

05.07.2020    2070    3    Алексей Воробьев    16    

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

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

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

1 стартмани

30.05.2020    677    1    yc_2011    2    

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

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

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

1 стартмани

03.07.2019    17432    4    m-rv    86    

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

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

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

1 стартмани

30.04.2020    2203    0    zaxarovsky    4    

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

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

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

1 стартмани

11.03.2020    1488    0    MaxxiMiliSan    7    

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

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

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

1 стартмани

01.06.2018    27695    86    m-rv    57    

СКД: штрихкоды в несколько колонок

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

СКД. Ресурсы в несколько колонок, на примере РС Штрихкоды номенклатуры.

1 стартмани

02.03.2020    1695    1    shetill    0    

СКД: красивые надписи в заголовках колонок

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

Необходимо немного исправить вывод надписей в заголовках колонок, сделать более читаемый вариант. Как это сделать?

2 стартмани

27.02.2020    8693    7    wowik    36    

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

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

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

1 стартмани

04.02.2020    2048    0    KawaNoNeko    2    

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

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

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

1 стартмани

08.02.2018    25613    19    mvxyz    17    

Отчет на СКД с выводом остатков по всем датам периода для УТ 10.3 (обычные формы)

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

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

1 стартмани

23.12.2019    2536    2    jump0    0    

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

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

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

1 стартмани

20.12.2019    2811    3    okon-teh    2    

Программное добавление параметров редактирования СКД

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

В данной публикации приводится пример программного добавления параметров редактирования для поля выборки в СКД.

1 стартмани

25.11.2019    4712    1    Isonic    7    

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

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

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

1 стартмани

28.12.2015    25219    66    vasvl123    9    

Расчет сложных итогов СКД

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

Малоизвестный прием для расчета итогов в отчетах на СКД.

1 стартмани

05.08.2019    15130    12    masterkio    10    

Многоуровневая нумерация в отчете СКД (программный вывод)

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

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

1 стартмани

01.07.2019    6471    6    lmnlmn    7    

Иерархическая нумерация в отчете СКД с помощью макета поля

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

Представляю Вашему вниманию вариант решения задачи нумерации строк иерархического отчета на СКД.

1 стартмани

28.06.2019    6565    5    Isonic    14    

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

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

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

1 стартмани

13.09.2018    18956    13    RocKeR_13    16    

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

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

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

1 стартмани

20.06.2019    3878    3    MuI_I_Ika    2    

Простые примеры сложных отчетов на СКД

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

Подписи в отчете. Особенности соединения наборов: как соединить несоединяемое. Остатки на дату и обороты по месяцам в одном отчете. Курс валюты на каждую дату без группировок и соединений в запросе. Отчет с произвольными колонками и с произвольной последовательностью. "Неадекватный отчет".

1 стартмани

12.06.2019    27015    19    Hatson    22    

Поле "Отбор" в управляемой форме используя СКД

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

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

1 стартмани

17.05.2019    7401    9    artms    0    

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

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

Для чего это нужно. Например, нужно в одной базе получить какой-либо показатель из другой базы. Этот показатель вычисляется в каком-либо сложном отчете, который написан на СКД. Можно, конечно, "скопипастить" текст запроса из другой базы, немного подправить его и выполнять в том же COM подключении. Но с этим теряется гибкость: если отчет изменился, то нужно помнить о том, что где-то есть его "немного модифицированная" копия. В статье будет рассмотрен пример получения данных из базы ЗУП.

2 стартмани

08.05.2018    25819    8    wowik    3    

Вывод вариантов СКД в таблицы на управляемой форме

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

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

05.04.2019    9879    4    artkor    1    

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

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

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

1 стартмани

21.03.2019    5188    11    pavel_pss    0    

Пример использования СКД и данных расшифровки на мобильной платформе

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

СКД в мобильном приложении и меню действий на основе данных расшифровки (отчет, совместимый с мобильной платформой 8.3.13.45).

1 стартмани

12.03.2019    5098    3    majoram    0    

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

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

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

5 стартмани

09.08.2018    25538    25    informa1555    26    

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

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

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

1 стартмани

22.02.2019    4951    2    kasper076    3    

Сквозной рейтинг по иерархии в отчете на СКД

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

Сквозная нумерация (рейтинг) по группам и элементам справочника в отчете СКД согласно убыванию количества/суммы и т.д.

1 стартмани

07.02.2019    5467    0    MaxxiMiliSan    2    

Особенность встроенной функции Представление() в СКД [поход на грабли]

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

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

1 стартмани

15.01.2019    9634    0    Dementor    6    

Программное создание динамического списка на управляемой форме. (Динамическое создание динамического списка). Готовая процедура + обработка - демонстрационный пример Промо

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

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

1 стартмани

19.01.2018    53793    60    rpgshnik    27    

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

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

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

1 стартмани

12.01.2019    5458    0    lunjio    0    

Отладка сложных отчетов на СКД

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

Расширение для отладки сложных отчетов на СКД (в т.ч. для собираемых программно "на лету") и быстрого перехода к отладке таких отчетов в консоли запросов и отчетов на СКД.

1 стартмани

28.12.2018    24784    85    maxx    58    

Шаблон кросс-таблицы с иерархией на СКД

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

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

1 стартмани

22.12.2018    8479    8    wizard.ilmir02    3    

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

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

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

1 стартмани

14.08.2016    44844    36    Demanoidos    60    

СКД. Сортировка

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

Показана реализация сортировки по двойному щелчку на заголовке колонки отчета и отображение направления сортировки в заголовках колонок.

1 стартмани

03.12.2018    8589    5    slimper    21    

Объединение нескольких печатных форм в один табличный документ

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

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

1 стартмани

17.11.2018    11494    6    echo77    4    

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

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

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

1 стартмани

12.11.2018    23945    5    evgen7938    4    

Как нарисовать граф на 1С Промо

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

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

1 стартмани

09.08.2013    68893    206    ildarovich    117    

Отчет для демонстрации работы с программной расшифровкой СКД

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

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

1 стартмани

08.11.2018    6256    6    budidich    0    

Группировка измерений в заголовках СКД

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

Методика создания общей шапки над измерениями в таблице созданной при помощи СКД. Без всякого кода. Только штатными средствами.

1 стартмани

07.11.2018    16951    62    dusha0020    11    

И снова группировка столбцов в СКД

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

В публикации описано создание отчета "Остатки по складам" с группировкой по строкам и столбцам.

1 стартмани

23.10.2018    10077    1    vasilievil    9    

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

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

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

1 стартмани

17.07.2018    39595    17    kalyaka    16    

Параметризованные заголовки полей СКД

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

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

2 стартмани

21.09.2018    7603    3    echo77    3    

Вывод результата отчета СКД в разные табличные документы

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

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

1 стартмани

21.08.2018    11775    11    Dipod    4    

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

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

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

1 стартмани

12.08.2018    5703    27    MaxCreator    0    

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

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

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

1 стартмани

01.10.2015    47971    32    ildarovich    41