1С:Предприятие 8
812 subscribers
69 photos
168 videos
56 links
🔥 Разработка в 1С — просто и понятно! 🔥

Полезные фишки и лайфхаки для разработчиков
Объяснение сложных тем простыми словами
Готовые решения, сниппеты и примеры кода
Разбор ошибок и способов их устранения
Новости и тренды в мире 1С
Download Telegram
Создание диаграммы в Экселе из 1С 8.3


&НаКлиенте
Процедура СоздатьДиаграммуВЭкселе(Команда)

ВывестиДиаграммуНаНовомЛисте = Истина; // Ложь - на том же листе

// Старт COM:Excel
Попытка
Excel_App = Новый COMОбъект("Excel.Application");
Book_Excel = Excel_App.Workbooks.Add();
Sheet_Excel = Book_Excel.Sheets(1);
Исключение
Сообщить("Не удалось подключиться к Excel, возможно программа на компьютере не установлена! Операция прервана!");
Возврат;
КонецПопытки;

// Заполнение листа произвольными данными
ГенераторСлучайныхЧисел = Новый ГенераторСлучайныхЧисел(ТекущаяУниверсальнаяДатаВМиллисекундах());

Sheet_Excel.Cells(2, 1).Value = "Вылечилось";
Sheet_Excel.Cells(3, 1).Value = "Заболело";
Для Ном = 1 По 6 Цикл // Полугодие
Sheet_Excel.Cells(1, Ном+1).Value = Формат(ДобавитьМесяц(НачалоГода(ТекущаяДата()), Ном-1), "ДФ=MMM");
Sheet_Excel.Cells(2, Ном+1).Value = ГенераторСлучайныхЧисел.СлучайноеЧисло(0, 1000);
Sheet_Excel.Cells(3, Ном+1).Value = ГенераторСлучайныхЧисел.СлучайноеЧисло(0, 1000);
КонецЦикла;

// Создание диаграммы и заполнение её свойств
ДиапазонДанных = Sheet_Excel.Range(Sheet_Excel.Cells(1, 1), Sheet_Excel.Cells(3, 13)); // область данных
п_ТипДиаграммы = 54; // тип диаграммы: объемная гистограмма с группировкой;
п_ЗаголовокДиаграммы = "Диаграмма выздоровевших за полугодие"; // заголовок

Если ВывестиДиаграммуНаНовомЛисте = Ложь Тогда // на листе, где находяться данные для заполнения

Excel_Diagram = Sheet_Excel.ChartObjects().Add(1, 1000, 500, 400).Chart; // создание диаграммы и определение ее размеров
Excel_Diagram.HasDataTable = 0; // отображать под диаграммой таблицу с данными

Excel_Diagram.HasTitle = 1; // отображать заголовок
Excel_Diagram.SetSourceData(ДиапазонДанных); // диапазон данных диаграммы
Excel_Diagram.ChartTitle.Text = п_ЗаголовокДиаграммы;
Excel_Diagram.ChartType = п_ТипДиаграммы;

Иначе // на новом листе

Excel_App.Charts.Add(); // добавление диаграммы
Excel_App.ActiveChart.HasDataTable = 1; // отображать под диаграммой таблицу с данными

Excel_App.ActiveChart.HasTitle = 1; // отображать заголовок
Excel_App.ActiveChart.SetSourceData(ДиапазонДанных);
Excel_App.ActiveChart.ChartTitle.Text = п_ЗаголовокДиаграммы;
Excel_App.ActiveChart.ChartType = п_ТипДиаграммы;

КонецЕсли;

Excel_App.Visible = Истина; // показываем результат

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


👉@DevLab1C
👍3🔥1
Делаем скриншот сеанса в 1С 8.3 программно


&НаКлиенте
Процедура Скриншот_сеанса(Полный_путь_к_файлу = "") // доступна с версии 8.3.17

// Сохранение скриншота текущего сеанса пользователя (по переданному адресу)
// Установить в настройках БД: "Управление настройками обработки ошибок" -
// "Снимок окон приложения" = "Отправлять"

#Если НЕ ВебКлиент Тогда

