Предполагается наличие окончания инструкции vbs

Аутентификация OAuth в Python

py-thonny 22.05.2025

OAuth (Open Authorization) — это целый стандарт для делегированного доступа. Звучит занудно? Давайте проще: OAuth позволяет приложениям получать доступ к информации пользователя на сторонних сервисах. . .

Хеширование и соль паролей в веб-приложениях C#

stackOverflow 22.05.2025

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

Генераторы Python для эффективной обработки данных

AI_Generated 21.05.2025

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

Чем заменить Swagger в .NET WebAPI

stackOverflow 21.05.2025

Если вы создавали Web API на . NET в последние несколько лет, то наверняка сталкивались с зелёным интерфейсом Swagger UI. Этот инструмент стал практически стандартом для документирования и. . .

Использование Linq2Db в проектах C# .NET

UnmanagedCoder 21.05.2025

Среди множества претендентов на корону «идеального ORM» особое место занимает Linq2Db — микро-ORM, балансирующий между мощью полноценных инструментов и легковесностью ручного написания SQL.

Что. . .

Реализация Domain-Driven Design с Java

Javaican 20.05.2025

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

Возможности и нововведения C# 14

stackOverflow 20.05.2025

Выход версии C# 14, который ожидается вместе с . NET 10, приносит ряд интересных нововведений, действительно упрощающих жизнь разработчиков. Вы уже хотите опробовать эти новшества? Не проблема! Просто. . .

Собеседование по Node.js — вопросы и ответы

Reangularity 20.05.2025

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

Cython и C (СИ) расширения Python для максимальной производительности

py-thonny 20.05.2025

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

Безопасное программирование в Java и предотвращение уязвимостей (SQL-инъекции, XSS и др.)

Javaican 19.05.2025

Самые распространёные векторы атак на Java-приложения за последний год выглядят как классический «топ-3 хакерских фаворитов»: SQL-инъекции (31%), межсайтовый скриптинг или XSS (28%) и CSRF-атаки. . .

 

eremeev23rus

Пользователь

Сообщений: 24
Регистрация: 07.09.2015

#1

15.09.2015 11:10:40

Добрый день.
Возникла потребность создать VBS файл.
Данныйц фал должен открывать одну книгу, затирить в ней данные в диапазоне [A2:Hn], затем открывать другой файл копировать данные в таком же диапазоне и заливать в первую книгу.
Затем выполнить 2 макроса.
Из VBS знаю только как открыть файл игнорируя ошибок и сохранить его. Подскажите каким способом это можно реализовать.

Код
Set ExcelApp = CreateObject("Excel.Application")
ExcelApp.Visible = false
ExcelApp.displayalerts = false
ExcelApp.Workbooks.Open "Путь к файлу"
ExcelApp.ActiveWorkbook.refreshall
ExcelApp.ActiveWorkbook.Save
ExcelApp.Workbooks.Close
Set ExcelAp = Nothing
 

JayBhagavan

Пользователь

Сообщений: 11833
Регистрация: 17.01.2014

ПОЛ: МУЖСКОЙ | Win10x64, MSO2019x64

eremeev23rus, здравия. Можно в ВБА написать этот макрос, отладить и после перенести в ВБС.


Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori

 

JayBhagavan, Спасибо, а данный макрос необходимо преобразовывать?

 

JayBhagavan

Пользователь

Сообщений: 11833
Регистрация: 17.01.2014

ПОЛ: МУЖСКОЙ | Win10x64, MSO2019x64

eremeev23rus, а Вы попробуйте его так в ВБА запустить и узнаете.


Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori

 

eremeev23rus

Пользователь

Сообщений: 24
Регистрация: 07.09.2015

#5

15.09.2015 11:29:20

JayBhagavan,

Код
Set ExcelApp = CreateObject("Excel.Application")
ExcelApp.Visible = false
ExcelApp.displayalerts = false
ExcelApp.Workbooks.Open "K:\Исходник.xls"

