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

15.05.24

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

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

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

 

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


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

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


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

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

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

иначе

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

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

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

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

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

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

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

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

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

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

	

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

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

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

 

См. также

Универсальные функции Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

21.05.2024    20113    dimanich70    81    

144

Универсальные функции Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

1 стартмани

18.03.2024    4090    3    John_d    11    

57

Универсальные функции Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

12.02.2024    18039    atdonya    24    

56

Универсальные функции Программист Платформа 1С v8.3 Бесплатно (free)

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

30.11.2023    5501    ke.92@mail.ru    16    

65

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

28.08.2023    14728    YA_418728146    7    

166

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    3578    56    progmaster    8    

4

Инструментарий разработчика Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

Копирует в буфер значения из списков, из ячеек отчетов, таблиц, настроек списков, других отборов и вставляет в выбранную настройку отбора. Работает с Объект не найден. Работает как в одной так и между разными базами 1С. Использует комбинации [Alt+C] Копировать список, [Alt+V] Вставить список. Также для копирования данных используется стандартная [Ctrl+C] (например из открытого xls, mxl, doc и т.п. файла скопировать список наименований)

1 стартмани

13.10.2022    18476    171    sapervodichka    112    

135
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. kotlovD 88 16.05.24 08:56 Сейчас в теме
Я себе репозиторий просто завел и туда сбрасываю код по категориям
cleaner_it; +1 Ответить
2. VID1234 146 16.05.24 09:45 Сейчас в теме
(1) Здравствуйте. Ок, приму к сведению. Спасибо.
3. svezr 5 16.05.24 14:03 Сейчас в теме
Я в Notion храню. Пробовал в Obsidian — все равно в Notion вернулся.
4. VID1234 146 16.05.24 15:08 Сейчас в теме
(3)
Notion
Здравствуйте. Гляну, спасибо.
5. Viktor_Ermakov 369 16.05.24 15:54 Сейчас в теме
Есть же уже такой сервис FastCode, там очень удобно искать поиском код. Статья эта будет работать только на Вас, и она будет не удобная по мере возрастания даже для Вас одного.
mrChOP93; cleaner_it; smit1c; soulner; +4 Ответить
6. user1880116 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 677 17.05.24 08:36 Сейчас в теме
(7) Легче завести сайтик и собирать туда только то что тебе хочется - https://code1c.sikuda.ru
9. dimaster 40 17.05.24 09:02 Сейчас в теме
10. soulner 461 17.05.24 09:11 Сейчас в теме
Да, я тоже за FastCode, делаешь один, пользуются все, вот сила комьюнити.
mrChOP93; +1 Ответить
11. BackinSoda 17.05.24 09:31 Сейчас в теме
Это код из альфа-авто ?)
15. VID1234 146 20.05.24 21:41 Сейчас в теме
(11) Здравствуйте. Нет с модуля УАТ ЕРП
12. kuzyara 2090 17.05.24 09:51 Сейчас в теме
Вы изучаете программирование, делитесь наработками - это прекрасно.
Но показывая всем свой код, не забывайте и о code smells.
Используйте прием early return
Обработка выбора типа данных:
предлагаю заменить на
&НаКлиенте
Процедура ОбработкаВыбораТипаДанных(ВыбранныйЭлемент, СписокПараметров) Экспорт
	
	Если ВыбранныйЭлемент = Неопределено Тогда
			Возврат;
	КонецЕсли;
		
	ИмяОткрываемойФормы = "";
		
	Если ВыбранныйЭлемент.Значение = Тип("СправочникСсылка.Контрагенты") Тогда
		Если НЕ ЗначениеЗаполнено(Объект.VID_Контрагент) Тогда
			Сообщить("Заполните контрагента!");
			Возврат;
		КонецЕсли;
		// ...
	КонецЕсли;
Показать
Это позволит избежать flattering arrow
Удачи в освоении 1с!
ivnik; KirillZ44; +2 Ответить
16. VID1234 146 20.05.24 21:44 Сейчас в теме
(12) Здравствуйте. Хорошо, спасибо.
13. user1493358 17.05.24 13:22 Сейчас в теме
Я в wiki.yandex.ru сделал базу.
Там раскраска кода работает и можно организовать удобную структуру.
cleaner_it; +1 Ответить
17. kuzyara 2090 21.05.24 10:31 Сейчас в теме
14. alex_sayan 51 17.05.24 16:11 Сейчас в теме
Чем полезные-то? Шероховатый, узкоспециализированный код
user1880116; kuzyara; cleaner_it; +3 Ответить
Оставьте свое сообщение