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

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

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

КоличествоУровней = ЭлементыФормы.ПолеТабличногоДокумента1.КоличествоУровнейГруппировокСтрок() - 1;
Для Уровень = 1 По КоличествоУровней  Цикл
    ЭлементыФормы.ПолеТабличногоДокумента1.ПоказатьУровеньГруппировокСтрок(КоличествоУровней - Уровень);
КонецЦикла;

КоличествоУровней = ЭлементыФормы.ПолеТабличногоДокумента1.КоличествоУровнейГруппировокКолонок() - 1;
Для Уровень = 1 По КоличествоУровней Цикл
    ЭлементыФормы.ПолеТабличногоДокумента1.ПоказатьУровеньГруппировокКолонок(КоличествоУровней - Уровень);
КонецЦикла;

Выделение текущей строки в отчете

Выделяет текущие строки в отчете. Добавляется в форму отчета. НаКлиенте Перем ДанныеВыделенныхСтрок; НаКлиенте Процедура ОтчетТабличныйДокументПриАктивизации(Элемент) // Делаем через обработчик ожидания, чтобы дать возможность выделить несколько ст...
ChOP 97 1 2 5

TurboConf - расширение Конфигуратора 1С Промо

TurboConf повышает эффективность работы в Конфигураторе 1С и помогает программисту автоматизировать свои задачи.
bolsun
5 000 руб.

Как сохранять и восстанавливать настройки системы компоновки данных

Через XML файл
miha 83 6
//Сохранение настроек в файл может быть выполнено следующим образом (листинг 6.40):
//Листинг 6.40. Сохранение настроек
Процедура СохранитьНастройки(Кнопка)

    Настройки  = ОтчетОбъект.КомпоновщикНастроек.Настройки;
    НовыйСXDTO = Новый СериализаторXDTO(ФабрикаXDTO);
    Путь = СокрЛП(Константы.ПутьДоФайлов.Получить());

    Запись = Новый ЗаписьXML;
    
    Запись.ОткрытьФайл(Путь + "\config.xml");
    Запись.ЗаписатьОбъявлениеXML();
    
    НовыйСXDTO.ЗаписатьXML(Запись, Настройки, НазначениеТипаXML.Явное, ФормаXML.Элемент);
    
    Запись.Закрыть();

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

//Восстановление настроек из файла может быть выполнено следующим образом (листинг 6.41):
//Листинг 6.41. Восстановление настроек
Процедура ВосстановитьНастройки(Кнопка)

    Чтение = Новый ЧтениеXML;
    НовыйСXDTO = Новый СериализаторXDTO(ФабрикаXDTO);
    Путь = СокрЛП(Константы.ПутьДоФайлов.Получить());
    
    Чтение.ОткрытьФайл(Путь + "\config.xml");
    
    Настройки = НовыйСXDTO.ПрочитатьXML(Чтение);
    
    ОтчетОбъект.КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);

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

//В константе ПутьДоФайлов хранится путь до файла сохраняемых (восстанавливаемых) настроек.

//(с) Простые примеры разработки

Добавить водяной знак (изображение) в табличный документ

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

Рисунок = ТабДок.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
	
// Высота и ширина заданы по желанию, можете задать свои значения.
Рисунок.Картинка = БиблиотекаКартинок.Успешно; // Взял любую картинку из конфы для демонстрации. Фон должен быть прозрачный
Рисунок.Высота = 25;
Рисунок.Ширина = 25;   
Рисунок.ЦветФона = Новый Цвет(); // Необходимо, чтобы 1С не заливала фон по умолчанию
	
// Расположить рисунок по центру изображения
	
Рисунок.Верх = ТабДок.ВысотаТаблицы/2;
Рисунок.Лево = ТабДок.ШиринаТаблицы/2 + Рисунок.Ширина/2;

Открытый Турнир по программированию на 1С и SQL

14 октября 2021 года состоится Открытый Турнир по программированию на 1С и SQL.
FastCode 368 2 8 21
Бесплатно

Отправка почты с вложением БСП

Пример использования функции отправки почты из БСП и преобразования табличного документа в pdf без использования временных файлов. Требуется заполненная системная учетная запись в справочнике УчетныеЗаписиЭлектроннойПочты
Функция ОтправитьТабличныйДокументЭлектроннойПочтойКакPDF(УчетнаяЗаписьПочтыОтправителя, ПочтаПолучателя, ТекстПисьма, ТемаПисьма, АдресТабличногоДокументаВоВременномХранилище)

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

КонецФункции

Курс по разработке внешних компонент для 1С

Курс включает в себя разработку внешних компонент по технологии Native API на C++ как для обычной, так и для мобильной платформы, разработку внешних компонент по технологии COM на C#, а также разработку COM серверов (COM компонентов) на C#.
PROGRAM1S 5
1 750 руб.

Скопировать содержимое документа из Источник в Приемник

Если есть спецы по стандартам кода, с удовольствием "выслушаю" критику и внесу исправления
СергейТ 29 5
&НаСервере
Процедура СкопироватьСодержимоеДокумента(Приемник, Источник, Исключения="")
	Попытка
		МетаданныеДокумента = Источник.Метаданные();
	Исключение
		МетаданныеДокумента = Приемник.Метаданные();
	КонецПопытки;
	//: Приемник = Документы.ЧекККМ.СоздатьДокумент();
	
	// Удалим из строки исключений наименования свойств, которые отсутствуют в реквизитах документа
	Исключения_=ОбработатьСтрокуРеквизитов(Исключения, МетаданныеДокумента.Реквизиты);
	
	ЗаполнитьЗначенияСвойств(Приемник, Источник, ,Исключения_);
	
	Для Каждого ТекТЧ Из МетаданныеДокумента.ТабличныеЧасти Цикл
		ТекТЧИмя = ТекТЧ.Имя;
		
		// Удалим из строки исключений наименования свойств, которые отсутствуют в реквизитах табличной части
		Исключения_=ОбработатьСтрокуРеквизитов(Исключения, МетаданныеДокумента.ТабличныеЧасти[ТекТЧИмя].Реквизиты);
		
		Приемник[ТекТЧИмя].Очистить();
		Для Каждого ТекСтрИсточника Из Источник[ТекТЧИмя] Цикл
			НоваяСтрокаПриемника = Приемник[ТекТЧИмя].Добавить();
			ЗаполнитьЗначенияСвойств(НоваяСтрокаПриемника, ТекСтрИсточника,,Исключения_)
		КонецЦикла
	КонецЦикла
КонецПроцедуры

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

Сервер 1С в дата-центре. Курс

Как за день собрать и запустить крутую машину для сервера 1С в дата центре
FastCode 368 2 8 21
-10%

Проверить наличие колонки в таблице значений, когда нет доступа к самой таблице и методу Найти у коллекции Колонки

Функция ЕстьЛиКолонкаВСтрокеТЗ(ИмяКолонки, СтрокаТаблицыЗначений)
	УИД = Новый УникальныйИдентификатор(); 
	ВременнаяСтруктура = Новый Структура(ИмяКолонки, УИД); 
	ЗаполнитьЗначенияСвойств(ВременнаяСтруктура, СтрокаТаблицыЗначений); 
	Возврат ВременнаяСтруктура[ИмяКолонки] <> УИД;
КонецФункции

Защита кода 1С. Основные методы защиты конфигураций и обработок

В этой статье мы рассмотрим различные способы защиты кода разработок 1С 8.3 от взлома и нелицензионного использования. Для чего программисты обычно защищают свои разработки? Защита демо-версий продуктов Защита алгоритмов и бизнес-логики от копирования и...
bolsun 311 5 4 8

Прогресс с помощью СКД на обычных формах

Методы для вывода прогресс-бара средствами платформы в поле состояния с помощью СКД //УПРАВЛЕНИЕ ИНДИКАТОРОМ// Функция ИнициализироватьИндикатор(ПраваяГраница) Экспорт НастройкаИндикатора = Новый Структура; //установка параметров для вывода преценто...
Smaylukk 46 3

Учет оргтехники и ТМЦ в офисе

Конфигурация 1с на базе платформы 8.3 для учета оргтехники, мебели, и других ТМЦ в офисе, без лишних хлопот
Zhenek1980 2
Бесплатно

Получаем состав плана обмена с признаком регистрации

Простая функция получения состава плана обмена программно Функция ПолучитьСписокПланаОбмена(стрИмяПланаОбмена) ВыбранныйПланОбмена = Метаданные.ПланыОбмена[стрИмяПланаОбмена]; тзПланОбменаСостав = Новый ТаблицаЗначений; тзПланОбменаСостав.Колонки...
DiKSer 17 3

Курс по разработке мобильных приложений на 1С

В курсе подробно рассматривается разработка мобильных приложений на 1С для операционной системы Android. Большая часть курса подойдет и для операционных систем iOS и Windows Phone. Но процесс сборки рассмотрен только для Android.
PROGRAM1S 5
2 500 руб.

Добавление данных по регистру в документ "Перенос данных" в ЗУП

navarrow 33 1 4
&НаСервере
Процедура ДелоНаСервере()
	
	Док = Документы.ПереносДанных.СоздатьДокумент();	
	Док.Дата = ТекущаяДата();
	Док.ПериодРегистрации = Период.ДатаНачала;
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	НачислениеЗарплатыНачисления.Сотрудник КАК Сотрудник,
		|	НачислениеЗарплатыНачисления.ОтработаноДней КАК ОтработаноДней,
		|	НачислениеЗарплатыНачисления.ОтработаноЧасов КАК ОтработаноЧасов,
		|	НачислениеЗарплатыНачисления.Ссылка КАК Ссылка,
		|	НачислениеЗарплатыНачисления.ДатаНачала КАК ДатаНачала,
		|	НачислениеЗарплатыНачисления.Подразделение.ГоловнаяОрганизация КАК ПодразделениеГоловнаяОрганизация,
		|	НачислениеЗарплатыНачисления.Сотрудник.ФизическоеЛицо КАК СотрудникФизическоеЛицо,
		|	НачислениеЗарплатыНачисления.Подразделение КАК Подразделение,
		|	НачислениеЗарплатыНачисления.Сотрудник.ГоловнойСотрудник КАК СотрудникГоловнойСотрудник
		|ИЗ
		|	РегистрСведений.ВидыЗанятостиСотрудников.СрезПоследних(, ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятости.Подработка)) КАК ВидыЗанятостиСотрудниковСрезПоследних
		|		ЛЕВОЕ СОЕДИНЕНИЕ Документ.НачислениеЗарплаты.Начисления КАК НачислениеЗарплатыНачисления
		|		ПО ВидыЗанятостиСотрудниковСрезПоследних.Сотрудник = НачислениеЗарплатыНачисления.Сотрудник
		|ГДЕ
		|	НачислениеЗарплатыНачисления.ОтработаноДней > 0
		|	И НачислениеЗарплатыНачисления.Начисление.Код <> ""РК""
		|	И ВидыЗанятостиСотрудниковСрезПоследних.ДействуетДо >= НачислениеЗарплатыНачисления.ДатаНачала
		|	И НачислениеЗарплатыНачисления.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания";
	
	Запрос.УстановитьПараметр("ДатаНачала", Период.ДатаНачала);
	Запрос.УстановитьПараметр("ДатаОкончания", Период.ДатаОкончания);
	
	РезультатЗапроса = Запрос.Выполнить();
	
	ДокументОбъект = Док;
	
	Нз = ДокументОбъект.Движения.ДанныеОВремениДляРасчетаСреднегоОбщий;
	Рег = ДокументОбъект.ТаблицаРегистров.Добавить();
	Рег.Имя = "ДанныеОВремениДляРасчетаСреднегоОбщий";
	ДокументОбъект.Ответственный = ПользователиКлиентСервер.ТекущийПользователь();
			
	Выборка = РезультатЗапроса.Выбрать();
	
	Пока Выборка.Следующий() Цикл
		СтрокаНз = Нз.Добавить();
		СтрокаНз.Период = Выборка.ДатаНачала;
		СтрокаНз.Активность = Истина;
		СтрокаНз.Сотрудник = Выборка.СотрудникГоловнойСотрудник;
		СтрокаНз.ПорядокРасчета = Перечисления.ПорядокРасчетаСреднегоЗаработкаОбщий.Постановление2010;
		СтрокаНз.ОтработаноДней = Выборка.ОтработаноДней;
		СтрокаНз.ОтработаноЧасов = Выборка.ОтработаноЧасов;	
	КонецЦикла;
		
	ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);
	Сообщение = Новый СообщениеПользователю();
	Сообщение.Текст = "Создан документ " + ДокументОбъект;
	Сообщение.КлючДанных = ДокументОбъект.Ссылка;
	Сообщение.ПутьКДанным = "Объект";
	Сообщение.Сообщить();	
	
	
КонецПроцедуры

Получить список принтеров

Источник: http://1clenta.ru/pattern/3
&НаКлиенте
Функция ПолучитьМассивПринтеров()
    
    МассивПринтеров = Новый Массив;

    Попытка
        objWMIService = ПолучитьCOMОбъект("winmgmts:\\.\root\CIMV2"); 
    Исключение
        ТекстСообщения = НСтр("ru = 'Список принтеров не доступен!'");
        ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения);
        Возврат МассивПринтеров;
    КонецПопытки;
    
    Выборка = objWMIService.ExecQuery("SELECT * FROM Win32_Printer",,48);   
    
    Для Каждого objItem Из Выборка Цикл  
        МассивПринтеров.Добавить(objItem.Caption);
    КонецЦикла;
    
    Возврат МассивПринтеров;
КонецФункции

Индикатор отчета для Обычных форм

miha 83 6
Процедура СформироватьОтчет(Кнопка)
    Элем = ЭлементыФормы.Добавить(Тип("Индикатор"), "Инд1", Истина);
    Элем.Верх = ЭтаФорма.Высота - 20;
    Элем.Высота = 25;
    Элем.Ширина = 150;
    Элем.ОтображатьПроценты = Истина;
    Элем.МинимальноеЗначение = 1;
    Элем.МаксимальноеЗначение = 100;
    Состояние( "Выводим данные отчета");
    
    Для сч = 1 по 100 Цикл
        Для ф=1 по 1000 Цикл
           //спим
 
        КонецЦикла;
       //ваш алгоритм обновления индикатора
 
        Элем.Значение = сч;        
        ЭтаФорма.Обновить();
    КонецЦикла;
    
    ЭлементыФормы.Удалить(Элем);
КонецПроцедуры

Как узнать, чем занято место на диске (Windows)

Как быстро найти, что занимает больше всего места на диске. Я пользуюсь двумя бесплатными утилитами. Scanner http://steffengerlach.de/freeware/ Scanner disk Программа показывает содержимое диска в виде круговой диаграммы. Можно смотреть также структуру ...
bolsun 311 5 4 8

Курс по HTTP-сервисам в 1С

В курсе подробно рассматривается работа с HTTP протоколом в 1С: HTTP соединение, HTTP запрос и ответ, HTTP-сервисы, работа с JSON, установка веб-серверов Apache и IIS, публикация на веб-сервере, настройка HTTPS. А также рассматриваются основы HTTP протокол...
PROGRAM1S 5
1 500 руб.