iLastRow = Sheets("Консолидации общий").Cells(Rows.Count, 8).End(xlUp).Row
For i = 2 To iLastRow - 1
    a = LCase(Sheets("Консолидации общий").Cells(i, 1).Value)
    b = LCase(Sheets("Консолидации общий").Cells(i, 2).Value)
    c = LCase(Sheets("Консолидации общий").Cells(i, 3).Value)
    d = LCase(Sheets("Консолидации общий").Cells(i, 4).Value)
    e = LCase(Sheets("Консолидации общий").Cells(i, 5).Value)
    f = LCase(Sheets("Консолидации общий").Cells(i, 6).Value)
    g = LCase(Sheets("Консолидации общий").Cells(i, 7).Value)
    h = LCase(Sheets("Консолидации общий").Cells(i, 8).Value)
    For j = i + 1 To iLastRow
        a1 = LCase(Sheets("Консолидации общий").Cells(j, 1).Value)
        b1 = LCase(Sheets("Консолидации общий").Cells(j, 2).Value)
        c1 = LCase(Sheets("Консолидации общий").Cells(j, 3).Value)
        d1 = LCase(Sheets("Консолидации общий").Cells(j, 4).Value)
        e1 = LCase(Sheets("Консолидации общий").Cells(j, 5).Value)
        f1 = LCase(Sheets("Консолидации общий").Cells(j, 6).Value)
        g1 = LCase(Sheets("Консолидации общий").Cells(j, 7).Value)
        h1 = LCase(Sheets("Консолидации общий").Cells(j, 8).Value)
    If a = e1 And b = f1 And c = g1 And d = h1 And e = a1 And f = b1 And g = c1 And h = d1 Then
    Cells(j, 1) = a
    Cells(j, 2) = b
    Cells(j, 3) = c
    Cells(j, 4) = d
    Cells(j, 5) = e
    Cells(j, 6) = f
    Cells(j, 7) = g
    Cells(j, 8) = h
    End If
    Next j
Next i

ExcelApp.ActiveWorkbook.Save
ExcelApp.Workbooks.Close
Set ExcelAp = Nothing

Подскажите, пожалуйста, что не так я сформировал?

 

JayBhagavan

Пользователь

Сообщений: 11833
Регистрация: 17.01.2014

ПОЛ: МУЖСКОЙ | Win10x64, MSO2019x64

eremeev23rus, что не так я сходу не скажу. (у меня нет Вашего файла, с которым работает макрос) А что Вас не устраивает или на чём ошибка возникает, если она есть?
ПС Чтобы сократить текст кода используйте конструкцию With … End With для Sheets(«Консолидации общий»). И сравнение можно упростить, например:
1) через массивы, чтобы не создавать для каждой яч. переменную (это же брррррррр)
2) или формировать две строки с разделителем через Join и их сравнивать
Всё вышесказанное — имхо, которое может быть ошибочным, но это я бы попытался реализовать будь у меня такая потребность.


Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori

 

JayBhagavan, при выполнении отображается ошибка: Предполагается наличие окончания инструкции, Код: 800A0401, ошибка компиляции.
Я предполагаю, что VBA код я неверно перенес.

 

Влад

Пользователь

Сообщений: 1189
Регистрация: 24.12.2012

Нет в ВБС такие понятий как «Sheets» и «Cells» — это объекты книги/листа, поэтому должна быть указана полная ссылка на них.

 

Влад, а можно пример? Для лучшего понимания.

 

Влад

Пользователь

Сообщений: 1189
Регистрация: 24.12.2012

#10

15.09.2015 12:04:12

Пример:

Код
....
Set wb = ExcelApp.Workbooks.Open("K:\Исходник.xls")
....
iLastRow = wb.Sheets("Консолидации общий").Cells(Rows.Count, 8).End(xlUp).Row
 

Не удается сделать описаным методом. Может можно сделать, чтобы нажималась кнопка на листе в Excel?

 

Hugo

Пользователь

Сообщений: 26287
Регистрация: 22.12.2012

Rows.Count возможно тоже непонятно для vbs.
Я всегда указывал чьи это rows.

Изменено: Hugo15.09.2015 13:38:29

 

JayBhagavan

Пользователь

Сообщений: 11833
Регистрация: 17.01.2014

ПОЛ: МУЖСКОЙ | Win10x64, MSO2019x64

#13

15.09.2015 13:43:25

Скрытый текст

Изменено: JayBhagavan15.09.2015 14:09:42


Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori

 

Hugo

Пользователь

Сообщений: 26287
Регистрация: 22.12.2012

Ну и для vbs первой строкой нужно написать
jjj_vbs

 

Hugo

Пользователь

Сообщений: 26287
Регистрация: 22.12.2012

Нашёл ещё нестыковку — в vbs нельзя писать
next переменная

 

JayBhagavan

Пользователь

Сообщений: 11833
Регистрация: 17.01.2014

ПОЛ: МУЖСКОЙ | Win10x64, MSO2019x64

#16

15.09.2015 13:55:51

Цитата
Hugo написал: в vbs нельзя писать next переменная

Исправил.

Цитата
Hugo написал: Ну и для vbs первой строкой нужно написать
jjj_vbs

То есть нужно убрать Sub, () и End Sub?


Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori

 

Hugo

Пользователь

Сообщений: 26287
Регистрация: 22.12.2012

Ещё — xlUp нужно заменить на -4162

 

Hugo

Пользователь

Сообщений: 26287
Регистрация: 22.12.2012

#18

15.09.2015 14:00:43

Цитата
JayBhagavan написал:
То есть нужно убрать Sub, () и End Sub?

Да, или первой строкой вызывать этот sub

 

JayBhagavan

Пользователь

Сообщений: 11833
Регистрация: 17.01.2014

ПОЛ: МУЖСКОЙ | Win10x64, MSO2019x64

#19

15.09.2015 14:10:23

Hugo, благодарю за Ваши замечая. Вроде все учёл.


Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori

Страницы 1

Чтобы отправить ответ, вы должны войти или зарегистрироваться

1 2018-03-21 00:46:44

  • badhabit
  • Участник
  • Неактивен
  • Рейтинг : [0|0]

Тема: VBS: не получается сделать массив структур с массивом )

Добрый день. Не знаю правильно ли я использовал терминологию в заголовке, все ж С/С++ ближе… Но есть потребность сделать динамический массив структур, в свою очередь каждая из которых тоже содержит «мембером» динамический массив… Попробовал вот так:


Option Explicit

Main

Function Main
	Dim arr(), i
	For i = 0 To 10
		ReDim Preserve arr(i)
		Set arr(i) = New struct
		arr(i).sVar1 = "str" & i & " var1"
		arr(i).sVar2 = "str" & i & " var2"
		
		Dim j
		For j = 0 To 10
			ReDim Preserve arr(i).aArr(j)
			arr(i).aArr(j) = 121212 + j
		Next		
	Next
	
	For i = 0 To UBound(arr)
		WScript.Echo "i: " & i & " var1: " & arr(i).sVar1 & " var2: " & arr(i).sVar2
	Next
	
End Function


Class struct
  Public aArr()
  Public sVar1
  Public svar2  
End Class

На строке

ReDim Preserve arr(i).aArr(j)

валится с ошибкой:

Ошибка компиляции Microsoft VBScript: Предполагается наличие окончания инструкции

Подскажите, что делаю не так…

2 Ответ от Xameleon 2018-03-21 14:37:31

  • Xameleon
  • Разработчик
  • Неактивен

Re: VBS: не получается сделать массив структур с массивом )

badhabit, а можно увидеть скрипт целиком ? А то объявления struct не видно.

На первый взгляд, как я понимаю, беда в том, что Вы пытаетесь «редимить» свойство объекта. К сожалению, VBScript хочет после Redim получить прямую ссылку на массив. Думаю в Вашем случае может помочь что-то типа:


