Почему возникает ошибка Cannot read property ‘map’ of undefined? — Хабр Q&A

Почему возникает ошибка cannot read property ‘map’ of undefined?

const [users, setUsers] = useState({user:['user1', 'user2', 'user3']});

Здесь users это объект, единственное свойство которого является массивом.

setUsers(users.user.filter((item,i) => i !== index));

А здесь — массив.

const list = users.user.map(...

У этого массива вы пытаетесь прочитать свойство user, которого нет, получаете undefined, а дальше… Ну, сообщение об ошибке вы уже видели.

Вы бы определились, чем должен быть users.

§

Uncaught typeerror: cannot read property — что это означает — журнал «код»: программирование без снобизма

Допу­стим, вы дела­е­те стра­ни­цу с фор­мой и полем ввода:

<form name=»myform»>
  <input name=»myinput» value=»10″ />
</form>

Нуж­но, что­бы скрипт нашёл эту фор­му, достал из неё зна­че­ние поля вво­да и вывел его на экран. Вы пише­те скрипт и оформ­ля­е­те его как отдель­ный файл, кото­рый под­клю­ча­е­те в раз­де­ле head:

<script>
  var str = »;
  for(i=0; i < document.myform.elements.length; i ){
     str = document.myform.elements[i].name ‘=’ encodeURIComponent(document.myform.elements[i].value) (i == document.myform.elements.length -1 ? » : ‘&’);
    }
  alert(str);
</script>

Этот скрипт дол­жен быть пра­виль­ным. При тести­ро­ва­нии внут­ри кон­со­ли он дела­ет имен­но то, что нуж­но. Но после запус­ка скрипт пада­ет с ошибкой:

❌ Uncaught TypeError: Cannot read property

Это озна­ча­ет: «Вы пыта­е­тесь про­чи­тать у объ­ек­та какое-то свой­ство, но я не могу его най­ти, а зна­чит, не могу и про­чи­тать то, чего нет».

Стран­но, ведь вы уве­ре­ны, что у это­го объ­ек­та такое свой­ство точ­но есть, и вы сто раз так уже делали.

Всё так и одно­вре­мен­но не так.

Эта ошиб­ка чаще все­го про­ис­хо­дит, когда вы обра­ща­е­тесь к свой­ствам объ­ек­та рань­ше, чем объ­ект готов:

  • Ско­рее все­го, объ­ект ещё не загрузился.
  • Может быть, этот объ­ект дол­жен появить­ся на стра­ни­це по скрип­ту, кото­рый ещё не выполнился.
  • Допу­ще­на опе­чат­ка в назва­нии объ­ек­та, поэто­му при обра­ще­нии к нему скрипт его не находит.

Наш слу­чай — пер­вый и самый рас­про­стра­нён­ный: мы вызы­ва­ем скрипт в раз­де­ле <head>, но фор­ма у нас ещё не гото­ва — она баналь­но не загру­же­на в доку­мент, поэто­му скрипт не может про­чи­тать свой­ства несу­ще­ству­ю­щей формы.

Что­бы изба­вить­ся от этой ошиб­ки, нуж­но доба­вить в вызов скрип­та атри­бут defer — он заста­вит скрипт подо­ждать, пока стра­ни­ца загру­зит­ся пол­но­стью, вме­сте с формой.

<script defer src=»…»>

Вто­рой вари­ант — поме­стить вызов скрип­та сра­зу после фор­мы, тогда к момен­ту вызо­ва всё ока­жет­ся на сво­их местах и ошиб­ки не будет. Или вооб­ще в кон­це все­го документа.

Почему ошибка проекта:typeerror: cannot read property ‘filter’ of undefined? как исправить? может я что-то не так делаю?

Здраствуйте. Изучал React, и вот настал момент когда я начал делать свой первый сайт на реакте. Сказать что встретился с трудностями это ничего сказать. Самое сложное оказалось слепить все компоненты, все свои наработки, в один сайт. Хотя уже как-то потихоньку что-то да получается. Но появилась такая ошибка:

5d98ae15bcb45935306472.jpeg

Сразу извиняюсь что бросаю код не в песочнице, но подругому не могу так как почему-то песочницы ругаются на react-router:
Напишу только три главных файла проекта, они не очень большие.

App.js:

import React from "react";
import ReactDOM from 'react-dom';
import {BrowserRouter, Route, Link, Switch} from "react-router-dom";
import createBrowserHistory from "history/createBrowserHistory";
import './App.css';
import Header from "./smallComponents/Header.js";
import Footer from "./smallComponents/Footer.js";
import Home from "./pageComponents/Home.js";
import About from "./pageComponents/About.js";
import Contacts from "./pageComponents/Contacts.js";
import {carsArray} from "./pageComponents/Home.js";

const history = createBrowserHistory();

class App extends React.Component {
  render(){ 
    return (
      <BrowserRouter history={history}> 
         <div className="wrapper">
        
        <Header/>
        
        <Home attributeApp={carsArray} />
    
            <Switch>
              <Route exact path="/" component={Home} /> 
              <Route path="/about" component={About} />
              <Route path="/contacts" component={Contacts} />
            </Switch>
    
        <Footer/>          
        
       </div>
    </BrowserRouter>
   )
  }
}

export default App;

Home.js:

import React from "react";
import {BrowserRouter, Route, Link} from "react-router-dom";
import '../App.css';
import CarsList from "./CarsList.js";

let carsArray = [
{
    id:1,
    name: 'BMW',
    phone: '555 555 5555'
}, 
{
    id:2,
    name: 'Mercedes',
    phone: '555 111 5555'
},
{
    id:3,
    name: 'Audi',
    phone: '555 777 5555'
},
{
    id:4,
    name: 'Ford',
    phone: '555 888 5555'
}
]

class Home extends React.Component {
  render(){ 
    return (
       <CarsList attributeCarsList={this.props.attributeApp}/>
   );
  }
}

export default Home;
export {carsArray};

CarsList.js:

import React from 'react';
import Car from './Car';

class CarsList extends React.Component  {
    constructor() {
        super();
        this.state = {
           search: ""
        };
    }
    updateSearch(event) {
        this.setState({search:event.target.value.substr(0,100)})
    }
 
render(){
    let filterCars = this.props.attributeCarsList.filter(
        (contact) => {
            return contact.name.toLowerCase().indexOf(this.state.search.toLowerCase()) !== -1;
        }
        );
  return (
    <div>
      <input type="text" value={this.state.search} onChange={this.updateSearch.bind(this)}/>
      {filterCars.map((argumentMap)=>{
       return <Car attributeCar={argumentMap}/>
      })}
    </div>
  );
 }
}

export default CarsList;

а файл index.js просто рендерит в DOM компоент App.

Что значит cannot read property ‘find’ of undefined в консоли?

Привет. Не сильна в js на столько чтобы понять почему не срабатывает скопированный код плагина. Именно скопированный потому что сам плагин требует использования jade и препроцессоров. Нужно было обойтись без них и прикрутить к html и сss. Вот этот инструмент

https://github.com/hugeinc/styleguide

и вот демо на их стайлгайд

http://hugeinc.github.io/styleguide/demo/index.html

.

В общем я почти закончила, но столкнулась с проблемой, при выборе пункта меню в сайдбаре не совершается переход и поиск модуля во фрейме. Так как я только учу js решила проверить по кускам из скрипта.

Вставила в консоль

var top = this.$iframeContent.find('section'   $elem.attr('href')).offset().top   50;

Консоль выдала ошибку Cannot read property ‘find’ of undefined.. большая предыстория и маленький вопрос — что это может значить?

ну и вот кусок кода из скрипта, который отвечает за переход к модулю с якорем. Может быть подкините идею что еще может быть не так..

/**
     * Check URL hash and navigate
     * to the respective module
     */
    checkHashOnLoad: function() {

        // Shutdown this feature in Chrome.
        // Chrome have a know issue with file protocol and iframe comunication.
        // It is not supported so we should not raise errors.

        if(this.isChromeAndFileProtocol()) return false;
        if (window.location.hash === '#' || window.location.hash === '') return false;

        var top = this.$iframeContent.find('section'   window.location.hash.replace('!', '')).offset().top,
            $iframeHtmlBody = this.$iframeContent.find('html, body');

        if (this.$iframeContent.find('section'   window.location.hash.replace('!', '')).index() === 0) {
            $(window).load(function() {
                $iframeHtmlBody.animate({scrollTop: 0}, 500);
            });
        } else {
            $iframeHtmlBody.animate({scrollTop: top   20}, 0);
        }
    },

    /**
     * Navigate to module on
     * sidebar links click
     */
    navigateToAnchor: function($elem) {

        // Shutdown this feature in Chrome.
        // Chrome have a know issue with file protocol and iframe comunication.
        // It is not supported so we should not raise errors.

        if(this.isChromeAndFileProtocol()) return false;

        var top = this.$iframeContent.find('section'   $elem.attr('href')).offset().top   50;

        // Use ! to prevent de default browser behavior of anchor navigation
        window.location.hash = '!'   $elem.attr('href').replace('#', '');

        this.$iframeContent.find('html, body').animate({scrollTop: top}, 800);
    },
    sidebarOpen: function() {
        this.$body.addClass('opened');
    },
    sidebarClose: function() {
        this.$body.removeClass('opened');
    },

    /**
     * Leave or close the sidebar
     * if the window is small
     */
    sidebarResizeHandler: function() {
        if ($(window).width() <= 1220) {
            this.sidebarClose();
        } else {
            this.sidebarOpen();
        }
    },
    sidebarSetup: function() {

        // Shutdown this feature in Chrome.
        // Chrome have a know issue with file protocol and iframe comunication.
        // It is not supported so we should not raise errors.
        // if(this.isChromeAndFileProtocol()) {
        //     this.$sidebarContent.remove();
        //     this.$sidebarToggle.remove();
        //     return false;
        // }

        if ($(window).width() >= 1220) {
            this.sidebarOpen();
        }
    },
    setActiveSidebarLinkOnClick: function($elem) {
        this.$body.addClass(this.sidebarLinkWasClickedClass);
        this.$sidebarLinks.removeClass(this.sidebarActiveLinkClass);
        $elem.addClass(this.sidebarActiveLinkClass);
    }

Itweek

Некоторое время назад в группе «ECM Forum Rus» на фейсбуке произошла

дискуссия

по вопросам применения электронной подписи в информационных системах органов власти (обсуждение  было не по теме топика, можно посмотреть в нижних комментариях). Суть спора — из-за OID’ов (object identifier — идентификатор объекта) информационных систем, которые необходимо прописывать в квалифицированных сертификатах электронной подписи (ЭП) должностных лиц, эти самые ЭП приходится менять даже чаще чем раз в год (что диктуется требованиями безопасности), а это, в свою очередь, ведет к дополнительным сложностям и издержкам, так как большинство органов работают с коммерческими УЦ, не имея собственных. Проблема усугубляется отсутствием  общего понимания, что именно эти OID дают и насколько они необходимы и/или обязательны.

В ходе спора мой оппонент предупредил меня, что из-за незнания некоторых основ предметной области я могу в будущем получить определенные проблемы с законом. Такое предупреждение от коллеги я не мог оставить без внимания, поэтому решил еще раз внимательно исследовать эту тему и убедиться, что все понимаю и делаю правильно. Ниже привожу некоторые результаты этого экскурса в предметную область. Возможно кому-то будет интересно.

Если начинать с базовых понятий, электронное подписание основывается на асимметричных алгоритмах шифрования. Основная особенность этих алгоритмов в том, что для шифрования и расшифровки сообщения используются два разных ключа. Широкой общественности более знакомы  симметричные алгоритмы, когда одним ключом (или паролем) мы и шифруем и расшифровываем сообщение, например архивируем файл с паролем или защищаем документ MS Word.

На асимметричных алгоритмах шифрования основаны многие вещи, хотя сам по себе тот факт, что для шифрования и расшифровки используются разные ключи, ещё не позволил бы найти сколько-нибудь полезного применения этим алгоритмам. Для этого они должны обладать ещё некоторыми дополнительными свойствами. Во-первых, ключи не должны быть вычисляемыми, то есть зная один ключ вы не можете вычислить второй. Также очень важно, чтобы разным ключам шифрования соответствовали разные ключи расшифровки и наоборот — одному ключу расшифровки соответствовал только один ключ шифрования.

При чем тут собственно подпись? Ведь нам надо подписать документ, а не зашифровать его. Для начала надо разобраться, что такое собственно подпись и для чего она нужна. Когда вы ставите свою собственноручную подпись на бумажный документ, вы тем самым заверяете, что именно вы (а не кто-то другой) видели (и согласны) именно этот документ (а не какой-то другой). Важнейшее свойство подписи  — неотрекаемость (non-repudiation). Это означает, что подписав документ, вы не можете позже отказаться от этого факта. В случае бумажной подписи вас уличит графологическая экспертиза, в случае электронной — математические методы, основанные на асимметричных алгоритмах шифрования.

Как все это работает, в двух словах. Берем асимметричный алгоритм шифрования, генерируем пару ключей (для шифрования и расшифровки). Ключ шифрования даем человеку, который будет подписывать документы. Он его должен всегда держать при себе и никому не давать. Поэтому его называют «закрытый» ключ. Другой ключ (расшифровки) даем всем желающим, поэтому он «открытый». Подписывая документ, человек должен зашифровать его своим закрытым ключом. На самом деле шифруется не сам документ, так как он может быть достаточно большим, а нам вообще-то и не нужно его шифровать. Поэтому по документу получают хэш — это некая числовая последовательность с большой долей вероятности разная для разных документов, как бы «отпечаток» документа. Его и шифруют закрытым ключом подписанта. Этот зашифрованный хэш и есть электронная подпись документа. Теперь имея документ, подпись и открытый ключ, любой может легко проверить, что именно этот документ был подписан именно этим закрытым ключом. Для этого снова получаем хэш документа, расшифровываем открытым ключом подпись и сравниваем. Должны получить две идентичные числовые последовательности.

Читайте также:  ЭЦП для Портала государственного и муниципального финансового аудита

Все это прекрасно, но пока мы получили неотрекаемость подписи для закрытого ключа, то есть доказали, что документ подписан конкретным ключом. Нам же необходимо доказать, что он был подписан конкретным человеком. Для этого существуют удостоверяющие центры и цифровые сертификаты. Самое важное, что делает удостоверяющий центр — он удостоверяет, что закрытый ключ принадлежит конкретному лицу. Чтобы это гарантировать, именно удостоверяющий центр генерирует пары ключей и выдает их лично в руки владельцам (есть варианты по доверенности, удаленно, но это уже детали). Вместе с ключами генерируется цифровой сертификат — это электронный документ (бывает и бумажное его представление), в котором содержится информация о владельце ключа, самом ключе, удостоверяющем центре и некоторая другая информация. Владелец, как правило, получает все это добро на защищенном носителе (смарт-карте, ру-токене и так далее), на котором содержится закрытый ключ и сертификат с внедренным открытым ключом. Сам носитель необходимо всегда держать при себе, а скопированный с него сертификат с открытым ключом можно давать всем желающим, чтобы они могли проверить вашу электронную подпись.

Итак, подписание производится закрытым ключом, а проверка подписи открытым. Поэтому фраза «документ подписывается набором OID» (прозвучавшая в упомянутом споре) лишена всякого смысла. В процедуре подписания и проверки участвуют только два ключа, в 63-ФЗ они и названы соответственно — ключ подписи и ключ проверки подписи.

А что такое эти пресловутые OID? Формат цифрового сертификата X.509 позволяет сохранять в нем расширения (extensions). Это некие необязательные атрибуты, при помощи которых можно хранить дополнительную информацию. Каждый такой атрибут является объектом, который задается идентификатором из иерархического справочника. Отсюда OID — Object Identifier. Углубляться в природу самих OID здесь смысла нет. По сути это некоторая дополнительная информация, которая может присутствовать в сертификате.

Данные дополнительные атрибуты могут использоваться для разных целей. Они могут либо предоставлять дополнительную информацию о владельце, ключах, УЦ, либо нести какую-то дополнительную информацию для приложений и сервисов, которые этот сертификат используют. Самое распространенное применение — это управление доступами на основе ролей. Например, в сертификате можно прописать, что владелец ключа является руководителем организации, и это даст ему возможность сразу во всех ИС получить доступ к нужным функциям и сведениям, без необходимости связываться с администраторами каждой ИС и менять настройки доступа. Все это конечно при условии, что все эти ИС используют сертификат пользователя для его авторизации и анализируют один и тот-же атрибут одинаковым образом (для того-то атрибуты и выбираются из справочника, а не задаются произвольно).

Из-за различного применения мы получаем два совершенно разных по природе сертификата. Один — удостоверяет, что я это я, а это всегда так. По хорошему его можно было бы выдавать один или несколько раз в жизни, как паспорт. Однако, из-за несовершенства существующих криптографических алгоритмов, в целях безопасности,  данные сертификаты сейчас необходимо переоформлять каждый год. Второй  вид сертификата управляет дополнительной информацией и может меняться гораздо чаще, чем даже раз в год. Его можно сравнить с визитной карточкой. Изменилась должность, электронная почта, телефон — надо делать новые визитки.

В мире эти два вида сертификатов называются соответственно Public Key Certificate (PKC) и Attribute Certificate (или Authorization Certificate — AC). Сертификат второго рода может выпускаться гораздо чаще первого, другой организацией и должен быть доступнее и проще в получении, чем персональный сертификат «открытого ключа». Во всяком случае, так рекомендует RFC 3281, посвященный этому виду сертификатов. Сертификат второго рода должен содержать лишь ссылку на сертификат открытого ключа, чтобы система, использующая его для авторизации пользователя, могла сначала идентифицировать персону при помощи PKC.

Теперь перенесемся ближе к нашим реалиям. На законодательном уровне вопросы, связанные с применением электронной подписи в Российской Федерации, регулируются двумя основными документами — законом РФ от 06.04.2020 №63-ФЗ «Об электронной подписи» и приказом ФСБ РФ от 27.12.2020 №795 «Об  утверждении требований к форме квалифицированного сертификата ключа проверки электронной подписи». Состав квалифицированного сертификата описан в 795-м приказе (ч. II «Требования к совокупности полей квалифицированного сертификата») и в нем нет требований к атрибутам, управляющим авторизацией в каких-либо информационных системах. В качестве дополнительных обязательных атрибутов указаны лишь сведения, позволяющие идентифицировать физическое или юридическое лицо в РФ (ИНН, СНИЛС и т. д.). Хотя ни закон ни приказ ФСБ не запрещают включать в квалифицированный сертификат другие сведения.

Как видим, никакие законодательные нормы не диктуют обязательного наличия в квалифицированном сертификате атрибутов, связанных с авторизацией в каких-либо информационных системах. Откуда тогда эти требования берутся? А исходят они от разработчиков (или «владельцев») конкретных систем. Возьмём например «Методические рекомендации по использованию электронной подписи при межведомственном электронном взаимодействии (версия 4.3)», размещенные на технологическом портале СМЭВ. Действительно, в пункте 6 данного документа читаем: «При подготовке сведений для формирования сертификата ЭП-СП необходимо определить необходимость запроса сведений из Росреестра (выписки из ЕГРП). При необходимости такого запроса в поле “Улучшенный ключ” (OID=2.5.29.37) в сертификате ЭП-СП должен быть указан OID по требованиям Росреестра.». То есть информационная система Росреестра использует этот атрибут для определения сведений, которые можно выдавать владельцу сертификата. Однако этот же документ содержит важное примечание, а именно — данное требование действует до полного запуска ЕСИА (единый сервис авторизации в гос. системах) и подключения к ней системы Росреестра. Это важное замечание, запомним его.

Не буду разбираться с другими ИС, применяемыми в гос. органах. Подозреваю, что там ситуация похожая. Портал госзакупок, электронные торговые площадки, различные бухгалтерские и финансовые приложения также могут требовать наличия тех или иных дополнительных OID в сертификате пользователя. При этом утверждение, что прописывая OID информационной системы в сертификате, я каким-либо образом делегирую ответственность удостоверяющему центру, мягко говоря, неверно. УЦ вносит эти данные в сертификат согласно моей заявки. Если у меня изменилась должность, а я забыл подать заявку на отзыв старого и выпуск нового сертификата, УЦ никак не может отвечать за мою забывчивость. К тому-же закон 63-ФЗ прямо закрепляет ответственность за неправильное использование сертификата за его владельцем. В пункте 6 статьи 17 читаем:
Владелец квалифицированного сертификата обязан:
1) не использовать ключ электронной подписи и немедленно обратиться в аккредитованный удостоверяющий центр, выдавший квалифицированный сертификат, для прекращения действия этого сертификата при наличии оснований полагать, что конфиденциальность ключа электронной подписи нарушена;
2) использовать квалифицированную электронную подпись в соответствии с ограничениями, содержащимися в квалифицированном сертификате (если такие ограничения установлены).

Необходимость хранить в сертификате сведения о ролях и доступах пользователя в конкретных информационных системах приводит к проблеме, из-за которой разгорелся спор в фейсбуке, а именно — сертификат приходится перевыпускать гораздо чаще, чем это диктуют требования безопасности к персональной электронной подписи. Поменялась должность — перевыпускаем сертификат. Появилась новая ИС — перевыпускаем сертификат. Появилась необходимость запроса сведений из ИС новой организации (Росреестр) — перевыпускаем сертификат.

Налицо стопроцентное попадание в концепцию, именуемую в мире  Attribute Certificate (или Authorization Certificate), о которой говорилось выше и при которой рекомендуется выпускать эти сертификаты другим удостоверяющим центром (Attribute Autority, в отличие от Certificate Authority — обычного УЦ, выпускающего квалифицированные сертификаты ЭП) и по упрощенной схеме. Этот сертификат сам по себе не должен содержать ключа электронной подписи и информации о владельце. Вместо этого он содержит ссылку на сертификат открытого ключа владельца, из которого можно получить остальную необходимую информацию о персоне.

Необходимо заметить, что и эта схема имеет весьма ограниченное применение и не решает всех проблем. Что если очередная информационная система решит использовать то-же поле сертификата “Улучшенный ключ” (OID=2.5.29.37), которое уже занято значением Росреестра, для своих нужд? Вписать два разных значения в одно поле не получится. Следовательно придется выпускать ещё один AC! Другая проблема связана с коротким временем жизни PKC (один год). Если имеем несколько AC (в которых содержится ссылка на персональный сертификат), их все придется перевыпустить по истечении срока PKC. Для эффективного применения AC необходим некий единый центр авторизации пользователей во всех информационных системах, а все приложения должны согласованно и единообразно использовать атрибуты сертификатов.

