Последние сообщения

#1
7.7 / Re: Сохранить mxl в Excel
Последний ответ от Ветер в поле - Сегодня в 11:22
Цитата: Харлампий Дымба от Вчера в 23:54Ну это, как я понимаю, чтобы избежать ошибки сохранения больших таблиц в Excel - патч от ромикса уже закрывает эту дырку.

Это разные форматы файлов. 1С сохраняет в формат 95 года, а Йоксель в формат 97 года. В раннем формате длина строк ячеек была ограничена 255 символами. Ну и ограничение количества строк в 16384
#2
7.7 / Re: Сохранить mxl в Excel
Последний ответ от Харлампий Дымба - Вчера в 23:54
Цитата: АЛьФ от Вчера в 13:04У меня вот такой код работает в глобальнике с использование Йоксель:
Ну это, как я понимаю, чтобы избежать ошибки сохранения больших таблиц в Excel - патч от ромикса уже закрывает эту дырку.
Исходной проблемы не решает - Йоксель не сохраняет в формате xlsx и ограничен 65536 строками.
Но в целом, изящно - буду теперь делать такой перехват, вместо вывода "Сохранить через Yoksel" в отдельный пункт меню, как у меня было раньше.
Правда без постобработки КонвертеромExcel у меня полученный файл в Excel 201Х не открывается- кракозябничает. Так что сначала записываю в mxl, а потом так (кусок обработки с сайта Йокселя, насколько я помню):
    Конвертер = СоздатьОбъект ("КонвертерExcel");
    Книга = Конвертер.Создать ();
    Начало = 1;
    Пока КоличествоСтрок > 0 Цикл
        Документ = СоздатьОбъект ("ТабличныйДокумент");
        Документ.Открыть (ИмяВременногоФайла);
        Если Начало = 0 Тогда
            Документ.УдалитьСтроки (1, 65536);//без ограничения
            Документ.Записать (ИмяВременногоФайла);
        Иначе
            Начало = 0;
        КонецЕсли;
        
        Книга.Листы.Добавить (ИмяЛиста + НомерЛиста, Документ);
        КоличествоСтрокВДокументе = Документ.ВысотаТаблицы ();
        ЗаписаноСтрок = Мин (65536, КоличествоСтрокВДокументе);
        КоличествоСтрок = КоличествоСтрок - Мин (КоличествоСтрок, ЗаписаноСтрок); // на всякий случай
        НомерЛиста = НомерЛиста + 1;
    КонецЦикла;
    
    Книга.ПараметрыКонвертера.ЧислаВыравненыПоПравомуКраю = 1;
    Книга.ПараметрыКонвертера.РаспознаватьЧисловыеЗначения = 1;
    Книга.Записать (ВыбИмяФайла);
Тут большая таблица бьётся на листы по 65536 строк - потом можно будет пересобрать уже exceleм
#3
7.7 / Re: Форам.ПолучитьАтрибут("Тут...
Последний ответ от Злоп - Вчера в 23:41
Ну, с вк и я могу.
Без вк - пришлось сделать и чтение и присвоение через Шаблон
#4
7.7 / Re: Сохранить mxl в Excel
Последний ответ от Злоп - Вчера в 23:38
Тут xls
A нужен xlsx
#5
7.7 / Re: Сохранить mxl в Excel
Последний ответ от АЛьФ - Вчера в 13:04
У меня вот такой код работает в глобальнике с использование Йоксель:

Процедура ПриЗаписиТаблицы(КонтТаб, ИмяФайла, ФорматФайла, СтандартнаяОбработка)
    Если ФорматФайла = 1 Тогда // xls
    //    Если КонтТаб.ВысотаТаблицы() > 100 Тогда
        СтандартнаяОбработка = 0;
        ТабличныйДокумент = СоздатьОбъект("ТабличныйДокумент");
        ТабличныйДокумент.ЗагрузитьИзТаблицы(КонтТаб);
        ТабличныйДокумент.Записать(ИмяФайла,"xls");
    //    КонецЕсли;
    КонецЕсли;
КонецПроцедуры
#6
7.7 / Re: Форам.ПолучитьАтрибут("Тут...
Последний ответ от Ветер в поле - Вчера в 07:47
У меня вот такие функции есть для установки/получения значений реквизитов. Всё это с использованием Формекс и 1С++:
//*****************************************************************************
Функция глУстановитьЗначениеРеквизитуФормы(Конт, Реквизит, Значение, ВыполнятьФормулу=0) Экспорт
	
	АтрибутФормы = СоздатьОбъект("АтрибутФормы"); 
	
	Попытка
		АтрибутФормы.УстановитьАтрибут(Конт.Форма, Реквизит);
		АтрибутФормы.Значение = Значение;
		
		Попытка
			Если ВыполнятьФормулу = 1 Тогда
				Если ПустоеЗначение(АтрибутФормы.Формула) = 0 Тогда
					Модуль = СоздатьОбъект("ВыполняемыйМодуль");
					Модуль.УстановитьМодуль(
						"Процедура ___ВыполнитьФормулуРеквизита___()
						|  " + АтрибутФормы.Формула + "
						|КонецПроцедуры");
					Модуль.НазначитьКонтекст(Конт);
					Модуль.КомпилироватьМодуль();
					Модуль.ВыполнитьМодуль();
					Модуль.___ВыполнитьФормулуРеквизита___();
				КонецЕсли;
			КонецЕсли;
		Исключение
			глВывестиМногострочноеСообщение("глУстановитьЗначениеРеквизитуФормы: Ошибка выполнения формулы реквизита " + Реквизит + "
				|Формула: " + АтрибутФормы.Формула + "
				|Ошибка: " + ОписаниеОшибки());
		КонецПопытки;
		
	Исключение
		Сообщить("глУстановитьЗначениеРеквизитуФормы: Не найден реквизит на форме: " + Реквизит);
		Возврат 0;
	КонецПопытки;
	
	Возврат 1;
	
КонецФункции //глУстановитьЗначениеАтрибутуФормы

//*****************************************************************************
Функция глПолучитьЗначениеРеквизитаФормы(Конт, Реквизит, СообщатьОбОшибке=1) Экспорт
	
	АтрибутФормы = СоздатьОбъект("АтрибутФормы"); 
	
	Попытка
		АтрибутФормы.УстановитьАтрибут(Конт.Форма, Реквизит);
		Возврат АтрибутФормы.Значение;
	Исключение
		Если СообщатьОбОшибке = 1 Тогда
			Сообщить("глПолучитьЗначениеРеквизитаФормы: Не найден реквизит на форме: " + Реквизит);
		КонецЕсли;
		
		Возврат ПолучитьПустоеЗначение();
	КонецПопытки;
	
КонецФункции //глПолучитьЗначениеРеквизитаФормы
#7
7.7 / Re: Форам.ПолучитьАтрибут("Тут...
Последний ответ от Харлампий Дымба - 14 июня 2026, 23:23
Получить:
https://my1c-archive.narod.ru/knowhow/getvalat.html
Установить:
ВремяОконЗадачи = 5; ;D
Но если имя реквизита - переменная, то через Шаблон, как ты и написал выше.

#8
7.7 / Re: Форам.ПолучитьАтрибут("Тут...
Последний ответ от Злоп - 14 июня 2026, 15:36
Цитата: Злоп от 14 июня 2026, 14:29И как установить в этом случае значение в поле ввода по его имени..?

тут конечно можно тоже через Шаблон() с использованием ПрисвоитьЧтоЧему()
нокак-то иначе никак без таких извращений?
#9
7.7 / Re: Форам.ПолучитьАтрибут("Тут...
Последний ответ от Злоп - 14 июня 2026, 15:07
Речь про без Formex
#10
7.7 / Re: Форам.ПолучитьАтрибут("Тут...
Последний ответ от Злоп - 14 июня 2026, 14:29
И как установить в этом случае значение в поле ввода по его имени..?