1С: Проверка на пустое значение в запросе

На самом деле это не так просто сделать. Есть несколько вариантов, для разных типов значений:

  • Дата: СК_ИскВходящий.ДатаВступленияРешенияВСилу = ДАТАВРЕМЯ(1, 1, 1)
  • Если тип значения не составной, то: Аппеляция.ВидОбжалования ЕСТЬ NULL
  • А вот с составным весело — почему то сравнение с NULL не работает в этом случае. Приходится использовать сравнение типов. Как-то так у меня вышло:
ВЫБОР
	КОГДА СК_ИскВходящий.Обжалование = ЛОЖЬ
			И (ТИПЗНАЧЕНИЯ(СК_ИскВходящий.ИтоговыйСудебныйАкт) <> ТИП(СТРОКА)
				И ТИПЗНАЧЕНИЯ(СК_ИскВходящий.ИтоговыйСудебныйАкт) <> ТИП(Перечисление.СК_ГР_ИтоговыйСудебныйАкт))
		ТОГДА "Находится на рассмотрении в суде первой инстанции"
	КОГДА СК_ИскВходящий.Обжалование = ЛОЖЬ
			И СК_ИскВходящий.ДатаВступленияРешенияВСилу = ДАТАВРЕМЯ(1, 1, 1)
			И СК_ИскВходящий.ДатаСудебногоАкта > ДАТАВРЕМЯ(1, 1, 1)
			И СК_ИскВходящий.ИтоговыйСудебныйАкт = ЗНАЧЕНИЕ(Перечисление.СК_ГР_ИтоговыйСудебныйАкт.РешениеОбУдовлетворенииТребований)
		ТОГДА "Вынесен судебный акт, не вступил в законную силу"
	КОГДА СК_ИскВходящий.Обжалование = ИСТИНА
			И НЕ Аппеляция.ВидОбжалования ЕСТЬ NULL
			И СК_ИскВходящий.ИтоговыйСудебныйАкт = ЗНАЧЕНИЕ(Перечисление.СК_ГР_ИтоговыйСудебныйАкт.РешениеОбУдовлетворенииТребований)
			И СК_ИскВходящий.ДатаСудебногоАкта > ДАТАВРЕМЯ(1, 1, 1)
			И СК_ИскВходящий.ДатаВступленияРешенияВСилу = ДАТАВРЕМЯ(1, 1, 1)
		ТОГДА "Вынесен судебный акт, обжалуется в апелляционной инстанции"
	КОГДА ТИПЗНАЧЕНИЯ(СК_ИскВходящий.ИтоговыйСудебныйАкт) <> ТИП(СТРОКА)
			И ТИПЗНАЧЕНИЯ(СК_ИскВходящий.ИтоговыйСудебныйАкт) <> ТИП(Перечисление.СК_ГР_ИтоговыйСудебныйАкт)
			И СК_ИскВходящий.ДатаСудебногоАкта > ДАТАВРЕМЯ(1, 1, 1)
			И СК_ИскВходящий.ДатаВступленияРешенияВСилу > ДАТАВРЕМЯ(1, 1, 1)
			И НЕ Кассация.ВидОбжалования ЕСТЬ NULL
			И РАЗНОСТЬДАТ(&ТекДата, СК_ИскВходящий.ДатаСудебногоАкта, МЕСЯЦ) < 3
		ТОГДА "Судебный акт вступил в законную силу, но не вышел срок для кассационного обжалования"
	КОГДА СК_ИскВходящий.ИтоговыйСудебныйАкт = ЗНАЧЕНИЕ(Перечисление.СК_ГР_ИтоговыйСудебныйАкт.РешениеОбУдовлетворенииТребований)
			И СК_ИскВходящий.ДатаСудебногоАкта > ДАТАВРЕМЯ(1, 1, 1)
			И СК_ИскВходящий.ДатаВступленияРешенияВСилу = ДАТАВРЕМЯ(1, 1, 1)
			И НЕ Кассация.ВидОбжалования ЕСТЬ NULL
			И Кассация2Инстанция.ДатаВозвратаИзСуда = ДАТАВРЕМЯ(1, 1, 1)
		ТОГДА "Вынесен судебный акт, обжалуется в кассационной инстанции"
	ИНАЧЕ "Неопределено"
КОНЕЦ

Тут в принципе можно подсмотреть все варианты

Обзор рынка мотоциклов с бюджетом 140тыс, в Вологде

Сделал небольшую сводную таблицу новых мотоциклов, при бюджете до 140тыс рублей.

