es
Feedback
1С:Предприятие 8

1С:Предприятие 8

Ir al canal en Telegram

🔥 Разработка в 1С — просто и понятно! 🔥 ✅ Полезные фишки и лайфхаки для разработчиков ✅ Объяснение сложных тем простыми словами ✅ Готовые решения, сниппеты и примеры кода ✅ Разбор ошибок и способов их устранения ✅ Новости и тренды в мире 1С

Mostrar más
879
Suscriptores
Sin datos24 horas
+17 días
-230 días
Archivo de publicaciones
Набор скриптов для знакомства с MS SQL Server Информация о бэкапах Резервное копирование - очень важно. Об этом уже так много
Набор скриптов для знакомства с MS SQL Server Информация о бэкапах Резервное копирование - очень важно. Об этом уже так много было сказано, но случаев когда им пренебрегают до сих пор очень много. Узнаем дату последнего бэкапа тех баз, которые расположены на изучаемом сервере. SELECT @@Servername AS ServerName , d.Name AS DBName , MAX(b.backup_finish_date) AS LastBackupCompleted FROM sys.databases d LEFT OUTER JOIN msdb..backupset b ON b.database_name = d.name AND b.[type] = 'D' GROUP BY d.Name ORDER BY d.Name; Кроме этого, мы можем узнать куда последние бэкапы сохранялись (будь то какой-либо каталог или виртуальное устройство для сохранения на ленту, или что-то другое). SELECT @@Servername AS ServerName , d.Name AS DBName , b.Backup_finish_date , bmf.Physical_Device_name FROM sys.databases d INNER JOIN msdb..backupset b ON b.database_name = d.name AND b.[type] = 'D' INNER JOIN msdb.dbo.backupmediafamily bmf ON b.media_set_id = bmf.media_set_id ORDER BY d.NAME , b.Backup_finish_date DESC; Теперь мы знаем есть ли настроенное резервное копирование. Ну или хотя бы ручной запуск бэкапирования. 👉@DevLab1C

Набор скриптов для знакомства с MS SQL Server Базовая информация о сервере Начнем с основной информации.

-- Имена сервера и экземпляра 
Select @@SERVERNAME as [Server\Instance]; 

-- версия SQL Server 
Select @@VERSION as SQLServerVersion; 

-- экземпляр SQL Server 
Select @@ServiceName AS ServiceInstance;

 -- Текущая БД (БД, в контексте которой выполняется запрос)
Select DB_NAME() AS CurrentDB_Name;
Теперь мы знаем какая версия SQL Server используется, имя экземпляра и сервера. Хотя есть подозрение, что имя экземпляра Вы знали еще до подключения к нему 🙂 Версия СУБД может пригодиться для определения какие возможности у нее есть, известные баги и др. Время работы с момента запуска В большинстве вопросов диагностики производительности и стабильности важно знать сколько времени уже запущен экземпляр SQL Server.

SELECT  @@Servername AS ServerName ,
        create_date AS  ServerStarted ,
        DATEDIFF(s, create_date, GETDATE()) / 86400.0 AS DaysRunning ,
        DATEDIFF(s, create_date, GETDATE()) AS SecondsRunnig
FROM    sys.databases
WHERE   name = 'tempdb'; 
Здесь мы получили имя сервера, дату его запуска, а также продолжительность работы сервера в днях и секундах. Для этого мы использовали дату создания базы TempDB, которая создается в момент запуска SQL Server. Почему эта информация так важна? Сам SQL Server собирает статистику различных показателей (как используются индексы, информацию о недостающих индексах, планы запросов и др.). Чем дольше сервер работает, тем точнее собранная статистика. Представьте, что Вы запустили сервер 5 минут назад, смотрите что информации о недостающих индексов нет. Правильно ли было полагаться на эти данные, которые были собраны за 5 минут? Количество активных соединений Еще одним очень важным моментом может быть количество активных соединений со SQL Server. -- Похожая информация, может быть получена с помощью sp_who