Option Explicit

Main

Function Main
	Dim arr(), i, propArray
	For i = 0 To 10
		ReDim Preserve arr(i)
		Set arr(i) = New struct
		arr(i).sVar1 = "str" & i & " var1"
		arr(i).sVar2 = "str" & i & " var2"
		
		Dim j
		propArray = arr(i).aArr
		For j = 0 To 10
			ReDim Preserve propArray(j)
			propArray(j) = 121212 + j
		Next
		arr(i).aArr = propArray		
	Next
	
	For i = 0 To UBound(arr)
		WScript.Echo "i: " & i & " var1: " & arr(i).sVar1 & " var2: " & arr(i).sVar2
	Next
	
End Function

Не уверен, что Вы выбрали правильный путь. Думаю всё-таки стоит взглянуть на всю картину целиком.

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

3 Ответ от badhabit 2018-03-21 16:28:20 (изменено: badhabit, 2018-03-21 19:29:16)

  • badhabit
  • Участник
  • Неактивен
  • Рейтинг : [0|0]

Re: VBS: не получается сделать массив структур с массивом )

Xameleon, так я привёл весь скрипт, просто проскролить надо, в самом низу есть объявление класса struct
Пс. Ваш способ попробую

4 Ответ от badhabit 2018-03-21 20:32:29

  • badhabit
  • Участник
  • Неактивен
  • Рейтинг : [0|0]

Re: VBS: не получается сделать массив структур с массивом )


Option Explicit

Main

Function Main
	Dim arr(), i, propArray
	For i = 0 To 10
		ReDim Preserve arr(i)
		Set arr(i) = New struct
		arr(i).sVar1 = "str" & i & " var1"
		arr(i).sVar2 = "str" & i & " var2"
		
		Dim j
		propArray = arr(i).aArr
		For j = 0 To 10
			ReDim Preserve propArray(j)
			propArray(j) = 121212 + j
		Next
		arr(i).aArr = propArray		
	Next
	
	Dim k
	For i = 0 To UBound(arr)
		WScript.Echo "i: " & i & " var1: " & arr(i).sVar1 & " var2: " & arr(i).sVar2
		Dim zzz()
		zzz = arr(i).aArr
		For k = 0 To UBound(zzz) - 1
			WScript.Echo zzz(k)
		Next
	Next	 
	
End Function


Class struct
  Public aArr()
  Public sVar1
  Public svar2  
End Class

теперь ругается тут

говрит
несоответствие типа

5 Ответ от Xameleon 2018-03-22 13:37:20

  • Xameleon
  • Разработчик
  • Неактивен

Re: VBS: не получается сделать массив структур с массивом )

badhabit,

badhabit пишет:

Xameleon, так я привёл весь скрипт, просто проскролить надо, в самом низу есть объявление класса struct

Прошу прощения. Не заметил.

Тогда вот так можно сделать:

Option Explicit

Main

Function Main
	Dim arr(), i, propArray
	For i = 0 To 10
		ReDim Preserve arr(i)
		Set arr(i) = New struct
		arr(i).sVar1 = "str" & i & " var1"
		arr(i).sVar2 = "str" & i & " var2"
		
		Dim j
		propArray = arr(i).aArr
		For j = 0 To 10
			ReDim Preserve propArray(j)
			propArray(j) = 121212 + j
		Next
		arr(i).aArr = propArray		
	Next
	
	Dim k
	For i = 0 To UBound(arr)
		WScript.Echo "i: " & i & " var1: " & arr(i).sVar1 & " var2: " & arr(i).sVar2
		Dim zzz
		zzz = arr(i).aArr
		For k = 0 To UBound(zzz) - 1
			WScript.Echo zzz(k)
		Next
	Next	 
	
End Function


Class struct
	Public aArr
	Public sVar1
	Public svar2
	Private Sub Class_Initialize()
		aArr = Array()
	End Sub
End Class

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

6 Ответ от badhabit 2018-03-25 11:45:39

  • badhabit
  • Участник
  • Неактивен
  • Рейтинг : [0|0]

Re: VBS: не получается сделать массив структур с массивом )

Xameleon, спасибо большое. Все заработало. Вот ещё ссылка по теме https://stackoverflow.com/questions/480 … n-vbscript

7 Ответ от Xameleon 2018-03-25 16:19:00

  • Xameleon
  • Разработчик
  • Неактивен

Re: VBS: не получается сделать массив структур с массивом )

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

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

8 Ответ от badhabit 2018-03-25 17:35:12

  • badhabit
  • Участник
  • Неактивен
  • Рейтинг : [0|0]

Re: VBS: не получается сделать массив структур с массивом )

Да в принципе надо было получить то — что получилось, без разницы как это называть.)) Получился динамический массив «объектов» и в каждом еще по одному динамическому массиву… Добавив в «структуру» конструктор и метод, в принципе получил класс))
Просто писать на vbs самый, в настоящий момент, удобный вариант, а синтаксис я его не шибко хорошо знаю, так что еще раз спасибо за помощь!

Страницы 1

Чтобы отправить ответ, вы должны войти или зарегистрироваться

Troubleshooting Code 800A0401 – Expected End of Statement

Good news, here is another example of a WSH error message with a helpful Char: number.  Count along the line until you get to the offending character.  With Error 800A0401 start by looking for missing ampersands (&).

Introduction to Code 800A0401

Error code, 800A0401 occurs when you execute a VBScript.  This is a compilation error, therefore check your punctuation.  A wild guess, you have left out an ampersand (&), or possibly a comma.

The Symptoms You Get

The script does not execute as you had hoped. Instead, Windows Scripting host generates a message box like this picture:  Good news, I have three examples of code: 800A0401.

The Cause of Code 800A0401 VBScript Error

Your VBScript contains a punctuation error.   Note: The clue from Source: Microsoft VBScript compilation error, this means a syntax error in your script.  In this case the Char: number (33) is particularly valuable in troubleshooting.

The Solution to Error: Expected end of statement

Check the syntax of your script, in particular double-check punctuation marks (&, comma, speech marks or full stop.).  In this instance, Windows Scripting Host has detected a mix-up between a comma and a full stop.  As ever, a line number is helpful when troubleshooting, moreover, any Char : number other than 1, will pin-point the problem.

  ‡

Example 1 of Script for Code 800A0401

Note: The error is at Line 3, Character 33 – wbemServices, Instances

It should be wbemServices.Instances  (Full stop, and not a comma)

‘ VBScript Error 800A0401
strComputer = «Alan»
set wbemservices = GetObject(«Winmgmts:\\» & strComputer)
set wbemObjectSet = wbemServices, InstancesOf («win32_LogicalMemoryConfiguration»)
For each wbemobject in wbemobjectset
WScript.echo «Tot Physical Memory » & wbemobject.totalPhysicalMemory
Next

Guy Recommends:  A Free Trial of the Network Performance Monitor (NPM) v11.5

SolarWinds’ Orion performance monitor will help you discover what’s happening on your network.  This utility will also guide you through troubleshooting; the dashboard will indicate whether the root cause is a broken link, faulty equipment or resource overload.

What I like best is the way NPM suggests solutions to network problems.  Its also has the ability to monitor the health of individual VMware virtual machines.  If you are interested in troubleshooting, and creating network maps, then I recommend that you try NPM now.

Download a free trial of Solarwinds’ Network Performance Monitor

Example 2 of Script for Error 800A0401

Problem

Wscript.Echo objNetwork.UserName » at » & objNetwork.ComputerName

An & (ampersand) is missing it should be:

Correction

Wscript.Echo objNetwork.UserName & » at » & objNetwork.ComputerName