// Получаем имя временного файла с типом: Строка
Временный_zip_файл = ПолучитьИмяВременногоФайла("zip");

// Регистрация (сохранение и отправки данных) ошибки
Отчет_об_ошибке = Новый ОтчетОбОшибке(ИнформацияОбОшибке());
Отчет_об_ошибке.Записать(Временный_zip_файл, Ложь);

// Получаем имя каталога временных файлов пользователя
Каталог_файлов = КаталогВременныхФайлов() + СтрЗаменить(Новый УникальныйИдентификатор, "-", "");

// Чтение файла ZIP
Архив_zip = Новый ЧтениеZipФайла(Временный_zip_файл);
Архив_zip.ИзвлечьВсе(Каталог_файлов, РежимВосстановленияПутейФайловZIP.НеВосстанавливать);

// Случайное число в диапазоне от 1 до 999999 для рандомного имени файла
ГенераторСлЧисел = Новый ГенераторСлучайныхЧисел();
СлучЧисло=ГенераторСлЧисел.СлучайноеЧисло(1,999999);

// Сохраняем скриншот 1С в папку
Путь_к_скриншоту = Каталог_файлов + "\screen"+СлучЧисло+".png";
КопироватьФайл(Путь_к_скриншоту, Полный_путь_к_файлу);

// Чистим мусор
УдалитьФайлы(Временный_zip_файл);
УдалитьФайлы(Каталог_файлов);

#КонецЕсли

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


👉@DevLab1C
2👍2🔥1
Как ускорить запрос заменив оператор ИЛИ объединением

Запрос будет работать значительно быстрее, если в выборке из большой таблицы не использовать оператор ИЛИ в условие ГДЕ или в условии соединения, а заменить это на объединение результатов двух запросов:

👉@DevLab1C
🔥3👍2
Заполнение реквизита формы Дерева Значений из Запроса в 1С 8.3


&НаСервере
Процедура ЗаполнениеРеквизитаФормыДеревоЗначенийИзЗапроса()

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| Материалы.Ссылка КАК Наименование
| Материалы.Родитель КАК Родитель
|ИЗ
| Справочник.Материалы КАК Материалы
|УПОРЯДОЧИТЬ ПО
| Наименование ИЕРАРХИЯ
|ИТОГИ ПО
| Родитель";

//Внимание! Если правильно не указать вид обхода результата выборки по запросу,
//то мы получим обычную таблицу значений
ДеревоЗначений = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);

// Заполнение дерева значений из результата запроса
// колонка "Материалы" – это элемент справочника, колонка "Родитель" – это группа
ЗначениеВРеквизитФормы(ДеревоЗначений, "ДеревоЗначНаФорме"); // Преобразование в реквизит формы (табличное поле)

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


👉@DevLab1C
🔥3
Поиск строки в Дереве Значений в 1С 8.3


&НаСервере
Процедура ПоискСтрокиВДеревеЗначений() // найдём 1-ю строку со значением «Элемент №1» в дереве значений

// Преобразование реквизита формы в объект прикладного типа ДеревоЗначений
ДеревоЗначений = РеквизитФормыВЗначение("ДеревоЗначНаФорме");

// Поиск строки... (если строка не найдена, вернёт "Неопределено")
НайденнаяСтрокаДЗ = ДеревоЗначений.Строки.Найти("Первый (вложенный) элемент", "Наименование", Истина);

// Анализ результата поиска
Если НайденнаяСтрокаДЗ = Неопределено Тогда
Сообщить("Строка не найдена");
Иначе // вренёт первую найденную строку
Сообщить("Найдена: "+НайденнаяСтрокаДЗ.Наименование + " (" + НайденнаяСтрокаДЗ.Родитель.Наименование + ")");
КонецЕсли;

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


👉@DevLab1C
👍2
Правила обмена 1С

Разработка правил обмена 1С с использованием "Конвертация данных 2.0" (на примере УНФ - Бухгалтерия)
Перенос начальных остатков из УТ11 в БП3. Разработка правил обмена КД 2. JSON в XML
Интеграция Power BI и 1С:УНФ, Web API на 1С, Odata. Занятие 28. Продв. курс по программир. 1С.
Обмен между 1С по-новому! Odata - это просто.

