Все публикации

БСП
Разработки

Программное формирование обсуждения через систему взаимодействия

НавигационнаяСсыылка = ПолучитьНавигационнуюСсылку(СсылкаНаДокументОбсуждения); КонтекстОбсуждения = Новый КонтекстОбсужденияСистемыВзаимодействия(НавигационнаяСсыылка); МенеджерВзаимодействия = Новый МенеджерСистемыВзаимодействия; Отбор = Новы...
buketoff 166 3 3 8

Программный вывод отчета СКД

andrey5565 107 2 1 9
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь;

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

Обновлятор-1С: групповое (пакетное) обновление и обслуживание всех баз за один раз Промо

Быстрое и надежное обновление файловых и серверных баз, защита от шифровальщиков, автоматическое обновление доработанных конфигураций и расширений, а также многое другое.
bolsun
950 руб.

Установить элемент отбора динамического списка

Поможет, например, если хотите вывести "быстрые отборы" в основную форму списка прикладного объекта. В процедуре ищем в КоллекцииЭлементовПользовательскихНастроек элемент, который имеет тип = ОтборКомпоновкиДанных, и работаем с его коллекцией отборов (Э...
andrey5565 107 2 1 9

Отправить документ в чат телеграм

Token, ChatID - параметры (Token- бота, ChatID - либо группы, либо аккаунта); ПутьКФайлу = путь к выбранному файлу для отправки
andrey5565 107 2 1 9
	Token 	 = "6235344929:AAENWBK3pMX4hLMMtx6LNtFg9roqC0v7Scw";
	ServerTg  = "api.telegram.org";
	ChatID 	 = "815505225";
	
	ФайлОтправки = Новый Файл(ПутьКФайлу);
	
	СтрокаСоединения = "bot" + Token + "/sendDocument";
	
	// Разделитель;
	Boundary = "----"+Строка(Новый УникальныйИдентификатор());
	
	// Определяем массив для процедуры ОбъединитьФайлы;
	МассивФайловДляОбъединения = Новый Массив;
	
	// Формируем начальный фрагмент файла POST-запроса;	
	ИмяФайлаОтправкиНачало = ПолучитьИмяВременногоФайла("txt");
	ФайлОтправкиНачало = Новый ЗаписьТекста(ИмяФайлаОтправкиНачало, КодировкаТекста.UTF8);
	
	// Формируем конечный фрагмент файла POST-запроса;	
	ИмяФайлаОтправкиКонец = ПолучитьИмяВременногоФайла("txt");
	ФайлаОтправкиКонец = Новый ЗаписьТекста(ИмяФайлаОтправкиКонец, КодировкаТекста.UTF8);
	
	ТекстДляОтправки = "";
	
	ТекстДляОтправки = ТекстДляОтправки + "--" + Boundary + Символы.ПС;
	ТекстДляОтправки = ТекстДляОтправки + "Content-Disposition: form-data; name=""chat_id""" + Символы.ПС + Символы.ПС + СтрЗаменить(Формат(ChatID, "ЧДЦ=0; ЧС=; ЧРГ=.; ЧГ=0"), ".", "") + Символы.ПС;
	
	ТекстДляОтправки = ТекстДляОтправки + "--" + Boundary + Символы.ПС;
	ТекстДляОтправки = ТекстДляОтправки + "Content-Disposition: form-data; name=""document""; filename=""/" + ФайлОтправки.Имя + """" + Символы.ПС;
	
	// Записываем ФайлОтправкиНачало; 
	ФайлОтправкиНачало.ЗаписатьСтроку(ТекстДляОтправки);
	ФайлОтправкиНачало.Закрыть();
	
	ТекстДляОтправки = "" + Символы.ПС;
	ТекстДляОтправки = ТекстДляОтправки + "--" +  Boundary+"--";
	
	// Записываем ФайлаОтправкиКонец; 
	ФайлаОтправкиКонец.ЗаписатьСтроку(ТекстДляОтправки);
	ФайлаОтправкиКонец.Закрыть();
	
	// Заполняем массив;
	МассивФайловДляОбъединения.Добавить(ИмяФайлаОтправкиКонец);
	МассивФайловДляОбъединения.Добавить(ИмяФайлаОтправкиНачало);
	МассивФайловДляОбъединения.Добавить(СокрЛП(ПутьКФайлу));
	
	// Формируем ИмяФайлаОтправки;
	ИмяФайлаОтправки = ПолучитьИмяВременногоФайла("txt");
	ОбъединитьФайлы(МассивФайловДляОбъединения, ИмяФайлаОтправки);
	
	HTTPЗапрос 	= Новый HTTPЗапрос;
	Заголовки 	= Новый Соответствие;
	
	// Формируем Заголовки HTTP Запроса;
	HTTPЗапрос.Заголовки.Вставить("Connection", "keep-alive");
	HTTPЗапрос.Заголовки.Вставить("Content-Type", "multipart/form-data; boundary="+Boundary);
	
	HTTPЗапрос.УстановитьИмяФайлаТела(ИмяФайлаОтправки);
	
	// Установим АдресРесурса;
	HTTPЗапрос.АдресРесурса 	= СтрокаСоединения;
	
	SSL  = Новый ЗащищенноеСоединениеOpenSSL();
	HTTPСоединение = Новый HTTPСоединение(ServerTg, 443,,,,, SSL);
	
	Попытка
		// POST запрос; 
		Ответ = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
		
		КодСостояния     = Ответ.КодСостояния;
		СтрокаОтвета     = Ответ.ПолучитьТелоКакСтроку();
		
		Если КодСостояния = 200 тогда
			// Читаем JSON;
			ЧтениеJSON = Новый ЧтениеJSON;
			
			ЧтениеJSON.УстановитьСтроку(СтрокаОтвета);
			
			РезультатСтруктура = ПрочитатьJSON(ЧтениеJSON);
			
			Если РезультатСтруктура.ok = Истина Тогда
				СтруктураMessage = РезультатСтруктура.result;
			КонецЕсли; 
		Иначе
			Сообщить("КодСостояния " + КодСостояния);
			Сообщить(СтрокаОтвета);
		КонецЕсли;
		
	Исключение
		Сообщение = Новый СообщениеПользователю;
		Сообщение.Текст = "Ошибка: " + ОписаниеОшибки();
		Сообщение.Сообщить();
	КонецПопытки;

Нахождение интервалов в запросе

Нахождение интервалов в запросе
charivnick 12 2
Запрос.Текст = 
"ВЫБРАТЬ
|	ДАТАВРЕМЯ(2023, 1, 1) КАК ДатаНачала,
|	ДАТАВРЕМЯ(2023, 1, 1) КАК ДатаОкончания
|ПОМЕСТИТЬ ВТИсходныеДанные
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ
|	ДАТАВРЕМЯ(2023, 1, 2),
|	ДАТАВРЕМЯ(2023, 1, 2)
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ
|	ДАТАВРЕМЯ(2023, 1, 5),
|	ДАТАВРЕМЯ(2023, 1, 9)
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ
|	ДАТАВРЕМЯ(2023, 1, 11),
|	ДАТАВРЕМЯ(2023, 1, 11)
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ
|	ДАТАВРЕМЯ(2023, 1, 12),
|	ДАТАВРЕМЯ(2023, 1, 12)
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
|	Справа.ДатаНачала КАК ДатаНачала,
|	Справа.ДатаОкончания КАК ДатаОкончания,
|	СУММА(РАЗНОСТЬДАТ(Слева.ДатаНачала, Слева.ДатаОкончания, ДЕНЬ) + 1) КАК Интеграл
|ПОМЕСТИТЬ ВТИнтегралы
|ИЗ
|	ВТИсходныеДанные КАК Слева
|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТИсходныеДанные КАК Справа
|		ПО Слева.ДатаНачала <= Справа.ДатаОкончания
|
|СГРУППИРОВАТЬ ПО
|	Справа.ДатаНачала,
|	Справа.ДатаОкончания
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
|	МИНИМУМ(ВТИнтегралы.ДатаНачала) КАК ДатаНачала,
|	МАКСИМУМ(ВТИнтегралы.ДатаОкончания) КАК ДатаОкончания
|ИЗ
|	ВТИнтегралы КАК ВТИнтегралы
|
|СГРУППИРОВАТЬ ПО
|	ДОБАВИТЬКДАТЕ(ВТИнтегралы.ДатаОкончания, ДЕНЬ, -ВТИнтегралы.Интеграл)"

Объединить ячейки в СКД

charivnick 12 2
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
	Настройки = КомпоновщикНастроек.ПолучитьНастройки();
	
	ПолучитьДанныеНаОснованииСКД(СхемаКомпоновкиДанных, Настройки, ДокументРезультат,, ДанныеРасшифровки);
	
	ОбъединитьЯчейкиВТабличномДокументе(ДокументРезультат, "#");
	
	
КонецПроцедуры

// Заполняет переданный объект на основани СКД
//
// Параметры
//
//  СКД – собствеено настройки СКД
//
//  ОбъектДляЗагрузки – объект в который выгружаются данные, таблица значений, дерево значений, табличный документ
//
//  ИсполняемыеНастройки – Пользовательские настройки СКД если не указаны будут использованы настроки СКД по умолчанию
//
//  СтруктураПараметров - Структура – Передаваемые для СКД параметры
//
//  краткий лекбез, поправлю позже
//
Процедура ПолучитьДанныеНаОснованииСКД(СКД, ИсполняемыеНастройки = Неопределено, ОбъектДляЗагрузки, СтруктураПараметров = Неопределено, РасшифровкаСКД = Неопределено, МакетКомпоновки = Неопределено, ВнешниеНаборыДанных = Неопределено) Экспорт

    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;

    Если ТипЗнч(ОбъектДляЗагрузки) = Тип("ТабличныйДокумент") Тогда
        ТипГенератора = Тип("ГенераторМакетаКомпоновкиДанных");
    Иначе
        ТипГенератора = Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений");
    КонецЕсли;

    Если ИсполняемыеНастройки = Неопределено Тогда
        ИсполняемыеНастройки = СКД.НастройкиПоУмолчанию;
    КонецЕсли;

    Если СтруктураПараметров <> Неопределено Тогда
        КоллекцияЗначенийПараметров = ИсполняемыеНастройки.ПараметрыДанных.Элементы;
        Для каждого Параметр Из СтруктураПараметров Цикл
            НайденноеЗначениеПараметра = КоллекцияЗначенийПараметров.Найти(Параметр.Ключ);
            Если НайденноеЗначениеПараметра <> Неопределено Тогда
                НайденноеЗначениеПараметра.Использование = Истина;
                НайденноеЗначениеПараметра.Значение = Параметр.Значение;
            КонецЕсли;
        КонецЦикла;
    КонецЕсли;

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

    ПроцессорВывода.ОтображатьПроцентВывода = Истина;
    ПроцессорВывода.Вывести(ПроцессорКомпановки, Истина);

КонецПроцедуры // ПолучитьДанныеНаОснованииСКД()

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

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

Перенос настроек данных формы между пользователями

Процедура для переноса настроек формы внешней обработки между двумя пользователями Для других форм - следует заменить КлючОбъекта. например "Обработка.АвтоматическоеИзвлечениеТекстов.Форма.Форма" НаСервере Процедура ПеренестиНастройкиНаСервере() Клю...
Leonid_Isaev 12 1

Выгрузка результата запроса в текстовый файл с разделителями

regsermalp 3 1
Процедура ВыгрузитьВыборкуЗапросаВТекстовыйФайл(ВыборкаЗапроса, стрИменаКолонок, стрАдресФайла, Разделитель = Неопределено) Экспорт
  //Выгрузка результата запроса в текстовый файл с разделителями
  //ВыборкаЗапроса = Запрос.Выполнить().Выбрать(); 
  //стрИменаКолонок - строка, имена колонок через запятую из которых нужно сохранить данные в файл + порядок колонок
  //стрАдресФайла - строка
  //Разделитель -  по-умолчанию: Символы.Таб; можно использовать Символы. ВК (CR),ВТаб (VTab),НПП (NBSp),ПС (LF),ПФ (FF),Таб (Tab)
  //    При загрузке строку можно будет разложить в массив для дальнейшей работы, РазложитьСтрокуВМассивПодстрок( ТекСтр, Символы.Таб).
  
  Если Разделитель = Неопределено Тогда
    Разделитель = Символы.Таб;
  КонецЕсли; 
  
  Текст = Новый ЗаписьТекста(стрАдресФайла, КодировкаТекста.ANSI);
  
  стрИменаКолонок = РазложитьСтрокуВМассивПодстрок(стрИменаКолонок, ",");
  чКоличествоКолонок = стрИменаКолонок.Количество();
  чНомерКолонки = 1;
  
  Пока ВыборкаЗапроса.Следующий() Цикл  
    ОбработкаПрерыванияПользователя();
    Для каждого стрИмяПоля Из стрИменаКолонок Цикл
      Значение = ВыборкаЗапроса[стрИмяПоля];
      
      Если ТипЗнч(Значение) = Тип("Дата") Тогда
        Значение = Формат(Значение,"ДЛФ=D");
      КонецЕсли; 
      
      стрРазделитель = ?(чКоличествоКолонок = чНомерКолонки, "", Разделитель);
      Текст.ЗаписатьСтроку(Строка(Значение) + стрРазделитель); 
      
      чНомерКолонки = чНомерКолонки + 1;
    КонецЦикла; 
  КонецЦикла;  
  
  Текст.Закрыть();
  
КонецПроцедуры

XML Сериализация элементов прикладного объекта

andrey5565 107 2 1 9
	// Сериализация через XDTO;
	
	// 1. Создаем объект ЗаписьXML;
	ЗаписьXML = Новый ЗаписьXML;   
	
	// 2. Указываем путь к сохраненному файлу;
	ЗаписьXML.ОткрытьФайл(Объект.ПутьКФайлу + "\ВыгруженныеОбъекты.xml", "UTF-8");
	
	// 3. Записываем объявление типа: <?xml version="1.0" encoding="UTF-8"?>;
	ЗаписьXML.ЗаписатьОбъявлениеXML();
	
	// 4. Записываем название корневого элемента;
	ЗаписьXML.ЗаписатьНачалоЭлемента("РеализацияТоваров");  
	
	//для того чтобы пространства имен не объявлялись сериализатором в кажом элементе, пишем их в корневой элемент
	//они будут работать на все вложеные элементы
	//пространство имен по-умолчанию
	ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("", "http://v8.1c.ru/8.1/data/enterprise/current-config");
	//пространства имен остальные префиксы
	ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xsd", "http://www.w3.org/2001/XMLSchema");
	ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xsi", "http://www.w3.org/2001/XMLSchema-instance");
	
	// 5. Сериализуем именно объекты (ссылки сериализуются по другому), что "ДОСТУПНО", то и сериализуется;
	Для каждого ТекСтрока Из ТаблицаДокументов Цикл 
		 СериализаторXDTO.ЗаписатьXML(ЗаписьXML, ТекСтрока.Ссылка.ПолучитьОбъект());
	КонецЦикла; 
	
	// 6. Конец корневого элемента;
	ЗаписьXML.ЗаписатьКонецЭлемента();
	
	// 7. Обязательно закрываем запись;
	ЗаписьXML.Закрыть();

Отключение проверки АПК

Вставляет в модуль шаблоны областей по стандартам разработки 1С
Бесплатно

Дублировать текст

Скрипт дублирует текущую строку или выделенный текст
Бесплатно

Окружить текст оператором НСТР

Скрипт окружает выделенный фрагмент НСТР, либо создаёт шаблон НСТР, если ничего не выделено.
Бесплатно

Сохранить/Прочитать настройки СКД для обработок и прочих модулей

Если не используются стандартные механизмы сохранения СКД отчетами с использованием модулей общего назначения. А так же процедура для заполнения реквизитов формы по переданной настройке компоновки данных (например, восстановленных из хранилища). _ничего ...
СергейТ 80 3 8

Дополнительный доход для разработчика 1С не отходя от кассы (компьютера)

Всем доброго дня. Мы проект 42Clouds, предоставляем 1С в облаке в аренду. На рынке облачных технологий работаем с 2011 года. Уже на начальном этапе у нас было все необходимое для комфортной работы клиентов: техподдержка 24/7, собственные продукты и решения...

Получение данных об организации и контрагентах в типовых конфигурациях с помощью БСП

Предлагаются небольшие шаблоны кода, которые позволят вам сразу получить информацию об организациях и контрагентах в типовых базах **Функция СведенияОЮрФизЛице(Компания, Период = '00010101', Знач БанковскийСчет = Неопределено, ПлатежВБюджет = Ложь, Гос...
quazare 3 1

СкопироватьДокумент, Копирование документа

Razlomalo 5 1
// Выполняет копирование документа.
//
// Параметры:
//  Приемник					 - Объект	 - Документ, в который копируются данные.
//  Источник					 - Ссылка	 - Документ, из которого копируются данные.
//  ИсключаемыеСвойства			 - Строка	 - Имена свойств, разделенные запятыми, которые необходимо исключить из заполнения.
//  ИсключаемыеТабличныеЧасти	 - Строка	 - Имена табличных частей, разделенные запятыми, которые необходимо исключить из заполнения.
//  ДанныеЗаполнения			 - Структура - Значение параметра процедуры ОбработкаЗаполнения, используется как основание для заполнения документа.
//
Процедура СкопироватьДокумент(Приемник, Источник, ИсключаемыеСвойства = "", ИсключаемыеТабличныеЧасти = "", ДанныеЗаполнения = Неопределено) Экспорт
	
	ДанныеДокумента = Источник.Скопировать();
	МетаданныеДокумента = Приемник.Метаданные();
	
	ЗаполнитьЗначенияСвойств(Приемник, ДанныеДокумента, , ИсключаемыеСвойства);
	
	// ЗарплатаКадрыПодсистемы.КадровыйУчет.ЭлектронныеТрудовыеКнижки
	
	ЭлектронныеТрудовыеКнижкиРасширенный.ПриЗаполненииДокументаИсправления(Приемник, Источник);
	
	// Конец ЗарплатаКадрыПодсистемы.КадровыйУчет.ЭлектронныеТрудовыеКнижки
	
	Если ИсключаемыеТабличныеЧасти = "" Тогда
		ИменаИсключаемыхТабличныхЧастей = Новый Массив;
	Иначе
		ИменаИсключаемыхТабличныхЧастей = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИсключаемыеТабличныеЧасти, , , Истина);
	КонецЕсли;
	
	Для каждого ТабличнаяЧастьДокумента Из МетаданныеДокумента.ТабличныеЧасти Цикл
		Если ИменаИсключаемыхТабличныхЧастей.Найти(ТабличнаяЧастьДокумента.Имя) <> Неопределено Тогда
			Продолжить;
		КонецЕсли;
		Для Каждого СтрокаДокумента Из Источник[ТабличнаяЧастьДокумента.Имя] Цикл
			НоваяСтрока = Приемник[ТабличнаяЧастьДокумента.Имя].Добавить();
			ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаДокумента);
		КонецЦикла;
	КонецЦикла;
	
	Если ДанныеЗаполнения = Неопределено Тогда
		ДанныеЗаполнения = Новый Структура;
		ИсправлениеВТекущемПериоде = Ложь;
	Иначе
		ИсправлениеВТекущемПериоде = ДанныеЗаполнения.Свойство("ДопустимоИсправлениеВТекущемПериоде")
			И ДанныеЗаполнения.ДопустимоИсправлениеВТекущемПериоде
			И ВозможноИсправлениеТекущимПериодом(Источник);
	КонецЕсли;

	Если Не ИсправлениеВТекущемПериоде Тогда
		// Период регистрации документа исправления необходимо увеличить.
		Если ДанныеЗаполнения.Свойство("ИмяПериодРегистрации") Тогда
			ИмяПериодРегистрации = ДанныеЗаполнения.ИмяПериодРегистрации;
			ПериодРегистрацииИсправленногоДокумента = ДанныеЗаполнения.ПериодРегистрацииИсправленногоДокумента;
		Иначе
			МетаданныеРеквизита = МетаданныеДокумента.Реквизиты.Найти("ПериодРегистрации");
			Если МетаданныеРеквизита = Неопределено Тогда
				МетаданныеРеквизита = МетаданныеДокумента.Реквизиты.Найти("МесяцНачисления");
			КонецЕсли;
			
			Если МетаданныеРеквизита <> Неопределено Тогда
				ИмяПериодРегистрации = МетаданныеРеквизита.Имя;
				ПериодРегистрацииИсправленногоДокумента = ДанныеДокумента[ИмяПериодРегистрации];
			Иначе
				ИмяПериодРегистрации = Неопределено;
				ПериодРегистрацииИсправленногоДокумента = Дата(1, 1, 1);
			КонецЕсли;
		КонецЕсли;
		
		Если ИмяПериодРегистрации <> Неопределено Тогда
			Значения = Новый Структура("Месяц");
			ЗарплатаКадры.ПолучитьЗначенияПоУмолчанию(Значения);
			
			Приемник[ИмяПериодРегистрации] = Макс(ДобавитьМесяц(ПериодРегистрацииИсправленногоДокумента, 1), Значения.Месяц);
		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры

Расшифровка формы собственности организации

Параметр: Кратное наименование ЮрЛица (Пример: ип Картошка, ООО Лягушатник, ао Репа) Возвращаемое значение: (Пример: Индивидуальный предприниматель "Лягушонок") Учитываются регистры ХХ верхний хх нижний и Хх (если пользователь пьяный и вводит вместо ЧУП, Чуп, чуп, что то такое: ЧУп, чуП - лучше доработать функцию, мне - лень);
andrey5565 107 2 1 9
&НаСервереБезКонтекста
Функция ЗаполнениеНаименованияСРасшифровкой(Знач ЮридическоеНаименование)
	
	// Проверка;
	Если ЮридическоеНаименование = "" Тогда
		Возврат "";
	КонецЕсли;
	
	СтруктураРасшифровки = Новый Структура; // Ключ форма собственности  - Значение расшифровка формы соб;
	СтруктураРасшифровки.Вставить("ООО", "Общество с ограниченной ответственностью");
	СтруктураРасшифровки.Вставить("ИП", "Индивидуальный предприниматель");
	СтруктураРасшифровки.Вставить("ОАО", "Открытое акционерное общество");
	СтруктураРасшифровки.Вставить("АО", "Акционерное общество");
	СтруктураРасшифровки.Вставить("ЧУП", "Частное унитарное предприятие");
	//СтруктураРасшифровки.Вставить("", );
	
	МассивЧастей = СтрРазделить(ЮридическоеНаименование, " ", );  
	
	РасшифровкаЮрЛица = ""; 
	МассивАббревиатурЮрЛица = Новый Массив;
	
	Для каждого Часть Из МассивЧастей Цикл
		Для каждого КлючИЗначение Из СтруктураРасшифровки Цикл
			Если  Трег(Часть) = КлючИЗначение.Ключ ИЛИ НРег(Часть) = КлючИЗначение.Ключ ИЛИ ВРег(Часть) = КлючИЗначение.Ключ Тогда
				МассивАббревиатурЮрЛица.Добавить(Трег(Часть));
				МассивАббревиатурЮрЛица.Добавить(НРег(Часть));
				МассивАббревиатурЮрЛица.Добавить(ВРег(Часть));
				РасшифровкаЮрЛица = КлючИЗначение.Значение;	
			КонецЕсли;	
		КонецЦикла;
	КонецЦикла;	
	
	// чистим;
	Для каждого Аббревиатура Из МассивАббревиатурЮрЛица Цикл
		ЮридическоеНаименование = СтрЗаменить(ЮридическоеНаименование, Аббревиатура, "");
	КонецЦикла;
	ЮридическоеНаименование = СокрЛП(ЮридическоеНаименование);
	ЮридическоеНаименование = Трег(ЮридическоеНаименование);
	
	ПолноеНаименование	= РасшифровкаЮрЛица + " """ + ЮридическоеНаименование + """" ; 
	
	Возврат ПолноеНаименование;
	
КонецФункции // ()

Использование биометрии в мобильной платформе 1С

Пример кода
Источник: https://t.me/nizamov_studio_1c
FastCode 1453 12 21 67
&НаКлиенте
Функция Биометрия()
	#Если МобильноеПриложениеКлиент Тогда
		Если ТелефонПоддерживаетБиометрическийВход() Тогда
			ПоказатьВопрос(Новый ОписаниеОповещения("ТелефонПоддерживаетБиометрическийВходЗавершение", ЭтотОбъект), "Использовать биометрию для входа", РежимДиалогаВопрос.ДаНет);
		КонецЕсли;
	#КонецЕсли
КонецФункции

&НаКлиенте
Процедура ТелефонПоддерживаетБиометрическийВходЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
	Если РезультатВопроса = КодВозвратаДиалога.Да Тогда
		ПровестиБиометрическийВход();
	КонецЕсли;  
КонецПроцедуры

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

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

&НаКлиенте
Функция ТелефонПоддерживаетБиометрическийВход()
	#Если МобильноеПриложениеКлиент Тогда
		Попытка   
			Если ДополнительнаяПроверкаПользователя.ПоддерживаетсяПроверка(СпособДополнительнойПроверкиПользователя.БиометрическаяИлиВводПароля) Тогда
				Возврат Истина;
			Иначе
				Возврат Ложь;
			КонецЕсли;
		Исключение
			ЗаписьЖурналаРегистрации("Mobile", УровеньЖурналаРегистрации.Ошибка,,, ОписаниеОшибки());
			Возврат Ложь;
		КонецПопытки;
	#КонецЕсли
КонецФункции

Выгрузка файла на FTP

FTP_Cоединение.УстановитьТекущийКаталог("."); - строковый параметр означает корневой каталог, можно указать папку "\НазваниеПапки"; FTP_Cоединение.Записать(ПутьКФайлу, "actual_products.json"); - второй параметр, название файла с расширением (.txt, .csv, .xml); Директива компиляции - &НаСервере
andrey5565 107 2 1 9
	// Параметры соединения; 
	Сервер = "00.000.000.000";
	
	Порт	= 21;
	
	ИмяПользователя 	= "u00000";
	
	ПарольПользователя = "86731db349"; 
	
	// Загрузка на  FTP;
	FTP_Cоединение = Новый FTPСоединение(Сервер, Порт, ИмяПользователя, ПарольПользователя,,, 20);
	
	Попытка
		FTP_Cоединение.УстановитьТекущийКаталог(".");          
		FTP_Cоединение.Записать(ПутьКФайлу, "actual_products.json"); // представим что отсюда сайт подгружает данные;
		
		Сообщение = Новый СообщениеПользователю;
		Сообщение.Текст = ".JSON файл, находящийся в каталоге: " + ПутьКФайлу + " был успешно загружен на FTP_сервер!";
		Сообщение.Сообщить();
	Исключение
		Сообщение = Новый СообщениеПользователю;
		Сообщение.Текст = "Не удалось подключиться к FTP_серверу! Описание ошибки: " + ОписаниеОшибки();
		Сообщение.Сообщить();
	КонецПопытки;

Удалить префикс, лидирующие нули

Удаляет префикс, по типу "ТДУТ-", чистит лидирующие нули;
andrey5565 107 2 1 9
&НаКлиенте
Функция ФорматироватьНомерДокуметаНаКлиенте(Знач НомерДокумента)
	
	НомерДокументаСтрокой 	= Строка(НомерДокумента);
	
	НомерДокументаСтрокой	= СтрЗаменить(НомерДокументаСтрокой, "-", "");
	
	ПозицияПервогоНуля		= СтрНайти(НомерДокументаСтрокой, "0", НаправлениеПоиска.СНачала);
	
	НомерДокументаСтрокой 	= Сред(НомерДокументаСтрокой, ПозицияПервогоНуля, СтрДлина(НомерДокументаСтрокой)); //символы = цифры;
	
	Счетчик = 1;
	Пока Лев(НомерДокументаСтрокой, 1) = "0" Цикл
		НомерДокументаСтрокой = Сред(НомерДокументаСтрокой, Счетчик + 1);
	КонецЦикла;

	Возврат НомерДокументаСтрокой;
	
КонецФункции // ()