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

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    9547    dimanich70    78    

117

Вставляем картинку из буфера обмена (платформа 1С 8.3.24)

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

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

1 стартмани

18.03.2024    3222    3    John_d    11    

57

GUID в 1С 8.3 - как с ними быть

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

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

12.02.2024    6845    atdonya    22    

55

Переоткрытие внешних обработок

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

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

30.11.2023    4561    ke.92@mail.ru    16    

64

Валидация JSON через XDTO (включая массивы)

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

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

28.08.2023    10720    YA_418728146    7    

149

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

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

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

2 стартмани

22.08.2023    2615    40    progmaster    8    

4

Расширение: Быстрые отборы через буфер [Alt+C] Копировать список, [Alt+V] Вставить список, [Ctrl+C] Копировать из файлов

Инструментарий разработчика Универсальные функции Платформа 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    16928    150    sapervodichka    112    

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

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

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