• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

1c 8 и Exel

  • Автор темы tanat
  • Дата начала
T

tanat

Ситуация следующая: Через файлик формата .xls выполняется обмен данными между двумя базами 1С. Вся соль в том, что при считывании файлика в базе -приемнике данные "преобразовываются": строковые типы становятся числовыми, а значит появляются разделители. Т.е. пишем "12015011" а загружаем "12 015 011", "000012" получаем "12". А в некоторых ячейках значения остаются без изменений: "123456789" "123456789".

Файлик формируется следующим образом: обработкой заполняется таблица, в которой все ячейки строковые. По данным этой таблицы заполняется макет через
//цикл...
ОбластьТаблицы.Параметры.Заполнить(СтрокаТАблицы);
ТабличныйДокумент.Вывести (ОбластьТаблицы);
КонецЦикла;
//сохраняем заполненный макет
ТабличныйДокумент.Записать(КудаИИмя,"xls97");

Внимание, вопрос: Как сделать так, чтобы в файлик писались данные с типом "текстовый" и чтобы тип данных экселем не менялся?


Считываю данные из экселя: Стр = СокрЛП(СокрЛП(ДокExcel.Sheets(1).Cells(СтрокаФ, Колонка).Value));

Вариант с " ' " в начале записываемого значения ячейки не особенно устраивает, потому что придется каждый параметр заполнять отдельно, а их порядка 50ти.
 
T

tanat

В том то и дело, что в экселе местами все выглядит нормально, а местами - нет. При открытии файла эксель пытается распознать тип данных и расставляет их на свое усмотрение.
Действовать через "Фармат()" - не очень корректно будет, т.к. в этом случае всеравно "отсекаются" нули впереди числа. мне именно надо получать те данные, которые изначально передаю в эксель: например "0000012"
 
U

unknown181538

При выгрузке даты есть проблема с преобразованием. Лечится сменой выравнивания - то ли по правому, то ли по левому.
Может это?
 
T

tanat

Неа. Я, вобщем-то, нашел "качегарный" способ: вставил все таки в каждую заполняемую ячейку апостроф, Йоксель "кушает" все ячейки теперь как текст. Отдает - тоже текст, но с апострофом. А на приеме я просто отсекаю первый символ у строки.

Цель данной темы именно понять ,как "сказать" экселю, что надо сохранить документ с ячейками "текстового" характера. Если с датами, числами и истина-ложь можно как-то выйти из положения, то как быть с "незначащими" нулями ( по мнению Йокселя)?
 
U

unknown181538

А в Excele формат ячеек строковый получается?
 
T

tanat

Нет, по усмотрению самого Екселя ставится. Где-то "Текстовый" где-то "Общий", гдето "Булево", гдето "Дополнительный".
Хотя в макет я заполняю исключительно текстовые параметры.

Или может я вопрос не понял? До введения апострофа - произвольно на усмотрение Йокселя, после - строковый везде.
 
U

unknown181538

Сейчас как раз работаю с Excelем.
Использую найденную в сети процедуру ЗаписатьТаблицуЗначенийНаЛист().
Там все ячейки записываются с апострофом. Если я буду записывать без него, удастся верно установить формат дат и сумм в формате дат и сумм?
 
T

tanat

Смотря как записывать. Если в конкретную ячейку с уже заданным типом - то скорее да, чем нет. И если в конкретную ячейку записываете данные определенного типа ( например "дата"), то тоже, скорее да, чем нет. А вот если как я - заполняете табличный документ по макету, макет - сохраняете в формате xls и потом его открываете - то не даю никаких гарантий).
 
K

kaa

перед загрузкой у всего листа установить формат ячеек текст
Не прокатит??
 
T

tanat

Впринципе можно, опять же где гарантия, что значения преобразуются везде верно? Т.е. "0000012" при преобразовании не получится "12", но строкой?
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!