Версия для печати темы (https://pro1c.org.ua/index.php?s=fedb96b16ef8f0697506ad7a2ebca753&showtopic=66981)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Архивація обєктів 1С

Автор: Diana1c 26.05.22, 11:55

Доброго дня, базою 1С користуються енна кількість співробітників, за багато років було створенно багато користувачів і обєктів в базі( база роздута), як можливо відслідкувати якими обєктами користуються, а які взагалі вже не актуальні і їх можна видалити. 1с 8.3 самописна.

Автор: volodya1122 26.05.22, 20:44

Diana1c @ Сегодня, 12:55 * ,
1. Енна кілкість співробітників. Думаю мається на увазі користувачів в 1С? На роздутість бази взагалі не впливає. (це 0,0000001% від обєму бази). А щоб непотрібних не показувати при вході в програму -то їх показ можна відключити в конфігураторі (Меню- Адміністрування-Користувачі. Випрати непотрібного користувача. в Зняти помітку "Показувати в списку вибору")
2. Багато обєктів в базі. Що тут мається на увазі? Багато різних видів документів, довідників, Регістрів.......? Чи багато в базі створено докумнентів, довідників.... (мається на увазі документи , які створюють користувачі в процесі роботи з програмою)?
2.1 Якщо перше, то тут практично неможливо щось викинути, так як одні обєкти зазвичай задіяні в різних місцях програми. І просто так їх не позбутись, не переписавши половину конфігурації.
2.2 Якщо друге, то тут також не все однозначно. Наприклад документ введення залишків. Його один раз використали на початку користування програмою -ввели залишки. Більше ним не користуються. Його можна видалити? Звичайно ні. Тут тільки аналізувати очима, розмовляти з працівниками., Якщо в програмі є різні підсистеми, які ніяк не повязані між собою.Тоді документи однієї підсистеми можно видалити.
3. База дуже роздулась? В цифрах це скільки (в Мегабайтах/ Гігабайтах) База файлова чи SQL? (Зменшення обєму допомагає в Конфігураторі "Тестування і виправлення інформаційної базі" - АЛЕ ОБОВЯЗКОВО ПОТРІБНО ТАКІ РЕЧІ РОБИТИ НА КОПІЇ І НЕ ЗАБУВАТИ ПЕРЕД ТИМ РОБИКИ АРХІВНУ КОПІЮ БАЗА!!!!ЦЕ ДУЖЕ ВАЖЛИВО)

Автор: Diana1c 27.05.22, 8:36

volodya1122 @ Вчера, 21:44 * ,
Дякую за відповідь. В базі є велика кількість довідників, регістрів, видів документів з яких за 10 років стали неактуальні 50%, необхідно відслідкувати якими обєктами в базі користувачі дійсно користуються, а решту видалити оскільки це ускладнює роботу як користувачам 1с так і програмісту в конфігурації.

Автор: volodya1122 27.05.22, 9:48

Diana1c @ Сегодня, 9:36 * ,

Ось нашвидкоруч накинув код, щоб визначити які документи які зараз використовуються.
Але повторюю, потрібно добре подумати чи видалення документів, які не використовуються не вплинуть на правильність обліку по інших документах


    ДатаНач=НачалоГода(ДобавитьМесяц(ТекущаяДата(),-30)); // за 2 роки
    ДатаКонечн=ТекущаяДата();
    Кав="""";
    Запрос = Новый Запрос;
    Текст = " ";
    Для Каждого Документ Из Метаданные.Документы Цикл
        Текст = Текст + "ВЫБРАТЬ Ссылка.Дата Как Дата, "+
        Кав+ Документ.Имя+Кав+" Как Имя, "+
        " 1 Как Повторов"+
        " ИЗ Документ." + Документ.Имя;
        Текст = Текст +
        " ГДЕ Ссылка.Дата МЕЖДУ &д1 И &д2 ОБЪЕДИНИТЬ ";
    КонецЦикла;
    
    Запрос.Текст = Лев(Текст, СтрДлина(Текст) - СтрДлина(" ОБЪЕДИНИТЬ "));
    Запрос.Текст = Запрос.Текст + "
    |    УПОРЯДОЧИТЬ ПО
    |Имя, Дата";
    
    Запрос.УстановитьПараметр("д1", ДатаНач);
    Запрос.УстановитьПараметр("д2", ДатаКонечн);
    Выборка = Запрос.Выполнить().Выгрузить();
    
    КопияТЗ = Выборка.Скопировать(,"Имя,Повторов");
    КопияТЗ.Свернуть("Имя","Повторов");
    
    //    Пока Выборка.Следующий() Цикл
    //        Сообщить(""+Выборка.Дата+" "+Выборка.Имя+" "+Выборка.Повторов );
    //    КонецЦикла;
    
    Сообщить("Кількість документів за період з  "+ДатаНач+"  по  "+ДатаКонечн);
    Для Каждого Стр Из КопияТЗ Цикл
        Сообщить(Стр.Имя + " " + Стр.Повторов);
    КонецЦикла;
    Для Каждого Документ Из Метаданные.Документы Цикл
        СтрокаПоиска = КопияТЗ.Найти(Документ.Имя,  "Имя");
        Если СтрокаПоиска = Неопределено Тогда
            Сообщить(Документ.Имя + " пусто");
        КонецЕсли;
    КонецЦикла;



Автор: Diana1c 27.05.22, 10:10

volodya1122 @ Сегодня, 10:48 * ,
Дуже вдячна, Ви супер, це по суті одноразова акція необхідно подивитись хто і якими обєктами(це не лише документи, а і звіти, довідники) в базі користується, якщо за останніх 1-2 роки ніхто його не відкривав то прибрати(якщо не повязаний з іншими), якщо користується лише один користувач то обєкт прибрати з різних відділів і лишити лише йому. Таким чином, якщо в обєкт є в відділі Маркетинг, Продажі, Бухгалтерія, Адміністрація, а ним користуються лише в Маркетингу то лишити його там а всюди прибрати щоб було просторніше. А якщо ним взагалі не користуються і він не повязаний з іншими то прибрати всюди. Вибачаюсь я програмістка ще та....., в консолі запитів цей код мені видав купу помилок (((((

Автор: volodya1122 27.05.22, 10:20

Diana1c @ Сегодня, 11:10 * ,
Так це не в консолі запитів писати. А оформити зовнішнім звітом

Автор: Diana1c 27.05.22, 10:40

volodya1122 @ Сегодня, 11:20 * ,
пробую, записую параметри, всеодно помилки....я не розумію.... це частинка коду чи весь? що куди писати.(((((( help.gif 09000000.gif 32000000.gif

Автор: volodya1122 27.05.22, 10:50

Diana1c @ Сегодня, 11:40 * ,
Які параметри? Звичайний звіт (на формі звіту кнопка Сформировать. В обработчику кнопки Процедура: Процедура Сформировать()...... КонецПроцедури
Ось туди вставити код

Автор: Diana1c 27.05.22, 11:06

volodya1122 @ Сегодня, 11:50 * , Я створила зовнішній звіт, на ньому форму, в формі кномку Сформировать, і до кнопки Действие: прописую Процедура Сформировать...?

Автор: Diana1c 27.05.22, 12:22

volodya1122 @ Сегодня, 11:50 * ,
Дуже велике дякую, розібралась, все працює, показало скільки разів за два роки відкривали документи, і якими не користувались взагалі, Дякую, Ви молодець))))))) icon_beer17.gif

Автор: vbi 27.05.22, 14:44

А ще така ідея - зробити виборку типів обєктів з журналу регістрації за останні кілька місяців - це будуть ті об'єкти якими користуються. Відповідно ті що не користуються - всі інші. тоді їх можна видалити, знайти всі посилання на них в коді і починати "здувати" базу smile.gif

Автор: volodya1122 27.05.22, 15:49

vbi @ Сегодня, 15:44 * ,
Далеко не всі події записуються в журнал реєстрації (наприклад "Справочники" - якщо не створювати нові елементи/редагувати існуючі, - а тільки використовувати їх в документах, то в в журналі реєстрації небуде згадки про те, що цей довідник використовували. Інший приклад. Документи рухають регістри. Але по них також немає запису в журналі реєстрації)

Автор: Diana1c 30.05.22, 8:57

volodya1122 @ 27.05.22, 16:49 * ,
Дякую, чи можливо вставити в кожен обєкт (довідник і звіт) шматок коду щоб при відкритті в регістр писалась дата і користувач який відкрив, а вже на основі цих данних створити звіт через пів року . Пройде декілька місяців регістр наповниться, обєктів по яких записів не буде прибирати?

Автор: andreydv87 05.06.22, 18:31

Diana1c @ 30.05.22, 9:57 * ,
Может проще и более правильно сделать свертку базы.

Автор: Diana1c 08.06.22, 9:54

volodya1122 @ 27.05.22, 10:48 * ,Перемпрошую, а можливо щоб не сумувало кількість, а видало окремо дату та час і користувача. тобто: Документ, дата і час, користувач. Я розумію що це буде величезне полотно данних, але якщо можна в цьому коді поправити то буду дуже вдячна )

Автор: zay 08.06.22, 11:02

Доброго дня
Ось дуже класна стаття про міф о пришвидшенні роботи 1С за допомогою видалення частини даних
Раніше я підозрював що "обрєзка" бази - це маячня. Коли мені трапилася ця стаття, остаточно переконався в цьому
https://pro1c.org.ua/index.php?showtopic=5061

По моєму досвіду пришвидшенню роботи 1С:

  1. Самий поширений випадок - оптимізації потребує конкретний об'єкт. Запит чи фрагмент програмного коду
  2. Якщо "тормозить" просто все, дивимось монітором ресурсів в чому проблема, який ресурс (процесор, пам'ять, диск чи мережа) зайнятий близько до 100%. В моєму досвіді найпоширеніше це була мережа


Якщо ж ви все ж таки прийняли рішення архівувати базу, то зробити це можна так:
  1. Створюємо нову базу с такою самою конфігурацією
  2. Використовуємо "Конвертації даних". Налаштовуємо правила перенесення об'єктів
  3. За допомогою "Конвертації даних" переносимо в нову базу документи та регістри відомостей після обраної дати (наприклад 01.01.2022)
  4. При перенесені за допомогою конвертації будуть також перенесені елементи довідників, які використовуються у документах та регістрах відомостей що переносятся
  5. "Старі" елементи довідників (включно із "старими" користувачами) перенесені не будуть

Так ми отримаємо дві бази. Одну архівну і одну "нову" в якій продовжуємо працювати

Автор: Diana1c 08.06.22, 12:44

zay @ Сегодня, 12:02 * ,
Дякую, такий механізм чудовий, але є документи які на використовуються раз в рік, відповідно довідники до них теж. Якщо обрубати по даті то можливі втрати рідковикористовуваних обєктів. А якщо відслідкувати хто коли і як часто користується базою, то нехай на це піде багато часу, можна буде зібрати звіт з якого буде видно звіти, довідники і документи які не використовуються в тих чи інших відділах - значить їх прибрати (збільшиться на екрані простір для розгону), а якщо не використовується взагалі то прибирати. Якщо використовується 1 чи 2 рази на рік поставиться питання актуальності документа чи звіту, можливо необхідно щось змінити для поліпшення функціоналу. Користувачі вже блукають в базі і не використовують той функціонал 1С для чого вона робилась роками.

Автор: zay 08.06.22, 15:15

Цитата(Diana1c @ 08.06.22, 13:44) *
Якщо обрубати по даті то можливі втрати рідковикористовуваних обєктів

У "Конвертації даних" можна створити декілька наборів правил. Наприклад для об'єктів які використовуються часто, для об'єктів які використовуються з середньою частотою і для для об'єктів які використовуються рідко. І вивантажувати кожну групу окремо на різні дати

При цьому створюється проблема переноса залишків. Залишки ми можемо переносити тільки на найбільшу дату. А об'єкти, що йдуть до цієї дати, переносити без рухів. І добавляти у модуль документа заглушку, яка блокує рухи документа до певної дати. Щоб користувачі випадково не перепровели старий документ
Але те що ви пропонуєте, також зіткнеться із цією проблемою

Автор: volodya1122 09.06.22, 17:29

Цитата(Diana1c @ 08.06.22, 10:54) *
volodya1122 @ 27.05.22, 10:48 * ,Перемпрошую, а можливо щоб не сумувало кількість, а видало окремо дату та час і користувача. тобто: Документ, дата і час, користувач. Я розумію що це буде величезне полотно данних, але якщо можна в цьому коді поправити то буду дуже вдячна )


" Ссылка.Створив Как Автор "+ спрацює в тому виадку, якщо в кожного із документів є реквізит "Створив". Якщо у вас по інщому називається то виправити Ссылка.Створив= на Ссылка.Автор (ябо як там називається у вас в кожнім документі)

ДатаНач=НачалоГода(ДобавитьМесяц(ТекущаяДата(),-30)); // за 2 роки
    ДатаКонечн=ТекущаяДата();
    Кав="""";
    Запрос = Новый Запрос;
    Текст = " ";
    Для Каждого Документ Из Метаданные.Документы Цикл
        Текст = Текст + "ВЫБРАТЬ Ссылка.Дата Как Дата, "+
        Кав+ Документ.Имя+Кав+" Как Имя, "+
        " Ссылка.Створив Как Автор "+   //  ось тут поправити
        " ИЗ Документ." + Документ.Имя;
        Текст = Текст +
        " ГДЕ Ссылка.Дата МЕЖДУ &д1 И &д2 ОБЪЕДИНИТЬ ";
    КонецЦикла;
    
    Запрос.Текст = Лев(Текст, СтрДлина(Текст) - СтрДлина(" ОБЪЕДИНИТЬ "));
    Запрос.Текст = Запрос.Текст + "
    |    УПОРЯДОЧИТЬ ПО
    |Имя, Автор, Дата";
    
    Запрос.УстановитьПараметр("д1", ДатаНач);
    Запрос.УстановитьПараметр("д2", ДатаКонечн);
    Выборка = Запрос.Выполнить().Выгрузить();
    
    
    Построитель = Новый ПостроительОтчета;
    Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(Выборка);
    Построитель.Макет = Неопределено;
    Макет = Построитель.Макет;
    Область = Макет.Область();
    Область.ШиринаКолонки = 20;
    Построитель.Макет = Макет;
    Построитель.Выполнить();
    Построитель.Вывести();
    
Сообщить(Запрос.Текст);

Звіт буде формуватись набагато довше попереднього

Автор: Diana1c 10.06.22, 9:04

volodya1122 @ Вчера, 18:29 * ,
Дуже вам вдячна icon_beer17.gif , в базі "ПАПЄРЄДНІКІ" писали іАвтор, і Ответственный два варіанта(в різних документах по різному)

Автор: volodya1122 10.06.22, 13:22

Цитата(Diana1c @ 10.06.22, 10:04) *
в базі "ПАПЄРЄДНІКІ" писали іАвтор, і Ответственный два варіанта(в різних документах по різному)


Тоді виправити так частину коду


    Для Каждого Документ Из Метаданные.Документы Цикл
        Если Не Документ.Реквизиты.Найти("Автор") = Неопределено Тогда
            СтрокаАвтор=" Ссылка.Автор Как Автор ";
        ИначеЕсли Не Документ.Реквизиты.Найти("Створив") = Неопределено Тогда
            СтрокаАвтор=" Ссылка.Створив Как Автор ";
        ИначеЕсли Не Документ.Реквизиты.Найти("Ответственный") = Неопределено Тогда
            СтрокаАвтор=" Ссылка.Ответственный Как Автор ";
        Иначе
            СтрокаАвтор=Кав+" Відсутный автор"+Кав+" Как Автор ";
        КонецЕсли;
// цей пораддок можна пробувати міняти. Так як "Папереднікі" могли до одного і того самого документа прописати і Автор і Ответственного.
//А реально самого автора писати в один із реквізитів
            
        Текст = Текст + "ВЫБРАТЬ Ссылка.Дата Как Дата, "+
        Кав+ Документ.Имя+Кав+" Как Имя, "+
        СтрокаАвтор+
        //    " Ссылка.Створив Как Автор "+
        " ИЗ Документ." + Документ.Имя;
        Текст = Текст +
        " ГДЕ Ссылка.Дата МЕЖДУ &д1 И &д2 ОБЪЕДИНИТЬ ";
    КонецЦикла;

Автор: Diana1c 10.06.22, 13:31

volodya1122 @ Сегодня, 14:22 * friends.gif

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua