Открыть Excel клиентом на сервере. Серверный режим запуска базы.
Не получается открыть Excel клиентом на сервере. На файле работает. Вот код:
Пишет ошибку:
Не могу вспомнить метод для переключения работы с сервера. А может и нет его.
Так как делать?
&НаСервере
Процедура ВыгрузитьНаСервере()
Excel = Новый COMОбъект("Excel.Application");
Excel.Workbooks.Open(АдресВыгрузки + "\doc.xls");
...
Пишет ошибку:
{ВнешняяОбработка.ВнешняяОбработка_18_06_27_12.Форма.Форма.Форма(112)}: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft Excel): Sorry, we couldn't find D:\Выгрузка\doc.xls. Is it possible it was moved, renamed or deleted?
Не могу вспомнить метод для переключения работы с сервера. А может и нет его.
Так как делать?
По теме из базы знаний
Найденные решения
(16) Тогда по Вашим мотивам
&НаСервере
Процедура ПрочитатьЭксельНаСервере(ТД,Файл)
ТД.Прочитать(Файл,СпособЧтенияЗначенийТабличногоДокумента.Значение);
КонецПроцедуры
&НаКлиенте
Процедура ПрочитатьЭксель(Команда)
Файл = "\\"+ИмяКомпьютера()+ Сред(Объект.ИмяФайла,3,СтрДлина(Объект.ИмяФайла)-3);
ТД = Новый ТабличныйДокумент;
ПрочитатьЭксельНаСервере(ТД,Файл);
Тд.Показать();
КонецПроцедуры
&НаКлиенте
Процедура ИмяФайлаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
Режим = РежимДиалогаВыбораФайла.Открытие;
ДиалогСохраненияФайла = Новый ДиалогВыбораФайла(Режим);
ДиалогСохраненияФайла.ПолноеИмяФайла = "";
ДиалогСохраненияФайла.Заголовок = НСтр("ru = 'Выберите каталог для сохранения результата'");
Если ДиалогСохраненияФайла.Выбрать() Тогда
ФайлВыгрузки = ДиалогСохраненияФайла.ПолноеИмяФайла;
КонецЕсли;
Объект.ИмяФайла = ФайлВыгрузки;
КонецПроцедуры
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)
По этому адресу лежит файл на сервере? D:\Выгрузка\doc.xls
Excel = Новый COMОбъект("Excel.Application"); - нужно ли устанавливать Excel на сервер 1с чтобы его там открывать?
Sorry, we couldn't find D:\Выгрузка\doc.xls. Is it possible it was moved, renamed or deleted?
По этому адресу лежит файл на сервере? D:\Выгрузка\doc.xls
Excel = Новый COMОбъект("Excel.Application"); - нужно ли устанавливать Excel на сервер 1с чтобы его там открывать?
&НаСервере
Процедура ВыгрузитьНаСервере(Файл)
Excel = Новый COMОбъект("Excel.Application");
Excel.Workbooks.Open(Файл);
КонецПроцедуры
&НаКлиенте
Процедура Прочитатьэксель()
СетевоеИмяКомпьютера = ИмяКомпьютера();
ПутьКФайлу = "\\"+СетевоеИмяКомпьютера +"\Выгрузка\doc.xls"
ВыгрузитьНаСервере(ПутьКФайлу );
КонецПроцедуры
ПоказатьШарим паку выгрузки...
(13)
&НаСервере
Функция ВыгрузитьНаСервере()
СетевоеИмяКомпьютера = ИмяКомпьютера();
ПутьКФайлу = "\\"+СетевоеИмяКомпьютера +"\Выгрузка\doc.xls"
Возврат ПутьКФайлу;
КонецФункции
&НаКлиенте
Процедура Прочитатьэксель()
ПутьКФайлу = ВыгрузитьНаСервере();
Excel = Новый COMОбъект("Excel.Application");
Excel.Workbooks.Open(ПутьКФайлу);
КонецПроцедуры
Показать
На клиенте не делал потому, что запрос делается только на сервере.
Тогда вопрос как перенести ТаблицаЗначений из серверной процедуры, чтобы потом обработать на клиенте?
Реквизит формы можно, но очень много колонок заполнять нет желания.
Можно перенести строкой ТаблицуЗначений: СтрокаТЗ= ЗначениеВСтрокуВнутр(ТЗ); , но на клиенте ЗначениеИзСтрокиВнутр(СтрокаТЗ); не работает.
Тогда вопрос как перенести ТаблицаЗначений из серверной процедуры, чтобы потом обработать на клиенте?
Реквизит формы можно, но очень много колонок заполнять нет желания.
Можно перенести строкой ТаблицуЗначений: СтрокаТЗ= ЗначениеВСтрокуВнутр(ТЗ); , но на клиенте ЗначениеИзСтрокиВнутр(СтрокаТЗ); не работает.
(16) Тогда по Вашим мотивам
&НаСервере
Процедура ПрочитатьЭксельНаСервере(ТД,Файл)
ТД.Прочитать(Файл,СпособЧтенияЗначенийТабличногоДокумента.Значение);
КонецПроцедуры
&НаКлиенте
Процедура ПрочитатьЭксель(Команда)
Файл = "\\"+ИмяКомпьютера()+ Сред(Объект.ИмяФайла,3,СтрДлина(Объект.ИмяФайла)-3);
ТД = Новый ТабличныйДокумент;
ПрочитатьЭксельНаСервере(ТД,Файл);
Тд.Показать();
КонецПроцедуры
&НаКлиенте
Процедура ИмяФайлаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
Режим = РежимДиалогаВыбораФайла.Открытие;
ДиалогСохраненияФайла = Новый ДиалогВыбораФайла(Режим);
ДиалогСохраненияФайла.ПолноеИмяФайла = "";
ДиалогСохраненияФайла.Заголовок = НСтр("ru = 'Выберите каталог для сохранения результата'");
Если ДиалогСохраненияФайла.Выбрать() Тогда
ФайлВыгрузки = ДиалогСохраненияФайла.ПолноеИмяФайла;
КонецЕсли;
Объект.ИмяФайла = ФайлВыгрузки;
КонецПроцедуры
Показать
(16) Я делал через хранилище:
В принципе, можно делать, как выше сказали - через массив структур
&НаКлиенте
Процедура Выгрузить(Команда)
//Если Не ЗначениеЗаполнено(Шаблон) Тогда
// Сообщить("Укажите шаблон!");
// возврат;
//КонецЕсли;
Если Не ЗначениеЗаполнено(ВыходнойФайл) Тогда
Сообщить("Укажите имя файла для сохранения!");
возврат;
КонецЕсли;
Если Не ЗначениеЗаполнено(СвойствоКодФИАС) Тогда
Сообщить("Укажите свойство ""Код ФИАС""");
возврат;
КонецЕсли;
Шаблон = ПолучитьШаблон();
Шаблон.Записать(ВыходнойФайл);
ОбъектЭксель = Новый COMОбъект("Excel.Application");//Новый COMОбъект(ИмяФайлаШаблона);
Попытка
Book = ОбъектЭксель.WorkBooks.Open(ВыходнойФайл,0);
Исключение
Предупреждение("Не удалось открыть выходной файл");
ОбъектЭксель.Quit();
ОбъектЭксель = 0;
ВызватьИсключение;
возврат;
КонецПопытки;
Попытка
ЗаполнитьДанные(Book);
Исключение
Book.Close();
ОбъектЭксель.Quit();
ОбъектЭксель = 0;
ВызватьИсключение;
возврат;
КонецПопытки;
Book.Save();
Book.Close();
ОбъектЭксель.Quit();
ОбъектЭксель = 0;
КонецПроцедуры
&НаСервере
Функция ПолучитьМассивЛСДляВыгрузки()
ТаблицаЛицевыхСчетов = ркОтборЛицевыхСчетовСервер.ПолучитьРезультат(КомпоновщикНастроек, УникальныйИдентификатор, ТекущаяДата());
возврат ТаблицаЛицевыхСчетов.ВыгрузитьКолонку("ЛицевойСчет");
КонецФункции
&НаСервере
Функция ПодготовитьТаблицыДляВыгрузки()
ВозвращаемаяСтруктура = Новый Структура("ОсновныеСведения, Адреса");
МассивЛицевыхСчетов = ПолучитьМассивЛСДляВыгрузки();
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ДокументыФизическихЛицСрезПоследних.Период,
| ДокументыФизическихЛицСрезПоследних.Физлицо,
| ДокументыФизическихЛицСрезПоследних.ВидДокумента
|ПОМЕСТИТЬ ВТ_ДокументыФЛ
|ИЗ
| РегистрСведений.ДокументыФизическихЛиц.СрезПоследних КАК ДокументыФизическихЛицСрезПоследних
|ГДЕ
| ДокументыФизическихЛицСрезПоследних.ЯвляетсяДокументомУдостоверяющимЛичность = ИСТИНА
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| МАКСИМУМ(ВТ_ДокументыФЛ.Период) КАК Период,
| ВТ_ДокументыФЛ.Физлицо
|ПОМЕСТИТЬ ВТ_ПоследниеУдостоверения
|ИЗ
| ВТ_ДокументыФЛ КАК ВТ_ДокументыФЛ
|
|СГРУППИРОВАТЬ ПО
| ВТ_ДокументыФЛ.Физлицо
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| ДокументыФизическихЛиц.Физлицо,
| ДокументыФизическихЛиц.ВидДокумента,
| ДокументыФизическихЛиц.Серия,
| ДокументыФизическихЛиц.Номер,
| ДокументыФизическихЛиц.ДатаВыдачи,
| ДокументыФизическихЛиц.СрокДействия,
| ДокументыФизическихЛиц.КемВыдан,
| ДокументыФизическихЛиц.КодПодразделения
|ПОМЕСТИТЬ ВТ_ДанныеПоследнегоУдостоверенияЛичности
|ИЗ
| ВТ_ПоследниеУдостоверения КАК ВТ_ПоследниеУдостоверения
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ДокументыФизическихЛиц КАК ДокументыФизическихЛиц
| ПО ВТ_ПоследниеУдостоверения.Физлицо = ДокументыФизическихЛиц.Физлицо
| И ВТ_ПоследниеУдостоверения.Период = ДокументыФизическихЛиц.Период
|ГДЕ
| ДокументыФизическихЛиц.ЯвляетсяДокументомУдостоверяющимЛичность = ИСТИНА
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| ркОбъектыРасчетаСрезПоследних.ЛицевойСчет,
| СУММА(1) КАК КоличествоПроживающих
|ПОМЕСТИТЬ ВТ_Проживающие
|ИЗ
| РегистрСведений.ркОбъектыРасчета.СрезПоследних КАК ркОбъектыРасчетаСрезПоследних
|ГДЕ
| ркОбъектыРасчетаСрезПоследних.СтатусОбъектаРасчета = &СтатусПроживающий
| И ркОбъектыРасчетаСрезПоследних.Включен = ИСТИНА
|
|СГРУППИРОВАТЬ ПО
| ркОбъектыРасчетаСрезПоследних.ЛицевойСчет
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| ркЛицевыеСчета.Код КАК ЛС_Код,
| ФИО_Ответственного.Фамилия КАК Ответственный_Фамилия,
| ФИО_Ответственного.Имя КАК Ответственный_Имя,
| ФИО_Ответственного.Отчество КАК Ответственный_Отчество,
| Ответственный.СтраховойНомерПФР КАК Ответственный_СНИЛС,
| ПРЕДСТАВЛЕНИЕ(ВТ_ДанныеПоследнегоУдостоверенияЛичности.ВидДокумента) КАК ВидДокумента,
| ВТ_ДанныеПоследнегоУдостоверенияЛичности.Номер КАК НомерДокумента,
| ВТ_ДанныеПоследнегоУдостоверенияЛичности.Серия КАК СерияДокумента,
| ВТ_ДанныеПоследнегоУдостоверенияЛичности.ДатаВыдачи,
| ВЫРАЗИТЬ(ОбщаяПлощадь.Значение КАК ЧИСЛО(12, 3)) КАК ОбщаяПлощадьЛС,
| ВЫРАЗИТЬ(ЖилаяПлощадь.Значение КАК ЧИСЛО(12, 3)) КАК ЖилаяПлощадьЛС,
| ВТ_Проживающие.КоличествоПроживающих
|ИЗ
| Справочник.ркЛицевыеСчета КАК ркЛицевыеСчета
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ФИОФизическихЛиц.СрезПоследних КАК ФИО_Ответственного
| ПО ркЛицевыеСчета.ОтветственныйКвартиросъемщик = ФИО_Ответственного.ФизическоеЛицо
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ФизическиеЛица КАК Ответственный
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_ДанныеПоследнегоУдостоверенияЛичности КАК ВТ_ДанныеПоследнегоУдостоверенияЛичности
| ПО Ответственный.Ссылка = ВТ_ДанныеПоследнегоУдостоверенияЛичности.Физлицо
| ПО ркЛицевыеСчета.ОтветственныйКвартиросъемщик = Ответственный.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ркЛицевыеСчета.ДополнительныеРеквизиты КАК ОбщаяПлощадь
| ПО (ОбщаяПлощадь.Ссылка = ркЛицевыеСчета.Ссылка)
| И (ОбщаяПлощадь.Свойство = &СвойствоОбщаяПлощадь)
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ркЛицевыеСчета.ДополнительныеРеквизиты КАК ЖилаяПлощадь
| ПО (ЖилаяПлощадь.Ссылка = ркЛицевыеСчета.Ссылка)
| И (ЖилаяПлощадь.Свойство = &СвойствоЖилаяПлощадь)
| ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Проживающие КАК ВТ_Проживающие
| ПО (ВТ_Проживающие.ЛицевойСчет = ркЛицевыеСчета.Ссылка)
|ГДЕ
| ркЛицевыеСчета.Ссылка В(&мЛицевыеСчета)
|
|УПОРЯДОЧИТЬ ПО
| ЛС_Код";
Запрос.УстановитьПараметр("мЛицевыеСчета", МассивЛицевыхСчетов);
Запрос.УстановитьПараметр("СвойствоОбщаяПлощадь", Константы.ркХарактеристикаОбщаяПлощадь.Получить());
Запрос.УстановитьПараметр("СвойствоЖилаяПлощадь", Константы.ркХарактеристикаЖилаяПлощадь.Получить());
Запрос.УстановитьПараметр("СтатусПроживающий", Константы.ркСтатусПроживает.Получить());
тзОсновныеСведения = Запрос.Выполнить().Выгрузить();
ВозвращаемаяСтруктура.ОсновныеСведения = ПоместитьВоВременноеХранилище(тзОсновныеСведения, УникальныйИдентификатор);
Запрос.Текст = "ВЫБРАТЬ
| ркЛицевыеСчета.Код КАК ЛС_Код,
| ВЫРАЗИТЬ(ркДомаДополнительныеРеквизиты.Значение КАК СТРОКА(50)) КАК КодДомаПоФИАС,
| ркУлицы.Регион КАК Регион,
| ркУлицы.Район КАК Район,
| ркУлицы.Город КАК Город,
| ркУлицы.НаселенныйПункт КАК НаселенныйПункт,
| ркУлицы.Наименование КАК УлицаНаименование,
| ркДома.Номер КАК НомерДома,
| ркДома.Корпус КАК Корпус,
| ркПомещения.Номер КАК НомерПомещения,
| ркПомещения.Тип.СокращенноеНаименование КАК СокращенноеНаименованиеТипаПомещения
|ИЗ
| Справочник.ркЛицевыеСчета КАК ркЛицевыеСчета
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ркДома КАК ркДома
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ркДома.ДополнительныеРеквизиты КАК ркДомаДополнительныеРеквизиты
| ПО ркДома.Ссылка = ркДомаДополнительныеРеквизиты.Ссылка
| И (ркДомаДополнительныеРеквизиты.Свойство = &СвойствоКодФИАС)
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ркУлицы КАК ркУлицы
| ПО ркДома.Владелец = ркУлицы.Ссылка
| ПО ркЛицевыеСчета.Дом = ркДома.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ркПомещения КАК ркПомещения
| ПО ркЛицевыеСчета.Помещение = ркПомещения.Ссылка
|ГДЕ
| ркЛицевыеСчета.Ссылка В(&мЛицевыеСчета)
|
|УПОРЯДОЧИТЬ ПО
| ЛС_Код";
Запрос.УстановитьПараметр("СвойствоКодФИАС", СвойствоКодФИАС);
тзАдреса = Запрос.Выполнить().Выгрузить();
ВозвращаемаяСтруктура.Адреса = ПоместитьВоВременноеХранилище(тзАдреса, УникальныйИдентификатор);
возврат ВозвращаемаяСтруктура;
КонецФункции
&НаСервере
Функция ПолучитьСтрокуТаблицы(АдресВоВременномХранилище, НомерСтрокиТаблицы)
тзДанные = ПолучитьИзВременногоХранилища(АдресВоВременномХранилище);
Если НомерСтрокиТаблицы > тзДанные.Количество()-1 Тогда
возврат Неопределено;
Иначе
СтрокаТаблицы = тзДанные[НомерСтрокиТаблицы];
СтруктураДанных = Новый Структура;
Для Каждого Колонка Из тзДанные.Колонки Цикл
СтруктураДанных.Вставить(Колонка.Имя, СтрокаТаблицы[Колонка.Имя]);
КонецЦикла;
возврат СтруктураДанных;
КонецЕсли;
КонецФункции
&НаКлиенте
Процедура ЗаполнитьДанные(Книга)
Попытка
ЛистОсновныеСведения = Книга.Sheets(1);
ЛистПомещения = Книга.Sheets(2);
Исключение
Сообщить("Нет листов в книге!");
возврат;
КонецПопытки;
АдресаТаблицДляВыгрузки = ПодготовитьТаблицыДляВыгрузки();
//1. Основные сведения
ПерваяСтрокаСДанными = 3;
НомерСтрокиТаблицы = 0;
НомерСтрокиExcel = ПерваяСтрокаСДанными - 1;
АдресВоВременномХранилище = АдресаТаблицДляВыгрузки.ОсновныеСведения;
Пока Истина Цикл
СтрокаТаблицы = ПолучитьСтрокуТаблицы(АдресВоВременномХранилище, НомерСтрокиТаблицы);
Если СтрокаТаблицы = Неопределено Тогда
Прервать;
КонецЕсли;
НомерСтрокиExcel = НомерСтрокиExcel + 1;
НомерСтрокиТаблицы = НомерСтрокиТаблицы + 1;
ЛистОсновныеСведения.Cells(НомерСтрокиExcel, 1).Value = СтрокаТаблицы.ЛС_Код;
ЛистОсновныеСведения.Cells(НомерСтрокиExcel, 3).Value = СтрокаТаблицы.Ответственный_Фамилия;
ЛистОсновныеСведения.Cells(НомерСтрокиExcel, 4).Value = СтрокаТаблицы.Ответственный_Имя;
ЛистОсновныеСведения.Cells(НомерСтрокиExcel, 5).Value = СтрокаТаблицы.Ответственный_Отчество;
ЛистОсновныеСведения.Cells(НомерСтрокиExcel, 6).Value = СтрокаТаблицы.Ответственный_СНИЛС;
ЛистОсновныеСведения.Cells(НомерСтрокиExcel, 7).Value = СтрокаТаблицы.ВидДокумента;
ЛистОсновныеСведения.Cells(НомерСтрокиExcel, 8).Value = СтрокаТаблицы.НомерДокумента;
ЛистОсновныеСведения.Cells(НомерСтрокиExcel, 9).Value = СтрокаТаблицы.СерияДокумента;
ЛистОсновныеСведения.Cells(НомерСтрокиExcel, 10).Value = Формат(СтрокаТаблицы.ДатаВыдачи, "ДФ=dd.MM.yyyy");
ЛистОсновныеСведения.Cells(НомерСтрокиExcel, 13).Value = СтрокаТаблицы.ОбщаяПлощадьЛС;
ЛистОсновныеСведения.Cells(НомерСтрокиExcel, 14).Value = СтрокаТаблицы.ЖилаяПлощадьЛС;
ЛистОсновныеСведения.Cells(НомерСтрокиExcel, 15).Value = СтрокаТаблицы.ОбщаяПлощадьЛС;
ЛистОсновныеСведения.Cells(НомерСтрокиExcel, 16).Value = СтрокаТаблицы.КоличествоПроживающих;
КонецЦикла;
//2.Помещения
ПерваяСтрокаСДанными = 3;
НомерСтрокиТаблицы = 0;
НомерСтрокиExcel = ПерваяСтрокаСДанными - 1;
АдресВоВременномХранилище = АдресаТаблицДляВыгрузки.Адреса;
Пока Истина Цикл
СтрокаТаблицы = ПолучитьСтрокуТаблицы(АдресВоВременномХранилище, НомерСтрокиТаблицы);
Если СтрокаТаблицы = Неопределено Тогда
Прервать;
КонецЕсли;
НомерСтрокиExcel = НомерСтрокиExcel + 1;
НомерСтрокиТаблицы = НомерСтрокиТаблицы + 1;
ЛистПомещения.Cells(НомерСтрокиExcel, 1).Value = СтрокаТаблицы.ЛС_Код;
ПредставлениеУлицы = "";
Если ЗначениеЗаполнено(СтрокаТаблицы.Регион) Тогда
ПредставлениеУлицы = Строка(СтрокаТаблицы.Регион);
КонецЕсли;
Если ЗначениеЗаполнено(СтрокаТаблицы.Район) Тогда
ПредставлениеУлицы = ПредставлениеУлицы + ?(ПредставлениеУлицы = "", "", ", ") + СтрокаТаблицы.Район;
КонецЕсли;
Если ЗначениеЗаполнено(СтрокаТаблицы.Город) Тогда
ПредставлениеУлицы = ПредставлениеУлицы + ?(ПредставлениеУлицы = "", "", ", ") + СтрокаТаблицы.Город;
КонецЕсли;
Если ЗначениеЗаполнено(СтрокаТаблицы.НаселенныйПункт) Тогда
ПредставлениеУлицы = ПредставлениеУлицы + ?(ПредставлениеУлицы = "", "", ", ") + СтрокаТаблицы.НаселенныйПункт;
КонецЕсли;
Если ЗначениеЗаполнено(СтрокаТаблицы.УлицаНаименование) Тогда
ПредставлениеУлицы = ПредставлениеУлицы + ?(ПредставлениеУлицы = "", "", ", ") + СтрокаТаблицы.УлицаНаименование;
КонецЕсли;
АдресПомещения = ПредставлениеУлицы
+ ", дом " + Строка(СтрокаТаблицы.НомерДома)
+ ?(ЗначениеЗаполнено(СтрокаТаблицы.Корпус), " корп. " + СтрокаТаблицы.Корпус, "")
+ ", "
+ СтрокаТаблицы.СокращенноеНаименованиеТипаПомещения+" "+СтрокаТаблицы.НомерПомещения;
ЛистПомещения.Cells(НомерСтрокиExcel, 2).Value = АдресПомещения;
ЛистПомещения.Cells(НомерСтрокиExcel, 3).Value = СтрокаТаблицы.КодДомаПоФИАС;
ЛистПомещения.Cells(НомерСтрокиExcel, 4).Value = СтрокаТаблицы.НомерПомещения;
ЛистПомещения.Cells(НомерСтрокиExcel, 7).Value = 100;
КонецЦикла;
КонецПроцедуры
ПоказатьВ принципе, можно делать, как выше сказали - через массив структур
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот