Шаблоны кода 1С


Добавить новый Назад

GET-запрос к HTTP-серверу

GET-запрос к HTTP-серверу

XDTO HTTPСоединение GET

Заголовки=Новый Соответствие();
Заголовки.Вставить("Content-Type","application/xml");
Заголовки.Вставить("Accept","application/xml");

Запрос=Новый HTTPЗапрос();
Запрос.АдресРесурса="clients/list";
Запрос.Заголовки=Заголовки;

Соединение=Новый HTTPСоединение("api.yourserver.ru");//таким образом полный URL запроса http://api.yourserver.ru/clients/list
Ответ=Соединение.Получить(Запрос);
КодСостояния=Ответ.КодСостояния;
СтрокаОтвета=Ответ.ПолучитьТелоКакСтроку();	

Если КодСостояния=200 тогда
	ЧтениеXML=Новый ЧтениеXML;
	ЧтениеXML.УстановитьСтроку(СтрокаОтвета);
	Попытка
		КонтрагентыСписокXDTO=ФабрикаXDTO.ПрочитатьXML(ЧтениеXML,ФабрикаXDTO.Тип("http://api.yourserver.ru/xdto","ClientList"));
	Исключение
		Сообщить(СформироватьСообщениеОбОшибке(ИнформацияОбОшибке()));
		Предупреждение("Сервер прислал плохие данные!");
		Возврат;
	КонецПопытки;
	//обработка объекта XDTO	
Иначе
	//обработка ошибочных кодов
КонецЕсли;
Добавить комментарий

Обрезка сигнатуры BOM

BOM

Добавил: Dmitry Zhurbenko
Процедура ОбрезатьСигнатуру(ИмяФайла) 
	
		Строка64		= Неопределено;
		Данные 			= Неопределено;
		Данные 			= Новый ДвоичныеДанные(ИмяФайла);
		Строка64		= Base64Строка(Данные);
		Строка64		= Прав(Строка64,СтрДлина(Строка64)-4);
		ДанныеНаЗапись 	= Base64Значение(Строка64);
		ДанныеНаЗапись.Записать(ИмяФайла);
	
	
КонецПроцедуры
Добавить комментарий

Обмен данными XDTO (пример)

Обмен данными XDTO (пример)

XDTO

Добавил: Dmitry Zhurbenko

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



&НаСервереБезКонтекста
Функция ПолучитьXMLФайл(ГУИДФормы)
	
	ИмяТемпФайла = ПолучитьИмяВременногоФайла("xml");                                                
	Данные = Новый ЗаписьXML;
	Данные.ОткрытьФайл(ИмяТемпФайла);
	Данные.ЗаписатьОбъявлениеXML();
	Данные.ЗаписатьНачалоЭлемента("Данные");
	
	Фабрика = СоздатьФабрикуXDTO("D:\Приемник.xsd");
	
	РаботникиОбъектТип= Фабрика.Тип("http://v8.1c.ru/8.1/data/enterprise/current-config","CatalogObject.Работники");
	
		
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	Сотрудники.Ссылка РаботникСсылка,
	|	Сотрудники.ПометкаУдаления DeletionMark,
	|	Сотрудники.Родитель РодительСсылка,
	|	Сотрудники.ЭтоГруппа IsFolder,
	|	Сотрудники.Код Code,
	|	Сотрудники.Наименование Description,
	|	Сотрудники.ДатаРождения ДеньРождения,
	|	Сотрудники.ПричинаУвольнения ПричинаУвольнения
	|ИЗ
	|	Справочник.Сотрудники КАК Сотрудники";
	
	Результат = Запрос.Выполнить();
	
	ВыборкаДетальныеЗаписи = Результат.Выбрать();
	
	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
		РаботникиОбъект = Фабрика.Создать(РаботникиОбъектТип);		
		РаботникиОбъект.Ref = ВыборкаДетальныеЗаписи.РаботникСсылка.УникальныйИдентификатор();
		РаботникиОбъект.Parent = ВыборкаДетальныеЗаписи.РодительСсылка.УникальныйИдентификатор();

		Если ВыборкаДетальныеЗаписи.IsFolder Тогда
			ЗаполнитьЗначенияСвойств(РаботникиОбъект,ВыборкаДетальныеЗаписи,,"ДеньРождения,ПричинаУвольнения");
		Иначе
			ЗаполнитьЗначенияСвойств(РаботникиОбъект,ВыборкаДетальныеЗаписи);
			РаботникиОбъект.Автомобиль = Неопределено;
			РаботникиОбъект.Должность = новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000");
            РаботникиОбъект.Комментарий = "Импорт из исходной базы";
			РаботникиОбъект.Организация = новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000");
		КонецЕсли; 
		
		Фабрика.ЗаписатьXML(Данные,РаботникиОбъект);
	КонецЦикла;
	
		
	
	Данные.ЗаписатьКонецЭлемента();
	Данные.Закрыть();
	
	Двоичное=Новый ДвоичныеДанные(ИмяТемпФайла);
	Адрес=ПоместитьВоВременноеХранилище(Двоичное,ГУИДФормы);
	Возврат Адрес;
