Полезные фрагменты кода

15.05.24

Разработка - Универсальные функции

В эту статью буду постоянно добавлять полезные части кода, которые могут пригодиться каждому! В первую очередь делаю это для себя, но, думаю, и другим будет полезно!

1) Позволяет вставить в колонтитул макета необходимую надпись, в данном случае строки для подписи работодателя и работника! В результате на каждую страницу, начиная с первой, будет добавляться надпись слева: Работодатель_____________, а справа: Работник_____________.

 

   //VID(+++++
    Если ИмяМакета = "VID_ПФ_MXL_ТрудовойДоговор" Тогда
    ДокументРезультат.НижнийКолонтитул.ТекстСправа = "Работник_____________";
    ДокументРезультат.НижнийКолонтитул.ТекстСлева = "Работодатель_____________";
    ДокументРезультат.НижнийКолонтитул.Выводить = Истина;
    ДокументРезультат.НижнийКолонтитул.НачальнаяСтраница = 1;
    КонецЕсли;
    //VID)----


2) Код позволяет перебрасывать значение строки в другую (следующую строку):

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


3) Изменение формы выбора в зависимости от типа данных поля табличной части, т.е. есть ТЧ, в ней есть поле (в данном случае исполнитель), поле составного типа, если в шапке выбран реквизит собственная база, то нужно выбирать только ФЛ, а если автосервис, то и ФЛ и Контрагентов: 

Если собственная база: при создании формы:  

 Элементы.РаботыИсполнитель.ОграничениеТипа = Новый ОписаниеТипов("СправочникСсылка.ФизическиеЛица");

иначе

		ДоступныеТипы = Новый Массив;
		ДоступныеТипы.Добавить("СправочникСсылка.ФизическиеЛица");
		ДоступныеТипы.Добавить("СправочникСсылка.Контрагенты");
		Элементы.РаботыИсполнитель.ОграничениеТипа = Новый ОписаниеТипов(ДоступныеТипы);

При изменении реквизита:

Если Строка(Объект.СпособРемонта) = "Автосервис" Тогда
		Для Каждого Работенка Из Объект.Работы Цикл
			Работенка.Исполнитель = Объект.VID_Контрагент;
		КонецЦикла;
		ДоступныеТипы = Новый Массив;
		ДоступныеТипы.Добавить("СправочникСсылка.ФизическиеЛица");
		ДоступныеТипы.Добавить("СправочникСсылка.Контрагенты");
		Элементы.РаботыИсполнитель.ОграничениеТипа = Новый ОписаниеТипов(ДоступныеТипы);
			
	Иначе
		Для Каждого Работенка Из Объект.Работы Цикл
			Работенка.Исполнитель = "";
		КонецЦикла;
			Элементы.РаботыИсполнитель.ОграничениеТипа = Новый ОписаниеТипов("СправочникСсылка.ФизическиеЛица");
		   
	КонецЕсли;

Событие начало выбора:

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

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

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

Обработка выбора типа данных:

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

			ОткрытьФорму("РегистрСведений.уатВодителиОрганизаций.ФормаСписка", ПараметрыФормы, ЭтаФорма,,,,ОбработкаВыбора);
			
		КонецЕсли;
КонецЕсли;		

	

При закрытии форм выбора:

&НаКлиенте
Процедура ПриЗакрытииФормыВыбораКонтрагентРемонты(Результат, ДопПараметры) Экспорт
	
	Если Результат <> Неопределено Тогда
		ДопПараметры.Исполнитель = Результат;	
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ПриЗакрытииФормыВыбораФЛРемонты(Результат, ДопПараметры) Экспорт
	
	Если Результат <> Неопределено Тогда
		ДопПараметры.Исполнитель = Результат;	
	КонецЕсли;
	
КонецПроцедуры

 

Вступайте в нашу телеграмм-группу Инфостарт

См. также

Универсальные функции Работа с интерфейсом Программист 1С:Предприятие 8 Бесплатно (free)

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

14.05.2025    5424    DeerCven    15    

57

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

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

21.05.2024    46370    dimanich70    83    

164

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    6853    6    John_d    13    

59

Универсальные функции Программист Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    57432    atdonya    31    

68

