Загрузка из Excel файла (через ADODB.Connection) в 1С 8.3
👉@DevLab1C
&НаСервере
Процедура ЗагрузитьИзXLS_ADODB()
// Создание COM-объекта для соединения
ADODB_conn = Новый COMОбъект("ADODB.Connection");
// Установка строки соединения
ADODB_conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;
|Data Source="+ИмяФайла+";
|Extended Properties=""Excel 12.0 XML;HDR=YES"";";
ADODB_conn.Open(); // Открытие соединения
// Создание COM-объекта для получения выборки
ADODB_rec = Новый COMОбъект("ADODB.Recordset");
ТекстЗапроса = "SELECT * FROM [ЛистN1$]";
// Выборка (запрос)
ADODB_rec.Open(ТекстЗапроса, ADODB_conn);
// Обход результата выборки
Пока НЕ ADODB_rec.EOF() Цикл
ЗначениеКолонки1 = ADODB_rec.Fields.Item("КолонкаN1").Value; // Обращение по имени колонки
ЗначениеКолонки2 = ADODB_rec.Fields.Item(0).Value; // Обращение по индексу колонки
ADODB_rec.MoveNext();
КонецЦикла;
ADODB_rec.Close();
ADODB_rec = Неопределено;
ADODB_conn.Close();
ADODB_conn = Неопределено;
КонецПроцедуры
👉@DevLab1C
🔥3👍1
👍5🔥4
Обычные формы. Как организовать подбор в табличную часть
Рассмотрим решение задачи на примере формы документа, у которого имеется табличная часть «Заказ-наряды».
1. На форме документа на командную панель табличной части «Заказ-наряды» добавляем кнопку подбора и прописываем её код:
2. Далее у табличной части находим событие «ОбработкаВыбора» и прописываем для него код:
👉@DevLab1C
Рассмотрим решение задачи на примере формы документа, у которого имеется табличная часть «Заказ-наряды».
1. На форме документа на командную панель табличной части «Заказ-наряды» добавляем кнопку подбора и прописываем её код:
Процедура ПодборНарядов(Кнопка)
Форма = Документы.ЗаказНаряд.ПолучитьФормуВыбора(, ЭлементыФормы.ЗаказНаряды, ЭтотОбъект);
Форма.ЗакрыватьПриВыборе = Ложь;
Форма.Открыть();
КонецПроцедуры
2. Далее у табличной части находим событие «ОбработкаВыбора» и прописываем для него код:
Процедура ЗаказНарядыОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Если ТипЗнч(ВыбранноеЗначение) = Тип("ДокументСсылка.ЗаказНаряд") Тогда
Если ЗаказНаряды.НайтиСтроки(Новый Структура("ЗаказНаряд", ВыбранноеЗначение)).Количество() = 0 Тогда
НоваяСтрока = ЗаказНаряды.Добавить();
НоваяСтрока.ЗаказНаряд = ВыбранноеЗначение;
// также здесь можно выполнить дополнительные обработки
КонецЕсли;
КонецЕсли;
КонецПроцедуры
👉@DevLab1C
🔥3
Есть список контрагентов, нужно быстро узнать их коды в базе
Делаем такой запрос где в кавычках прописываем список наименований контрагентов (должен 100% совпадать с названиями контрагентов в базе):
Таким образом мы избавляемся от необходимости вручную прописывать список контрагентов в запросе, работа происходит в разы быстрее за счёт использования списка через запятую.
👉@DevLab1C
Делаем такой запрос где в кавычках прописываем список наименований контрагентов (должен 100% совпадать с названиями контрагентов в базе):
Таким образом мы избавляемся от необходимости вручную прописывать список контрагентов в запросе, работа происходит в разы быстрее за счёт использования списка через запятую.
👉@DevLab1C
👍3🔥2
СКД. Как вывести документ в виде: Г00001 от 01.01.2019, чтобы по двойному клику его можно было открыть
- По умолчанию документы в СКД выводятся в следующем виде:
- Мы сделаем его красивым и сокращенным:
- Для этого нужно прописать следующее выражение в колонку «Выражение представления» по этому полю:
👉@DevLab1C
- По умолчанию документы в СКД выводятся в следующем виде:
- Мы сделаем его красивым и сокращенным:
- Для этого нужно прописать следующее выражение в колонку «Выражение представления» по этому полю:
👉@DevLab1C
🔥2👍1
Загрузка из Excel файла (напрямую через табличный документ) в 1С 8.3
👉@DevLab1C
&НаСервере
Процедура ЗагрузитьИзXLSНапрямую()// Начиная с версии 1С 8.3.8 (только &НаСервере)
ТабличныйДокумент.Прочитать(Объект.Файл, СпособЧтенияЗначенийТабличногоДокумента.Значение); //Способ чтения: Значение, Текст
КонецПроцедуры
👉@DevLab1C
👍2🔥1
Программно получить сохраненные пароли в базе данных 1С 8.3
👉@DevLab1C
Функция Получить_сохраненные_пароли() Экспорт // из регистра
// Функция позволяет:
// получить пароль системной учетной записи 1С
// учетный данные для обмена 1С с интернет магазином
// внутренний адрес менеджера сервиса
// пароль интернет поддержки пользователей
// и другие учетные жданные 1С
УстановитьПривилегированныйРежим(Истина);
ДанныеСтр = Новый Структура();
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| БезопасноеХранилищеДанных.Данные КАК Данные
|ИЗ
| РегистрСведений.БезопасноеХранилищеДанных КАК БезопасноеХранилищеДанных
|ГДЕ
| БезопасноеХранилищеДанных.Владелец = &Владелец";
//будет выведен не весь список, а по конкретному владельцу
//Запрос.УстановитьПараметр("Владелец", Владелец);
РезультатЗапроса = Запрос.Выполнить().Выбрать();
Если РезультатЗапроса.Следующий() Тогда
Если ЗначениеЗаполнено(РезультатЗапроса.Данные) Тогда
ДанныеИзХранилища = РезультатЗапроса.Данные.Получить();
Если ЗначениеЗаполнено(ДанныеИзХранилища) Тогда
ЗаполнитьЗначенияСвойств(ДанныеСтр, ДанныеИзХранилища);
КонецЕсли;
КонецЕсли;
КонецЕсли;
УстановитьПривилегированныйРежим(Ложь);
Возврат ДанныеСтр;
КонецФункции
👉@DevLab1C
🔥2👍1👻1
Быстрый поиск по фразе в коде (CTRL+F3)
Если в коде нужно быстро найти какую-то фразу, можно выделить её и нажать
Таким образом мы экономим время на копирование фразы (кстати, фразу можно быстро выделить, зажав
👉@DevLab1C
Если в коде нужно быстро найти какую-то фразу, можно выделить её и нажать
CTRL + F3
, тогда она автоматически подставится в поле поиска сверху и нажатием F3
можно будет переходить по всем местам этой фразы в коде.Таким образом мы экономим время на копирование фразы (кстати, фразу можно быстро выделить, зажав
CTRL
и щелкнув внутри фразы), а также на перемещение мышью и вставку этого текста в поле поиска.👉@DevLab1C
👍3🔥1
Создание диаграммы в Экселе из 1С 8.3
👉@DevLab1C
&НаКлиенте
Процедура СоздатьДиаграммуВЭкселе(Команда)
ВывестиДиаграммуНаНовомЛисте = Истина; // Ложь - на том же листе
// Старт 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 программно
👉@DevLab1C
&НаКлиенте
Процедура Скриншот_сеанса(Полный_путь_к_файлу = "") // доступна с версии 8.3.17
// Сохранение скриншота текущего сеанса пользователя (по переданному адресу)
// Установить в настройках БД: "Управление настройками обработки ошибок" -
// "Снимок окон приложения" = "Отправлять"
#Если НЕ ВебКлиент Тогда
// Получаем имя временного файла с типом: Строка
Временный_zip_файл = ПолучитьИмяВременногоФайла("zip");
// Регистрация (сохранение и отправки данных) ошибки
Отчет_об_ошибке = Новый ОтчетОбОшибке(ИнформацияОбОшибке());
Отчет_об_ошибке.Записать(Временный_zip_файл, Ложь);
// Получаем имя каталога временных файлов пользователя
Каталог_файлов = КаталогВременныхФайлов() + СтрЗаменить(Новый УникальныйИдентификатор, "-", "");
// Чтение файла ZIP
Архив_zip = Новый ЧтениеZipФайла(Временный_zip_файл);
Архив_zip.ИзвлечьВсе(Каталог_файлов, РежимВосстановленияПутейФайловZIP.НеВосстанавливать);
// Случайное число в диапазоне от 1 до 999999 для рандомного имени файла
ГенераторСлЧисел = Новый ГенераторСлучайныхЧисел();
СлучЧисло=ГенераторСлЧисел.СлучайноеЧисло(1,999999);
// Сохраняем скриншот 1С в папку
Путь_к_скриншоту = Каталог_файлов + "\screen"+СлучЧисло+".png";
КопироватьФайл(Путь_к_скриншоту, Полный_путь_к_файлу);
// Чистим мусор
УдалитьФайлы(Временный_zip_файл);
УдалитьФайлы(Каталог_файлов);
#КонецЕсли
КонецПроцедуры
👉@DevLab1C
❤2👍1🔥1
Как ускорить запрос заменив оператор ИЛИ объединением
Запрос будет работать значительно быстрее, если в выборке из большой таблицы не использовать оператор ИЛИ в условие ГДЕ или в условии соединения, а заменить это на объединение результатов двух запросов:
👉@DevLab1C
Запрос будет работать значительно быстрее, если в выборке из большой таблицы не использовать оператор ИЛИ в условие ГДЕ или в условии соединения, а заменить это на объединение результатов двух запросов:
👉@DevLab1C
🔥3👍2
Заполнение реквизита формы Дерева Значений из Запроса в 1С 8.3
👉@DevLab1C
&НаСервере
Процедура ЗаполнениеРеквизитаФормыДеревоЗначенийИзЗапроса()
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| Материалы.Ссылка КАК Наименование
| Материалы.Родитель КАК Родитель
|ИЗ
| Справочник.Материалы КАК Материалы
|УПОРЯДОЧИТЬ ПО
| Наименование ИЕРАРХИЯ
|ИТОГИ ПО
| Родитель";
//Внимание! Если правильно не указать вид обхода результата выборки по запросу,
//то мы получим обычную таблицу значений
ДеревоЗначений = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
// Заполнение дерева значений из результата запроса
// колонка "Материалы" – это элемент справочника, колонка "Родитель" – это группа
ЗначениеВРеквизитФормы(ДеревоЗначений, "ДеревоЗначНаФорме"); // Преобразование в реквизит формы (табличное поле)
КонецПроцедуры
👉@DevLab1C
🔥3
Поиск строки в Дереве Значений в 1С 8.3
👉@DevLab1C
&НаСервере
Процедура ПоискСтрокиВДеревеЗначений() // найдём 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
Разработка правил обмена 1С с использованием "Конвертация данных 2.0" (на примере УНФ - Бухгалтерия)
Перенос начальных остатков из УТ11 в БП3. Разработка правил обмена КД 2. JSON в XML
Интеграция Power BI и 1С:УНФ, Web API на 1С, Odata. Занятие 28. Продв. курс по программир. 1С.
Обмен между 1С по-новому! Odata - это просто.
источник
👉@DevLab1C
👍2🔥2