КонецФункции

&НаКлиенте
Процедура Загрузить(Команда)
	
	Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
	Диалог.Заголовок = "Выберите файл для загрузки";
	Диалог.Фильтр = "xml |*.xml|"; // картинки
	
	Если Диалог.Выбрать() Тогда
		Сообщить(Диалог.ПолноеИмяФайла);
		
	Иначе
		Возврат;
	КонецЕсли;
	
	ДвоичныеДанные = Новый ДвоичныеДанные(Диалог.ПолноеИмяФайла);
	ГуидФормы = Этаформа.УникальныйИдентификатор;
	Адрес = ПоместитьВоВременноеХранилище(ДвоичныеДанные,ГуидФормы);
	
	ЗагрузитьНаСервере(Адрес);
	
КонецПроцедуры


&НаСервереБезКонтекста
Процедура ЗагрузитьНаСервере(Адрес)
	
	ТемпФайл = ПолучитьИмяВременногоФайла("xml");
	ДвоичныеДанные = ПолучитьИзВременногоХранилища(Адрес);
	ДвоичныеДанные.Записать(ТемпФайл);
	Данные = Новый ЧтениеXML;
	Данные.ОткрытьФайл(ТемпФайл);
	Данные.Прочитать();
	Данные.Прочитать();
	
	Пока СериализаторXDTO.ВозможностьЧтенияXML(Данные) Цикл
		РаботникОбъект = СериализаторXDTO.ПрочитатьXML(Данные);
		РаботникОбъект.ОбменДанными.Загрузка=Истина;
		РаботникОбъект.Записать();
	КонецЦикла; 
	
	Данные.Закрыть();
	
КонецПроцедуры 
Добавить комментарий

Вывод произвольной Таблицы Значений в Табличный Документ

Вывод произвольной Таблицы Значений (ТЗ) в Табличный Документ

8.2 ТЗ ТабличныйДокумент ТаблицаЗначений Вывод

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

	Для каждого Колонка Из Построитель.ВыбранныеПоля Цикл
	   Колонка.Представление = РезультатТЗ.Колонки[Колонка.Имя].Заголовок;
	КонецЦикла; 

	МакетТД = Новый ТабличныйДокумент;
	Построитель.Вывести(МакетТД);
	ОбластьТД = МакетТД.Область();
	ОбластьТД.ШиринаКолонки = 20;	
	МакетТД.ТолькоПросмотр = Истина;
	МакетТД.ФиксацияСверху = 4;
	МакетТД.ОтображатьЗаголовки = Истина;
	МакетТД.Показать();
		
КонецПроцедуры
Добавить комментарий

Поиск по ГУИД в COM

COM GUID

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

Получить ссылку по типу и гуид

Тип = Тип(ПоследняяОткрытаяСтрока.ТипЗначенияXML);
УИД = Новый УникальныйИдентификатор(ПоследняяОткрытаяСтрока.ЗначениеXML);
Массив = Новый Массив;
Массив.Добавить(УИД);
Значение = Новый (Тип, Массив);
Добавить комментарий

Как выбрать наибольшее значение из ТЗ

Как выбрать наибольшее значение из ТЗ

Как выбрать наибольшее значение из ТЗ

ИстДанных = Новый ОписаниеИсточникаДанных(ТЗ);
ИстДанных.Колонки.Кол.Итог = "Максимум(Кол)" ;
ПостроительЗапроса = Новый ПостроительЗапроса; 
ПостроительЗапроса.ИсточникДанных = ИстДанных; 
Результат = ПостроительЗапроса.Результат; // тип РезультатЗапроса     
 
ТЗРез = Результат.Выгрузить();
МаксКол = ТЗРез[0].Кол;
Добавить комментарий

Раскрасить даты календаря

Процкдура раскрашивает даты в календаре

календарь дата

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

Программное открытие отчета или обработки из справочника "ВнешниеОбработки"

Функция открывает внешний отчет или обработку из справочника "ВнешниеОбработки", нужно передать только имя обработки.

отчет обработка внешний программно

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

Запрет выгрузки в КД по дате запрета редактирования

ПередКонвертациейОбъекта, глобальное событие

КД Дата запрета

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

TurboConf

Удобный поиск шаблонов кода

прямо в Конфигураторе

Узнать подробнее