Грибов Олег

14
Рейтинг

Oboron
Олег Грибов



  •   Регистрация: 30.03.2009 (15 лет назад)

  •   Был(а) на сайте: 08.11.2023

Друзья
  • Дмитрий Малышев
  • Андрей Волин
Подписчики 2

Рейтинг 14

Отчет по ролям и пользователям. Для толстого клиента.

Отчеты и формы Системный администратор Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m) Внешний отчет (ert,erf) Информационная безопасность

Выводит сводную информацию по ролям пользователей. Роль, Пользователь, Пользователь базы, Основной интерфейс, Пользователь ОС (при аутентификации ОС), Активность (сейчас в базе).

1 стартмани

13.12.2012    9288    158    Oboron    5       

5

Комментарии

HighLoadБыстрая реструктуризация базы данных#36 11.06.20 14:35
Работает, удобно.
В обработке для обычных форм кнопка "Завершить реструктуризацию" не привязана ни к одной процедуре. Собственно процедуры завершения тоже нет. Создать её проблем никаких, но лучше поправить.
DBКакую СУБД Вы используете? Какой размер основной СУБД в Гб? Сколько пользователей системы?#1056 15.03.17 10:25
MSSQL, сейчас 660 пользователей.
Активно обычно 30-50, на пике до 120.
Точный размер базы сейчас не знаю, последний раз когда смотрел - был 90Гб. Сейчас наверное уже за 100 перевалил.
Основная база (wms - 2 крупных склада), управленческий учет, база для хранения файлов (pdf, сканы и пр. Пользователи в неё напрямую не заходят), ну и по мелочи - зарплата, бухгалтерия, service-desk
AdminОтчет по ролям и пользователям. Для толстого клиента.#5 13.01.17 20:30
(3)
(4)
Отчет только для толстого клиента. Забыл это указать при публикации.
Вернул Вам потраченные startmoney.
DevОчистка кэша 1С из сеанса 1С Предприятие#48 10.12.15 11:00
(21) 9thlevel, Хорошая оптимизация. В данном случае сработает. а так, еще нужно заменить одну кавычку на две (иначе, если в тексте встретится кавычка, то будет ошибка потока):
Код
Функция РазложитьСтрокуВМассивПодстрок(Знач ТекстоваяСтрока, Знач Разделитель)

СтрокаДанных = ТекстоваяСтрока;
ЧислоВхождений = СтрЧислоВхождений(СтрокаДанных, Разделитель);
ВременнаяЗамена = "#";
Пока Найти(СтрокаДанных, ВременнаяЗамена) > 0 Цикл
   ВременнаяЗамена = ВременнаяЗамена + "#";
КонецЦикла;

СтрокаДанных = СтрЗаменить(СтрокаДанных, Разделитель, ВременнаяЗамена);
СтрокаДанных = СтрЗаменить(СтрокаДанных, """", """""");   //Меняем одиночную кавычку на двойную везде, кроме разделителя
СтрокаДанных = "{""#"",51e7a0d2-530b-11d4-b98a-008048da3034,
|{" + Формат(ЧислоВхождений + 1, "ЧГ=0") + ",
|{""S"",""" + СтрЗаменить(СтрокаДанных, ВременнаяЗамена, """},
|{""S"",""") + """}}}";

Возврат ЗначениеИзСтрокиВнутр(СтрокаДанных);

КонецФункции 
HighLoadОтчет по количеству используемых объектов в реквизитах составного типа. Для толстого клиента.#2 19.11.15 11:36
(1) friend0, Мне нужно было "по быстрому" разобраться с тормозящей базой, в первую очередь были интересны именно используемые реквизиты. А так - да, отбор снять и будет всё показываться.
DevКак получить порядок листов в Excel?#5 26.10.15 12:07
Красиво решить не удалось.
Времени особо не было.
Сейчас возвращаться к этой теме уже лень :)
В общем я сделал так:
если в файле всего 1 лист, то берем его. Иначе запускаем Excel.Application и берем ActiveSheet:

Код
// Функция получает данные из Excel через ADO
//
// Параметры:
//  ИмяФайла      - имя файла в формате Excel, из которого необходимо прочитать данные
//  ИмяНомерЛиста   - имя или номер листа книги Excel, из которого необходимо прочитать данные
//  ЗаголовкиКолонокВПервойСтроке - первая строка листа книги Excel содержит заголовки. Колонки получаемой таблицы будут иметь соответствующие имена
// Возвращаемое значение:
//  Таблица значений. Имена колонок = F1, F2 и пр. при параметре ЗаголовкиКолонокВПервойСтроке = Ложь.  
//
Функция ПрочитатьТаблицуЗначенийИзExcel(ИмяФайла, Знач ИмяНомерЛиста = Неопределено, ЗаголовкиКолонокВПервойСтроке = Ложь, ИспользоватьПорядокЛистовКакВПриложенииExcel = Ложь, АктивныйЛист = Ложь) Экспорт
   //Если опущен, тогда 1-й лист
   еБаза = ПодключитьсяКБазеExcel(ИмяФайла, ЗаголовкиКолонокВПервойСтроке);
   Если еБаза = Неопределено Тогда 
      Возврат Новый ТаблицаЗначений;
   КонецЕсли;
      
   Catalog                  = Новый COMОбъект("ADOX.Catalog");
   Catalog.ActiveConnection   = еБаза;
   Если Catalog.Tables.Count() > 1 И (ИспользоватьПорядокЛистовКакВПриложенииExcel Или АктивныйЛист) Тогда   //Если 1 лист - то всё понятно. Он и активный.
      Excel = ОткрытьExcelИПолучитьИмяСтраницы(ИмяФайла, ИмяНомерЛиста, АктивныйЛист);
      Если Excel = Неопределено Тогда 
         Возврат Новый ТаблицаЗначений;
      КонецЕсли;
      Excel.WorkBooks.Close();
      Excel.Quit();
   Иначе
      Если ИмяНомерЛиста = Неопределено Тогда 
         ИмяНомерЛиста = 0;
      КонецЕсли;
      Попытка 
         ИмяНомерЛиста = Catalog.Tables.Item(ИмяНомерЛиста).Name;    
      Исключение
         Возврат Новый ТаблицаЗначений;
      КонецПопытки; 
   КонецЕсли;
   Возврат ПолучитьТаблицуИзSQL(еБаза, , , ОбщегоНазначения.ПодставитьПараметрыВСтроку("SEL ECT * FR OM [%1]", ИмяНомерЛиста));
Конецфункции   

Функция ОткрытьExcelИПолучитьИмяСтраницы(ИмяФайла, ИмяНомерЛиста = Неопределено, АктивныйЛист = Ложь) Экспорт 
   #Если Клиент Тогда
      Состояние("Запуск приложения Excel");
   #КонецЕсли
   Excel      = Новый COMОбъект("Excel.Application");
   Excel.DisplayAlerts = False;
   Попытка
      Excel.WorkBooks.Open(ИмяФайла);
      Если ИмяНомерЛиста <> Неопределено Тогда
         Попытка 
            ИмяНомерЛиста = Excel.Sheets(ИмяНомерЛиста).Name;    
         Исключение
         КонецПопытки; 
      Иначе
         Если АктивныйЛист Тогда 
            ИмяНомерЛиста = Excel.ActiveSheet.Name + "$";
         Иначе 
            //ИмяНомерЛиста = Excel.Sheets[0].Name + "$";
            лСпис = Новый СписокЗначений;
            Для Каждого Лист Из Excel.Sheets Цикл
               лСпис.Добавить(Лист.Name + "$");
            КонецЦикла;
            ИмяНомерЛиста = лСпис[0];
         КонецЕсли;
      КонецЕсли;
   Исключение
      Excel.WorkBooks.Close();
      Excel.Quit();
      Возврат Неопределено;
   КонецПопытки;
   Если Найти(ИмяФайла, ".xlsx") = 0 Тогда 
      Excel.ActiveWorkbook.SaveAs(ПолучитьИмяВременногоФайла(".xls"), КонстантыVBA().xlWorkbookNormal);
   КонецЕсли;
   Возврат Excel;
КонецФункции

DevКак получить порядок листов в Excel?#1 03.04.15 14:34
Если через ado:

Код
   еБаза = Новый COMОбъект("ADODB.Connection");
         СтрокаПодключения = "
         |Provider=Microsoft.ACE.OLEDB.12.0;
         |Data Source=%1;
         |Extended Properties=""Excel 12.0 Xml;IMEX=1;HDR=%2;"";";
         СтрокаПодключения = ОбщегоНазначения.ПодставитьПараметрыВСтроку(СтрокаПодключения, ИмяФайла, ?(ЗаголовкиКолонокВПервойСтроке, "Yes", "No"));
         еБаза.Open(СтрокаПодключения);   

   Catalog = Новый COMОбъект("ADOX.Catalog");
   Catalog.ActiveConnection = еБаза;
      Для Каждого Лист Из Catalog.Tables Цикл

то листы идут по алфавиту. А мне надо именно в том порядке, что я увижу открыв excel.

Интим "Excel.Application" не предлагать :)
DevСКД (суммирование группировок)#41 06.03.15 13:27
Не нужно тут использовать "Вычислить" и "Вычислить вырежение".
Нужно в источнике данных у реквизита "Остаток на начало" поставить роль "Остатки", имя роли "Сумма", тип "Начальный остаток".
У конечного остатка аналогично, только тип "Конечный остаток".
И все. Расчет ресурсов как у всех - по всем полям без отбора. СКД сам будет давать правильные данные.


DevПомогите доработать запрос#4 06.03.15 10:00
Можно и запросом.
Например так:

Код
ВЫБРАТЬ
   ПродажиОбороты.Период,
   ПродажиОбороты.Номенклатура,
   ПродажиОбороты.СтоимостьБезСкидокОборот
ПОМЕСТИТЬ Продажи
ИЗ
   РегистрНакопления.Продажи.Обороты(&НачПериода, &КонПериода, Регистратор, ) КАК ПродажиОбороты
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   Продажи.Период,
   Продажи.Номенклатура,
   МАКСИМУМ(ЦеныНоменклатуры.Период) КАК ПериодЦены
ПОМЕСТИТЬ МаксимальныеПериоды
ИЗ
   Продажи КАК Продажи
      ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
      ПО Продажи.Период >= ЦеныНоменклатуры.Период
         И Продажи.Номенклатура = ЦеныНоменклатуры.Номенклатура

СГРУППИРОВАТЬ ПО
   Продажи.Период,
   Продажи.Номенклатура
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   Продажи.Период,
   Продажи.Номенклатура,
   Продажи.СтоимостьБезСкидокОборот,
   ЦеныНоменклатуры.Цена
ИЗ
   Продажи КАК Продажи
      ЛЕВОЕ СОЕДИНЕНИЕ МаксимальныеПериоды КАК МаксимальныеПериоды
         ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
         ПО МаксимальныеПериоды.ПериодЦены = ЦеныНоменклатуры.Период
            И МаксимальныеПериоды.Номенклатура = ЦеныНоменклатуры.Номенклатура
      ПО Продажи.Период = МаксимальныеПериоды.Период
         И Продажи.Номенклатура = МаксимальныеПериоды.Номенклатура
DevГрупповая установка времени существующих документов#4 06.03.15 9:46
Вместо
Код
Объект.Дата = Дата(Год(Объект.Дата),Месяц(Объект.Дата),День(Объект.Дата),00,00,00); 

можно написать просто
Код
Объект.Дата = НачалоДня(Объект.Дата);

Еще желательно перед записью установить режим обмена данными (чтобы не производились проверки и пр.) - будет быстрее работать:
Код
Объект.ОбменДанными.Загрузка = Истина;