8.х Есть ли в 1С постоянная индивидуальная память для ПК

Тема в разделе "Установка платформы "1С:Предприятие 8"", создана пользователем GiGi, 5 июл 2017.

  1. TopicStarter Overlay
    GiGi
    Offline

    GiGi

    Регистрация:
    7 мар 2017
    Сообщения:
    21
    Симпатии:
    0
    Баллы:
    1
    Всем привет!
    Меня интересует один вопрос.
    Вообще на столько я понимаю, в 1С все данные хранятся на сервере.
    И то, что на сервере это общие данные.
    Вопрос:
    Есть ли в 1С память не общая а ИНДИВИДУАЛЬНАЯ ДЛЯ КАЖДОГО ПК?
    Вообще по этому вопросу мне рекомендовали, индивидуальные данные хранить с привязкой конкретному пользователю. Т.е. через РегистрСведений с измерением Пользователь = ПараметрыСеанса.ТекущийПользователь. И получив подробное описание как это сделать был доволен. И вроде думал, что вопрос решен. Но к сожалению не тут то было. Потому, что через одного и того. же пользователя можно работать с разных ПК. Понятное дело, что это не рекомендуется, но дело не в этом. А в том, что ФИЗИЧЕСКИЙ ЭТО ВОЗМОЖНО. Поэтому предложенное решение сохранять индивидуальные данные для пользователя, к сожалению не подходит..
    Нужно, что бы данные были индивидуальные не для пользователя, а для ПК.
    В 1С вообще предусмотрено такое? Или опять легче спутник на орбиту запустить чем сделать это в 1С.
    Я просто удивляюсь о чем вообще думали разработчики. Неужели не могли сделать так, что бы данные можно было сохранять индивидуально для каждого ПК. Не для Васи, не для Пети, и не для Джамбулата, и т.д а для ПК... Ну.....ДЕБИЛИЗМ
    И главное, что бы это было легко и просто сделать. А не писать кучу кода для этого.
    На пример просто в настройках где то нашел нужную галочку с заголовком на пример "СОХРАНЯТЬ ИНДИВИДУАЛЬНО" и что бы платформа считывала номер IP машины и в папку с этим именем пихала, постоянные данные ИНДИВИДУАЛЬНО ДЛЯ ОДНОГО ПК. блин...
    Я просто одурею ... именно поэтому индивидуальные данные ПК ну просто некуда пихать. Дебилизм.
    Понятное дело, что можно просто при каком-то событии создать файл и нужные записи туда и запихнуть. Но зачем выходить за рамки самой платформы и переходить на команды ОС.
    Неужели нельзя это сделать через стандартные настройки?
    И еще от коллег слышал, что велосипед изобретаю... да какой велосипед, аж самолет нужно изобретать, что бы сделать элементарное.
    Ладно! Извините за эмоциональность, но уже достало.... когда сделать элементарное, это целая проблема.
    Конечно в таком случае, у разных пользователей на одном ПК будут одинаковые индивидуальные сохранения. Ну и пусть. Именно так и нужно. Т.е. данные не для пользователя, а для ПК.
    Буду признателен если кто подскажет. оптимальные пути!
    Последнее редактирование: 5 июл 2017
  2. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.128
    Симпатии:
    953
    Баллы:
    204
    задача-то какая?
  3. TopicStarter Overlay
    GiGi
    Offline

    GiGi

    Регистрация:
    7 мар 2017
    Сообщения:
    21
    Симпатии:
    0
    Баллы:
    1
    До предела простая.
    На рабочем столе общая форма. На ней поля выбора год-месяц. И событие ПриИзминении этих полей сохранить в константу констГОД, констМесяц.
    И все документы имеют такие же поля год-месяц. И поэтому в событии этих доков ПриОткрытии прописана команда получить год-месяц из констГОД, констМесяц и присвоить ссылку.
    И вроде все нормально. Т.е. все доки отображают тот год и месяц, который указан в полях рабочего стола.
    Только единственное... нужно, что бы все это работало ИНДИВИДУАЛЬНО ДЛЯ ПК.
    Т.е. всего каких то два несчастных значения года и месяца сохранить не в константу, а куда-нибудь ... в ту память которая была бы индивидуальной для ПК.
    Ну ладно ... пусть будет для каждого ПК или пусть для каждого пользователя... просто последнее это ЦЕЛОЕ ДЕЛО
    http://1c.moy.su/publ/rabota_polzov...0/rabota_s_polzovateljami_v_1s_8_2/58-1-0-226
    https://helpf.pro/faq82/view/1391.htm
    http://programmist1s.ru/parametryi-seansa-1s/
    Гууу ... как достало... сделал как там говориться, но все равно че-то не срабатывает. Толи я че то не правильно то ли не пойму.
    На линии «ПараметрыСеанса.ТекущийПользователь». выдает ошибку.
    В добавок еще какой то справочник нужно создавать с именем пользователи ... синхронизировать его ... потом еще регистр ... ауууу... ЦЕЛОЕ ДЕЛО .... достало уже. Правое ухо левой рукой.
    Нельзя все это сделать попроще? При помощи настроек. Или с помощью малой функции.
    Ведь речь то о каких то двух несчастных записей.
    Вот собственно вся задача!
  4. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.128
    Симпатии:
    953
    Баллы:
    204
    А теперь отбросим все эмоции и вспомним, что 1С это прежде всего БАЗА ДАННЫХ.
    Думаю, не нужно объяснять, каким образом в базах данных хранятся абсолютно ВСЕ данные.
    В чем проблемы завести РС и хранить нужное в нем?
  5. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.543
    Симпатии:
    343
    Баллы:
    104
    Т.е. для вас уникальность ПК определяется его ip адресом? Ну ок.
    --- Объединение сообщений, 5 июл 2017 ---
    Попробуй использовать СохранитьЗначение() / ВосстановитьЗначение().
  6. TopicStarter Overlay
    GiGi
    Offline

    GiGi

    Регистрация:
    7 мар 2017
    Сообщения:
    21
    Симпатии:
    0
    Баллы:
    1
    Все это понятно, но тогда в чем выход? Т.е. как проще сделать?
    Значение год-месяц записывать в файл блокнот?
    А потом, оттуда и читать?
    Ладно.. можно и так. Просто некоторые коллеги мне говорили, что часто ухожу в сторону от стандартных способов. Как будто это моя прихоть, а не вынужденная ситуация
    Ну ладно ... я не сисадмин ... и признаюсь мало знаком с этим.
    Просто дело не в этом.
    Понятное дело, что сервер это общая память.
    Но не знаю ... мне кажется, не важен принцип работы, а важно только то, что, память должна быть не только общая, но и индивидуальная.
    Поэтому как мне думается, авторы 1С должны были на клинской стороне, сделать не только кешовую, а постоянную память для каждого или ПК или пользователя.
    В таком случае в итоги та простая , задача о которой говорил, решалось бы просто. И не нужно было бы писать кучу кода и функций.
    И не приходилось бы, выходить за рамки самой платформы, на команды ОС.
    Просто где-то поставил нужную для этого галочку и все дела.
    Ладно! Извините за эмоции ... просто сильно негодую когда топчусь на одном месте!
    Спасибо Вам за реакцию.
    Попробую!
    Но если понадобиться помощь то, надеюсь тема не будет закрыта и смогу продолжить ее. И опять попрошу Вас о помощи.
  7. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.128
    Симпатии:
    953
    Баллы:
    204
    Зачем "блокнот"? Блокнот может "потеряться".
    РС - это БД, если оно там потеряется, то вопросы о восстановлении более важных данных будут волновать больше, чем какое-то там хранилище каких-то там настроек.

    В данном конкретном случае ситуация абсолютно не стандартная. Для чего может потребоваться хранить комбинацию Месяц-Год в разрезе компьютеров, на которых пользователи ведут работу в 1С - одному вам известно.
  8. TopicStarter Overlay
    GiGi
    Offline

    GiGi

    Регистрация:
    7 мар 2017
    Сообщения:
    21
    Симпатии:
    0
    Баллы:
    1
    Объясняю!
    Допустим пользователей всего два. И один из них открыл интерфейс. И указал отчетный год-месяц на рабочем столе.
    И работает.
    Вдруг совсем неожиданно подсел второй пользователь на другом PC и тоже открыл интерфейс и взял и нагло и беспардонно сменил год месяц ..:):):):). негодяй ..:):):):):).
    И вот, первый пользователь обновляет интерфейс и что он видит? Год-месяц изменен. Из-за чего приходит в полную ярость :):):):). Берет телефон и звонит второму пользователю и говорит:
    Ты ЧЕ ДЕЛАЕШЬ НЕГОДЯЙ! :):):):)
    Блиин! Вот класс!
    Вообще можно и так... конечно... Но в таком случае авторам 1С нужно было это в учебнике указать. Что в таких случаях нужно звонить другому пользователю и сказать: "Перестань безобразничать".
    И тогда все заработает. :):) Но почему то в учебнике это не написано :):):):)
    Ибо если
    записывать в константы именно так и получиться. Не говоря уже о том, если пользователей не два, а 10 и 20.
    А нужно то простое....
    Первое: что бы личные настройки сохранялись для каждого пользователя или для РC. А в идеале с учетом и того и другого.
    Второе: Что бы это можно было сделать ЛЕГКО И ПРОСТО. С помощью просто какой то галки для клиента. Или с помощью простой команды в событии ПриИзменении.
    Вот и весь вопрос.
    Ладно! решил так. Записывать текущего пользователя или данные текущего ПК в рег сведений. Измерение это имя пользователя или Идентификатор ПК. и год месяц туда и запихивать в ресурсы для каждого индивидуально.
    Не знаю на столько разумное решение. И тут надеюсь на ваши советы. Потому, что у самого, буду откровенен, опыта маловато.
    Если будут проблемы опять выйду на тему. и буду признателен за помощь.
  9. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.128
    Симпатии:
    953
    Баллы:
    204
    Лично я понял одно: вы абсолютно не знаете как работает платформа 1С в плане хранения настроек пользователей, но обвиняете в этом почему-то фирму 1С.

    Настройки можно хранить для каждого пользователя индивидуально в "системных"(ака кэш 1с) настройках. Так было до версии платформы 8.2.
    В типовых конфигурациях с использованием обычных форм(обычного приложения) был свой механизм хранения настроек для отчетов, основанный на применении РС.

    В 8.2(если не ошибаюсь) сделали специальный объект метаданных: ХранилищеНастроек.
    Можно обойтись без создания специального хранилища и использовать глобальный объект метаданных ХранилищеОбщихНастроек.
  10. TopicStarter Overlay
    GiGi
    Offline

    GiGi

    Регистрация:
    7 мар 2017
    Сообщения:
    21
    Симпатии:
    0
    Баллы:
    1
    Да что там знать и понимать вообще ...
    И вообще как это работает это НЕ ВАЖНО!
    Важно только другое о чем уже выше говорил:
    Первое: что бы личные настройки сохранялись для каждого пользователя или для ПК. А в идеале с учетом и того и другого.
    Второе: Что бы это можно было сделать ЛЕГКО И ПРОСТО. С помощью просто какой то галки для клиента. Или с помощью простой команды в событии ПриИзменении.
    То настолько платформа отвечает указанным требованием в рассматриваемой теме, ровно настолько можно судить о том, как она удобная и эффективна.
    На то и изобрели языки программирования высшего уровня, что бы сложные вещи решались просто. Всего одной командой. И что бы не было необходимости каждому учить Ассемблер.
    Сложные вещи делать просто. Вот критерий эффективности. И не важно КАК ЭТО РАБОТАЕТ! :):)
    А если сделать простое это просто ЦЕЛОЕ ДЕЛО и супер сложно, то это о чем говорит? Не трудно догадается.
    Ладно перейду к сути...
    Все это хорошо, но хотелось бы поконкретнее.
    Что и как нужно сделать. Первое ...второе ...третье. Я просто месяца четыре назад вообще сел за среду в 1С. Так что новичок.
    Короче, я не стал искать инфу как сделать, через ХранилищеОбщихНастроек, а решил исходить из того, с чем знаком. И использовал рег сведений.
    Сделал как говорил: в идеале с учетом и того и другого. Индивидуально для каждого пользователя и для каждого ПК.
    А для этого создал рег сведений с именем к примеру: "СейвПользователя" с двумя измерениями: "ТекущийПользователь" и "IP". А ресурсов пока всего два: "Год" "Месяц".
    Потом создал ФормуЭлемента справочника, с двумя кнопками ....это так.... для того что бы тестить.
    В модуль условно созданной ФормыЭлемента вставил вот эти процедуры и функции:
    Код:
    &НаКлиенте
    Процедура ГодМесяцЗаписатьДляПользователя(Команда)
    ТекПользователь=ТекущийПользователь("ПолноеИмя");
    знIP=Получить_IP();
    //----------------------------------------
    РегСведений_ВдвухИзмер_Запись("СейвПользователя","ТекущийПользователь","IP",ТекПользователь,знIP,"Год",""+Объект.Год);
    РегСведений_ВдвухИзмер_Запись("СейвПользователя","ТекущийПользователь","IP",ТекПользователь,знIP,"Месяц",""+Объект.Месяц);
    //----------------------------------------
    КонецПроцедуры
    &НаКлиенте
    Процедура ГодМесяцПолучитьДляПользователя(Команда)
    ТекПользователь=ТекущийПользователь("ПолноеИмя");
    знIP=Получить_IP();
    //------------------------------------------------
    ТекГод=РегСведений_ВдвухИзмер_Получить("СейвПользователя","ТекущийПользователь","IP",ТекПользователь,знIP,"Год");
    ТекМесяц=РегСведений_ВдвухИзмер_Получить("СейвПользователя","ТекущийПользователь","IP",ТекПользователь,знIP,"Месяц");
    //------------------------------------------------
    Сообщить(ТекГод+"--"+ТекМесяц);
    КонецПроцедуры
    
    &НаСервере
    Процедура РегСведений_ВдвухИзмер_Запись(РегистрСведенийИмя,Измерение1,Измерение2,знИзмерение1,знИзмерение2,Ресурс,знРесурс)
    //=======================================================
    Менеджер = РегистрыСведений[РегистрСведенийИмя].СоздатьМенеджерЗаписи();
    НаборЗаписей = РегистрыСведений[РегистрСведенийИмя].СоздатьНаборЗаписей();
    //=======================================================
    Менеджер[Измерение1]=знИзмерение1;
    Менеджер[Измерение2]=знИзмерение2;
    Менеджер.Прочитать();
    //=======================================================
    //Сообщить(Менеджер.Выбран());
    Если Менеджер.Выбран()=Ложь Тогда
        Менеджер[Измерение1]=знИзмерение1;
        Менеджер[Измерение2]=знИзмерение2;
        Менеджер[Ресурс]=знРесурс;
        Менеджер.Записать();
    Иначе
        НаборЗаписей.Отбор[Измерение1].Установить(знИзмерение1);
        НаборЗаписей.Отбор[Измерение2].Установить(знИзмерение2);
        НаборЗаписей.Прочитать();
        //--------------------------------------------------------
            Для каждого Строка из НаборЗаписей Цикл
            Строка[Ресурс]=знРесурс;
            КонецЦикла;
        //--------------------------------------------------------
        НаборЗаписей.Записать();
    КонецЕсли;
    КонецПроцедуры
    
    &НаСервере
    Функция РегСведений_ВдвухИзмер_Получить(РегистрСведений,Измерение1,Измерение2,знИзмерение1,знИзмерение2,Ресурс)
    Менеджер=РегистрыСведений[РегистрСведений].СоздатьМенеджерЗаписи();
    Менеджер[Измерение1]=знИзмерение1;
    Менеджер[Измерение2]=знИзмерение2;
    Менеджер.Прочитать();
    Возврат Менеджер[Ресурс];
    КонецФункции
    
    &НаСервере
    Функция ТекущийПользователь(ИмяПолноеИмя)
    Если ИмяПолноеИмя="Имя" тогда
    Возврат ПользователиИнформационнойБазы.ТекущийПользователь().Имя;
    ИначеЕсли ИмяПолноеИмя="ПолноеИмя" тогда
    Возврат ПользователиИнформационнойБазы.ТекущийПользователь().ПолноеИмя;
    Иначе
    Возврат "";
    КонецЕсли
    КонецФункции
    &НаКлиенте
    Функция Получить_IP()
    //Определение ip адреса через "winmgmts"
    COMОбъект = ПолучитьCOMОбъект("winmgmts:\\.\root\CIMV2");
    Результат = COMОбъект.ExecQuery("SELECT * FROM
                                    |Win32_NetworkAdapterConfiguration
                                    |WHERE IPEnabled = TRUE");         
    Для каждого Строка Из Результат Цикл
    Для каждого ПодСтрока Из Строка.IPAddress  Цикл
    Возврат ПодСтрока;
    КонецЦикла;
    КонецЦикла;
    КонецФункции
    
    Вот как решил. и вроде все стало как надо. При чем сделал так, что бы измерений было только два, а ресурсы можно было со временем добавлять сколько угодно.
    Но это то, что я сделал ... и учитывая то, что новичок допускаю мысль, что может что то не учитываю.
    Короче, я хотел узнать мнение таким путем можно или могут возникнуть проблемы если так сделаю?
    Если да то, просьба предложить тогда что то взамен и сделать это не общими рекомендациями, а так же понятно и подробно как на пример у меня.
    Буду признателен!
    Последнее редактирование: 7 июл 2017

Поделиться этой страницей