Имя: Пароль:
1C
1С v8
Передача сервера на клиент ТЗ для выгрузки в шаблон.
0 lirt82
 
06.05.26
10:10
На форме типового документа в ЕРП, добавил команду через расширение, суть необходимо выгрузить таб часть Товары документа в файл эксель. Получаю таб часть Товары, обрабатываю и выгружаю в ТЗ и передаю с сервера на клиент (в команду) при получении на клиенте выходит ошибка, подскажите как исправить?
******
&НаКлиенте
Процедура ВыгрузитьВExcel(Команда)

    Попытка
        Excel = Новый COMОбъект("Excel.Application");
        Excel.WorkBooks.Open(Шаблон);
        Состояние("Открытие файла Microsoft Excel...");
    Исключение
        Сообщить("Ошибка при открытии файла " + Символы.ПС + ОписаниеОшибки());
        Возврат;
    КонецПопытки;
    
    Состояние("Выгрузка...", , , БиблиотекаКартинок.ДлительнаяОперация48);  
    
    Попытка
        АдресТЗ_ДляВыгрузки = ОбработатьТабЧастьДокументаНаСервере();
        ТаблицаДляВыгрузки = ПолучитьИзВременногоХранилища(АдресТЗ_ДляВыгрузки);  
    Исключение
        Сообщить("Произошла ошибка при получении данных: " + ОписаниеОшибки());
        Excel.Workbooks.Application.DisplayAlerts = Ложь;
        Excel.Quit();
        Excel = 0;
        Возврат;
    КонецПопытки;
***********************
&НаСервере
Функция ОбработатьТабЧастьДокументаНаСервере()
    
    ТаблицаЗначенийТовары = Источник.Товары.Выгрузить(, "Номенклатура, КоличествоУпаковок, СтатьяРасходов");
    ТаблицаЗначенийТовары.Свернуть("Номенклатура, СтатьяРасходов", "КоличествоУпаковок");
    
    ТЗ_ДляВыгрузки = Новый ТаблицаЗначений;
    ТЗ_ДляВыгрузки.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(100)));
    ТЗ_ДляВыгрузки.Колонки.Добавить("Код",          Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(11)));
    ТЗ_ДляВыгрузки.Колонки.Добавить("Количество",   Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 3)));
    ТЗ_ДляВыгрузки.Колонки.Добавить("СтатьяЗатрат", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(100)));
    
    Для Каждого СтрокаТЗ_Товары Из ТаблицаЗначенийТовары Цикл
        НоваяСтрокаТЗ_ДляВыгрузки              = ТЗ_ДляВыгрузки.Добавить();
        НоваяСтрокаТЗ_ДляВыгрузки.Номенклатура = СокрЛП(СтрокаТЗ_Товары.Номенклатура.Наименование);
        НоваяСтрокаТЗ_ДляВыгрузки.Код          = СокрЛП(СтрокаТЗ_Товары.Номенклатура.Код);
        НоваяСтрокаТЗ_ДляВыгрузки.Количество   = Строка(СтрокаТЗ_Товары.КоличествоУпаковок);
        НоваяСтрокаТЗ_ДляВыгрузки.СтатьяЗатрат = СокрЛП(СтрокаТЗ_Товары.СтатьяРасходов.Наименование);
    КонецЦикла;
    
    АдресВХранилище = ПоместитьВоВременноеХранилище(ТЗ_ДляВыгрузки, ЭтаФорма.УникальныйИдентификатор);
    
    Возврат АдресВХранилище;
    
КонецФункции
**********************
https://ibb.co.com/LzTZxWWh
https://ibb.co.com/Qj1HRz2v
1 АЛьФ
 
06.05.26
10:26
Не передавать с сервера на клиент ТЗ. Делать все на сервере, а на клиента передавать готовый файл.
2 Мультук
 
гуру
06.05.26
10:37
(0)
Если сильно надо на клиенте, то
засунуть таблицу значений в массив структур и возвращать его.

ОбщегоНазначения.ТаблицаЗначенийВМассив
3 X Leshiy
 
06.05.26
10:48
Жертвы ИИ)
4 X Leshiy
 