источник

👉@DevLab1C
👍3🔥21
Помогаторы разработчика 1С

Данная статья написана по моему выступлению на Infostart Event 2022, на котором я рассказал об инструментах и «лайфхаках», которые использую в своей работе и которые, как мне кажется, помогают сделать работу разработчика 1С проще, удобнее, а главное, эффективней. Многие вещи, возможно, покажутся вам очевидными или совсем простыми. Но часто я вижу, что разработчики пренебрегают ими, а ведь именно такие «мелочи» и делают нашу жизнь проще.

https://habr.com/ru/articles/780588/

👉@DevLab1C
🔥4
Свертка всего Дерева Значений (на форме) в 1С 8.3


&НаКлиенте
Процедура СверткаВсегоДереваЗначенийНаФорме()

// ДеревоЗначНаФорме - на форме
КоллекцияЭлементовДерева=ДеревоЗначНаФорме.ПолучитьЭлементы();
//Свернуть дерево
Для Каждого СтрокаКоллекции Из КоллекцияЭлементовДерева Цикл
ИдСтроки=СтрокаКоллекции.ПолучитьИдентификатор();
Элементы.ДеревоЗначНаФорме.Свернуть(ИдСтроки); // Сворачиваем каждую строку тут
КонецЦикла;

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


👉@DevLab1C
🔥3👍1
Пример реализации двухфакторной авторизации на 1С 8.3.21


&НаСервере
Процедура СозданиеШаблонаНастроекВторогоФактораАутентификации() // кнопка в обработке

ШаблонНастроек = ШаблоныНастроекВторогоФактораАутентификации.СоздатьШаблон();

ЗапросHTTP = Новый HTTPЗапрос;
ЗапросHTTP.АдресРесурса = "&host"; //в этот параметр на следующем шаге запишется адрес куда отправлять HTTP запрос
ЗапросHTTP.УстановитьТелоИзСтроки("Ваш код &secret","utf-8"); //тут можно изменить текстовку, обязательно ставим кодировку

ШаблонНастроек.HTTPЗапросНаАутентификацию = ЗапросHTTP;
ШаблонНастроек.МетодHTTPЗапросаНаАутентификацию = "POST"; //тут или GET, или POST,
//я в дальнейшем буду запрашивать пароли через POST
ШаблонНастроек.Имя = "ИмяШаблона"; //задаем имя шаблона, который используем в дальнейшем для назначения пользователю

ШаблонНастроек.Записать();

// Ставим галочку в конфигураторе у пользователя
// (Администрирование->Пользователи->ищем кому поставить) "Аутентификация токеном доступа"

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

&НаСервере
Процедура НазначениеШаблонаВторогоФактораАутентификации()

Пользователь = ПользователиИнформационнойБазы.НайтиПоИмени("ИмяПользователя"); //ИмяПользователя - меняем на имя пользователя
НастройкаВФА = Новый НастройкаВторогоФактораАутентификации;
НастройкаВФА.ИмяШаблонаНастройки = "ИмяШаблона"; //Имя шаблона задавали на 1-ом этапе

ПараметрыНастройки = Новый Соответствие;
ПараметрыНастройки.Вставить("host","https://"127.0.0.1/otpavkod/hs/sendpass/?tel=123456789"); //Задаем адрес на который будет отправлен HTTP Запрос с кодом для авторизации
НастройкаВФА.Параметры = ПараметрыНастройки; //Задаем значение настройки

МассивНастроек = Новый Массив;
МассивНастроек.Добавить(НастройкаВФА); //задаем массив настроек, тут важно, что это массив, а значит можно указать несколько настроек аутентификации

Пользователь.НастройкиВторогоФактораАутентификации = МассивНастроек; //Устанавливаем настройки пользователю
Пользователь.ОбработкаНастроекВторогоФактораАутентификации = ТипОбработкиНастроекВторогоФактораАутентификации.ИспользоватьСледующуюПриОшибке; //что делать при некорректном вводе кода
Пользователь.Записать();

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


👉@DevLab1C
🔥2👍1
🚀 Подборка Telegram каналов для программистов


1C разработка 📌
https://t.iss.one/odin1C_rus Cтатьи, курсы, советы, шаблоны кода 1С
https://t.iss.one/DevLab1C 1С:Предприятие 8
https://t.iss.one/razrab_1C 1C Разработчик
https://t.iss.one/buh1C_prog 1C Программист | Бухгалтерия и Учёт
https://t.iss.one/rabota1C_rus Вакансии для программистов 1С

Системное администрирование, DevOps 📌
https://t.iss.one/bash_srv Bash Советы
https://t.iss.one/win_sysadmin Системный Администратор Windows
https://t.iss.one/sysadmin_girl Девочка Сисадмин
https://t.iss.one/srv_admin_linux Админские угодья
https://t.iss.one/linux_srv Типичный Сисадмин
https://t.iss.one/devopslib Библиотека девопса | DevOps, SRE, Sysadmin
https://t.iss.one/linux_odmin Linux: Системный администратор
https://t.iss.one/devops_star DevOps Star (Звезда Девопса)
https://t.iss.one/i_linux Системный администратор
https://t.iss.one/linuxchmod Linux
https://t.iss.one/sys_adminos Системный Администратор
https://t.iss.one/tipsysdmin Типичный Сисадмин (фото железа, было/стало)
https://t.iss.one/sysadminof Книги для админов, полезные материалы
https://t.iss.one/i_odmin Все для системного администратора
https://t.iss.one/i_odmin_book Библиотека Системного Администратора
https://t.iss.one/i_odmin_chat Чат системных администраторов
https://t.iss.one/i_DevOps DevOps: Пишем о Docker, Kubernetes и др.
https://t.iss.one/sysadminoff Новости Линукс Linux

Программирование C++📌
https://t.iss.one/cpp_lib Библиотека C/C++ разработчика
https://t.iss.one/cpp_knigi Книги для программистов C/C++
https://t.iss.one/cpp_geek Учим C/C++ на примерах

Программирование Python 📌
https://t.iss.one/pythonofff Python академия.
https://t.iss.one/BookPython Библиотека Python разработчика
https://t.iss.one/python_real Python подборки на русском и английском
https://t.iss.one/python_360 Книги по Python

Java разработка 📌
https://t.iss.one/BookJava Библиотека Java разработчика
https://t.iss.one/java_360 Книги по Java Rus
https://t.iss.one/java_geek Учим Java на примерах

GitHub Сообщество 📌
https://t.iss.one/Githublib Интересное из GitHub

Базы данных (Data Base) 📌
https://t.iss.one/database_info Все про базы данных

Мобильная разработка: iOS, Android 📌
https://t.iss.one/developer_mobila Мобильная разработка
https://t.iss.one/kotlin_lib Подборки полезного материала по Kotlin

Фронтенд разработка 📌
https://t.iss.one/frontend_1 Подборки для frontend разработчиков
https://t.iss.one/frontend_sovet Frontend советы, примеры и практика!
https://t.iss.one/React_lib Подборки по React js и все что с ним связано

Разработка игр 📌
https://t.iss.one/game_devv Все о разработке игр

Библиотеки 📌
https://t.iss.one/book_for_dev Книги для программистов Rus
https://t.iss.one/programmist_of Книги по программированию
https://t.iss.one/proglb Библиотека программиста
https://t.iss.one/bfbook Книги для программистов

БигДата, машинное обучение 📌
https://t.iss.one/bigdata_1 Big Data, Machine Learning

Программирование 📌
https://t.iss.one/bookflow Лекции, видеоуроки, доклады с IT конференций
https://t.iss.one/rust_lib Полезный контент по программированию на Rust
https://t.iss.one/golang_lib Библиотека Go (Golang) разработчика
https://t.iss.one/itmozg Программисты, дизайнеры, новости из мира IT
https://t.iss.one/php_lib Библиотека PHP программиста 👨🏼‍💻👩‍💻
https://t.iss.one/nodejs_lib Подборки по Node js и все что с ним связано
https://t.iss.one/ruby_lib Библиотека Ruby программиста
https://t.iss.one/lifeproger Жизнь программиста. Авторский канал.

QA, тестирование 📌
https://t.iss.one/testlab_qa Библиотека тестировщика

Шутки программистов 📌
https://t.iss.one/itumor Шутки программистов

Защита, взлом, безопасность 📌
https://t.iss.one/thehaking Канал о кибербезопасности
https://t.iss.one/xakep_2 Хакер Free

Книги, статьи для дизайнеров 📌
https://t.iss.one/ux_web Статьи, книги для дизайнеров

Математика 📌
https://t.iss.one/Pomatematike Канал по математике
https://t.iss.one/phis_mat Обучающие видео, книги по Физике и Математике
https://t.iss.one/matgeoru Математика | Геометрия | Логика

Excel лайфхак📌
https://t.iss.one/Excel_lifehack

https://t.iss.one/mir_teh Мир технологий (Technology World)

Вакансии 📌
https://t.iss.one/sysadmin_rabota Системный Администратор
https://t.iss.one/progjob Вакансии в IT
🔥2💩1
Чтение и запись файлов в 1С 8.3


&НаСервере
Процедура ЧтениеИЗаписьФайлов()

// Любое сериализуемое значение (массив, структура, таблица значений, строки...) можно сохранить в файл
НаборСимволов = Новый Массив;
НаборСимволов.Добавить(125);
НаборСимволов.Добавить("А");
НаборСимволов.Добавить("99");
НаборСимволов.Добавить("%");
ЗначениеВФайл("D:\Symbol.txt", НаборСимволов); // работает только на &НаСервере

// Восстановление произвольных значений из файла
НаборСимволовИзФайла = ЗначениеИзФайла("D:\Symbol.txt");
Сообщить(НаборСимволовИзФайла[0]); // 125
Сообщить(НаборСимволовИзФайла[1]); // А
Сообщить(НаборСимволовИзФайла[2]); // 99
Сообщить(НаборСимволовИзФайла[3]); // %

// Запись текстового файла (работает и на &НаСервере и на &НаКлиенте)
// Параметры: Путь с именем файла, кодировка, разделитель строк (необяз.), перезаписывать файл (необяз.)
ТекстФайл = Новый ЗаписьТекста("D:\Prostokvashino.txt", КодировкаТекста.ANSI, Символы.ПС, Ложь);
ТекстФайл.ЗаписатьСтроку("Кот Матроскин");
ТекстФайл.ЗаписатьСтроку("Дядя Федор");
ТекстФайл.ЗаписатьСтроку("Шарик");
ТекстФайл.Закрыть();

// Чтение текстового файла (работает и на &НаСервере и на &НаКлиенте)
// Параметры: Путь с именем файла, кодировка, разделитель строк (необяз.), монопольный режим (необяз.)
ТекстФайл = Новый ЧтениеТекста("D:\Prostokvashino.txt", КодировкаТекста.ANSI, Символы.ПС, ,Истина);
Пока Истина Цикл // По строкам файлам
СтрокаФайла = ТекстФайл.ПрочитатьСтроку();
Если СтрокаФайла = Неопределено Тогда
Прервать;
Иначе
Сообщить(СтрокаФайла);// Вывод строки на экран
КонецЕсли;
КонецЦикла;

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


👉@DevLab1C
🔥3👍1
Операции над файлами в 1С 8.3


&НаКлиенте
Процедура ОперацииНадФайлами(Команда)

// Создание переменных (имя и путь к файлу)
ПутьКФайлу_Test="D:\Test.txt";
ПутьКФайлу_Copy="D:\Copy.txt";

// Создание пустого файла
ТекстФайл = Новый ЗаписьТекста();
ТекстФайл.Закрыть();

// Проверка на существование файла
ТекстФайл = Новый Файл(ПутьКФайлу_Test);
Если ТекстФайл.Существует() Тогда
Сообщить(ПутьКФайлу_Test+" существует!");
КонецЕсли;

// Копирование файла. Параметры: Какой файл копируем, Куда файл копируем
КопироватьФайл(ПутьКФайлу_Test, ПутьКФайлу_Copy);// Если файл существует, то перезапишет

// Перемещение файла. Параметры: Какой файл копируем, Куда файл копируем
ПереместитьФайл(ПутьКФайлу_Test, ПутьКФайлу_Copy);// Если файл существует, то перезапишет

// Поиск файлов в каталоге (функция возвращает массив значений)
// Параметры: Каталог поиска, Маска поиска, Поиск и в подкаталогах
МассивФайлов = НайтиФайлы("D:\", "*.txt", Ложь);
Для Каждого ТекФайл Из МассивФайлов Цикл
Сообщить("Найден файл: " + ТекФайл.ПолноеИмя);
КонецЦикла;

// Удаление файла
УдалитьФайлы(ПутьКФайлу_Test); // Если файл с параметром только для чтения, то будет ошибка

// Удаление файлов в каталоге по маске
// поиск в каталоге нерекурсивный
УдалитьФайлы("D:\","*.txt"); // Если маски нет, то удалятся все файлы и сам каталог

// Получение имя временного файла
ПолучитьИмяВременногоФайла(); // Например, C:\Temp\H_kImX035.tmp
ПолучитьИмяВременногоФайла(".txt"); // Например, C:\Temp\H_kImX035.txt

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


👉@DevLab1C
🔥2👍1
Получение и изменение атрибутов файла в 1С 8.3


&НаКлиенте
Процедура ПолучениеИИзменениеАтрибутовФайла(Команда)

ТекстФайл = Новый Файл("D:\Test.txt");

// Чтение атрибутов
ТекстФайл.ПолучитьВремяИзменения(); // время последнего изменения файла
ТекстФайл.ПолучитьТолькоЧтение(); // проверяем атрибут только чтение
ТекстФайл.ПолучитьНевидимость(); // проверяем атрибут hidden (скрытность, невидимость)
ТекстФайл.Размер(); // размер файла в байтах

// Получение расширение файла из его пути
ТекстФайл.Расширение(); // .txt

// Получение имени файла без расширения
ТекстФайл.ИмяБезРасширения(); // Test

// Получение информации по пути файла - это файл или каталог
Если ТекстФайл.ЭтоКаталог() Тогда
// Это каталог
ИначеЕсли ТекстФайл.ЭтоФайл() Тогда
// Это файл
КонецЕсли;

// Изменение атрибутов
ТекстФайл.УстановитьВремяИзменения(ТекущаяДата()); // меняем время последнего изменения файла
ТекстФайл.УстановитьТолькоЧтение(Ложь); // меняем атрибут только чтение
ТекстФайл.УстановитьНевидимость(Ложь); // меняем атрибут невидимости

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


👉@DevLab1C
🔥2👍1
Операции над каталогами в 1С 8.3


&НаКлиенте
Процедура ОперацииНадКаталогами(Команда)

//Создание каталога (он может уже существовать)
СоздатьКаталог("D:\Catalog");

//Создание подкаталогов
СоздатьКаталог("D:\Catalog\2020\1");

// Проверка существования каталога
Каталог = Новый Файл("D:\Catalog");
Если Каталог.Существует() Тогда
Сообщить("Каталог по пути D:\Catalog существует!");
КонецЕсли;

// Удаление каталога (вместе с файлами и подкаталогами)
УдалитьФайлы("D:\Catalog"); // Можно добавить максу

// Получение каталога временных файлов
КаталогВременныхФайлов(); // Например, C:\Windows\Temp

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


👉@DevLab1C
👍3🔥2
Получить двоичные данные двумя способами в 1С 8.3


Функция ПолучитьДвоичныеДанныеОбъекта()

// Получение двоичных данных через временный файл (и помещение их во временное хранилище)
ВременныйФайл = ПолучитьИмяВременногоФайла("SCAN");
ТабличныйДокумент.Записать(ВременныйФайл, ТипФайлаТабличногоДокумента.PDF);
АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ВременныйФайл));

// Получение двоичных данных через временный файл (и помещение их во временное хранилище)
Поток = Новый ПотокВПамяти;
ТабличныйДокумент.Записать(Поток, ТипФайлаТабличногоДокумента.PDF);
АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(Поток.ЗакрытьИПолучитьДвоичныеДанные());

Возврат АдресВоВременномХранилище;

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


👉@DevLab1C
👍1🔥1