1С:Предприятие 8
785 subscribers
55 photos
164 videos
53 links
🔥 Разработка в 1С — просто и понятно! 🔥

Полезные фишки и лайфхаки для разработчиков
Объяснение сложных тем простыми словами
Готовые решения, сниппеты и примеры кода
Разбор ошибок и способов их устранения
Новости и тренды в мире 1С
Download Telegram
Media is too big
VIEW IN TELEGRAM
Настройка работы 1С Предприятия 8.3 с использованием PostgreSQL в среде Linux

👉@DevLab1C
👍2🔥1
Выборка записей запроса только на которые имеются пользовательские права в 1С 8.3


&НаСервере
Процедура ВыборкаЗаписейЗапросаТолькоНаКоторыеИмеютсяПользовательскиеПрава()

// Необходимо только для баз, в которых ограничение прав доступа работает на уровне записей (RLS)
// Данная реализация кода дает возможность выполнить запрос без ошибки
// и выбрать только те данные, на которые у пользователя есть права
Запрос = Новый Запрос("ВЫБРАТЬ РАЗРЕШЕННЫЕ
| Ссылка
|ИЗ
| Документ.ПоступлениеМатериалов");

РезультатЗапроса = Запрос.Выполнить();
Если Не РезультатЗапроса.Пустой() Тогда // Такая проверка рекомендуется фирмой 1С
Записи = РезультатЗапроса.Выбрать();
Пока Записи.Следующий() Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;
Иначе // Сообщить("Данные отсутствуют!");
КонецЕсли;

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


👉@DevLab1C
🔥2👍1
Media is too big
VIEW IN TELEGRAM
Как «поймать» медленные запросы

00:00 — Введение
00:57 — Обзор инструментов поиска медленных запросов
03:02 — Схема установки базы Монитор
05:33 — Создание отдельного кластера и базы для загрузки Монитора
06:45 — Подключение созданной базы и загрузка конфигурации Монитор
07:38 — Настройка мониторинга запросов
19:29 — Пример анализа запроса из медленного отчета
23:01 — Настройка отображения запросов в терминах метаданных
25:03 — Анализ параметров и просмотр плана запроса
26:00 — Пример запроса без контекста
26:45 — Подведение итогов первого занятия

источник

👉@DevLab1C
🔥4👍3
Выбор Excel файла в 1С 8.3


&НаКлиенте
Процедура ФайлНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) //необходимо в событии "НачалоВыбора" поля ввода вызвать ДиалогВыбораФайла

Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Диалог.Заголовок = "Выберите файл Excel";
Диалог.ПредварительныйПросмотр = Ложь;
Диалог.Фильтр = "(*.xls,*.xlsx)|*.xls;*.xlsx;|Microsoft Excel 97/2000/XP/2003 (*.xls)|*.xls|Microsoft Excel 2007/2010 (*.xlsx)|*.xlsx";

Если ЗначениеЗаполнено(Объект.Файл) Тогда
Диалог.ПолноеИмяФайла= Объект.Файл;
КонецЕсли;

Если Диалог.Выбрать() Тогда
Объект.Файл = Диалог.ПолноеИмяФайла;
КонецЕсли;

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


👉@DevLab1C
🔥3👍1
Загрузка из Excel файла (через ADODB.Connection) в 1С 8.3


&НаСервере
Процедура ЗагрузитьИз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
Печатные формы

Конструктор печатных форм, макет, табличный документ. Разбор ошибок новичков
Внешняя печатная форма в 1С
БСП. Подсистема Печать. Макеты Печатных Форм. Подключение нового документа

источник

👉@DevLab1C
👍5🔥4
Обычные формы. Как организовать подбор в табличную часть

Рассмотрим решение задачи на примере формы документа, у которого имеется табличная часть «Заказ-наряды».

1. На форме документа на командную панель табличной части «Заказ-наряды» добавляем кнопку подбора и прописываем её код:


Процедура ПодборНарядов(Кнопка)
Форма = Документы.ЗаказНаряд.ПолучитьФормуВыбора(, ЭлементыФормы.ЗаказНаряды, ЭтотОбъект);
Форма.ЗакрыватьПриВыборе = Ложь;
Форма.Открыть();
КонецПроцедуры


2. Далее у табличной части находим событие «ОбработкаВыбора» и прописываем для него код:


Процедура ЗаказНарядыОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)

СтандартнаяОбработка = Ложь;

Если ТипЗнч(ВыбранноеЗначение) = Тип("ДокументСсылка.ЗаказНаряд") Тогда
Если ЗаказНаряды.НайтиСтроки(Новый Структура("ЗаказНаряд", ВыбранноеЗначение)).Количество() = 0 Тогда
НоваяСтрока = ЗаказНаряды.Добавить();
НоваяСтрока.ЗаказНаряд = ВыбранноеЗначение;

// также здесь можно выполнить дополнительные обработки
КонецЕсли;
КонецЕсли;
КонецПроцедуры


👉@DevLab1C
🔥3
Есть список контрагентов, нужно быстро узнать их коды в базе

Делаем такой запрос где в кавычках прописываем список наименований контрагентов (должен 100% совпадать с названиями контрагентов в базе):

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

👉@DevLab1C
👍3🔥2
СКД. Как вывести документ в виде: Г00001 от 01.01.2019, чтобы по двойному клику его можно было открыть

- По умолчанию документы в СКД выводятся в следующем виде:

- Мы сделаем его красивым и сокращенным:

- Для этого нужно прописать следующее выражение в колонку «Выражение представления» по этому полю:

👉@DevLab1C
🔥2👍1
Загрузка из Excel файла (напрямую через табличный документ) в 1С 8.3


&НаСервере
Процедура ЗагрузитьИзXLSНапрямую()// Начиная с версии 1С 8.3.8 (только &НаСервере)

ТабличныйДокумент.Прочитать(Объект.Файл, СпособЧтенияЗначенийТабличногоДокумента.Значение); //Способ чтения: Значение, Текст

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


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


Функция Получить_сохраненные_пароли() Экспорт // из регистра

// Функция позволяет:
// получить пароль системной учетной записи 1С
// учетный данные для обмена 1С с интернет магазином
// внутренний адрес менеджера сервиса
// пароль интернет поддержки пользователей
// и другие учетные жданные 1С

УстановитьПривилегированныйРежим(Истина);

ДанныеСтр = Новый Структура();

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| БезопасноеХранилищеДанных.Данные КАК Данные
|ИЗ
| РегистрСведений.БезопасноеХранилищеДанных КАК БезопасноеХранилищеДанных
|ГДЕ
| БезопасноеХранилищеДанных.Владелец = &Владелец";

//будет выведен не весь список, а по конкретному владельцу
//Запрос.УстановитьПараметр("Владелец", Владелец);
РезультатЗапроса = Запрос.Выполнить().Выбрать();

Если РезультатЗапроса.Следующий() Тогда
Если ЗначениеЗаполнено(РезультатЗапроса.Данные) Тогда
ДанныеИзХранилища = РезультатЗапроса.Данные.Получить();
Если ЗначениеЗаполнено(ДанныеИзХранилища) Тогда
ЗаполнитьЗначенияСвойств(ДанныеСтр, ДанныеИзХранилища);
КонецЕсли;
КонецЕсли;
КонецЕсли;

УстановитьПривилегированныйРежим(Ложь);

Возврат ДанныеСтр;

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


👉@DevLab1C
👍1🔥1