06.05.26
10:52
Вы
10:46:25
как передать таблицу значений с сервера на клиент?
ИИ
10:46:25
Таблица значений может передаваться с сервера на клиент как сериализуемый тип данных. Вот основные способы:

1. Возврат из серверной функции
// Сервер
&НаСервереБезКонтекста
Функция ПолучитьТаблицуДанных()
    Таблица = Новый ТаблицаЗначений;
    Таблица.Колонки.Добавить("Наименование");
    Таблица.Колонки.Добавить("Количество");
    Строка = Таблица.Добавить();
    Строка.Наименование = "Товар 1";
    Строка.Количество = 10;
    Возврат Таблица;
КонецФункции
// Клиент
&НаКлиенте
Процедура ЗагрузитьТаблицу()
    ТаблицаНаКлиенте = ПолучитьТаблицуДанных();
КонецПроцедуры
КопироватьКопировать
2. Через реквизит формы
Создайте реквизит формы с типом ТаблицаЗначений и заполняйте его на сервере.

3. Через временное хранилище (для больших данных)
// Сервер
Адрес = ПоместитьВоВременноеХранилище(Таблица);
// Клиент
Таблица = ПолучитьИзВременногоХранилища(Адрес);
КопироватьКопировать
Код валиден. Таблица значений - сериализуемый тип, поэтому напрямую передается между сервером и клиентом. Для больших объемов данных используйте временное хранилище.

Вы
10:48:31
Ты забыл, что таблица значений не сериализуется?
ИИ
10:48:31
Вы правы, ошибся. Таблица значений не сериализуется и не может быть передана напрямую с сервера на клиент.
Правильные способы:

1. Через Массив структур
// Сервер
&НаСервереБезКонтекста
Функция ПолучитьДанные()
    МассивДанных = Новый Массив;
    // Преобразуем ТаблицаЗначений в массив структур
    Для Каждого СтрокаТаблицы Из ИсходнаяТаблица Цикл
        Структура = Новый Структура("Наименование,Количество");
        Структура.Наименование = СтрокаТаблицы.Наименование;
        Структура.Количество = СтрокаТаблицы.Количество;
        МассивДанных.Добавить(Структура);
    КонецЦикла;
    Возврат МассивДанных;
КонецФункции
КопироватьКопировать
2. Через Таблицу формы
// Сервер
&НаСервере
Процедура ЗаполнитьТаблицуНаСервере()
    Элементы.ТаблицаФормы.Загрузить(ИсходнаяТаблица);
КонецПроцедуры
КопироватьКопировать
3. Через временное хранилище
// Сервер
Адрес = ПоместитьВоВременноеХранилище(Таблица);
// Клиент
Таблица = ПолучитьИзВременногоХранилища(Адрес);
КопироватьКопировать
Код валиден. Для передачи табличных данных используйте сериализуемые типы: Массив структур, СписокЗначений или Таблицу формы.

Вы
10:49:40
А через временное хранилище ТОЧНО можно передать таблицу значений?
ИИ
10:49:40
Проверю документацию по временному хранилищу и сериализации ТаблицыЗначений.
Вы правы, есть нюанс. Таблица значений сериализуется (в XDTO), но имеет доступность: Сервер, толстый клиент, внешнее соединение - НЕ доступна на тонком/веб-клиенте.
Поэтому для передачи на тонкий клиент нужно использовать обходные пути:

Вариант 1: Через ХранилищеЗначений + временное хранилище
// Сервер
&НаСервереБезКонтекста
Функция ПередатьТаблицуВХранилище()
    Хранилище = Новый ХранилищеЗначения(Таблица);
    Адрес = ПоместитьВоВременноеХранилище(Хранилище, УникальныйИдентификатор);
    Возврат Адрес;
КонецФункции
// Клиент (толстый клиент)
&НаКлиенте
Процедура ПолучитьТаблицу()
    Хранилище = ПолучитьИзВременногоХранилища(Адрес);
    Таблица = Хранилище.Получить();
КонецПроцедуры
КопироватьКопировать
Для тонкого/веб-клиента используйте Массив структур (как в предыдущем ответе) или ДанныеФормыКоллекция.
Код валиден. Резюме:

Тонкий/веб-клиент: используйте Массив структур
Толстый клиент: можно использовать ХранилищеЗначений + временное хранилище
5 X Leshiy
 