‘ VBScript 800A0401 Error
Set ObjNetwork = CreateObject(«Wscript.Network»)
Wscript.Echo objNetwork.UserName » at » & objNetwork.ComputerName

[ThemesGuy/google_leader728htm]

Example 3 – Missing Comma

The error is on line 10 char 33, it needs a comma between the drive letter and the UNC path

objNetwork.MapNetworkDrive «R:» «\\alan\backup»
objNetwork.MapNetworkDrive «R:» ,  «\\alan\backup»

‘ BudgetPear.vbs
‘ Script to map the Budget share on the server pear
‘ Version 1.1 August 2010
‘ Guy Thomas https://computerperformance.co.uk

Option Explicit
Dim objNetwork

Set objNetwork = CreateObject(«Wscript.Network»)
objNetwork.MapNetworkDrive «R:» «\\alan\backup»
WSript.echo » Share Mapped «
WScript.Quit

‘ End of Guy’s script

Summary of Error Code 800A0401

As usual with 0800 error codes, check the line number and the char number.  Pay careful attention to any punctuation.  Is there a comma, missing?  Could there be a comma, where the script needs a full stop?

See More Windows Update Error Codes 8004 Series

• Error 800A101A8 Object Required   •Error 800A0046   •Error 800A10AD   •Error 800A000D

• Error 80048820   •Error 800A0401   •Review of SolarWinds Permissions Monitor

• Error 80040E14   • Error 800A03EA   • Error 800A0408   • Error 800A03EE

Guy Recommends: WMI Monitor and It’s Free!

Windows Management Instrumentation (WMI) is one of the hidden treasures of Microsoft operating systems.  Fortunately, SolarWinds have created the WMI Monitor so that you can examine these gems of performance information for free.  Take the guess work out of which WMI counters to use for applications like Microsoft Active Directory, SQL or Exchange Server.

Download your free copy of WMI Monitor


Do you need additional help?

  • For interpreting the WSH messages check Diagnose 800 errors.
  • For general advice try my 7 Troubleshooting techniques.
  • See master list of 0800 errors.
  • Codes beginning 08004…
  • Codes beginning 08005…
  • Codes beginning 08007…
  • Codes beginning 0800A…

Give something back?

Would you like to help others?  If you have a good example of this error, then please email me, I will publish it with a credit to you:

If you like this page then please share it with your friends


Товарищи помогите кто знает советом решить следующую проблему.

Попытался в 1с использовать MSScriptControl, следующим образом:

Script=Новый COMОбъект(«MSScriptControl.ScriptControl»);

Script.Language=»vbscript»;

СтрокаСкрипта=»Private Declare Function URLDownloadToFile Lib «»urlmon.dll»» Alias «»URLDownloadToFileA»» (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long

|Sub GetFile  

|Dim ret As Long  

|ret = URLDownloadToFile(0, «»http://www.mail.ru»», «»c:\1.html»», 0, 0)  

|End Sub»;

Script.AddCode(СтрокаСкрипта);  

При выполнении последнего оператора выдается ошибка:

{Форма.Форма(93)}: Ошибка при вызове метода контекста (AddCode): Произошла исключительная ситуация (Ошибка компиляции Microsoft VBScript): Предполагается наличие окончания инструкции

Script.AddCode(СтрокаСкрипта);  

по причине:

Произошла исключительная ситуация (Ошибка компиляции Microsoft VBScript): Предполагается наличие окончания инструкции.

Этот же код написанный в екселе в качестве макроса прекрасно работает. Я так понимаю проблема в том, что я пытаюсь определить функцию URLDownloadToFile из библиотеки «urlmon.dll».

Не подскажите как правильно написать чтобы заработало?

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Баклофен таблетки инструкция по применению взрослым от чего помогает
  • Временная регистрация родственника через госуслуги пошаговая инструкция
  • Инструкция по охране труда при зачистке емкостей
  • Инструкция по применению лекарства эгилок
  • Айсотин глазные капли состав инструкция по применению