SELECT  @@Servername AS Server ,
        DB_NAME(database_id) AS DatabaseName ,
        COUNT(database_id) AS Connections ,
        Login_name AS  LoginName ,
        MIN(Login_Time) AS Login_Time ,
        MIN(COALESCE(last_request_end_time, last_request_start_time))
                                                         AS  Last_Batch
FROM    sys.dm_exec_sessions
WHERE   database_id > 0
        AND DB_NAME(database_id) NOT IN ( 'master', 'msdb' )
GROUP BY database_id ,
         login_name
ORDER BY DatabaseName;
Эта информация может пригодиться в следующих случаях: Отслеживание количества соединений для контроля лицензионной "чистоты". Для контроля подключения к базе данных. Для сбора статистики интенсивности работы с СУБД. Расследование проблем "зависших" соединений. И др. 👉@DevLab1C

Вывод диалога вопроса с заголовком и нужными кнопками (немодально) в 1С 8.3 &НаКлиенте Процедура ВыводДиалогаВопроса(Команда)
Вывод диалога вопроса с заголовком и нужными кнопками (немодально) в 1С 8.3

&НаКлиенте
Процедура ВыводДиалогаВопроса(Команда)

    Оповещение = Новый ОписаниеОповещения("ПослеЗакрытияВопроса", ЭтотОбъект);
    ПоказатьВопрос(Оповещение, "Загрузить список банков?", РежимДиалогаВопрос.ДаНетОтмена, 0, КодВозвратаДиалога.Да, "Список банков 2023г.");

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

&НаКлиенте
Процедура ПослеЗакрытияВопроса(Результат, Параметры) Экспорт

    Если Результат = КодВозвратаДиалога.Да Тогда
        Сообщить("Список банков с сайта https://www.cbr.ru загружен!");
    КонецЕсли;

КонецПроцедуры
👉@DevLab1C

10 функций БСП, которые должен знать каждый программист 1С 🔴В этом видео мы покажем вам 10 функций из 1С:БСП, которые должен знать каждый программист 1С. Эти функции помогут писать код быстрее и сделают ваш код более компактным. источник 👉@DevLab1C

Как правильно удаляются строки из текста при помощи встроенного языка системы «1С:8»? Процедура УдалитьСтрокиТекста() ТекстДо
Как правильно удаляются строки из текста при помощи встроенного языка системы «1С:8»?

Процедура УдалитьСтрокиТекста()
 ТекстДок = Новый ТекстовыйДокумент;
 ТекстДок.Прочитать("Текст.txt");
 Сч = 1;
 Пока Сч < ТекстДок.КоличествоСтрок() Цикл
  Строка = ТекстДок.ПолучитьСтроку(Сч);
  Если Найти(Строка, "1С") > 0 Тогда
   ТекстДок.УдалитьСтроку(Сч);
  Иначе  // Благодаря этой переменной мы 
   // не пропускаем строки в тексте
   Сч = Сч + 1;
  КонецЕсли;
 КонецЦикла;
 ТекстДок.Записать("Текст.txt");
КонецПроцедуры
👉@DevLab1C

Как обращаться к странице формы, если на нее не помещен элемент управления формы «Панель»? Форма обладает свойством «Панель»,
Как обращаться к странице формы, если на нее не помещен элемент управления формы «Панель»?

Форма обладает свойством «Панель», через которое необходимо обращаться. Например:

ПанельФормы = ЭтаФорма.Панель;
СтраницыФормы = ПанельФормы.Страницы;
Если ПанельФормы.ТекущаяСтраница = СтраницыФормы.Страница1 Тогда
      //Мы на первой странице
      . . .
ИначеЕсли ПанельФормы.ТекущаяСтраница = СтраницыФормы.Страница2 Тогда
      //Мы на второй странице
      . . .
Иначе //Мы на последней странице
      . . .
КонецЕсли;
👉@DevLab1C

Как программно на «Панели» переключаются закладки (страницы)? Панель1 = ЭлементыФормы.Панель1; Панель1.ТекущаяСтраница = Пане
Как программно на «Панели» переключаются закладки (страницы)?

Панель1 = ЭлементыФормы.Панель1;
Панель1.ТекущаяСтраница = Панель1.Страницы.Страница2;
Панель1.ТекущаяСтраница = Панель1.Страницы["Страница2"];
👉@DevLab1C

Как около элемента управления формы открывается выпадающий список? Необходимо воспользоваться способом формы из меню («Список
Как около элемента управления формы открывается выпадающий список? Необходимо воспользоваться способом формы из меню («Список Значений», «Элемент Формы»):

//выведем пользователю список вариантов, 
//для ввода СФ около элемента управления «Кнопка»
СписокДействийВводСФ = Новый СписокЗначений();
СписокДействийВводСФ.Добавить(
"ВвестиНовыйСчетФактуру", "Ввести новый счет-фактуру");
СписокДействийВводСФ.Добавить(
"ДополнитьСуществующийСчетФактуру", "Дополнить существующий счет-фактуру");

// ФормаДокумента.ТекущийЭлемент - 
//Элемент, около которого открывается список 
ВыбранныйВариантВводаСФ = ФормаДокумента.ВыбратьИзМеню(
СписокДействийВводСФ, ФормаДокумента.ТекущийЭлемент);
Если ВыбранныйВариантВводаСФ = Неопределено Тогда
 Возврат;
КонецЕсли;
  
Если ВыбранныйВариантВводаСФ.Значение = "ВвестиНовыйСчетФактуру" Тогда
    ...
КонецЕсли;
👉@DevLab1C

Как осуществить запись в журнал регистрации «1С: Предприятие 8»? Процедура РегистрСведенийСписокДополнительныеУслугиПередУдал
Как осуществить запись в журнал регистрации «1С: Предприятие 8»?

Процедура РегистрСведенийСписокДополнительныеУслугиПередУдалением(Элемент)
 ТС = Элемент.ТекущаяСтрока;
 Комментарий = "Код: " + ТС.Код + 
      ". Номенклатура: " + ТС.Номенклатура + 
      ". Вид наценки: " + ТС.ВидНаценки;
 ЗаписьЖурналаРегистрации("Данные.Удаление",
  УровеньЖурналаРегистрации.Информация,
  Метаданные.РегистрыСведений.ДополнительныеУслуги,
  РежимТранзакцииЗаписиЖурналаРегистрации.Независимая,
  Комментарий);
КонецПроцедуры
👉@DevLab1C

Простое добавление колонки в Динамический список &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Части
Простое добавление колонки в Динамический список

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
 
 ЧастиЗапроса = СтрРазделить(Список.ТекстЗапроса, ",");
 ЧастиЗапроса.Вставить(1, "СправочникКонтрагенты.ПометкаУдаления");
 Список.ТекстЗапроса = СтрСоединить(ЧастиЗапроса, ",");
 
 НовыйЭлемент  = Элементы.Добавить("СписокПометкаУдаления", Тип("ПолеФормы"), Элементы.Список);
 НовыйЭлемент.Вид = ВидПоляФормы.ПолеФлажка;      
 НовыйЭлемент.ПутьКДанным = "Список.ПометкаУдаления";
 
КонецПроцедуры
👉@DevLab1C

Как защитить паролем создаваемый Word документ Код 1C v 8.х МакетНаименование="WodrFile"; ИмяФайла = "t" + МакетНаименование
Как защитить паролем создаваемый Word документ

Код 1C v 8.х
 МакетНаименование="WodrFile";
 ИмяФайла = "t" + МакетНаименование + ".tmp";
 
 ОбъектВорд = Новый COMObject("Word.Application");
 ОбъектВорд.Documents.Add(ИмяФайла,,, Истина);
 ОбъектВорд.ActiveWindow.Caption = МакетНаименование;
 ОбъектВорд.Visible = 0;
 //...
 // ТУТ ЧТО-ТО ЗАПИСЫВАЕМ В ДОКУМЕНТ
 //...
 ДокДляСохранения = ОбъектВорд.ActiveDocument();
 
 //УСТАНАВЛИВАЕМ ПАРОЛЬ
 ДокДляСохранения.Protect(2, 0, "P@ssW0rd"); 
 
 ДокДляСохранения.SaveAs(ИмяФайла, 0);
 ДокДляСохранения.Close();
 ОбъектВорд.Quit();
👉@DevLab1C

Колонка сжато Суть задачи в том, что в колонке табличной части находятся целые числа. Необходимо "сжать" ряд чисел, заменив п
Колонка сжато Суть задачи в том, что в колонке табличной части находятся целые числа. Необходимо "сжать" ряд чисел, заменив подряд идущие числа их диапазоном. Например: 1, 3, 4, 5, 7, 10, 11, 12, 16 должно превратиться в 1, 3-5, 7, 10-12, 16.

Функция КолонкаСжато(ДокументСсылка, ИмяТабличнойЧасти, ИмяКолонки, Слэш = ",", Тире = "-")
    Запрос = Новый Запрос("ВЫБРАТЬ Различные " + ИмяКолонки + " ИЗ Документ." + ДокументСсылка.Метаданные().Имя + "." + ИмяТабличнойЧасти + " ГДЕ Ссылка = &Ссылка Упорядочить ПО " + ИмяКолонки);
    Запрос.УстановитьПараметр("Ссылка", ДокументСсылка);
    Ряд = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку(ИмяКолонки);
    Если Ряд.Количество() = 0 Тогда Возврат ""
    КонецЕсли;
    Ряд.Добавить(0); Ряд.Добавить(0);
    Сжато = Строка(Ряд[0]);
    Для ё = 1 По Ряд.Количество() - 3 Цикл
        Если Число(Ряд[ё + 1]) - Число(Ряд[ё - 1]) <> 2 Тогда
            Сжато = Сжато + Слэш + Строка(Ряд[ё])
        ИначеЕсли Число(Ряд[ё + 2]) - Число(Ряд[ё]) <> 2 Тогда
            Сжато = Сжато + Тире
        КонецЕсли
    КонецЦикла;
    Возврат СтрЗаменить(Сжато, Тире + Слэш, Тире)
КонецФункции
👉@DevLab1C

Repost from 1С Работа
#IT #1C #вакансия #СанктПетербург #офис #Техподдержка #Руководитель #SAP #нефтегаз Начальник управления технической поддержки ИУС В крупнейший российский холдинг (нефтегазовая отрасль) требуется Руководитель Техподдержки ИУС  Формат Аутстафф проект , далее перезод в компанию. Зарплата 💰 До 500 000 руб. (полностью белое оформление). Гражданство: РФ Локация: Санкт-Петербург Формат работы: строго Офис Санкт-Петербург     Описание проекта: Технологии: 1С (УХ, ЗУП), SAP, Naumen, Контур.Диадок, системы электронного документооборота. - Клиентоориентированность: Активное взаимодействие с пользователями, сбор и обработка обратной связи, устранение претензий. - Техническая экспертиза: Знания в области ITSM, CRM, ERP, инструментария мониторинга и аналитики. - Финансовый менеджмент: Планирование бюджета, обоснование инвестиций, представление отчетности руководству. Используемый технологический стек: - CRM-системы: Битрикс24, AmoCRM (отечественного производства). - Сервисы Help Desk: Jira Service Management - Инструменты мониторинга: Zabbix - Документооборот: Confluence, система ЭДО - ERP-система: SAP ERP. Задачи на проекте: - Руководит разработкой и реализацией стратегии технической поддержки. - Формирует структуру команды, управляет подбором и развитием персонала. - Организует и контролирует деятельность службы технической поддержки. - Совершенствует процессы оказания помощи пользователям и повышает качество услуг. - Интегрирует службу поддержки в общий цикл разработки и поддержки ИТ-продуктов компании. - Координирует финансовые вопросы и составляет планы расходов подразделения. Условия: Полностью белое оформление; Комфортный офис класса А, Крутая команда; Интересные задачи; Релокация при необходимости в г. Санкт-Петербург (оплата съемного жилья/квартиры для сотрудников и членов семьи). КОНТАКТЫ для вопросов и резюме: ТГ @katebudrina Почта: hr-complex@yandex.ru Екатерина 🤗

Быстрое объединение двух таблиц значений Соединяет две разные таблицы значений с одинаковыми колонками в одну целую таблицу з
Быстрое объединение двух таблиц значений Соединяет две разные таблицы значений с одинаковыми колонками в одну целую таблицу значений. Способ интересен тем, что он вставляет одну таблицу в начало другой таблицы, а не добавляет строки из одной таблицы в конец другой. Такой способ работает намного быстрее чем стандартный.

// Добавляет в начало первой ТЗ, значения из второй ТЗ, колонки обоих ТЗ должны совпадать
// Данный способ работает быстрее чем стандартный с добавлением в конец строк из другой ТЗ
// Подробности см. http://www.gilev.ru/простой-трюк-для-быстрого-объединени/
//
// Параметры:
//  Таблица1 - ТаблицаЗначений  - в эту таблицу, в начало (а не в конец) будут добавлены строки из Таблица2
//  Таблица2 - ТаблицаЗначений  - таблица, строками которой требуется дополнить значение из параметра Таблица1
//
Процедура ДополнитьТаблицуЗначениямиИзВторой(Таблица1, Таблица2) Экспорт
 
 Для Индекс = 1 По Таблица2.Количество() Цикл
  Таблица1.Вставить(0);
 КонецЦикла;
 Для Индекс = 0 По Таблица2.Колонки.Количество() - 1 Цикл
  Таблица1.ЗагрузитьКолонку(Таблица2.ВыгрузитьКолонку(Индекс), Индекс);
 КонецЦикла;
 
КонецПроцедуры
автор nytlenc 👉@DevLab1C

+5
Ускорение и оптимизация 1С 5 примеров ошибок в коде, которые приводят к замедлению работы 1С Почему документ с одной строкой проводится 7,5 секунд Как исправить ошибку при запуске после внедрения подсистемы Оценка производительности из БСП Как ускорить процесс реструктуризации и обновления 1С в разы 3 принципа работы блокировок, о которых стоит знать каждому программисту 1С Как «поймать» медленные запросы источник 👉@DevLab1C

Циклы в 1C Почему так отработал цикл? Как можно исправить? источник 👉@DevLab1C

+4
Видео для подготовки к Аттестации 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 – разбираем новый функционал на практике источник 👉@DevLab1C

Пример копирования (перемещения) файлов из одного каталога в другой в 1С 8.3

Процедура СкопироватьПереместитьКаталог(ИмяФайлаИсточник, ИмяФайлаПриемник, Переместить = Ложь)

   Если Прав(ИмяФайлаИсточник, 1) <> "\" Тогда
       ИмяФайлаИсточник = ИмяФайлаИсточник + "\";
   КонецЕсли;

   Файл = Новый Файл(ИмяФайлаПриемник);
   ИмяФайлаИсточник = ИмяФайлаИсточник + Файл.Имя;

   СоздатьКаталог(ИмяФайлаИсточник);
   Если Прав(ИмяФайлаИсточник, 1) <> "\" Тогда
       ИмяФайлаИсточник = ИмяФайлаИсточник + "\";
   КонецЕсли;

   Для Каждого Файлы Из НайтиФайлы(ИмяФайлаПриемник, "*.*", Истина) Цикл

       Если Файлы.ЭтоКаталог() Тогда
           СоздатьКаталог(СтрЗаменить(Файлы.ПолноеИмя, ИмяФайлаПриемник, ИмяФайлаИсточник));
           Продолжить;
       Иначе
           КаталогПереносимогоФайла = Новый Файл(СтрЗаменить(Файлы.Путь, ИмяФайлаПриемник, ИмяФайлаИсточник));
           Если НЕ КаталогПереносимогоФайла.Существует() Тогда
               СоздатьКаталог(КаталогПереносимогоФайла.ПолноеИмя);
           КонецЕсли;

           Если Переместить Тогда
               ПереместитьФайл(Файлы.ПолноеИмя, СтрЗаменить(Файлы.ПолноеИмя, ИмяФайлаПриемник, ИмяФайлаИсточник));
           Иначе
               КопироватьФайл(Файлы.ПолноеИмя, СтрЗаменить(Файлы.ПолноеИмя, ИмяФайлаПриемник, ИмяФайлаИсточник));
           КонецЕсли;
       КонецЕсли;

   КонецЦикла;

   Если Переместить Тогда
       УдалитьФайлы(ИмяФайлаПриемник);
   КонецЕсли;

КонецПроцедуры
👉@DevLab1C

Асинхронное копирование всех файлов из одного каталога в другой в 1С 8.3 Асинх Процедура СкопироватьФайлыАсинх(Знач КаталогИс
Асинхронное копирование всех файлов из одного каталога в другой в 1С 8.3

Асинх Процедура СкопироватьФайлыАсинх(Знач КаталогИсточник, Знач КаталогПриемник)

   КаталогПриемник = Новый Файл(КаталогПриемник);
   Если Не Ждать КаталогПриемник.СуществуетАсинх() Тогда
       Ждать СоздатьКаталогАсинх(КаталогПриемник.ПолноеИмя);
   КонецЕсли;

   МассивФайлов = Ждать НайтиФайлыАсинх(КаталогИсточник, "*.*", Ложь);
   Для Каждого Файл Из МассивФайлов Цикл
       ПолноеИмяПриемника = КаталогПриемник.ПолноеИмя + "\" + Файл.Имя;
       Если Файл.ЭтоКаталог() Тогда
           СкопироватьФайлы(Файл.ПолноеИмя, ПолноеИмяПриемника);
       Иначе
           Ждать КопироватьФайлАсинх(Файл.ПолноеИмя, ПолноеИмяПриемника);
       КонецЕсли;
   КонецЦикла;

КонецПроцедуры
👉@DevLab1C

Копирование всех файлов из одного каталога в другой в 1С 8.3 Процедура СкопироватьФайлы(Знач КаталогИсточник, Знач КаталогПри
Копирование всех файлов из одного каталога в другой в 1С 8.3

Процедура СкопироватьФайлы(Знач КаталогИсточник, Знач КаталогПриемник)

   Попытка
       //Проверим и поправим окончания пути каталогов
       Если Прав(КаталогИсточник, 1) <> "\" Тогда
           КаталогИсточник = КаталогИсточник + "\";
       КонецЕсли;
       Если Прав(КаталогПриемник, 1) <> "\" Тогда
           КаталогПриемник = КаталогПриемник + "\";
       КонецЕсли;

       //Создадим каталог приемник
       СоздатьКаталог(КаталогПриемник);
       МассивФайлов = НайтиФайлы(КаталогИсточник, "*.*", Истина);

       Для Каждого Файл Из МассивФайлов Цикл
           ПолноеИмяИсточник = Файл.ПолноеИмя;
           ПолноеИмяПриемник = КаталогПриемник + СтрЗаменить(Файл.ПолноеИмя, КаталогИсточник, "");

           Если ПустаяСтрока(Файл.Расширение) Тогда
               СоздатьКаталог(ПолноеИмяПриемник);
           Иначе
               КопироватьФайл(ПолноеИмяИсточник, ПолноеИмяПриемник);
           КонецЕсли;
       КонецЦикла;
   Исключение
       ИнфоОбОшибке = "Ошибка при копировании: " + ОписаниеОшибки()
       + " (из каталога: " + КаталогИсточник
       + "; в каталог: " + КаталогПриемник + ")";
       Если ВыдаватьСообщения Тогда
           Сообщить(ИнфоОбОшибке);
       Иначе
           Предупреждение(ИнфоОбОшибке);
       КонецЕсли;

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

КонецПроцедуры
👉@DevLab1C