Имя: Пароль:
1C
1С v8
Как получить аналог C# new XmlDsigC14NTransform()
,
0 DES
 
11.06.21
19:33
Как получить доступ к методу C# из 1с8 или к аналогу?
1 DES
 
11.06.21
20:02
Думаю как получить хеш от файла XML
2 DES
 
11.06.21
20:03
нужно реализовать

XmlDsigC14NTransform c14N = new XmlDsigC14NTransform();
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(content);
c14N.LoadInput(xmlDoc);
try
{
hash = c14N.GetDigestedOutput(new SHA1Managed());
}
3 Asmody
 
11.06.21
22:29
https://infostart.ru/1c/articles/448668/
И остальные статьи Serginio1
4 DES
 
11.06.21
23:43
пытаюсь сделать сначала консольное приложение NET 5
беру пример из https://docs.microsoft.com/ru-ru/dotnet/api/system.security.cryptography.xml.xmldsigexcc14ntransform?view=net-5.0

сборка дает ошибку
1>Program.cs(66,9,66,18): error CS1069:
Не удалось найти имя типа "SignedXml" в пространстве имен "System.Security.Cryptography.Xml". Этот тип был отправлен в сборку "System.Security.Cryptography.Xml, Version=0.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51". Попробуйте добавить ссылку на эту сборку.

как понять ?
предлагает добавить ссылку по которой сам же не находит определение !
5 Serginio1
 
12.06.21
11:11
6 DES
 
12.06.21
11:15
(5) делаю  копипасте в Visual Studio 2019 Community на Windows 10
получаю
Повторная сборка начата…
1>------ Перестроение всех файлов начато: проект: My_Test_XML_hash, Конфигурация: Debug Any CPU ------
Восстановлен C:\Users\1\source\repos\My_Test_XML_hash\My_Test_XML_hash\My_Test_XML_hash.csproj (за 319 ms).
1>C:\Users\1\source\repos\My_Test_XML_hash\My_Test_XML_hash\Program.cs(65,9,65,18): error CS1069: Не удалось найти имя типа "SignedXml" в пространстве имен "System.Security.Cryptography.Xml". Этот тип был отправлен в сборку "System.Security.Cryptography.Xml, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51". Попробуйте добавить ссылку на эту сборку.
1>C:\Users\1\source\repos\My_Test_XML_hash\My_Test_XML_hash\Program.cs(65,35,65,44): error CS1069: Не удалось найти имя типа "SignedXml" в пространстве имен "System.Security.Cryptography.Xml". Этот тип был отправлен в сборку "System.Security.Cryptography.Xml, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51". Попробуйте добавить ссылку на эту сборку.
1>C:\Users\1\source\repos\My_Test_XML_hash\My_Test_XML_hash\Program.cs(71,9,71,18): error CS1069: Не удалось найти имя типа "Reference" в пространстве имен "System.Security.Cryptography.Xml". Этот тип был отправлен в сборку "System.Security.Cryptography.Xml, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51". Попробуйте добавить ссылку на эту сборку.
1>C:\Users\1\source\repos\My_Test_XML_hash\My_Test_XML_hash\Program.cs(71,35,71,44): error CS1069: Не удалось найти имя типа "Reference" в пространстве имен "System.Security.Cryptography.Xml". Этот тип был отправлен в сборку "System.Security.Cryptography.Xml, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51". Попробуйте добавить ссылку на эту сборку.
1>C:\Users\1\source\repos\My_Test_XML_hash\My_Test_XML_hash\Program.cs(75,9,75,43): error CS1069: Не удалось найти имя типа "XmlDsigEnvelopedSignatureTransform" в пространстве имен "System.Security.Cryptography.Xml". Этот тип был отправлен в сборку "System.Security.Cryptography.Xml, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51". Попробуйте добавить ссылку на эту сборку.
1>C:\Users\1\source\repos\My_Test_XML_hash\My_Test_XML_hash\Program.cs(75,54,75,88): error CS1069: Не удалось найти имя типа "XmlDsigEnvelopedSignatureTransform" в пространстве имен "System.Security.Cryptography.Xml". Этот тип был отправлен в сборку "System.Security.Cryptography.Xml, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51". Попробуйте добавить ссылку на эту сборку.
1>C:\Users\1\source\repos\My_Test_XML_hash\My_Test_XML_hash\Program.cs(115,9,115,18): error CS1069: Не удалось найти имя типа "SignedXml" в пространстве имен "System.Security.Cryptography.Xml". Этот тип был отправлен в сборку "System.Security.Cryptography.Xml, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51". Попробуйте добавить ссылку на эту сборку.
1>C:\Users\1\source\repos\My_Test_XML_hash\My_Test_XML_hash\Program.cs(115,35,115,44): error CS1069: Не удалось найти имя типа "SignedXml" в пространстве имен "System.Security.Cryptography.Xml". Этот тип был отправлен в сборку "System.Security.Cryptography.Xml, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51". Попробуйте добавить ссылку на эту сборку.
1>Сборка проекта "My_Test_XML_hash.csproj" завершена с ошибкой.
========== Перестроение всех проектов: успешно: 0, с ошибками: 1, пропущено: 0 ==========
7 DES
 