Универсальные функции Программист 1С:Предприятие 8 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    8626    ke.92@mail.ru    17    

68

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    22791    YA_418728146    8    

174
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. kotlovD 89 16.05.24 08:56 Сейчас в теме
Я себе репозиторий просто завел и туда сбрасываю код по категориям
cleaner_it; +1 Ответить
2. VID1234 148 16.05.24 09:45 Сейчас в теме
(1) Здравствуйте. Ок, приму к сведению. Спасибо.
3. svezr 5 16.05.24 14:03 Сейчас в теме
Я в Notion храню. Пробовал в Obsidian — все равно в Notion вернулся.
4. VID1234 148 16.05.24 15:08 Сейчас в теме
(3)
Notion
Здравствуйте. Гляну, спасибо.
5. Viktor_Ermakov 394 16.05.24 15:54 Сейчас в теме
Есть же уже такой сервис FastCode, там очень удобно искать поиском код. Статья эта будет работать только на Вас, и она будет не удобная по мере возрастания даже для Вас одного.
mrChOP93; cleaner_it; smit1c; soulner; +4 Ответить
6. user_1880116 16.05.24 20:15 Сейчас в теме
Если Строка(Объект.СпособРемонта) = "Автосервис" Тогда

А можно не надо вот таких полезностей, тем более "для других"?

Спасибо.
shusha9951; user1256741; TimkoNzt; SpiegelWiegel; Alien_RS_Forever; andron77777; Voland1402; cleaner_it; Azamatex; Rusel; chebser; Grigoriy251; Simod; amiralnar; kuzyara; SerVer1C; smit1c; dimaster; pm74; German; корум; +21 Ответить
7. pm74 203 17.05.24 07:39 Сейчас в теме
думаю каждому нужно для себя такую статейку написать на ИС чтобы по конфам не лазить
8. sikuda 680 17.05.24 08:36 Сейчас в теме
(7) Легче завести сайтик и собирать туда только то что тебе хочется - https://code1c.sikuda.ru
9. dimaster 40 17.05.24 09:02 Сейчас в теме
10. soulner 490 17.05.24 09:11 Сейчас в теме
Да, я тоже за FastCode, делаешь один, пользуются все, вот сила комьюнити.
mrChOP93; +1 Ответить
11. BackinSoda 17.05.24 09:31 Сейчас в теме
Это код из альфа-авто ?)
15. VID1234 148 20.05.24 21:41 Сейчас в теме
(11) Здравствуйте. Нет с модуля УАТ ЕРП
12. kuzyara 2210 17.05.24 09:51 Сейчас в теме
Вы изучаете программирование, делитесь наработками - это прекрасно.
Но показывая всем свой код, не забывайте и о code smells.
Используйте прием early return
Обработка выбора типа данных:
предлагаю заменить на
&НаКлиенте
Процедура ОбработкаВыбораТипаДанных(ВыбранныйЭлемент, СписокПараметров) Экспорт
	
	Если ВыбранныйЭлемент = Неопределено Тогда
			Возврат;
	КонецЕсли;
		
	ИмяОткрываемойФормы = "";
		
	Если ВыбранныйЭлемент.Значение = Тип("СправочникСсылка.Контрагенты") Тогда
		Если НЕ ЗначениеЗаполнено(Объект.VID_Контрагент) Тогда
			Сообщить("Заполните контрагента!");
			Возврат;
		КонецЕсли;
		// ...
	КонецЕсли;
Показать
Это позволит избежать flattering arrow
Удачи в освоении 1с!
ivnik; KirillZ44; +2 Ответить
16. VID1234 148 20.05.24 21:44 Сейчас в теме
(12) Здравствуйте. Хорошо, спасибо.
13. user1493358 17.05.24 13:22 Сейчас в теме
Я в wiki.yandex.ru сделал базу.
Там раскраска кода работает и можно организовать удобную структуру.
cleaner_it; +1 Ответить
17. kuzyara 2210 21.05.24 10:31 Сейчас в теме
14. alex_sayan 68 17.05.24 16:11 Сейчас в теме
Чем полезные-то? Шероховатый, узкоспециализированный код
user_1880116; kuzyara; cleaner_it; +3 Ответить
Для отправки сообщения требуется регистрация/авторизация