ГдеСколько (примерно)МодельСтрана производительНаличие запчастейСсылкаОбъем*Лошадей*Макс скорость*ПлюсыМинусы
https://avangard35.ru/141BAJAJ Boxer 150 UGИндияДа, есть официально присутствуют в РФhttps://avangard35.ru/motosalon/motocikly/bajaj-2/motocikl-bajaj-boxer-150-ug/15512135— хорошия оптика
— хороший металл, нормальные проваренные швы
— После покупки нужно перебирать заднюю ступицу, иначе дергается
— Мотор любит высокие обороты 3т+,
— заливать только 95 (а не как рекомендовано 92)
— нужно ставить брызговики, штатно окатывает грязью ноги
https://avangard35.ru/134BAJAJ Boxer BM 125 XИндияДа, есть официально присутствуют в РФhttps://avangard35.ru/motosalon/motocikly/bajaj-2/motocikl-bajaj-boxer-bm-125-x/12410110— хорошия оптика
— хороший металл, нормальные проваренные швы
— После покупки нужно перебирать заднюю ступицу, иначе дергается
— Мотор любит высокие обороты 3т+,
— заливать только 95 (а не как рекомендовано 92)
— нужно ставить брызговики, штатно окатывает грязью ноги
улица Преображенского, 45Б, Вологда121Motoland VOYAGE 200КитайВ продаже есть, но не все. Иногда под заказhttps://vk.com/market/product/motoland-voyage-200-221482818-111460612001380— вибрация на высокой скорости
— узкие шины
— болты говно, срываются нараз
— ломаются ручки сцепления
— хлипкая рама
улица Преображенского, 45Б, Вологда130MOTOLAND FORESTER 200КитайВ продаже есть, но не все. Иногда под заказhttps://vk.com/market/product/motoland-forester-200-221482818-1106006620013100
улица Преображенского, 45Б, Вологда128MOTOLAND SPRINT 200КитайВ продаже есть, но не все. Иногда под заказhttps://vk.com/market/product/motoland-sprint-200-221482818-1281353420013110
улица Преображенского, 45Б, Вологда130Regulmoto BWS с ПТСКитайЕсть, про проблемы не увиделhttps://vk.com/market/product/regulmoto-bws-s-pts-221482818-1306883712513120— мало отзывов
улица Преображенского, 45Б, Вологда135Regulmoto VikingКитайЕсть, про проблемы не увиделhttps://vk.com/market/product/regulmoto-viking-221482818-1116237015012,280— можно ездить вдвоём
— два способа запуска
— большой топливный бак
— мало отзывов
140Regulmoto SK200-22КитайЕсть, про проблемы не увиделhttps://vk.com/market/product/regulmoto-sk200-22-221482818-1159430520011100— можно ездить вдвоём
— два способа запуска
— большой топливный бак
— мало отзывов
Loft Motor, Череповец115Roliz BanditosКитайЕсть, но специализированных магазинов нет, многое вероятно будет под заказhttps://www.avito.ru/cherepovets/mototsikly_i_mototehnika/mototsikl_roliz_banditos_pts_7571301295?25019120— вообще нет отзывов
Loft Motor, Череповец130Rockot Spectrum 150КитайЕсть, про проблемы не увиделhttps://www.avito.ru/vologda/mototsikly_i_mototehnika/rockot_spectrum_150_2026_77252395051501192— вибрации

1С: Получить список пользователей роли

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

  • выводит на экран список ролей
  • перебирает всех пользователей и если у пользователя назначена выбранная роль, то выводит её в консоль

Код:


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

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


&НаКлиенте
Процедура ПолучитьСпискоПользователей(Команда)
	ПроверитьИНаказать();	
КонецПроцедуры

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

Обработку, можно скачать тут:

PHP: перебор диапазона дат

Нашел еще один способ перебора каждого дня в диапазоне дат. Вот такой:

$start = new DateTime('2026-01-01');
$interval = new DateInterval('P1D'); // Интервал в 1 день
$period = new DatePeriod($start, $interval, new DateTime('2026-05-21'));

foreach ($period as $date) {
echo $date->format('Ymd')."\n";
}

Ну соответственно в DateInterval можно вставлять не только интервал день (или несколько), но и неделя, месяц, год:

  • y— Количество лет
  • m— Количество месяцев
  • d — Количество дней.
  • h — Количество часов.
  • i — Количество минут.
  • s — Количество секунд.
  • f — Количество микросекунд в виде долей секунды.

1С: Группировка в макете

Для того чтобы при выводе макета отображалась группировка, её собственно сначала нужно включить:

ТабДок=Новый ТабличныйДокумент;	
ТабДок.НачатьАвтогруппировкуСтрок();		
....
// Заполняем табличный документ
....
ТабДок.ЗакончитьАвтогруппировкуСтрок();
ТабДок.ОтображатьГруппировки = Истина;
ТабДок.ПоказатьУровеньГруппировокСтрок(3);

В конце указывается уровень группировки по умолчанию. А как дать понять к какому уровню группировки относится конкретный вывод в табличную часть? Всё решается параметрами вида:

ТабДок.Вывести(ОбластьТушка,<уровнь группировки>,<название группы>,<Истина/Ложь - раскрыто/свернуто по умолчанию>);   		  					

1 2 3 317