Такой единый центр авторизации для гос. органов уже есть — это ЕСИА. Вспомним про примечание, касающееся OID’ов Росреестра. В будущем они будут заменены информацией из ЕСИА. Так же должны поступать и прочие информационные системы, в которых работают гос. служащие. Вместо использования AC для авторизации, необходимо интегрироваться с ЕСИА и получать необходимую информацию оттуда. ЕСИА должна иметь возможность привязки квалифицированного сертификата ЭП к учетной записи, таким образом информационные системы смогут проводить аутентификацию пользователя по персональному ключу, а его авторизацию (предоставление доступа к приложению) через ЕСИА. Такая система представляется универсальней и надежней, чем применение полей сертификатов, а в перспективе позволит автоматизировать управление доступами. Если будет создана единая система кадрового учета гос. служащих, ЕСИА сможет брать информацию о полномочиях того или иного лица непосредственно оттуда. Перевелся человек на другую должность — автоматически потерял доступ к одним системам и получил к другим. При этом он продолжает пользоваться своим ключом ЭП для подписания документов, ничего перевыпускать не нужно.

Вывод — OID’ы информационных систем в сертификате, не являясь абсолютным злом сами по себе, требуют взвешенного применения. У данного подхода есть альтернативы, которые стоит рассмотреть, например единые сервисы авторизации.

