4 августа 2022 г.

1С СКД Проверить значение параметра

Когда специально искал, не смог найти, а сам не догадался:


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

// ИЛИ, если нет модуля КомпоновкаДанныхКлиентСервер

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

Прошу обратить внимание, для отладки данной процедуры нужно включить автоматическое подключение к фоновым заданиям: Меню - отладка - подключение, кнопка "Автоматическое подключние", включи флажок "Фоновые задания".

3 августа 2022 г.

1С СКД БСП Значение параметра по-умолчанию

 Тривиальная задача - предопределить период для отчета в тех случаях, когда параметр не заполнен пользователем ранее (сохраненные настройки), оказалась не такой простой.

В интернетах есть описание решения задачи через создание своей формы с выводом параметров и их переопределения ПриОткрытии() по нашему условию (я проверял на пустую дату). Это было хорошим и простым на СКД 2.Х версии, а вот на 3.1.7 (обновил самописную конфигурацию) я столкнулся со следующими проблемами

18 июня 2022 г.

1С Изменить представление документа

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


Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка)
   СтандартнаяОбработка = Ложь;
   ДокСсыл=Данные.Ссылка;
   Брак=?(ЗначениеЗаполнено(ДокСсыл.БракЗаданияВРаботу),"Брак: ","");
   Представление = СтрШаблон("%1%2 №%3 от %4 (%5)",
                              Брак,ДокСсыл.Метаданные().Синоним,
                              Число(ДокСсыл.Номер),
                              формат(ДокСсыл.Дата,"ДФ=dd.MM.yyyy"),
                              ДокСсыл.ВидОперации);
КонецПроцедуры




23 мая 2022 г.

1C УдалитьПустыеСтрокиТЧ()

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

1С ПустаяСсылка() по типу значения

Мне нужно было получить пустую ссылку не знаю заранее тип значения реквизита колонки ТЗ. Нам известно что есть строки в ТЧ (ТЧДок),  имя реквизита передано строкой в переменной ИмяРеквизита.

МояПустаяСсылка=Новый(типзнч(ТЧДок[0][ИмяРеквизита]))

14 апреля 2022 г.

1С функция ДобавитьКоманду()

Простенькая функция создающая команду формы и кнопку к ней на форме. Когда описываешь одну, это максимум 10 строчек, а когда таких 5 и более, получается гигантская котлета из почти одинаковых строк:



//Пример использвания в расширении (форма документа ПТиУ)
&НаСервере
Процедура Расш1_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
эГруппаКоманд=ЭтаФорма.Элементы.вставить("ЭГруппаКоманд",тип("ГруппаФормы"), Элементы.Товары.КоманднаяПанель, Элементы.ТоварыКнопкиКоманднойПанели);
	эГруппаКоманд.Вид=ВидГруппыФормы.ГруппаКнопок;
	эГруппаКоманд.Отображение=ОтображениеГруппыКнопок.Компактное;
    
ДобавитьКоманду("ОтобразитьШтрихкоды",
					ОтображениеКнопки.Картинка,БиблиотекаКартинок.ТабличныйДокументТолькоПросмотр,
					Ложь,
					Тип("КнопкаФормы"),
					Элементы.ЭГруппаКоманд,
					Объект.ШтрихкодыУпаковок.Количество()>0);  

КонецПроцедуры    
// Функция - Добавить команду
//
// Параметры:
//  ИмяКомандыПроцедуры		 - Строка - Имя процедуры и команды будут совпадать, при помощи Синониминайзера, Выдернув "Команда", будет создан заголовок и подсказка
//  Отображение		 - ОтображениеКнопки -  Например: ОтображениеКнопки.Картинка
//  Картинка		 - БиблиотекаКартинок - Например: БиблиотекаКартинок.ТабличныйДокументТолькоПросмотр
//	ИзменяетСохраняемыеДанные - Булево - 
//  ТипЭлемента		 - Тип - Тип элемента ФОРМЫ, например: Тип("КнопкаФормы")
//  РодительЭлемента - ЭлементФормы - Например ГруппаКнопок
//  Доступность		 - Булево -
//
&НаСервере
Функция ДобавитьКоманду(ИмяКомандыПроцедуры, Отображение=Неопределено,Картинка=Неопределено,ИзменяетСохраняемыеДанные=Ложь,ТипЭлемента,РодительЭлемента=Неопределено,Доступность=Истина)
	ИмяКоманды="Команда"+ИмяКомандыПроцедуры;
	ИмяПроцедуры=ИмяКоманды;
	Заголовок=Синонимайзер(ИмяКомандыПроцедуры);
	Подсказка=Заголовок;
	
	Если Команды.Найти(ИмяКоманды) <> Неопределено Тогда
		Сообщить(СтрШаблон("Команда ""%1"" существует, пропуск",ИмяКоманды));
		Возврат
	КонецЕсли;
	
	НоваяКоманда= Команды.Добавить(ИмяКоманды);
	НоваяКоманда.Действие = ИмяПроцедуры;//Имя процедуры
	НоваяКоманда.Заголовок = Заголовок;
	НоваяКоманда.Подсказка = Подсказка;
	НоваяКоманда.ИзменяетСохраняемыеДанные=ИзменяетСохраняемыеДанные;
	Если Отображение<>Неопределено  Тогда
		НоваяКоманда.Отображение=Отображение;
	КонецЕсли;
	Если Картинка<>Неопределено  Тогда
		НоваяКоманда.Картинка=Картинка;
	КонецЕсли;
	
	ИмяЭлемента="Элемент"+ИмяКоманды;
	Если ЭтаФорма.Элементы.Найти(ИмяЭлемента)<>Неопределено Тогда  
		Сообщить(СтрШаблон("Элемент ""%1"" существует, пропуск",ИмяЭлемента));
		Возврат
	КонецЕсли;
	
	эНоваяКоманда = ЭтаФорма.Элементы.вставить(ИмяЭлемента, ТипЭлемента,?(РодительЭлемента=Неопределено,"",РодительЭлемента)); 
	эНоваяКоманда.ИмяКоманды=НоваяКоманда.Имя; 
	эНоваяКоманда.Доступность=Доступность;
КонецФункции

&НаСервере
Функция Синонимайзер(Имя, Ответ = "", Стэйт = 7, б = "")
    Для ё = 1 По СтрДлина(Имя) Цикл
        а = Сред(Имя, ё, 1);
        Стэйт = (НРег(а) <> а) * 4 + Цел(Стэйт / 2);
        Ответ = Ответ + ?(Стэйт = 2, НРег(б), ?(ё = 2, ВРег(б), б)) + ?(Стэйт = 4 ИЛИ Стэйт = 5, " ", "");
        б = а
    КонецЦикла;
    Возврат Ответ + б
КонецФункции


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

2 апреля 2022 г.

1СОшибка ГруппаКоманд.Отображение=ОтображениеГруппыКнопок.Компактное Не соответствие типов

 Создаю программно группу кнопок, хочу компактный вид и пишу:


эГруппаКоманд=ЭтаФорма.Элементы.вставить("ЭГруппаКоманд",тип("ГруппаФормы"), Элементы.Товары.КоманднаяПанель, Элементы.ТоварыКнопкиКоманднойПанели);
эГруппаКоманд.Вид=ВидГруппыФормы.ГруппаКнопок;
эГруппаКоманд.Отображение=ОтображениеГруппыКнопок.Компактное;

При открытии система выдает ошибку "Несоответствие типов" по строке номер два
Отладчиком проверяю и вижу что тип данного реквизита не группа, а кнопка....WTF????
Меняю местами вторую и третью строчку и проблема решена.