Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
21 сен 2021, 17:16

1С 8.3. При записи табличного документа в файл MXL не записываются не текстовые поля

Автор ToryFree, 04 сен 2020, 00:28

0 Пользователей и 1 гость просматривают эту тему.

ToryFree

Надо перенести справочник Номенклатура в тестовую базу.
Запросом сформирована таблица значений, а из нее табличный документ ТабДок, причем с учетом типа значений.
При записи в файл записываются только текстовые поля. Что я не учла?

&НаСервере
Процедура ВыгрузитьСпрНоменклатураВ_ФайлНаСервере()

ТекЗапрос = Новый Запрос;
ТекЗапрос.Текст = "ВЫБРАТЬ
|Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
|Номенклатура.ПометкаУдаления КАК ПометкаУдаления,
|Номенклатура.Наименование КАК Наименование,
|Номенклатура.НаименованиеПолное КАК НаименованиеПолное,
|Номенклатура.Родитель КАК Родитель,
|Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
|Номенклатура.ТоварнаяГруппа КАК ТоварнаяГруппа,
|Номенклатура.ЦеноваяГруппа КАК ЦеноваяГруппа,
|Номенклатура.ВидНоменклатуры КАК ВидНоменклатуры
|ИЗ
|Справочник.Номенклатура КАК Номенклатура
|ГДЕ
|НЕ Номенклатура.ПометкаУдаления";

ТабЗначений = ТекЗапрос.Выполнить().Выгрузить();

ИмяФайла = "C:\1C\_WorkFiles\Goods.mxl";
ЕстьЗаголовок = Истина;
ТабДок = ПреобразоватьТЗвТД(ТабЗначений, Неопределено, 1, 1, ЕстьЗаголовок);
ТабДок.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.MXL);

КонецПроцедуры

&НаСервере
Функция ПреобразоватьТЗвТД(ТабЗначений, ТабДок = Неопределено, Знач НачалоСтрока = Неопределено, Знач НачалоСтолбец = Неопределено, ВыводитьЗаголовки = Ложь) Экспорт

Если ТабДок = Неопределено Тогда
ТабДок = Новый ТабличныйДокумент;
КонецЕсли;

// Определение габаритов таблицы
НачалоСтрока = ?(НачалоСтрока = Неопределено, 1, НачалоСтрока);
НачалоСтолбец = ?(НачалоСтолбец = Неопределено, 1, НачалоСтолбец);

// Преобразование
ИндексСтроки = НачалоСтрока;
Если ВыводитьЗаголовки Тогда
ИндексКолонки = НачалоСтолбец;
Для Каждого Колонка Из ТабЗначений.Колонки Цикл
ТабДок.Область(ИндексСтроки, ИндексКолонки).Текст = ?(ПустаяСтрока(Колонка.Заголовок), Колонка.Имя, Колонка.Заголовок);
ИндексКолонки = ИндексКолонки + 1;
КонецЦикла;
ИндексСтроки = ИндексСтроки + 1;
КонецЕсли;

Для Каждого Элемент Из ТабЗначений Цикл
ИндексКолонки = НачалоСтолбец;
Для Каждого Колонка Из ТабЗначений.Колонки Цикл
ТабДок.Область(ИндексСтроки, ИндексКолонки).СодержитЗначение = Истина;
ТабДок.Область(ИндексСтроки, ИндексКолонки).ТипЗначения = Новый ОписаниеТипов(Колонка.ТипЗначения);
ТабДок.Область(ИндексСтроки, ИндексКолонки).Значение = Элемент[Колонка.Имя];
ИндексКолонки = ИндексКолонки + 1;
КонецЦикла;
ИндексСтроки = ИндексСтроки + 1;
КонецЦикла;

Возврат ТабДок;

КонецФункции

АлександрВладимирович

Если для ссылочных полей надо выводить их текстовое представление, то проще сделать так:
РезультатЗапроса = ТекЗапрос.Выполнить();

ИмяФайла = "C:\1C\_WorkFiles\Goods.mxl";

ТабДок = Новый ТабличныйДокумент;
Построитель = Новый ПостроительОтчета;
Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(РезультатЗапроса);       
Построитель.Вывести(ТабДок);

ТабДок.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.MXL);

LexaK

ЦитироватьЧто я не учла?
Данные переносятся
или с помошью КД (конвертации данных, создаются правила обмена) это если конфы баз отличаются
или с помощью обработки: ВыгрузкаЗагрузкаДанныхXML , без всяких правил, при условии что конфы баз идентичные
или по СОМ соединению (но это программу надо писать)
или еще куча локальных заморочек, в виде нестандарта (то что вы сечас пытаетесь сляпать)
ответ Понравился? (в смысле пригодился?)

Геннадий ОбьГЭС

Цитата: ToryFree от 04 сен 2020, 00:28
Надо перенести справочник Номенклатура в тестовую базу
Так перенести или покодировать?
Воспользуйтесь встроенной обработкой "Выгрузка загрузка EnterpriseData" , имеющейся в любой типовой конфигурации
Если конфа нетиповая , то найдите поиском в интернете

Или обработкой " Выгрузка Загрузка Данных XML в формате XML", то же легко ищется

Похожие темы (5)

Рейтинг@Mail.ru Rambler's Top100

Поиск