Typeerror: cannot read property ‘name’ of undefined как решить эту ошибку?

Привет всем! Я делал бота, минут 5 назад он работал, а теперь, внезапно нет, терминал указывает на эту строчку кода

bot.commands.set(props.help.name,props);

а вот, кстати, и сам код

const Discord = require('discord.js');
const bot = new Discord.Client();
bot.commands = new Discord.Collection();
const fs = require("fs");
let config =  require("./botconfig.json");
let token = config.token;
let prefix = config.prefix;
let profile = require('./profile.json');

fs.readdir('./cmds/',(err,files)=>{
  if(err) console.log(err);
  let jsfiles = files.filter(f => f.split(".").pop() === "js")
  if(jsfiles.length <=0) console.log("нет комманд для загрузки");
  console.log(`загружено ${jsfiles.length} комманд`)
  jsfiles.forEach((f,i)=>{
    let props = require(`./cmds/${f}`)
    console.log(`${i 1}.${f} Загружено!!!`)
    bot.commands.set(props.help.name,props);
    
  })
});

bot.on('ready', () => {
  console.log(`получил пинок под жепу ${bot.user.username}`)
  bot.generateInvite(["ADMINISTRATOR"]).then(link => {console.log(link)} );
});

bot.on('message', async message => {
  if(message.author.bot) return;
  if(message.channel.type == "dm") return;
  let uid = message.author.id;
  if(!profile[uid]){
    profile[uid] ={
      coins:10,
      warns:0,
      xp:0,
      lvl:0,
      ban:0,
      c:0,

    };
  };
  let u = profile[uid];
  u.coins  ;
  u.xp  ;
  if(u.xp>= (u.lvl * 5)){
    u.xp = 0;
    u.lvl =1;
    
    
    
  }

  fs.writeFile('./profile.json',JSON.stringify(profile),(err)=>{
    if(err) console.log(err);
  }); //4:00 #3
  bot.send = function (msg){
      message.channel.send(msg);
  };
  let messageArray = message.content.split(" ");
  let command = messageArray[0].toLowerCase();
  let args = messageArray.slice(1);
  if(!message.content.startsWith(prefix)) return;
  let cmd = bot.commands.get(command.slice(prefix.length));
  if(cmd) cmd.run(bot,message,args);
  
});

bot.login(token);

не ругайте за говнокод, я старался. За ранее спасибо! ещё раз напоминаю ошибку TypeError: Cannot read property ‘name’ of undefined

Читайте также:  Усиленная квалифицированная электронная подпись: подобрать сертификат КЭП, получить усиленную эцп

Uncaught referenceerror: invalid left-hand side in assignment

Связанные ошибки:

Uncaught exception: ReferenceError: Cannot assign to ‘functionCall()’, Uncaught exception: ReferenceError: Cannot assign to ‘this’

Вызвано попыткой присвоить значение тому, чему невозможно присвоить значение.

Наиболее частый пример этой ошибки — это условие в if:

if(doSomething() = 'somevalue')

В этом примере программист случайно использовал один знак равенства вместо двух. Выражение “left-hand side in assignment” относится к левой части знака равенства, а, как можно видеть в данном примере, левая часть содержит что-то, чему нельзя присвоить значение, что и приводит к ошибке.

Как исправить ошибку: убедитесь, что вы не пытаетесь присвоить значение результату функции или ключевому слову this.

Uncaught typeerror: undefined is not a function

Связанные ошибки:

number is not a function, object is not a function, string is not a function, Unhandled Error: ‘foo’ is not a function, Function Expected

Возникает при попытке вызова значения как функции, когда значение функцией не является. Например:

var foo = undefined;
foo();

Эта ошибка обычно возникает, если вы пытаетесь вызвать функцию для объекта, но опечатались в названии.

var x = document.getElementByID('foo');

Несуществующие свойства объекта по-умолчанию имеют значение

undefined

, что приводит к этой ошибке.

Другие вариации, такие как “number is not a function” возникают при попытке вызвать число, как будто оно является функцией.

Как исправить ошибку: убедитесь в корректности имени функции. Для этой ошибки, номер строки обычно указывает в правильное место.

Unexpected token ;

Связанные ошибки:

Expected ), missing ) after argument list

Интерпретатор JavaScript что-то ожидал, но не обнаружил там этого. Обычно вызвано пропущенными фигурными, круглыми или квадратными скобками.