06.05.26
10:54
Только с 3 раза более менее правильно ответил)
6 Timon1405
 
06.05.26
10:55
Если решил ты в расширение
Кнопку важную создать,
Чтобы «Товары» из программы
В файл Excel перегружать,

Не читай документацию —
Это чтиво для зануд.
выгружай в ТЗ всё сразу,
Пусть на сервере живут.

А потом ТЗ в охапку —
И на клиент её тащи!
Если выскочит ошибка —
В монитор сильней кричи.

Пусть «Мутабельное значенье»
Твой компьютер прохрипит,
Ты не вздумай в Структуру
Данные переложить!

Не используй Массив строк,
И в ДанныеФормы не пихай,
Просто серверную таблицу
Прямо в морду клиенту дай!

Если 1С ругается,
Что не знает тип такой,
Бей по клавишам сильнее —
Сразу будешь ты крутой!
7 X Leshiy
 
06.05.26
11:00
(6)  Агонь)
8 lirt82
 
06.05.26
11:03
(4) ТаблицаДляВыгрузки = ПолучитьИзВременногоХранилища(АдресТЗ_ДляВыгрузки);  
у меня здесь ошибка
9 Timon1405
 
06.05.26
11:06
(0) ну если серьезно, то прям ком объектом эксель нужен обычно только в редких случаях, когда нужна выгрузка с хитрыми формулами или условным оформлением.

как именно звучит исходная задача, что она не решается через ВПФ с табдоком и его интерактивным сохранением в эксель?
10 lirt82
 
06.05.26
11:09
(9) необходимо выгрузить таб часть Товары документа Внутреннее потребление в строгий шаблон файла Excel.
11 Timon1405
 
06.05.26
11:20
(10) и что же в нем строгого чего нельзя сделать макетом?
12 Timon1405
 
06.05.26
11:23
(10) см УстановкаЦенКлиент.ВыгрузитьВExcel(
13 vis
 
06.05.26
11:31
(10) Нужно заполнить именно существующий Excel файл?
Или надо создать Excel файл нужной структуры?
14 lirt82
 
06.05.26
12:24
(13) заполнить именно существующий Excel файл
15 Garykom
 
гуру
06.05.26
12:28
(0) Бросай программирование, особенно 1С - это явно не твое
Зачем тебе ТЗ с сервер на клиент передавать то?
Зачем Новый COMОбъект("Excel.Application") ???

Когда прямо на сервере создается Новый ТабДок и записывается в файл xlsx а temp
Затем файл сохраняется во временное хранилище, ссылка возвращается на клиент, там получаем и записываем в файл куда сказал пользователь или из настроек
16 Garykom
 
гуру
06.05.26
12:30
(14) Прочитать файл экселя в ТабДок, дозаполнить, сохранить обратно в эксель
Для правильных имен листов использовать ПакетОтображаемыхДокументов
17 Fish
 
гуру
06.05.26
12:31
(16) Скорее всего не прокатит. Похоже на то, что есть там некий старовер, который умеет только Эксель и не признаёт 1С. И у него есть некий файлик, который он крутит и вертит, возможно со ссылками на другие файлики, с формулами и т.п.
Вот он и говорит: мне не нужны отчёты в вашей дурацкой 1С, вы мне выгрузите данные в мой тёплый ламповый эксель, но формулы и ссылки не порушьте.
18 Garykom
 
гуру
06.05.26
12:40
(17) Выдавать ему свежий файл с данными из экселя и пусть подцепляет к себе

Или настроить OData (опубликовать базы на веб-сервере)
И пусть в свои файлы экселя сам напрямую из 1С затягивает
https://www.youtube.com/watch?v=Kz72oAjaCco
19 Garykom
 
гуру
06.05.26
12:40
(18)+ Если через типовую OData не в том формате
То наваять свой сервис в 1С, чтобы сразу в нужном формате данные отдавал для экселя
20 Fish
 
гуру
06.05.26
12:40
(18) Если это какой-нибудь топ, то скорее всего никто ничего не будет затягивать или подцеплять - скажут "делай так".
21 Garykom
 
гуру
06.05.26
12:42
Еще в итоге выяснится что данные в экселе нужны для Power BI ))
Дык зачем промежуточный эксель когда можно сразу туда в Power BI по OData из 1С затягивать
22 Garykom
 
гуру
06.05.26
12:51
(20) Топы обычно не тупы, если объяснить что через OData будут самые свежие данные и в любой момент времени, не надо выгрузку ждать/просить
23 Волшебник
 
06.05.26
12:44
(6) 👍
24 Fish
 
гуру
06.05.26
12:44
+(20) Помнится, работал я на заводе, они упорно вели производственный процесс производства плёнки в экселе. Делалось это копированием листов (один лист - один месяц). Сам файлик с кучей запароленных формул и ссылок был создан неким "мастером Экселя", который давно уволился, а пароля, естественно, никто уже не знал.
Так вот, пока у них этот файлик тупо не перестал работать, потому что стало слишком много листов, они на 1С не перешли.
25 Timon1405
 
06.05.26
12:51
(17) появился у нас ком.дир., заказал себе отчет с формулами "как в семерке на прошлой работе",  делали два месяца, пока делали его уволили, вот и весь сказ)
26 lirt82
 
06.05.26
14:56
(15) &НаСервере
Функция ВыгрузитьТабЧастьТоварыНаСервере()
    
    ТаблицаЗначенийТовары = Источник.Товары.Выгрузить(, "Номенклатура, КоличествоУпаковок, СтатьяРасходов");
    ТаблицаЗначенийТовары.Свернуть("Номенклатура, СтатьяРасходов", "КоличествоУпаковок");
    
    ТЗ_ДляВыгрузки = Новый ТаблицаЗначений;
    ТЗ_ДляВыгрузки.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(100)));
    ТЗ_ДляВыгрузки.Колонки.Добавить("Код",          Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(11)));
    ТЗ_ДляВыгрузки.Колонки.Добавить("Количество",   Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 3)));
    ТЗ_ДляВыгрузки.Колонки.Добавить("СтатьяЗатрат", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(100)));
    
    Для Каждого СтрокаТЗ_Товары Из ТаблицаЗначенийТовары Цикл
        НоваяСтрокаТЗ_ДляВыгрузки              = ТЗ_ДляВыгрузки.Добавить();
        НоваяСтрокаТЗ_ДляВыгрузки.Номенклатура = СокрЛП(СтрокаТЗ_Товары.Номенклатура.Наименование);
        НоваяСтрокаТЗ_ДляВыгрузки.Код          = СокрЛП(СтрокаТЗ_Товары.Номенклатура.Код);
        НоваяСтрокаТЗ_ДляВыгрузки.Количество   = СтрокаТЗ_Товары.КоличествоУпаковок;
        НоваяСтрокаТЗ_ДляВыгрузки.СтатьяЗатрат = СокрЛП(СтрокаТЗ_Товары.СтатьяРасходов.Наименование);
    КонецЦикла;
    
    ТабДокВExcel = ПреобразоватьТЗ_ВТабличныйДокумент(ТЗ_ДляВыгрузки);    
    ТабДокВExcel.Записать(ПутьКШаблону, ТипФайлаТабличногоДокумента.XLSX);
        
КонецФункции

Ошибка при вызове метода контекста (Записать)
{ПрочиеДоработки Документ.ВнутреннееПотреблениеТоваров.Форма.РасшПР_ФормаВыгрузкиВШаблон.Форма(144)}:    ТабДокВExcel.Записать(ПутьКШаблону, ТипФайлаТабличногоДокумента.XLSX);
{ПрочиеДоработки Документ.ВнутреннееПотреблениеТоваров.Форма.РасшПР_ФормаВыгрузкиВШаблон.Форма(25)}:    ВыгрузитьТабЧастьТоварыНаСервере();
по причине:
Ошибка доступа к файлу
27 X Leshiy
 
06.05.26
14:59
82 это год рождения или iq?
28 Garykom
 
гуру
06.05.26
15:14
(27) Стаж 16 лет
29 Garykom
 
гуру
06.05.26
15:15
(26) Думаешь на сервере есть доступ к твоему ПутьКШаблону ?
30 vicof
 
06.05.26
15:22
(29) NIGHTHUNTER, LivingStar и lirt82 не умеют думать)
31 Garykom
 
гуру
06.05.26
15:23
(26) Не понимаешь совершенно что делаешь
И судя по стажу очень плохо с обучением
Ошибки полного новичка в 1С и в программировании в целом

И да ИИ тут не поможет, ибо
1. Все общедоступные ИИ плохо знают 1С
2. ИИ это не сделать за тебя хорошо.
ИИ это когда ты умеешь сам но долго делать, а с помощью ИИ можно быстро наговнокодить
32 Garykom
 
гуру
06.05.26
15:25
(30) Угу а потом выяснится что это специальные учетки для обучения 1С:Напарник ))
33 vicof
 
06.05.26
15:35
(32) Но надо было называть тогда или Найтпарник, или ЛивингНапарник, или Напарник82. Чтобы посвященные люди понимали.

А если в напарнике на последний слог ударение, то красиво звучит, кстати)
34 lirt82
 
06.05.26
15:37
получилось решение:
///////////////
&НаКлиенте
Процедура ШаблонНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    
    ДиалогВыбора = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    ДиалогВыбора.Заголовок = "Выберите файл Excel для загрузки";
    ДиалогВыбора.Фильтр = "Книга Excel(*.xls,*.xlsx) |*.xls;*.xlsx";
    ДиалогВыбора.МножественныйВыбор = Ложь;    
    Если ДиалогВыбора.Выбрать() Тогда
        ПутьКШаблону = ДиалогВыбора.ПолноеИмяФайла;
    КонецЕсли;    
    
КонецПроцедуры

&НаКлиенте
Процедура ВыгрузитьВExcel(Команда)
    
    ТабДокАдресХранилища = ВыгрузитьТабЧастьТоварыНаСервере();
    
    Если ПустаяСтрока(ТабДокАдресХранилища) Тогда
        Возврат;
    КонецЕсли;
    
    Попытка
        ТабДокВExcel = ПолучитьИзВременногоХранилища(ТабДокАдресХранилища);
        ТабДокВExcel.Записать(ПутьКШаблону, ТипФайлаТабличногоДокумента.XLSX);
        ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Выгрузка таб. части ""Товары"" в файл Excel завершена.'") + ПутьКШаблону);
    Исключение
        ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Ошибка при сохранении файла: '") + ОписаниеОшибки());
    КонецПопытки;
    
КонецПроцедуры

&НаСервере
Функция ВыгрузитьТабЧастьТоварыНаСервере()
    
    ТаблицаЗначенийТовары = Источник.Товары.Выгрузить(, "Номенклатура, КоличествоУпаковок, СтатьяРасходов");
    ТаблицаЗначенийТовары.Свернуть("Номенклатура, СтатьяРасходов", "КоличествоУпаковок");
    
    ТЗ_ДляВыгрузки = Новый ТаблицаЗначений;
    ТЗ_ДляВыгрузки.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(100)));
    ТЗ_ДляВыгрузки.Колонки.Добавить("Код",          Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(11)));
    ТЗ_ДляВыгрузки.Колонки.Добавить("Количество",   Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 3)));
    ТЗ_ДляВыгрузки.Колонки.Добавить("СтатьяЗатрат", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(100)));
    
    Для Каждого СтрокаТЗ_Товары Из ТаблицаЗначенийТовары Цикл
        НоваяСтрокаТЗ_ДляВыгрузки              = ТЗ_ДляВыгрузки.Добавить();
        НоваяСтрокаТЗ_ДляВыгрузки.Номенклатура = СокрЛП(СтрокаТЗ_Товары.Номенклатура.Наименование);
        НоваяСтрокаТЗ_ДляВыгрузки.Код          = СокрЛП(СтрокаТЗ_Товары.Номенклатура.Код);
        НоваяСтрокаТЗ_ДляВыгрузки.Количество   = СтрокаТЗ_Товары.КоличествоУпаковок;
        НоваяСтрокаТЗ_ДляВыгрузки.СтатьяЗатрат = СокрЛП(СтрокаТЗ_Товары.СтатьяРасходов.Наименование);
    КонецЦикла;
    
    ТабДок = ПреобразоватьТЗ_ВТабличныйДокумент(ТЗ_ДляВыгрузки);    
    АдресХранилища = ПоместитьВоВременноеХранилище(ТабДок, УникальныйИдентификатор);
    
    Возврат АдресХранилища;
    
КонецФункции

Функция ПреобразоватьТЗ_ВТабличныйДокумент(ТЗ_ДляВыгрузки)  
    
    ТабДокумент = Новый ТабличныйДокумент;
    
    КолонкаИндекс = 0;
    Пока КолонкаИндекс < ТЗ_ДляВыгрузки.Колонки.Количество() Цикл
        Колонка = ТЗ_ДляВыгрузки.Колонки[КолонкаИндекс];
        ТабДокумент.Область(1, КолонкаИндекс + 1, 1, КолонкаИндекс + 1).Текст = Колонка.Имя;
        КолонкаИндекс = КолонкаИндекс + 1;
    КонецЦикла;
    
    СтрокаИндекс = 0;
    Пока СтрокаИндекс < ТЗ_ДляВыгрузки.Количество() Цикл
        Таблица_Строка = ТЗ_ДляВыгрузки[СтрокаИндекс];
        КолонкаИндекс = 0;
        Пока КолонкаИндекс < ТЗ_ДляВыгрузки.Колонки.Количество() Цикл
            Колонка = ТЗ_ДляВыгрузки.Колонки[КолонкаИндекс];
            ТабДокумент.Область(СтрокаИндекс + 2, КолонкаИндекс + 1, СтрокаИндекс + 2, КолонкаИндекс + 1).Текст = Формат(Таблица_Строка[Колонка.Имя], "ЧГ=0");
            КолонкаИндекс = КолонкаИндекс + 1;
        КонецЦикла;
        СтрокаИндекс = СтрокаИндекс + 1;
    КонецЦикла;
    
    Возврат ТабДокумент;
    
КонецФункции
//////////////////////
35 Fish
 
гуру
06.05.26
15:40
Пока я отходил, я так понял, что вопрос о "сложном шаблоне" сам собой рассосался и теперь речь тупо про сохранение табдока в эксель?
36 Garykom
 
гуру
06.05.26
15:41
(35) Угу
Причем все выполняется через одно место...
37 lirt82
 
06.05.26
15:42
(35) внимательно прочел (15) и реализовал пошагово по той схеме.
38 Garykom
 
гуру
06.05.26
15:53
Например в (15) я предполагал что запись в файл xlsx будет выполняться на сервере
Сначала во временный каталог, хотя еще лучше через потоки
Ну ибо это может занять много времени, поэтому разгрузить клиента
Затем готовый файл как ДД через временное хранилище перебрасывается

Но у него в (34) на клиент с сервера возвращается ТабДок и уже на клиенте записывается в файл xlsx
Поэтому зачем тут временное хранилище непонятно, серверная функция сразу может вернуть ТабДок же

Еще некий пипец с записью ТЗ в ТабДок, почему сразу в ТабДок не писать?
Зачему тут ТЗ?
Преобразований/обработок никаких нет, типа сортировки или отбора/фильтра
39 lirt82
 
06.05.26
15:55
(38) команда вызывает дополнительную форму выгрузки у документа
https://ibb.co.com/Q7Vt83Ck
40 Fish
 
гуру
06.05.26
16:17
(39) Это, наверное, прекрасно, но никоим образом не является ответом ни на один вопрос из (38)
41 Fish
 
гуру
06.05.26
16:20
(38) Кстати, У него в (34) ещё к тому же зачем-то выбирается существующий файл Эксель, а потом тупо перезатирается новым табдоком. :))
42 lirt82
 
06.05.26
16:27
(41) пользователь нажимает на кнопку, открывается форма, через параметры передается ссылка на документ, далее пользователь указывает файл Excel в который будет произведена выгрузка. Нажимает на кнопку "Выгрузить таб. часть" формируется ТЗ преобразовывается в таб документ и возвращается на клиент, на клиенте таб док записывается в выбранный файл эксель.
43 Web00001
 
06.05.26
16:31
(41)Он что тебе новый файл делать будет что ли, каждый раз? Никакого электричества не напасешься. Да и байты бесконечные что ли?
44 Garykom
 
гуру
06.05.26
16:30
Такое впечатление что нейрослоп
45 АгентБезопасной Нацио
 
06.05.26
16:43
(44) Не, "теорема о бесконечных обезъянах"
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший