Получи случайную криптовалюту за регистрацию!

1C программист

Логотип телеграм канала @odin1c_rus — 1C программист 1
Логотип телеграм канала @odin1c_rus — 1C программист
Адрес канала: @odin1c_rus
Категории: Технологии
Язык: Русский
Количество подписчиков: 3.27K
Описание канала:

Cтатьи, курсы, советы, шаблоны кода 1С. По всем вопросам @evgenycarter

Рейтинги и Отзывы

3.00

3 отзыва

Оценить канал odin1c_rus и оставить отзыв — могут только зарегестрированные пользователи. Все отзывы проходят модерацию.

5 звезд

1

4 звезд

0

3 звезд

0

2 звезд

2

1 звезд

0


Последние сообщения 2

2022-08-19 14:53:04 Общие элементы массивов

Функция возвращает общие элементы (пересечение) двух массивов

Функция ОбщиеЭлементыМассивов(Массив1, Массив2)

Результат = Новый Массив;

Для каждого ЭлементМассива Из Массив1 Цикл
Если Массив2.Найти(ЭлементМассива) <> Неопределено И
Результат.Найти(ЭлементМассива) = Неопределено Тогда
Результат.Добавить(ЭлементМассива);
КонецЕсли;
КонецЦикла;

Возврат Результат;

КонецФункции // ОбщиеЭлементыМассивов()

@odin1C_rus
1.1K views11:53
Открыть/Комментировать
2022-08-18 09:42:37 Индикатор отчета для Обычных форм

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

Для сч = 1 по 100 Цикл
Для ф=1 по 1000 Цикл
//спим

КонецЦикла;
//ваш алгоритм обновления индикатора

Элем.Значение = сч;
ЭтаФорма.Обновить();
КонецЦикла;

ЭлементыФормы.Удалить(Элем);
КонецПроцедуры

@odin1C_rus
1.2K views06:42
Открыть/Комментировать
2022-08-17 10:10:42 Получить список принтеров

&НаКлиенте
Функция ПолучитьМассивПринтеров()

МассивПринтеров = Новый Массив;

Попытка
objWMIService = ПолучитьCOMОбъект("winmgmts:\\.\root\CIMV2");
Исключение
ТекстСообщения = НСтр("ru = 'Список принтеров не доступен!'");
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения);
Возврат МассивПринтеров;
КонецПопытки;

Выборка = objWMIService.ExecQuery("SELECT * FROM Win32_Printer",,48);

Для Каждого objItem Из Выборка Цикл
МассивПринтеров.Добавить(objItem.Caption);
КонецЦикла;

Возврат МассивПринтеров;
КонецФункции

@odin1C_rus
9.0K views07:10
Открыть/Комментировать
2022-08-16 12:52:27 Добавление данных по регистру в документ "Перенос данных" в ЗУП

&НаСервере
Процедура ДелоНаСервере()

Док = Документы.ПереносДанных.СоздатьДокумент();
Док.Дата = ТекущаяДата();
Док.ПериодРегистрации = Период.ДатаНачала;

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

Запрос.УстановитьПараметр("ДатаНачала", Период.ДатаНачала);
Запрос.УстановитьПараметр("ДатаОкончания", Период.ДатаОкончания);

РезультатЗапроса = Запрос.Выполнить();

ДокументОбъект = Док;

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

Выборка = РезультатЗапроса.Выбрать();

Пока Выборка.Следующий() Цикл
СтрокаНз = Нз.Добавить();
СтрокаНз.Период = Выборка.ДатаНачала;
СтрокаНз.Активность = Истина;
СтрокаНз.Сотрудник = Выборка.СотрудникГоловнойСотрудник;
СтрокаНз.ПорядокРасчета = Перечисления.ПорядокРасчетаСреднегоЗаработкаОбщий.Постановление2010;
СтрокаНз.ОтработаноДней = Выборка.ОтработаноДней;
СтрокаНз.ОтработаноЧасов = Выборка.ОтработаноЧасов;
КонецЦикла;

ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);
Сообщение = Новый СообщениеПользователю();
Сообщение.Текст = "Создан документ " + ДокументОбъект;
Сообщение.КлючДанных = ДокументОбъект.Ссылка;
Сообщение.ПутьКДанным = "Объект";
Сообщение.Сообщить();


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

@odin1C_rus
990 views09:52
Открыть/Комментировать
2022-08-15 10:21:55 Прогресс с помощью СКД на обычных формах

Методы для вывода прогресс-бара средствами платформы в поле состояния с помощью СКД

//УПРАВЛЕНИЕ ИНДИКАТОРОМ//
Функция ИнициализироватьИндикатор(ПраваяГраница) Экспорт
НастройкаИндикатора = Новый Структура;
//установка параметров для вывода прецентов
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.ОтображатьПроцентВывода = Истина;
ЭлементПроцессора = Новый ЭлементРезультатаКомпоновкиДанных;
Шаг = ?(ПраваяГраница = 0, 0, 100 / ПраваяГраница);
ТекПроцент = 0;
ПроцессорВывода.НачатьВывод();

НастройкаИндикатора.Вставить("ПроцессорВывода", ПроцессорВывода);
НастройкаИндикатора.Вставить("ЭлементПроцессора", ЭлементПроцессора);
НастройкаИндикатора.Вставить("Шаг", Шаг);
НастройкаИндикатора.Вставить("ТекПроцент", ТекПроцент);

Возврат НастройкаИндикатора;
КонецФункции

Процедура СдвинутьИндикатор(НастройкаИндикатора) Экспорт
Если ТипЗнч(НастройкаИндикатора) <> Тип("Структура") Тогда
Возврат;
КонецЕсли;

//получаем переменные
ТекПроцент = НастройкаИндикатора.ТекПроцент;
Шаг = НастройкаИндикатора.Шаг;
ЭлементПроцессора = НастройкаИндикатора.ЭлементПроцессора;
ПроцессорВывода = НастройкаИндикатора.ПроцессорВывода;


//вывод процента
ТекПроцент = ТекПроцент + Шаг;
ЭлементПроцессора.ПроцентВывода = ТекПроцент;
ПроцессорВывода.ВывестиЭлемент(ЭлементПроцессора);

НастройкаИндикатора.Вставить("ПроцессорВывода", ПроцессорВывода);
НастройкаИндикатора.Вставить("ЭлементПроцессора", ЭлементПроцессора);
НастройкаИндикатора.Вставить("Шаг", Шаг);
НастройкаИндикатора.Вставить("ТекПроцент", ТекПроцент);
КонецПроцедуры

Процедура ДеАктивироватьИндикатор(НастройкаИндикатора) Экспорт
ПроцессорВывода = НастройкаИндикатора.ПроцессорВывода;

ПроцессорВывода.ЗакончитьВывод();
ПроцессорВывода = Неопределено;

НастройкаИндикатора = Неопределено;
КонецПроцедуры


@odin1C_rus
1.0K views07:21
Открыть/Комментировать
2022-08-12 10:32:46 Отправка почты с вложением БСП

Пример использования функции отправки почты из БСП и преобразования табличного документа в pdf без использования временных файлов. Требуется заполненная системная учетная запись в справочнике УчетныеЗаписиЭлектроннойПочты

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

Отправлено = Ложь;

Если УчетнаяЗаписьПочтыОтправителя = Неопределено Или УчетнаяЗаписьПочтыОтправителя.Пустая() Тогда

Возврат Отправлено;

КонецЕсли;

ТабДок = ПолучитьИзВременногоХранилища(АдресФайлаВоВременномХранилище);

ПотокФайла = Новый ПотокВПамяти();
ТабДок.Записать(ПотокФайла, ТипФайлаТабличногоДокумента.PDF);

ДвоичныеДанныеФайла = ПотокФайла.ЗакрытьИПолучитьДвоичныеДанные();

ВременноеХранилищеФайла = ПоместитьВоВременноеХранилище(ДвоичныеДанныеФайла, Новый УникальныйИдентификатор);

Вложения = Новый Массив;

ОписаниеВложения = Новый Структура("Представление, АдресВоВременномХранилище", ТекстПисьма + ".pdf", ВременноеХранилищеФайла);

Вложения.Добавить(ОписаниеВложения);

ПараметрыПисьма = Новый Структура;
ПараметрыПисьма.Вставить("Кому", ПочтаПолучателя);
ПараметрыПисьма.Вставить("Тема", ТемаПисьма);
ПараметрыПисьма.Вставить("Тело", ТекстПисьма);
ПараметрыПисьма.Вставить("ТипТекста", "ПростойТекст");
ПараметрыПисьма.Вставить("Вложения", Вложения);

Попытка

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

Если ЗначениеЗаполнено(Идентификатор) Тогда

Отправлено = Истина;

КонецЕсли;

Исключение

ЗаписьЖурналаРегистрации("Отправка письма " + ПочтаПолучателя, УровеньЖурналаРегистрации.Ошибка,,,ОписаниеОшибки());

КонецПопытки;

Возврат Отправлено;

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

@odin1C_rus
1.3K views07:32
Открыть/Комментировать
2022-08-11 13:10:08 Добавить водяной знак (изображение) в табличный документ

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

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

Рисунок = ТабДок.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);

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

// Расположить рисунок по центру изображения

Рисунок.Верх = ТабДок.ВысотаТаблицы/2;
Рисунок.Лево = ТабДок.ШиринаТаблицы/2 + Рисунок.Ширина/2;

@odin1C_rus
1.2K views10:10
Открыть/Комментировать
2022-08-10 12:27:03 Как сохранять и восстанавливать настройки системы компоновки данных
Через XML файл

//Сохранение настроек в файл может быть выполнено следующим образом (листинг 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(Чтение);

ОтчетОбъект.КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);

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

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

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


@odin1C_rus
1.2K views09:27
Открыть/Комментировать
2022-08-09 10:12:54
Выделение текущей строки в отчете

Выделяет текущие строки в отчете. Добавляется в форму отчета.

@odin1C_rus
1.1K views07:12
Открыть/Комментировать
2022-08-08 10:48:02 Программно свернуть все уровни группировок табличного документа

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

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

@odin1C_rus
1.3K views07:48
Открыть/Комментировать