Токен в данной ошибке может быть разным — может быть написано “Unexpected token ]”, “Expected {” или что-то еще.

Как исправить ошибку: иногда номер строки не указывает на правильное местоположение, что затрудняет исправление ошибки.

Ошибка с [ ] { } ( ) обычно вызвано несовпадающей парой. Проверьте, все ли ваши скобки имеют закрывающую пару. В этом случае, номер строки обычно указывает на что-то другое, а не на проблемный символ.

Unexpected / связано с регулярными выражениями. Номер строки для данного случая обычно правильный.

Unexpected; обычно вызвано символом; внутри литерала объекта или массива, или списка аргументов вызова функции. Номер строки обычно также будет верным для данного случая.

Важная новость для всех пользователей крипто про csp

Согласно письму ФСБ России №149/7/6-363 от 07.09.2020, которое указано в «Уведомлении об организации перехода на использование схемы электронной подписи по ГОСТ Р 34.10-2020» Минкомсвязи России, процесс формирования и проверки ЭП по ГОСТ Р 34.10-2001 был продлен до 31.12.2020.

По причине технических ограничений в средствах криптографической защиты информации «КриптоПро CSP» (далее – СКЗИ), ЭП, соответствующие ГОСТ Р 34.10-2001, будут блокироваться после 31.12.2020.

Поэтому до 01.01.2020 необходимо внести изменения в настройки СКЗИ для обеспечения их корректной работы с помощью специальной утилиты.

Для удобства  пользователей предыдущих версий КриптоПро CSP (до новейшей 4.0 R4), которые планируют продолжать работать в 2020 году с ключами ГОСТ Р 34.10-2001, был сделан инструмент для Windows, позволяющий за один вызов снять технические запреты.

Как читать ошибки?

Перед самим списком, давайте быстро взглянем на структуру сообщения об ошибке. Понимание структуры помогает понимать ошибки, и вы получите меньше проблем, если наткнетесь на ошибки, не представленные в этом списке.

Типичная ошибка из Chrome выглядит так:

Uncaught TypeError: undefined is not a function

Структура ошибки следующая:

  1. Uncaught TypeError: эта часть сообщения обычно не особо полезна. Uncaught значит, что ошибка не была перехвачена в catch, а TypeError — это название ошибки.
  2. undefined is not a function: это та самая часть про ошибку. В случае с сообщениями об ошибках, читать их нужно прямо буквально. Например, в этом случае, она значит то, что код попытался использовать значение undefined как функцию.

Другие webkit-браузеры, такие как Safari, выдают ошибки примерно в таком же формате, как и Chrome. Ошибки из Firefox похожи, но не всегда включают в себя первую часть, и последние версии Internet Explorer также выдают более простые ошибки, но в этом случае проще — не всегда значит лучше.

Теперь к самим ошибкам.

Какие услуги оказывает росреестр?

Росреестр оказывает электронные услуги через портал, на котором пользователи могут:

  • получить выписку из ЕГРП (Единый государственный реестр прав на недвижимое имущество и сделок с ним),
  • получить сведения из ГКН (Государственный кадастр недвижимости),
  • подать заявление о постановке недвижимости на кадастровый учет,
  • запросить информацию об объектах недвижимости,
  • провести государственную регистрацию сделки с недвижимостью,
  • выполнить другие действия (их перечень есть на портале).

Составить и отправить заявление на портале можно в любое время. Срок и стоимость исполнения заявки зависит от категории услуги. Лично посещать регистрационную палату и ждать документов по почте не требуется. А безопасность и конфиденциальность электронного документооборота обеспечивает сертификат электронной подписи.

Какие формулировки должны быть в решении об одобрении максимальной суммы сделки?

У нас должно быть два вопроса:

  1. Выбор способа подтверждения принятого решения и состава участников общества согласно п. 3 ст. 67.1 ГК РФ;
  2. Одобрение и совершение по результатам электронных аукционов сделок.

Теперь нужно определиться какие формулировки должны быть у принятых решений по вышеназванным вопросам.

По первому вопросу решение должно звучать так:В соответствии с пунктом 3 статьи 67.1 Гражданского кодекса РФ принятие общим собранием участников Общества решения и состав участников Общества, присутствовавших при его принятии, подтверждается путем подписания протокола всеми участниками общества.

По второму вопросу решение должно звучать так:Одобрить и совершать по результатам электронных аукционов сделки от имени Общества с ограниченной ответственностью “Ромашка”. Максимальная  сумма  одной такой сделки не должна превышать 500 000 000 ( пятьсот миллионов ) рублей.

Ответы на вопросы по электронным услугам росреестра

Электронные услуги Росреестра пользуются все большей популярностью. Сегодня почти все ведомства предоставляют государственные услуги в электронном виде. Электронные услуги Росреестра доступны всем заявителям на официальном сайте Росреестра rosreestr.ru и портале государственных услуг Российской Федерации. 

Одна из главных и приоритетных задач Управления – это максимально упростить предоставление услуг для граждан, юридических лиц, органов государственной власти и органов местного самоуправления. 

В связи с этим, специалисты подготовили ответы на самые распространенные вопросы заявителей.

Что нужно, для того, чтобы иметь возможность пользоваться услугами Росреестра в электронном виде?

Ответ: Чтобы воспользоваться сервисом, необходимо авторизоваться, то есть иметь логин и пароль на сайте www.gosuslugi.ru (используется Единая система идентификации и аутентификации для получения доступа к государственным услугам в электронном виде).

В настоящее время в личном кабинете можно подать в электронном виде заявление на получение всех наиболее востребованных услуг Росреестра: это регистрация прав, кадастровый учет, единая процедура (одновременное проведение этих процедур), получение сведений из ЕГРН. Для осуществления юридически значимых действий потребуется электронная подпись.

Какое дополнительное программное обеспечение необходимо установить на компьютере для получения государственных услуг, оказываемых Росреестром в электронном виде на официальном сайте Росреестра с применением усиленной квалифицированной электронной подписи?

Ответ: Для получения государственных услуг, оказываемых Росреестром в электронном виде, на официальном сайте Росреестра (rosreestr.ru) с возможностью подписания форм запросов усиленной квалифицированной электронной подписью (далее – ЭП, на компьютере необходимо:

— установить криптопровайдер, при помощи которого в удостоверяющем центре был изготовлен квалифицированный сертификат ключа проверки электронной подписи (например «Крипто-Про CSP»);

— установить квалифицированный сертификат ключа проверки ЭП удостоверяющего центра, выдавшего ЭП пользователю;

— установить квалифицированный сертификат ключа проверки ЭП пользователя;

— установить свободно распространяемый компонент Microsoft CAPICOM;

— зарегистрировать библиотеку CAPICOM.dll;

— в свойствах интернета добавить в надежные узлы адрес: https://*.rosreestr.ru.

Следует иметь ввиду, что программный продукт Microsoft CAPICOM имеет ряд требований к системе, с которыми можно ознакомиться на сайте производителя.

Если после выполнения вышеуказанных действий будет появляться ошибка, связанная с CAPICOM, рекомендуем обратиться в службу технической поддержки производителя программного продукта.

Квалифицированный сертификат ключа проверки электронной подписи с объектным идентификатором 1.2.643.5.1.24.2.30 выпускается на юридическое или физическое лицо?

Объектному идентификатору 1.2.643.5.1.24.2.30 (по распоряжению Росреестра от 20.05.2020 № Р/0083) соответствует категория заявителя «Юридическое лицо», исходя из чего изготавливается квалифицированный сертификат ключа проверки электронной подписи юридического лица. В качестве владельца такого сертификата, наряду с указанием наименования юридического лица, указывается физическое лицо, действующее от имени юридического лица на основании учредительных документов юридического лица или доверенности.

Запросы Администрации муниципального района обрабатываются с ошибкой. Что не так?

Ответ:  Квалифицированный сертификат ключа проверки электронной подписи, содержащийся в электронной подписи (далее – сертификат), которой подписаны запросы, содержит объектный идентификатор (далее – ОИД) 1.2.643.5.1.24.2.1.3. Данному ОИДу соответствует субъект/получатель – Правообладатель – физическое лицо. 

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

В случае, если Администрации муниципального района необходимо формировать запросы о предоставлении сведений из ЕГРН в качестве лица, имеющего право на безвозмездное получение сведений, то ОИД необходимо выбрать соответствующий правовому статусу Администрации муниципального района  (устав, положение).

Исходя из вышесказанного предлагаем Администрации муниципального района обратиться в удостоверяющий центр, выдавший усиленную квалифицированную электронную подпись, для перевыпуска сертификата с соответствующим ОИД. 

Каким образом подать заявление на регистрацию ограничения права и обременения через личный кабинет  Росреестра, если у здания имеются 2 собственника. Подавать 2 заявления от двух собственников с разных личных кабинетов или одно заявление с одного личного кабинета?

Ответ: Посредством Личного кабинета официального сайта Росреестра можно формировать несколько заявлений. В вашем случае необходимо сформировать два заявления на регистрацию ограничения права и обременения под учетной записью одного из собственников.

Главный специалист-эксперт отдела эксплуатации информационных систем, 

технических средств и каналов связи С.Б. Ханхаева

Проблема: еис не работает

При работе в Единой информационной системе проблемы могут возникнуть на любом этапе: начиная с регистрации на портале, заканчивая нерабочим поиском госзакупок.

Самые частые причины нарушения в этой сфере:

  • проводится (или недавно проводилась) профилактика или обновление системы;
  • чрезмерная нагрузка на реестр;
  • выходной или праздничный день (исправить проблему просто некому, сотрудники техподдержки не работают);
  • проблема вызвана внутренними неполадками с ПК пользователя.

Самая первая ошибка, с которой может столкнуться пользователь — вход в Единую информационную систему.

Когда через единую систему Госуслуги нельзя войти, возникает «Внутренняя ошибка». Это происходит, т.к. доменные имена не добавлены в безопасные узлы.

Чтобы исправить лаг:

Проблема: плагин фиксации действий пользователя еис не устанавливается

Плагин ИС НР — модуль веб-браузера, осуществляющий сбор видео-записей и телеметрической информации о действиях участников торгов в личных кабинетах электронных площадок, а также о действиях организаторов торгов в личных кабинетах

Если плагин ИС НР не работает, это может быть связано с использованием антивирусного программного обсечения.

При Касперском нужно:

  1. Зайти в настройки.
  2. «Сеть» – «Проверка незащищенных соединений» – «Отключить».

При любом другом антивирусе – можно отключить его на время. Затем можно снова переходить на сайт.

Если проблема оказалась не связана с антивирусом, необходимо работать с браузером.

  1. Перед тем как начать установку программного модуля, нужно закрыть браузер, если он используется.
  2. Для того, чтобы установить программное обеспечение, необходимо запустить файл setup.exe и следовать инструкциям на экране.
  3. После того, как программное обеспечение было успешно установлено, запустите браузер.
  4. Программный модуль установлен корректно, если в диалоговом окне появилась дополнительная панель инструментов. Кроме того, поставьте плагин для Windows в 64 бит или 86 бит.

Рекомендации

Перед тем, как работать в ЕИС, необходимо убедиться, что системные требования вашего устройства соответствуют следующим техническим характеристикам:

  • браузер Microsoft Internet Explorer версии 8 или выше, Mozilla Firefox (версии 10—39), Google Chrome (версии 17.0.963—44.0.2403), Opera (версии 12—29), Яндекс-браузер (версии 13.10—15.7);
  • версия операционной системы Windows XP Service Pack 3 (SP3) и выше;
  • наличие свободного места на диске более 500 МБ;
  • наличие оперативной памяти более 1 ГБ;
  • открытое сетевое разрешение для IP-адреса 85.143.127.170;
  • на ПК доступны порты 9820,9822,9823;
  • доступен флеш-накопитель с сертификатом, выданным аккредитованным удостоверяющим центром;
  • установлен корневой сертификат удостоверяющего центра, которым выдана электронная цифровая подпись;
  • установлен пользовательский сертификат;
  • открыто разрешение в антивирусах, фаерволах и прочих системах защиты на использование дополнительных надстроек.

Решение об одобрении крупной сделки несколькими учредителями (образец):

С 01.09.2020 в Гражданский Кодекс РФ были внесены поправки касательно способа подтверждения решений, принятых на общих собраниях акционерных общества.

В частности, нас интересует пункт 3 статьи 67.1 ГК РФ «Особенности управления и контроля в хозяйственных товариществах и обществах». Цитируем данный пункт 3:

«Принятие общим собранием участников хозяйственного общества решения и состав участников общества, присутствовавших при его принятии, подтверждаются в отношении: ….…. общества с ограниченной ответственностью путем нотариального удостоверения, если иной способ (подписание протокола всеми участниками или частью участников; с использованием технических средств, позволяющих достоверно установить факт принятия решения; иным способом, не противоречащим закону) не предусмотрен уставом такого общества либо решением общего собрания участников общества, принятым участниками общества единогласно.»

пункт 3 статьи 67.1 ГК РФ

Конечно, никому не хочется заверять решение о максимальной сумме сделки нотариально, поэтому при проведении общего собрания участников по вопросу одобрения максимальной суммы сделок, нужно не забыть и внести в повестку дня ещё один важный вопрос: «Выбор способа подтверждения принятого решения и состава участников общества согласно п. 3 ст. 67.1 ГК РФ».

Наличие в повестке собрания данного вопроса лишает нас необходимости нотариального заверения Протокола Общего собрания.

Решение об одобрении крупной сделки одним учредителем (образец):

Если в компании один участник (учредитель) тогда Решение о крупной сделке оформляется Решением Единственного участника Общества. Такой вариант оформления проще чем решение нескольких учредителей, поскольку вместо собрания участников общества, решение о крупной сделки принимает один единственный учредитель.

В Решении единственного учредителя об одобрении крупной сделки следует указать паспортные данные единственного участника общества, и озвучить принятое решение придерживаясь формулировки:«Одобрить и совершать по результатам открытых аукционов в электронной форме сделки от имени Общества с ограниченной ответственностью «Ромашка»».

Также рекомендуется вторым решением прописать, что учредитель подтверждает полномочия своего Генерального директора на участие в электронных торгах. Даже если сам Учредитель является Директором рекомендуется данный пункт прописывать в Решении о максимальной сумме сделки.

В конце Решения единственного участника должна быть его подпись, печать компании и дата принятия решения.

Способ 1: включить плагин для текущего сайта

Включение плагина только для текущего сайта оправдано соображениями безопасности, когда браузер используется для личных целей и открытия самых разных страниц. А также если надо выполнить задачу с электронными ключами только один раз.

  1. Где-то на странице должен быть тёмно-серый квадрат, где написано «Включить CryptoPro NPAPI Browser». В данном случае это в самом низу страницы.
  2. Текущий сайт_тёмно-серый квадрат

  3. Кликнув на него, нужно обратить внимание на строку адреса, под которой будет задаваться вопрос, можно ли активировать CAdES plugin. Чтобы это не пришлось делать в следующий раз, рекомендуется нажать на кнопку «Разрешить и запомнить».
  4. Текущий сайт_Активация плагина

  5. После этого можно перезагрузить страницу и браузер сам должен спросить, разрешить ли сайту воспользоваться плагином. Это означает, что всё работает.
  6. Проверка работы плагина.

Способ 2: включить плагин для всех сайтов

Если вопрос безопасности не сильно беспокоит, т.к. компьютер используется исключительно для работы на нескольких сайтах, можно включить CAdES plugin для всех сайтов. Тогда он будет работать сразу же после загрузки страницы. Это может помочь и в том случае, когда невозможно найти тёмно-серый квадрат для включения плагина.

  1. Чтобы включить CAdES plugin для постоянной работы, нужно нажать на кнопку настроек с правой стороны ближе к верхнему углу. В открывшемся меню выбираем «Дополнения».
  2. Все сайты_Открываем дополнения

  3. В списке вкладок слева выбираем «Плагины».
  4. Все сайты_Выбираем плагины

  5. Найдя «CryptoPro CAdES NPAPI Browser Plug-in», можно открыть выпадающий список и выбрать пункт «Всегда включать».
  6. Все сайты_Включение плагина..

Способ 3: использование другого браузера

По каким-то непредвиденным причинам CAdES plugin всё равно может отказываться работать. Поэтому ещё один способ устранить ошибку — использовать другой браузер. Большинство браузеров основано на движке Chromium, они все чем-то похожи, поэтому рассмотрим на примере Google Chrome.

  1. В данном случае можно только включить плагин, т.е. он будет работать всегда. Чтобы это сделать, достаточно открыть меню в верхнем правом углу, найти пункт «Дополнительные инструменты» и открыть «Расширения».
  2. Другой браузер_Открываем расширения

  3. Здесь нужно включить «CryptoPro Extension for CAdES Browser Plug-in», после чего он будет работать на странице.
  4. Другой браузер_Включаем плагин.

Стандартный пароль эцп — где его взять?

При работе с Электронной подписью, будь то подписание заявки, копирование подписи или другое действие связанное с использование сертификата Электронной подписи, у пользователя запрашивается пин-код (пароль) от подписи. Владельцу Электронной подписи требуется ввести стандартный пароль ЭЦП. Окно с запросом ввести пин-код отображается в течении 10 минут, после чего, если не был введён пин-код окно закрывается. стандартный пароль ЭЦП

На каждый носитель для электронной подписи, будь то Etoken (Jacarta) или RuToken устанавливается пароль по умолчанию. Также пароль могут называть «пин-кодом». Когда пользователь совершает какое либо действие с электронной подписью (авторизация на площадке по ЭП или подписание заявки) — происходит обращение к ЭЦП и у пользователя запрашивает пин-код (пароль).

Странное поведение карт: uncaught typeerror: cannot read property ‘geoobjects’ of undefined?

Очень странное поведение!

С одними координатами работает, а с несколькими нет ;(

Инициализируем карту:

ymaps.ready(init);
  var myMap;
  function init(){
    myMap = new ymaps.Map("map", {
      center: [56.49540919, 84.95061710],
      zoom: 12,
      controls: ['zoomControl']
    });
  }

Пишем функцию перезагрузки карты (для новых координат, в responseCoords приходят новые координаты. Тут и происходит ошибка). Говорит, что нет myMap (undefined), как это нет, она выше объявлена ;(:

function reloadYandexMap(responseCoords)
  {
    myMap.geoObjects.removeAll();
    for (var i = 0; i < responseCoords.length; i  ) {
      myMap.geoObjects.add(new ymaps.Placemark(responseCoords[i]));
    }
    myMap.setBounds(myMap.geoObjects.getBounds());
  }

Отправляем

AJAX

запрос, для получения новых координат, после того как их получим, сделаем перезагрузку карты:

var responseCoords = [];
  $.ajax({
    type: 'POST',
    url : '/ajax/getCoordsByAddress',
    //async: false,
    data: {
      'arrStreets':  arrStreets
    },
    dataType: 'json',
    success: function(res){
      if(res.success)
      {
        $.each( JSON.parse(res.msg), function( key, val )
        {
          responseCoords.push(val);
        });
        reloadYandexMap(responseCoords);
      }
    }
  });

Когда приходит вот такое дело:

[56.458592, 84.947361]

И происходит ошибка (заголовок топика)

Но! Если приходит вот так:

[56.458537, 84.948367]
[56.49848, 84.968858]
[56.459383, 84.958959]
[56.458592, 84.947361]
[56.510298, 85.029584]
[56.475678, 85.008743]
[56.461153, 84.959003]

То все метки ставятся на карту! Все отлично. Обращаю внимание, что «ошибочные» координаты присутствуют в этом массиве.

Решение:

var myMap;
  function init(){
    myMap = new ymaps.Map("map", {
      center: [56.49540919, 84.95061710],
      zoom: 12,
      controls: ['zoomControl']
    });
  }

  function reloadYandexMap(responseCoords)
  {
    myMap.geoObjects.removeAll();
    for (var i = 0; i < responseCoords.length; i  ) {
      myMap.geoObjects.add(new ymaps.Placemark(responseCoords[i]));
    }
    //myMap.setBounds(myMap.geoObjects.getBounds());
  }

  ymaps.ready(function(){
    init();

    var arrStreets = [];
    $('#streets-box span').each(function(ind, val){
      arrStreets.push($(val).text());
    });

    var responseCoords = [];
    $.ajax({
      type: 'POST',
      url : '/ajax/getCoordsByAddress',
      async: false,
      data: {
        'arrStreets':  arrStreets
      },
      dataType: 'json',
      success: function(res){
        if(res.success)
        {
          $.each( JSON.parse(res.msg), function( key, val )
          {
            responseCoords.push(val);
          });
          reloadYandexMap(responseCoords);
        }
      }
    });
  });

Электронная подпись документов word

Рассмотрим подписание документов WORD на пример MS Office 2020. Для того, чтобы подписать документ в формате WORD требуется:

  1. Открыть «Файл» — «Сведения» — «Защита документа» — «Добавить цифровую подпись»;
  2. MS WORD предложит выбрать тип подтверждения, доступно три варианта:
    1. Создал и утвердил данный документ;
    2. Создал данный документ;
    3. Утвердил данный документ.
  3. Указать произвольную цель подписания документа. Задаётся по усмотрению пользователя.
  4. Если на компьютере установлено несколько сертификатов элетронной подписи, то при помощи кнопки «Изменить» выбирается тот сертификат, которым нужно подписать документ.
  5. Нажать на кнопку «Подписать».
    1. Если вы увидели ошибку: «алгоритм шифрования необходимый для выполнения этой операции не установлен на этом компьютере«, значит у вас не установлен плагин КриптоПро Office Signature 2.0 . Установите данный плагин и повторите попдисание документа.

Как мы видим, при наличии установленного плагина КриптоПро Office Signature 2.0. и корректной работы ЭЦП, подписать электронной подписью документы WORD не представляет труда.

Электронная подпись документов MS OfficeКак поставить Электронную подпись в pdf документе в Adobe Acrobat?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector