Как разрешить выбирать в поле на форме номенклатуру только типа «Комплект» (или другое условие)
Рассмотрим на примере документа «Изменение состава комплекта» из сертификационного экзамена 1С: Специалист по платформе. У него есть реквизит «Комплект» с типом «Номенклатура». Нужно сделать так чтобы в этом поле пользователь мог выбирать номенклатуру только с видом номенклатуры «Комплект».
Для этого нужно у этого реквизита в свойствах указать Параметры выбора
Таким образом больше не нужно ничего писать в коде для гарантии того что пользователь сможет выбирать только комплекты.
👉@DevLab1C
Рассмотрим на примере документа «Изменение состава комплекта» из сертификационного экзамена 1С: Специалист по платформе. У него есть реквизит «Комплект» с типом «Номенклатура». Нужно сделать так чтобы в этом поле пользователь мог выбирать номенклатуру только с видом номенклатуры «Комплект».
Для этого нужно у этого реквизита в свойствах указать Параметры выбора
Отбор.ВидНоменклатуры(Комплект):
Таким образом больше не нужно ничего писать в коде для гарантии того что пользователь сможет выбирать только комплекты.
👉@DevLab1C
Как быстро поменять название процедуры, назначенной на событие
Бывает так что имя процедуры слишком длинное или оно устарело. А чтобы его поменять – нужно изменить и название процедуры в коде и исправить её название в обработчике события.
Для быстрого изменения же следует делать это в поле с именем процедуры в событии. При изменении 1С предложит поменять имя процедуры:
И при нажатии «Да» имя процедуры изменится и в коде. Таким образом можно быстро выполнять рефакторинг.
👉@DevLab1C
Бывает так что имя процедуры слишком длинное или оно устарело. А чтобы его поменять – нужно изменить и название процедуры в коде и исправить её название в обработчике события.
Для быстрого изменения же следует делать это в поле с именем процедуры в событии. При изменении 1С предложит поменять имя процедуры:
И при нажатии «Да» имя процедуры изменится и в коде. Таким образом можно быстро выполнять рефакторинг.
👉@DevLab1C
👍1
Глюки платформы. Почему нельзя добавить команду «Перейти» к нужному регистру
Если на форме документа нельзя добавить команду "Перейти" - "Остатки номенклатуры" или любого другого регистра, то нужно открыть свойства нужного регистра и снять-поставить галку "Использовать стандартные команды". Это глюк платформы.
👉@DevLab1C
Если на форме документа нельзя добавить команду "Перейти" - "Остатки номенклатуры" или любого другого регистра, то нужно открыть свойства нужного регистра и снять-поставить галку "Использовать стандартные команды". Это глюк платформы.
👉@DevLab1C
Отладка под определенным пользователем
Чтобы запускать 1С в режиме отладки из конфигуратора от имени другого пользователя, можно задать нужного пользователя в параметрах конфигуратора (меню Сервис – Параметры) на вкладке "Запуск 1С: Предприятия":
👉@DevLab1C
Чтобы запускать 1С в режиме отладки из конфигуратора от имени другого пользователя, можно задать нужного пользователя в параметрах конфигуратора (меню Сервис – Параметры) на вкладке "Запуск 1С: Предприятия":
👉@DevLab1C
👍2
Архивирование файлов средствами 1C (ZIP)
Код 1C v 8.х
👉@DevLab1C
Код 1C v 8.х
ИмяZIPФайла = ПолучитьИмяВременногоФайла(".zip");
ФайлАрхива = Новый ЗаписьZipФайла(ИмяZIPФайла, , ,
МетодСжатияZIP.Сжатие,
УровеньСжатияZIP.Оптимальный);
ФайлАрхива.Добавить(ИмяВременногоФайла,
РежимСохраненияПутейZIP.СохранятьОтносительныеПути,
РежимОбработкиПодкаталоговZIP.ОбрабатыватьРекурсивно);
ФайлАрхива.Записать();
👉@DevLab1C
Как быстро сохранить огромный отчет в EXCEL?
Иногда бывает так, что отчет очень большой (> 65535 строк), а работать с этим всем нужно через EXCEL - 1С такой отчет в xls не сохранит. Да и отчеты с меньшим количеством строк сохраняются в xls-файл очень долго.
Приведенная здесь небольшая хитрость поможет Вам сохранять для EXCEL таблицы с бОльшим количество строк и делать это быстрее.
Выведите отчет, идем в меню Файл-Сохранить копию и выбираем тип "Документ HTML4". Файл сохранится быстрее, чем в xls, и его корректно откроет EXCEL.
Потом можно в EXCEL пересохранить в xls или xlsx.
👉@DevLab1C
Иногда бывает так, что отчет очень большой (> 65535 строк), а работать с этим всем нужно через EXCEL - 1С такой отчет в xls не сохранит. Да и отчеты с меньшим количеством строк сохраняются в xls-файл очень долго.
Приведенная здесь небольшая хитрость поможет Вам сохранять для EXCEL таблицы с бОльшим количество строк и делать это быстрее.
Выведите отчет, идем в меню Файл-Сохранить копию и выбираем тип "Документ HTML4". Файл сохранится быстрее, чем в xls, и его корректно откроет EXCEL.
Потом можно в EXCEL пересохранить в xls или xlsx.
👉@DevLab1C
Media is too big
VIEW IN TELEGRAM
Универсальные коллекции значений 1С
Ильяс Низамутдинов
Урок №1. Массивы
Урок №2. Структура
Урок №3. Соответствие
Урок №4. Список значений
Урок №5. Таблица значений
Урок №6. Дерево значений
Урок №7.Бинарный поиск по таблице значений 1С
Все видео на youtube
👉@DevLab1C
Ильяс Низамутдинов
Урок №1. Массивы
Урок №2. Структура
Урок №3. Соответствие
Урок №4. Список значений
Урок №5. Таблица значений
Урок №6. Дерево значений
Урок №7.Бинарный поиск по таблице значений 1С
Все видео на youtube
👉@DevLab1C
👍2🔥1
Media is too big
VIEW IN TELEGRAM
Ускорение и оптимизация 1С. Базовый курс (2022)
5 примеров ошибок в коде, которые приводят к замедлению работы 1С
Почему документ с одной строкой проводится 7,5 секунд
Как исправить ошибку при запуске после внедрения подсистемы Оценка производительности из БСП
Как ускорить процесс реструктуризации и обновления 1С в разы
3 принципа работы блокировок, о которых стоит знать каждому программисту 1С
Как «поймать» медленные запросы
Все видео на youtube
👉@DevLab1C
5 примеров ошибок в коде, которые приводят к замедлению работы 1С
Почему документ с одной строкой проводится 7,5 секунд
Как исправить ошибку при запуске после внедрения подсистемы Оценка производительности из БСП
Как ускорить процесс реструктуризации и обновления 1С в разы
3 принципа работы блокировок, о которых стоит знать каждому программисту 1С
Как «поймать» медленные запросы
Все видео на youtube
👉@DevLab1C
👍1🔥1
Получить каталог Мои документы в 1С 8.3
Представленная функция универсальная и рекомендуется к использованию на любой версии платформы. Также существуют и штатные методы платформы который также можно использовать для решения данной задачи.
👉@DevLab1C
&НаСервере
Функция ПолучитьКаталогМоиДокументы()
МояОбработка = ЭтотОбъект.Метаданные().ПолноеИмя();
КаталогMyDocuments = ХранилищеНастроекДанныхФорм.Загрузить(МояОбработка, "КаталогСохранения");
Если ПустаяСтрока(КаталогMyDocuments) Тогда // не заполнен
WScript = Новый COMОбъект("WScript.Shell");
КаталогMyDocuments = WScript.SpecialFolders().Item("MyDocuments");
WScript = Неопределено;
КонецЕсли;
Возврат КаталогMyDocuments;
КонецФункции
Представленная функция универсальная и рекомендуется к использованию на любой версии платформы. Также существуют и штатные методы платформы который также можно использовать для решения данной задачи.
👉@DevLab1C
👍1
Создать, удалить пользователя, вывести список пользователей в 1С 8.3
👉@DevLab1C
Процедура СоздатьПользователя()
ПользовательИБ = ПользователиИнформационнойБазы.СоздатьПользователя();
ПользовательИБ.Имя = "odin1Crus";
ПользовательИБ.Пароль = "4dSwer4";
ПользовательИБ.ПоказыватьВСпискеВыбора = Истина;
ПользовательИБ.Роли.Добавить(Метаданные.Роли.АдминистраторСистемы);
ПользовательИБ.ОсновнойИнтерфейс = Метаданные.Интерфейсы.Основной;
ПользовательИБ.Записать();
КонецПроцедуры
Процедура УдалитьПользователя()
ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени("odin1Crus");
ПользовательИБ.Удалить();
//ПользовательИБ = ПользователиИнформационнойБазы.ТекущийПользователь();
//ПользовательИБ.Удалить();
КонецПроцедуры
Процедура ВывестиСписокПользователей()
СписокПользователей = ПользователиИнформационнойБазы.ПолучитьПользователей();
Для Каждого ПользовательИБ Из СписокПользователей Цикл
Сообщить(ПользовательИБ);
КонецЦикла;
КонецПроцедуры
👉@DevLab1C
🔥3👍1
Чтение и проверка прав и ролей пользователей в 1С 8.3
👉@DevLab1C
&НаСервере
Процедура ЧтениеИПроверкаПравИРолейПользователей() // Варианты прав: Чтение, Изменение, Добавление, Удаление, Проведение
// Чтение права к объекту метаданных у текущего пользователя
Если ПравоДоступа("Изменение", Метаданные.Справочники.Материалы) Тогда
Сообщить("Доступ к справочнику Материалы на изменение открыт!");
КонецЕсли;
// Чтение права к объекту метаданных у определенной роли
Если Не ПравоДоступа("Удаление", Метаданные.Справочники.Материалы, Метаданные.Роли.Менеджер) Тогда
Сообщить("У роли Менеджер нет прав на удаление в справочнике Материалы!");
КонецЕсли;
// Проверка права к объекту метаданных у других пользователей
ВсеПользователи = ПользователиИнформационнойБазы.ПолучитьПользователей();
Для Каждого Пользователь Из ВсеПользователи Цикл
Если ПравоДоступа("Изменение", Метаданные.Справочники.Материалы, Пользователь) Тогда
Сообщить("Доступ для " + Пользователь.Имя + " на изменение открыт!");
КонецЕсли;
КонецЦикла;
// Чтение роли у текущего пользователя
Если РольДоступна("Администратор") Тогда
Сообщить("У Вас права Администратора!");
КонецЕсли;
// Проверка права у пользователя и в случае его отсутствия - вызов исключения
ВыполнитьПроверкуПравДоступа("Изменение", Метаданные.Справочники.Материалы); // "Нарушение прав доступа!"
КонецПроцедуры
👉@DevLab1C
👍3🔥1
Сохранение, чтение и удаление настроек пользователя в 1С 8.3
👉@DevLab1C
&НаСервере
Процедура СохранениеЧтениеУдалениеНастроекПользователя()
// Сохранение произвольных настроек конкретного пользователя
НастройкиПользователя = Новый Структура;
НастройкиПользователя.Вставить("Фамилия", "Дарк");
НастройкиПользователя.Вставить("Имя", "Жанна");
НастройкиПользователя.Вставить("Пол", "Ж");
НастройкиПользователя.Вставить("Возраст", 19);
// Параметры: Ключ объекта, Ключ настроек, Настройки, Описание настроек, Владелец настроек,
ХранилищеОбщихНастроек.Сохранить("Отчет.ОСВ", "КлючНастроек", НастройкиПользователя, ,ИмяПользователя());
// Сохранение произвольных настроек для всех пользователей
ВсеПользователи = ПользователиИнформационнойБазы.ПолучитьПользователей();
Для Каждого Пользователь Из ВсеПользователи Цикл
ХранилищеОбщихНастроек.Сохранить("Отчет.ОСВ", "КлючНастроек", НастройкиПользователя, ,Пользователь.Имя);
КонецЦикла;
// Чтение сохраненных настроек пользователя
ЧтениеНастроек = Неопределено;
Попытка
ЧтениеНастроек = ХранилищеОбщихНастроек.Загрузить("Отчет.ОСВ", "КлючНастроек",,ИмяПользователя());
Исключение
Сообщить("Не достаточно прав доступа к настройкам пользователя: "+ИмяПользователя());
КонецПопытки;
Если ЧтениеНастроек = Неопределено Тогда // Значит настроек нет
Сообщить("Не получилось прочитать настройки.");
Иначе // Чтение настроек
Сообщить("Имя:"+ЧтениеНастроек.Имя+"; Фамилия:"+ЧтениеНастроек.Фамилия+
"; Пол:"+ЧтениеНастроек.Пол+"; Возраст:"+ЧтениеНастроек.Возраст);
КонецЕсли;
// Удаление сохраненных настроек пользователя
ХранилищеОбщихНастроек.Удалить("Отчет.ОСВ", "КлючНастроек", ИмяПользователя());
// Удаление сохраненных настроек у всех пользователей
ХранилищеОбщихНастроек.Удалить("Отчет.ОСВ", "КлючНастроек", Неопределено);
КонецПроцедуры
👉@DevLab1C
👍3🔥2
Работа с CSV
👉@DevLab1C
Чтение файла CSV в 1С 8.3:
&НаКлиенте
Процедура ЧтениеФайлаCSV()
ФайлCSV = Новый ТекстовыйДокумент;
ФайлCSV.Прочитать("D:\import_04042025.csv");
ЗагрузитьCSV(ФайлCSV);
КонецПроцедуры
Загрузка CSV файла (в Таблицу значений) в 1С 8.3:
&НаСервере
Процедура ЗагрузитьCSV(ФайлCSV)
ТЗ = Новый ТаблицаЗначений;
// Важно! Чтобы в значениях НЕ встречался используемый разделитель
ИспользуемыйРазделитель = ";";
//*** Если есть шапка таблицы ***
ШапкаCSV = ФайлCSV.ПолучитьСтроку(1);
// Чтение и разделение на отдельные значения в массив (по разделителю)
МассивCSV = СтрРазделить(ШапкаCSV, ИспользуемыйРазделитель);
//***************************
Для Каждого СтрокаНом Из МассивCSV Цикл
// Удаляем пробелы т.к. в названии столбцов они не допускаются
ИмяБП = СтрЗаменить(СтрокаНом," ","");
ТЗ.Колонки.Добавить(ИмяБП,, СтрокаНом);
КонецЦикла;
Для НомерСтроки=2 По ФайлCSV.КоличествоСтрок() Цикл // Если без шапки, то начинаем с первой строчки
// Получаем строку по-порядку
СтрокаCSV = ФайлCSV.ПолучитьСтроку(НомерСтроки);
// Разделяем с помощью выбранного разделителя каждую строку на столбцы
МассивCSV = СтрРазделить(СтрокаCSV, ИспользуемыйРазделитель);
НоваяСтрочка= ТЗ.Добавить();// Добавляем строку в ТЗ
Для НомСтолбца= 1 По МассивCSV.Количество() Цикл
ТекЗначениеCSV = МассивCSV[НомСтолбца-1];
ИмяКолонкиCSV = ТЗ.Колонки[НомСтолбца-1].Имя;
НоваяСтрочка[ИмяКолонкиCSV] = ТекЗначениеCSV;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
👉@DevLab1C
👍4🔥2
Работа с CSV. Выгрузка в файл CSV и его создание в 1С 8.3
👉@DevLab1C
&НаСервере
Процедура ВыгрузкаВФайлCSVСоздание();
ИспользуемыйРазделитель = ";";
ФайлCSV="D:\import_07042025.csv";
//*** Получаем данные из запроса ***
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВнутреннийПрайс.Код КАК Код,
| ВнутреннийПрайс.Наименование КАК Наименование,
| ВнутреннийПрайс.ЗакупочнаяЦена КАК ЗакупочнаяЦена,
| ВнутреннийПрайс.РозничнаяЦена КАК РозничнаяЦена,
| ВнутреннийПрайс.ОптоваяЦена КАК ОптоваяЦена
|ИЗ
| Справочник.Цены КАК ВнутреннийПрайс";
РезультатЗапроса = Запрос.Выполнить().Выгрузить();
ТЗ = РезультатЗапроса;
//**********************************
ТекстCSV=""; // Текст с учетом заголовков, разделителей и переноса строк
Для Каждого СтрокаТЗ Из ТЗ Цикл
Если ТекстCSV="" Тогда
СтрокаКол="";
КолонкиТЗ=ТЗ.Колонки;
Для Каждого Колонка Из КолонкиТЗ Цикл
СтрокаКол = "" + СтрокаКол + Колонка.Имя + ИспользуемыйРазделитель ;
КонецЦикла;
ТекстCSV = СтрокаКол + Символы.ПС;
КонецЕсли;
ТекстCSV = ТекстCSV + СтрокаТЗ.Код + ИспользуемыйРазделитель + СтрокаТЗ.Наименование
+ ИспользуемыйРазделитель + СтрокаТЗ.ЗакупочнаяЦена + ИспользуемыйРазделитель + СтрокаТЗ.РозничнаяЦена
+ ИспользуемыйРазделитель + СтрокаТЗ.ОптоваяЦена + Символы.ПС;
КонецЦикла;
КодANSI = КодировкаТекста.ANSI;
ТекстовыйФайлЗапись = Новый ЗаписьТекста(ФайлCSV, КодANSI); // Создание файла CSV
ТекстовыйФайлЗапись.ЗаписатьСтроку(ТекстCSV); // Запись информации в файл
ТекстовыйФайлЗапись.Закрыть(); // Обязательно закрываем, иначе зависает в процессе
КонецПроцедуры
👉@DevLab1C
👍4🔥2
Работа с CSV. Чтение файла CSV опционально (средствами 1С) в ТЗ в 1С 8.3
👉@DevLab1C
&НаСервере
Функция ПрочитатьCSVвТЗ(ИмяФайла, ИспользуемыйРазделитель=";", ЗаголовкиИзПервойСтроки = Ложь)
Текст = Новый ЧтениеТекста(ИмяФайла);
ТЗ = Новый ТаблицаЗначений;
// Создадим колонки
ТекСтрока = Текст.ПрочитатьСтроку();
Если ТекСтрока <> Неопределено Тогда
МассивCSV = СтрРазделить(ТекСтрока, ИспользуемыйРазделитель);
ИндексКолонки = 0;
Для Каждого ИмяКолонки Из МассивCSV Цикл
ИмяКолонки = ?(ЗаголовкиИзПервойСтроки, "Кол"+ИндексКолонки, ИмяКолонки);
ТЗ.Колонки.Добавить(ИмяКолонки);
ИндексКолонки = ИндексКолонки + 1;
КонецЦикла;
Если ЗаголовкиИзПервойСтроки Тогда
ТекСтрока = Текст.ПрочитатьСтроку();
КонецЕсли;
КонецЕсли;
Пока ТекСтрока <> Неопределено Цикл // строки читаются до символа перевода строки
НоваяСтрока = ТЗ.Добавить();
МассивCSV = СтрРазделить(ТекСтрока, ИспользуемыйРазделитель);
ИндексКолонки = 0;
Для Каждого СтрокаНом Из МассивCSV Цикл
НоваяСтрока[ИндексКолонки] = СтрокаНом;
ИндексКолонки = ИндексКолонки + 1;
КонецЦикла;
ТекСтрока = Текст.ПрочитатьСтроку();
КонецЦикла;
Возврат ТЗ;
КонецФункции
👉@DevLab1C
👍3
5 видео для подготовки к Аттестации 1С:Специалист-Консультант по производству и ремонтам в 1С:ERP 2.5
🔹Ключевые изменения в 1С:ERP 2.5.7 по производственному учету – за 15 минут
🔹За что получают двойки на Аттестации по производству и ремонтам в 1C:ERP 2.5?
🔹Как правильно реагировать на ошибки системы – на примере Аттестации Специалист-консультант по 1С:ERP
🔹Ремонт оборудования заказчика в 1С:ERP 2.5 – схема учета для Аттестации и проектов за 20 минут
🔹Объекты возникновения затрат (ОВЗ) в 1С:ERP 2.5.7 – разбираем новый функционал на практике
Все видео на youtube
👉@DevLab1C
🔹Ключевые изменения в 1С:ERP 2.5.7 по производственному учету – за 15 минут
🔹За что получают двойки на Аттестации по производству и ремонтам в 1C:ERP 2.5?
🔹Как правильно реагировать на ошибки системы – на примере Аттестации Специалист-консультант по 1С:ERP
🔹Ремонт оборудования заказчика в 1С:ERP 2.5 – схема учета для Аттестации и проектов за 20 минут
🔹Объекты возникновения затрат (ОВЗ) в 1С:ERP 2.5.7 – разбираем новый функционал на практике
Все видео на youtube
👉@DevLab1C
👍2
Асинхронные функции.
Обещание и Возвращающие Обещание в 1С 8.3
Обещание как аргумент оператора Ждать в 1С 8.3
👉@DevLab1C
Обещание и Возвращающие Обещание в 1С 8.3
Процедура ВыполнениеПримераСАсих()
Попытка
ВыполнениеКода();
Исключение
// Исключение из ВыполнениеКода() не будет перехвачено здесь
КонецПопытки
КонецПроцедуры
Асинх Функция ВыполнениеКода() // Всегда возвращает Обещание
ВызватьИсключение "Выброшено в ВыполнениеКода()";
//При успешном завершении в Обещание будет завернуто значение, которое было аргументом оператора Возврат.
//Если при выполнении Асинх функции произошло исключение, то в Обещание будет завернуто это исключение.
КонецФункции
Обещание как аргумент оператора Ждать в 1С 8.3
Асинх Процедура ВыполнениеПримераСАсих()
Попытка
// Для того, чтобы узнать как завершилась Асинх функция – это использовать возвращенное ею Обещание как аргумент оператора Ждать.
Ждать ВыполнениеКода(Null);
Исключение
// Исключение из НеNull() будет перехвачено здесь
Сообщить("Передали Null");
КонецПопытки
КонецПроцедуры
Асинх Функция ВыполнениеКода(ПеремП) // Всегда возвращает Обещание
Если ПеремП = Null Тогда
ВызватьИсключение "Выброшено в ВыполнениеКода()";
Иначе
Возврат ПеремП;
КонецЕсли;
КонецФункции
// Асинх процедура не возвращает значения. А если при выполнении Асинх процедуры возникнет не перехваченное исключение,
// то это приведет к выдаче сообщения об ошибке.
👉@DevLab1C
👍3🔥2
Работа с CSV. Чтение файла CSV через ADO (без схемы) в 1С 8.3
👉@DevLab1C
&НаСервере
Процедура ЧтениеФайлаCSV_ADO(); //Для работы с CSV файлами больших размеров (свыше 10Mb)
ФайлCSV="D:\import_11042025.csv";
ПутьСоединения = "Driver={Microsoft Text Driver (*.csv)};";
ПутьСоединения = ПутьСоединения + "Dbq=" + ФайлCSV + ";";
ПутьСоединения = ПутьСоединения + "Uid=" + "Extensions=csv" + ";";
ADOConn = Новый COMОбъект("ADODB.Connection");
ADOConn.ConnectionString = ПутьСоединения;
ADOConn.Open();
ADORec = Новый COMОбъект("ADODB.Recordset");
Попытка
ADORec.Open("S_elect * from file#txt", ADOConn);
Пока ADORec.EOF() = 0 Цикл
ADOСтрока="";
Для Счетчик = 0 По ADORec.Fields.Count-1 Цикл
ADOСтрока = ADOСтрока + ";" + ADORec.Fields(Счетчик).Value;
КонецЦикла;
//Сообщить("Прочитана строка: "+ADOСтрока);
ADORec.MoveNext();
КонецЦикла;
Исключение
ADORec.Close();
ADOConn.Close();
//Предупреждение("При чтении данных в CSV произошла ошибка:"+ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
👉@DevLab1C
👍2