12.06.21
11:15
VS не  тот?
8 Serginio1
 
12.06.21
11:20
Тебе точно не на этот сайт!
если плохо с английским
https://ru.stackoverflow.com/
http://rsdn.org/

Ну ставь последнюю 10.1 и в Целевая рабочая среда .NET 5.0
и установи если не установлена
9 DES
 
12.06.21
12:01
(8) поясни, должен ли пример компилироваться без ошибок?
Или имеется ввиду что какие то определения ясны по умолчанию? (мол добавьте сами)
10 DES
 
12.06.21
12:01
(8) я поставил последнюю из их сайта
11 Asmody
 
12.06.21
12:32
(9) а ты думал в сказку попал? "Взрослые" языки – это боль и страданиек
12 Serginio1
 
12.06.21
12:55
А ты в нугетах System.Security.Cryptography.Xml установил?
13 DES
 
12.06.21
15:12
(12) Спасибо
14 DES
 
12.06.21
15:51
а  как byte[20] = 157 187 72 143 ... 230
преобразовать в строку ?
15 DES
 
12.06.21
19:31
а  почему не доступна галка
Регистрация для COM-взаимодействия  на VS2019 ?
http://prntscr.com/156341y
16 Serginio1
 
13.06.21
12:36
https://docs.microsoft.com/ru-ru/dotnet/core/native-interop/expose-components-to-com

Не на том форуме пишешь. Я сюда редко захожу, а кроме меня как видишь мало кто отвечает
17 Serginio1
 
13.06.21
12:44
18 DES
 
13.06.21
16:10
А  НЕТ КОРЕ отличается от NET 5?
это разные сущности?
19 DES
 
13.06.21
16:11
для 1с8 нужен нет фрейворк или net 5 тоже  ?
20 DES
 
13.06.21
16:14
создал новый проект на net5.0

все удалил, добавил

//1. подключаем необходимые пространства имен
using System;
using System.Runtime.InteropServices;

//2. описываем наше пространство имен, собственно так и будет называется наш COM-объект
namespace HowToComObjectFor1C
{
//3. объявляем интерфейс для класса, создаем GUID с помощью утилиты "C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\guidgen.exe" поясняю, запускаем утилиту устанавливаем значение на п.4 нажимаем Copy переносим в наш код:
    [Guid("7744AACB-9194-46bf-81AF-9DA73EE687DC")]
    internal interface IMyClass
    {
        [DispId(1)]
//4. описываем методы которые можно будет вызывать из вне
        string PrintIn1C(string mymessage);
      }

//5. определим интерфейс для COM-событий(GUID получаем и записываем с помощью утилиты guidgen.exe)
    [Guid("77DD7E62-7D82-4301-993C-B7D919430990"), InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
    public interface IMyEvents
    {
    }

//6. описываем класс реализующий интерфейсы(GUID получаем и записываем с помощью утилиты guidgen.exe)
    [Guid("77EE0677-884A-4eeb-A3BD-D407844C0C70"), ClassInterface(ClassInterfaceType.None), ComSourceInterfaces(typeof(IMyEvents))]
    public class MyClass : IMyClass //название нашего класса MyClass
    {
         public string PrintIn1C(string mymessage)
        {
            return mymessage;
        }  
    }
}

все создается без ошибок, но не регистрируется regasm
пишет  нет каких то ссылок на модули
21 DES
 
13.06.21
16:16
(16) а на какой не редко?
22 DES
 
13.06.21
21:46
Может кто то скинуть простейший пример COM dll ?
с  одной функцией
23 Serginio1
 
14.06.21
14:32
.Net 5 это продолжение .Net Core
(19) Зависит от того как скомпилируешь с зависимостями или без.
Но https://docs.microsoft.com/ru-ru/dotnet/core/native-interop/expose-components-to-com#sample

Автономные развертывания COM-компонентов не поддерживаются. Поддерживаются только зависящие от платформы развертывания COM-компонентов.

Посмотри примеры https://github.com/dotnet/samples/tree/main/core/extensions/COMServerDemo
Только выбери .Net 5
(20) Читай ссылки которые я даю. Какой regasm?
https://docs.microsoft.com/ru-ru/dotnet/core/native-interop/expose-components-to-com#generate-the-com-host
Регистрация узла COM для модели COM
Откройте командную строку с повышенными привилегиями и запустите regsvr32 ProjectName.comhost.dll. Это приведет к регистрации всех предоставленных объектов .NET в модели COM.
24 DES
 
15.06.21
09:29
нарисовал вот такое
using System;
using System.Runtime.InteropServices;

namespace COMServerDES
{
    [ComVisible(true)]
    [Guid("4C23DF7D-2925-4508-A670-7929382A5D32")]
    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
    public interface IServer
{
        double ComputePi();
}
    [ComVisible(true)]
    [Guid("5553D96D-D6E0-4B69-937C-E3D8FCE913A1")]

    public class Server : IServer
    {
        double IServer.ComputePi()
        {
            double sum = 0.0;
            int sign = 1;
            for (int i = 0; i < 1024; ++i)
            {
                sum += sign / (2.0 * i + 1.0);
                sign *= -1;
            }
            return 4.0 * sum;
        }
    }

    [Guid("6844AACB-9194-46bf-81AF-9DA73EE687DC")]

    internal interface IMyClass
    {
        [DispId(1)]
        //4. описываем методы которые можно будет вызывать из вне
        string PrintIn1C(string mymessage);
    }

    [Guid("87279FEB-3D56-4635-A400-B2FE3814B4B1"), InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
    public interface IMyEvents
    {
    }

    [Guid("FF9DF26B-4AEC-4918-A4C4-45BE9073F817"), ClassInterface(ClassInterfaceType.None), ComSourceInterfaces(typeof(IMyEvents))]
    public class MyClass : IMyClass //название нашего класса MyClass
    {
        public string PrintIn1C(string mymessage)
        {
            return mymessage;
        }
    }
}
все компилируется, регистрируется, в 1с8 подключается как   Server = Новый COMОбъект("COMServerDES.Server");

НО!
Сообщить(Server.ComputePi());
Сообщить(Server.PrintIn1C("Чьёртпобери"));
не выполняются : Метод объекта не обнаружен (ComputePi)

что не так еще?
25 Serginio1
 
15.06.21
10:04
internal interface IMyClass
Зачем тебе internal
26 Serginio1
 
15.06.21
10:19
И зачем InterfaceIsIUnknown
Дделай InterfaceIsDual
27 Serginio1
 
15.06.21
10:26
28 Serginio1
 
15.06.21
10:31
Ну и пропиши явно
29 Serginio1
 
15.06.21
10:31
[ProgId("COMServerDES.Server")]
30 Salimbek
 
15.06.21
11:33
(0) Может вам штатными средствами воспользоваться? Например: https://infostart.ru/1c/articles/284214/
и тут Serginio еще комментировал: ХешированиеДанных в 1с8 для обмена ссайтом
31 DES
 
15.06.21
11:36
(26) (27) ты  так спрашиваешь "зачем" как будто я больше тебя знаю.

Я не знаю, я понадергал из разных примеров до кучи, в надежде что заработает, ибо эти примеры по отдельности не работают
32 DES
 
15.06.21
11:36
У меня находит 1с интерфейс dll - а  методов в ней не находит.
33 DES
 
15.06.21
13:29
(30) через 1с8 хеш файла =
9F31A5C8D3C93AF8B7F21F1CE2EF6ABC49852DB4
а через C# byte[] hash = transform.GetDigestedOutput(new SHA1Managed());
0870CD8372DAC848589D7CB73E09C37AC878CA81
34 Serginio1
 
15.06.21
13:55
(32) Тебе и интерфейс не нужен.

  [ComVisible(true)]
  [ClassInterface(ClassInterfaceType.AutoDual)]
[ProgId("COMServerDES.Server")]
public class Server
    {
[ComVisible(true)]
[DispId(1)]
public    double ComputePi()
        {
            double sum = 0.0;
            int sign = 1;
            for (int i = 0; i < 1024; ++i)
            {
                sum += sign / (2.0 * i + 1.0);
                sign *= -1;
            }
            return 4.0 * sum;
        }
    }
35 DES
 
15.06.21
14:14
(34) СПС !
36 DES
 
15.06.21
14:37
Итого под VS2019 NET5
простенький рабочий код

namespace COMServerDES
{
    [ComVisible(true)]
    [Guid("4C23DF7D-2925-4508-A670-7929382A5D32")]
    [InterfaceType(ComInterfaceType.InterfaceIsDual)]
    public interface IServer
{
        double ComputePi(int N);
        string PrintIn1C(string mymessage);
}
    [Guid("5553D96D-D6E0-4B69-937C-E3D8FCE913A1")]
    [ComVisible(true)]
    [ClassInterface(ClassInterfaceType.AutoDual)]
    [ProgId("COMServerDES.Server")]
    public class Server
    {
        [ComVisible(true)]
        [DispId(1)]
        public string PrintIn1C(string mymessage)
        {
            return mymessage;
        }
        public double ComputePi(int N)
        {
            double sum = 0.0;
            int sign = 1;
            for (int i = 0; i < N; ++i)
            {
                sum += sign / (2.0 * i + 1.0);
                sign *= -1;
            }
            return 4.0 * sum;
        }
    }
}
37 DES
 
15.06.21
14:39
только "ClassInterfaceType.AutoDual" является устаревшим: 'Support for IDispatch may be unavailable in future releases.'
38 DES
 
15.06.21
14:46
вот так тоже работоспособно:

using System;
using System.Runtime.InteropServices;
namespace COMServerDES
{
    [ComVisible(true)]
    [Guid("4C23DF7D-2925-4508-A670-7929382A5D32")]
    [InterfaceType(ComInterfaceType.InterfaceIsDual)]
    public interface IServer
    {
        double ComputePi(int N);
        string PrintIn1C(string mymessage);
    }
    [Guid("5553D96D-D6E0-4B69-937C-E3D8FCE913A1")]
    [ComVisible(true)]
    [ProgId("COMServerDES.Server")]
    public class Server
    {
        [ComVisible(true)]
        [DispId(1)]
        public string PrintIn1C(string mymessage) { return mymessage + " " + mymessage; }
        public double ComputePi(int N) { double sum = 0.0; int sign = 1; for (int i = 0; i < N; ++i) { sum += sign / (2.0 * i + 1.0); sign *= -1; } return 4.0 * sum; }
    }
}
39 DES
 
15.06.21
15:22
еще можно заменить файл ИмяПроекта.csproj на этот текст (удобно регать результирующую dll)
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <!--
        COM servers must define a framework to use in situations where a CLR instance is not already present in the process.
        Note that since the COM server may be activated in a process where the CLR must be activated, both the projects
        *.runtimeconfig.json and *.deps.json files must be bundled with the server itself.

        In the following example, the following files are needed to deploy the COM server:
            COMServer.comhost.dll
            COMServer.dll
            COMServer.deps.json
            COMServer.runtimeconfig.json

        In a RegFree COM scenario, the following file must also be deployed:
            COMServer.X.manifest
    -->
    <TargetFramework>net5.0</TargetFramework>

    <!-- Indicate the assembly is providing a COM server -->
    <EnableComHosting>True</EnableComHosting>

    <!-- Generate a RegFree COM manifest -->
    <EnableRegFreeCom Condition="'$(RegFree)' == 'True'">True</EnableRegFreeCom>
  </PropertyGroup>

  <ItemGroup>
    <!-- Used in lieu of a Primary Interop Assembly (PIA) -->
    <Compile Include="../COMContract/*.cs" />
  </ItemGroup>

  <Target Name="ServerUsage"
          Condition="'$(RegFree)' != 'True'"
          AfterTargets="Build">
    <Message Importance="High" Text="%0a************************************%0a*** $(MSBuildProjectName) usage instructions ***%0a************************************" />
    <Message Importance="High" Text="The server must be COM registered in order to activate.%0aThe following commands must be executed from an elevated command prompt." />
    <Message Importance="High" Text="Register:%0a    regsvr32.exe &quot;$(ProjectDir)$(OutputPath)$(ComHostFileName)&quot;" />
    <Message Importance="High" Text="Unregister:%0a    regsvr32.exe /u &quot;$(ProjectDir)$(OutputPath)$(ComHostFileName)&quot;" />
  </Target>

  <Target Name="ServerUsage_RegFree"
          Condition="'$(RegFree)' == 'True'"
          AfterTargets="Build">
    <Message Importance="High" Text="%0a************************************%0a*** $(MSBuildProjectName) usage instructions ***%0a************************************" />
    <Message Importance="High" Text="A RegFree COM manifest has been created for the server.%0aThe manifest '@(RegFreeComManifest->'%(Filename)%(Extension)')' must be included during server deployment.%0aThe COMServer project will copy all required outputs to the COMClient output directory." />

    <ItemGroup>
      <ServerOutput Include="$(OutputPath)*.dll" />
      <ServerOutput Include="$(OutputPath)*.runtimeconfig.json" />
      <ServerOutput Include="$(OutputPath)*.deps.json" />
      <ServerOutput Include="$(OutputPath)*.manifest" />
    </ItemGroup>

    <!-- Deploy all required server outputs -->
    <Copy SourceFiles="@(ServerOutput)"
          DestinationFolder="../COMClient/$(OutputPath)" />
  </Target>

  <Target Name="Clean_RegFree"
          AfterTargets="Clean">
    <ItemGroup>
      <ServerOutputToDelete Include="../COMClient/$(OutputPath)COMServer.*" />
    </ItemGroup>

    <!-- Cleanup deployed server outputs -->
    <Delete Files="@(ServerOutputToDelete)" />
  </Target>

</Project>
40 DES
 
15.06.21
17:18
ну и что требовалось с самого начала

using System;
using System.Runtime.InteropServices;
using System.Xml;
using System.IO;
using System.Security.Cryptography;
using System.Security.Cryptography.Xml;
namespace COMServerDES
{ [ComVisible(true)]
[Guid("4C23DF7D-0013-0001-1962-7929382A5D32")]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface IServer { string SHA1(string content); }
[ComVisible(true)]
[Guid("5553D96D-0013-0001-1962-E3D8FCE913A1")]
[ProgId("COMServerDES.Server")]
public class Server
{ [ComVisible(true)]
[DispId(1)]
public string SHA1(string content)
{ XmlDocument xmlDoc = new();
xmlDoc.LoadXml(content);
XmlDsigC14NTransform transform = new XmlDsigC14NTransform(false);
transform.LoadInput(xmlDoc);
try { return BitConverter.ToString(transform.GetDigestedOutput(new SHA1Managed())).Replace("-", string.Empty); }
catch (IOException e) { return ""; } } } }

и добавить В управление пакетами NuGet... "System.Security.Cryptography.Xml"
41 DES
 
15.06.21
18:10
все  зашибись но только для w10
А  блин под w2008r2 не  регится, говорит точки входа не найдено
42 oleg_km
 
15.06.21
18:35
(41) А ты точно компьютерщик?

https://docs.microsoft.com/ru-ru/dotnet/core/install/windows?tabs=net50

win2008r2 не поддерживается
43 polosov
 
15.06.21
18:38
(41) А чем получение хеша в 1С не нравится?
44 polosov
 
15.06.21
18:42
+(43) Хеширование = Новый ХешированиеДанных(ХешФункция.SHA1);
45 DES
 
15.06.21
20:33
(44) см (33)
46 DES
 
15.06.21
20:40
(42) может установка доп. зависимостей поможет неточно компьюторщику?
47 Serginio1
 
15.06.21
20:42
(43) https://docs.microsoft.com/ru-ru/dotnet/api/system.security.cryptography.xml.xmldsigc14ntransform?view=dotnet-plat-ext-5.0
Представляет преобразование XML-канонизации C14N для цифровой подписи в соответствии с определением консорциума W3C без комментариев.
48 DES
 
15.06.21
20:42
как запустить все это DLL под wserver 2008r2 ?
49 DES
 
15.06.21
20:54
(47) это на какую тему?
50 oleg_km
 
15.06.21
21:07
51 DES
 
15.06.21
22:47
(50) легко  сказать, там даже нет в меню Собрать проект
52 polosov
 
15.06.21
22:57
(45) У тебя в XML русские символы небось?
53 DES
 
16.06.21
00:42
(52) нет, только анг
54 Salimbek
 
16.06.21
07:26
(33) Там, в темах, тоже писали, что подписи не сходятся. И находили другие варианты. Например это: https://infostart.ru/ajax/comment_pub.php?t=111033&c=14
55 Salimbek
 
16.06.21
07:28
+(54) И еще такое нашел: https://infostart.ru/1c/articles/1230060/
56 Salimbek
 
16.06.21
08:16
+ И еще в комментах ссылку на код из типовых: https://forum.infostart.ru/ajax/comment_pub.php?t=167432&c=41
57 DES
 
16.06.21
15:33
наверно текст и XML по разному хешируется ?

new XmlDsigC14NTransform() - матерится когда на входе не легитимный XML
58 Жан Пердежон
 
16.06.21
16:35
ПреобразованиеККаноническомуXML (ConversionToCanonicalXML)
КанонизироватьВПоток(CanonicalizeToString)
КанонизироватьВСтроку (CanonicalizeToString)
КанонизироватьВФайл (CanonicalizeToFile)

//

Префиксы для включения используются в алгоритме исключающего канонического XML
(см. стандарт W3C Exclusive XML Canonicalization - https://www.w3.org/TR/xml-exc-c14n/).
59 Жан Пердежон
 
16.06.21
16:38
ХешированиеДанных (DataHashing)
Свойства:
ХешСумма (HashSum)
ХешФункция (HashFunction)

Описание:
Реализует инкрементальный расчет хеш-суммы по добавленным данным. Способ расчета и тип вычисляемого значения определяются типом хеш-функции.
60 Serginio1
 
16.06.21
19:10
(51) Сделай под 4.6.1 https://support.microsoft.com/ru-ru/topic/платформа-net-framework-4-6-1-автономный-установщик-windows-842e545a-bad5-c538-e491-578d017e677c

И можешь мою компоненту использовать без всяких комов
61 DES
 
16.06.21
19:45
(58)  а как использовать ?
что то нет в инете примера
62 DES
 
16.06.21
22:40
(60) как ?
63 Serginio1
 
17.06.21
10:29
64 Жан Пердежон
 
17.06.21
15:37
(61) первая ссылка в яндексе
https://1centerprise8.blogspot.com/2015/02/xml.html
65 DES
 
17.06.21
20:46
(63) Я про врап=новый COMОбъект("NetObjectToIDispatch45");
помню. Но как и из чего добывать XmlDsigC14NTransform() чтобы обертывать?