Загрузка табличного документа в таблицу значений. Пять строк кода, которые изменили мир
Разработка - Универсальные функции
Вот, чтобы никогда не забыть этот код, пишу эту статью.
Вам нужно загрузить что-то (какую-то таблицу с данными) в базу из любого источника и обработать.
Очевидно, что самое простое - это дать пользователю (вы подумали, что выбрать файл, но нет) вставить данные копипастом. Вас больше не волнует, откуда будут вставляться данные: Excel, OpenOffice, GoogleTabs, из другого отчета 1С, а может все колонки будут вставляться из разных мест. Вам совершенно не интересно, в какой последовательности будут колонки, от слова "совсем". Все, что требуется от пользователя - это не менять состав колонок, которые вам потом нужно обработать.
Вы добавляете на форму ТабДок с типом Табличный документ. Не забудьте поставить ему флаг Редактирование.
А далее идут эти волшебные 5 строк кода
// загружаем табдок в таблицу значений
ОбластиТаб = ТабДок.Область(1, 1, ТабДок.ВысотаТаблицы, ТабДок.ШиринаТаблицы);
//
Построитель = Новый ПостроительЗапроса;
Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ОбластиТаб);
Построитель.Выполнить();
ТабДанные = Построитель.Результат.Выгрузить();
Вот, собственно, и все.
Уже на следующий день после публикации первоначальный код сократился до 3 строк.
Всем большое СПАСИБО!!!
Построитель = Новый ПостроительЗапроса;
Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТабДок.Область());
ТабДанные = Построитель.Результат.Выгрузить();
Кому понравилось, ставим плюс.
Используется на платформе 8.3.23.2040.
Если понравилось, то ниже еще несколько моих публикаций:
1. Заказы поставщикам - отчет
2. Отчет с прогнозом на конец месяца
3. Срок выполнения заказа поставщику
4. Выполнение в фоне дополнительной обработки
5. Форма списка Заказы поставщикам с выводом состава
6. Товары на складах по срокам хранения
7. Структура подчиненности деревом
8. Загрузка из Excel (любой таблицы) в ТЧ документа
10. Анализ номенклатуры для поддержания запаса на складе
11. Ведомость расчетов с поставщиками расширенная
12. Каждому менеджеру нужен свой Excel
13. N первых плюс все остальные. Отчет, от которого невозможно оторваться
ТОП-6 инструментов для разработчика 1С
Подборка лучших инструментов для разработчика 1С включает Toolkit, DCT, OneDebugger, PrintWizard, DataFormWizard и Infostart MCP. Любой инструмент со скидкой 20% при покупке от двух решений.
Вступайте в нашу телеграмм-группу Инфостарт
загрузка табличный документ таблица значений
Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
См. также
Универсальные функции 1С 8.3 1С:Документооборот Россия Платные (руб)
ДО+ — расширение конфигурации, в котором собран постоянно пополняемый набор из 33 востребованных доработок для 1С:Документооборот КОРП 3.0: согласование задач прямо из мессенджеров MAX и Telegram, отзыв согласования и исполнения, гибкие повторные круги, эскалация с точностью до минут, контроль исполнительской дисциплины, выгрузка вложений в ZIP и склейка PDF, реестр документов в Excel, проверка дублей контрагентов и регистрационных номеров. Каждая возможность активируется отдельным флажком в режиме предприятия — включается только то, что нужно конкретной организации. Список функций расширяется с каждым релизом — текущая версия 2.1.0. Режим AddOn: типовая конфигурация не модифицируется, обновления ДО ставятся штатно, дополнительные лицензии и внешние компоненты не требуются. Внедрение силами администратора — около часа.
30000 руб.
09.07.2026 1457 1 0
Загрузка и выгрузка в Excel Универсальные функции Разработчик 1С:Предприятие 8 Россия Бесплатно (free)
Описанный ниже подход позволяет в три шага заполнять формулы в Excel файлы, вне зависимости от ОС сервера (MS Windows Server или Linux). Подход подразумевает отказ от работы с COM-объектом в пользу работы через "объектную модель документа" (DOM).
30.10.2025 8811 Abysswalker 11
Универсальные функции Работа с интерфейсом Разработчик 1С:Предприятие 8 Бесплатно (free)
Порой необходимо временно отключить расширение 1С, не удаляя его, чтобы не потерять данные. Но в этом случае при каждом запуске всем будет лезть уведомление о неактивном расширении, хотя очевидно, это техническая информация, которой не стоит лишний раз пугать пользователей.
14.05.2025 14589 DeerCven 16
Инструментарий разработчика Универсальные функции Запросы Разработчик 1С:Предприятие 8 1C:Бухгалтерия 1С:Бухгалтерия 3.0 1С:Зарплата и Управление Персоналом 3.x Бесплатно (free)
Внешняя обработка для создания запроса на основании табличных данных.
22.07.2024 11993 278 ixijixi 10
Монитор заказов Пользователь 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Управленческий учет Абонемент ($m)
Простенький отчет, который считает, сколько дней прошло от даты заказа поставщику до даты Приобретения товаров и услуг в рабочих и календарных днях.
1 стартмани
12.04.2024 4089 20 dimanich70 5
Анализ продаж Пользователь 1С:Предприятие 8 1C:Бухгалтерия Управленческий учет Абонемент ($m)
Очень часто, когда мы смотрим какие-то показатели текущего месяца, хочется понимать, на что мы можем рассчитывать к концу месяца, если все пойдет дальше такими же темпами.
1 стартмани
10.04.2024 3343 1 dimanich70 0
Монитор заказов Логистика, склад и ТМЦ Пользователь 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Управленческий учет Абонемент ($m)
Сюрприз от 1С - отсутствие отчета по заказам поставщикам.
1 стартмани
22.03.2024 4406 44 dimanich70 5
Универсальные функции Разработчик 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)
Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.
1 стартмани
18.03.2024 9342 7 John_d 13
Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТабДок); высокий уровень почти всегда имеет специфику, которая почти никому не подходит, отсюда такой результат и имеем
Работа с интерфейсом Управляемые формы Бесплатно (free)
Как вывести результат запроса в таблицу на управляемую форму, ведь здесь нет метода "СоздатьКолонки()"? Как добавить поле ввода в табличную часть документа, если нет желания менять документ? Разбираемся...
Просмотров: 128 840
Стараюсь обращать внимание на то, что полезно для меня. Не понравилось, - прохожу мимо.
И пусть каждый сам решает, что для него нужное и красивое.
Не ругайте их, ибо они являются дополнительной документацией которой порой так не хватает в синтаксис-помощнике.
Простые problem-solving куски кода, которые можно скопипастить как из stackoverflow
Если мы его получили, то можно непосредственно с ним и работать, продолжать работу с ним, например так, как описано в моих публикациях
То есть, как бы не нужно его переводить в запрос, а дальше в ТаблицуЗначений.
В моей практике, мы получаем ТабДок либо для получения заранее известных настроек, просто используем их.
Либо получаем печатную форму - и заполняем ее, выводим на экран.
Либо используем как промежуточное звено - например здесь
Формат Табличного Документа - очень распространенный формат в задачах.
Получать из ТабДока - таблицу значений - даже не могу представить , в каких задачах такое нужно.
Но раз в платформе такое имеется, то наверное в какой-то конфигурации подобный код используется.
Прошу сообщество помочь - сделать глобальный поиск - каждый в своей типовой и нетиповой конфе.
К слову сказать, ПостроительЗапроса использует в качестве Источника либо ТаблицуЗначений , либо Запрос - поиск сделал по УТ 10.3, которая у меня сейчас открыта была.
Я с ПостроителемЗапроса не работал.
Возможно на управляемых формах этот построитель уже стал атавизмом. Поскольку есть СКД.
Зато работал и часто использовал в УТ 10.3 (которая на обычных формах) - ПостроительОтчета:
ПеребираемыеДанные = Новый ПостроительОтчета;
ПеребираемыеДанные.ИсточникДанных = Новый ОписаниеИсточникаДанных(ДокументСписок);
Выборка = ПеребираемыеДанные.Результат.Выбрать();
ПечатьРеестра(Выборка);
ДокументСписок - здесь динамический список документов реализаций.
С помощью ПостроителяОтчета очень удобно получить видимую часть динамического списка (который заранее можно обложить нужными отборами) и вывести на печать любую форму: подобное реализовано вот тут
Судя потому, что в справке не указан в качестве ИстоникаДанных - динамический список, то возможно это считается недокументированной возможностью.
Проверил на платформе 1С:Предприятие 8.3 (8.3.23.1865) - реестр реализаций работает, а в справке информации нет.
Прошу сообщество проверить - можно ли использовать динамический список документов в ПостроителеЗапроса - для получения таблицы значений. Если можно, тогда ПостроительЗапроса также содержит недокументированную возможность.
А так, в целом, возвращаясь к теме публикации - получаем из ТабДока область, далее ее используем в запросе, и получаем ТЗ - вопрос применимости остается открытым для меня: м.б. ДеревоЗначений - сохранить в макет - сохранить макет в ТабДок как внешний - передать в другую базу - в другой базе - легко конвертировать макет в ДеревоЗначений.
ТЗ_1 = Новый ТаблицаЗначений;
ТЗ_1.Колонки.Добавить("Сумма", Новый ОписаниеТипов("Число"));
ТЗ_2 = Новый ТаблицаЗначений;
ТЗ_2.Колонки.Добавить("Сумма"); //по умолчанию Тип = Строка
ТЗ_2.Добавить().Сумма = "123"; //зададим начальные данные
ТЗ_1.Добавить(); //кол-во строк в таблицах значений д.б. одинаковыми
Мас = ТЗ_2.ВыгрузитьКолонку("Сумма");
ТЗ_1.ЗагрузитьКолонку(Мас, "Сумма"); //автоматическая конвертация строки в число
Сообщить("Готово, Shard!");
Показать
ТабДок.Прочитать(ИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Значение);К слову сказать вашу конструкцию можно использовать при сохранении в эксель. А вот будут ли сохранены типы значений при сохранении в формат mxl - всегда думал , что будут сохранены строковые значения. Я ошибаюсь?
Все это легко проверить через отладчик. Просто не сталкивался с подобным.
В общем, я не шучу, просто у нас разный опыт.
Но в целом, чаще прилетают mxl разнородные - и заранее надо знать содержат они числовые значения, или проверять каждую ячейку.
А если мы из эксель загружаем значения? Будут ли загружаться в табличный документ со свойством СодержитЗначения = Истина, в числовом формате? Вот для такой конструкции:
ТабДок.Прочитать(ИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Значение);2) Динамич. список реализаций сохранил в mxl - сумма документа сохраняется как строка , при этом свойство ячейки СодержитЗначения = Ложь.
С этим тоже ясно - проверено, нет вопросов.
Область.СодержитЗначение = Истина;
Область.ТипЗначения = Новый ОписаниеТипов("Число");
Вот этот код не срабатывает!
вот тестовый пример:
Процедура КнопкаВыполнитьНажатие(Кнопка)
Макет = ПолучитьМакет("Макет1");
Область = Макет.Область(1, 1, 2, 1); //в ячейке 1
Построитель = Новый ПостроительЗапроса;
Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(Область);
ТЗ = Построитель.Результат.Выгрузить(); //результат = 1
Область2 = Макет.Область(2, 1, 2, 1);
Область2.СодержитЗначение = Истина;
Область2.ТипЗначения = Новый ОписаниеТипов("Число");
Область2.Значение = 2;
Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(Область);
ТЗ = Построитель.Результат.Выгрузить(); //результат 2, но тип Строка
КонецПроцедуры
ПоказатьЗначение в ячейке меняется, но в ТЗ попадает строковое значение "2", а не число.
В чем проблема?
Пожалуй прикреплю пример чтения макета для УФ
Судя по справке, первый ваш вариант более правильный - Процедура Выполнить() лишь выставляет признак того, что при получении Результата надо обновить данные из ИсточникаДанных.
Я сужу только по справке - не проверял и не тестил. Вопрос открыт.
в справке, к примеру написано скудно - прикладываю скрины.
очень много инфы на ИТС
к примеру, что Источником может быть объект:
ТаблицаЗначений,
РезультатЗапроса,
ОбластьЯчеекТабличногоДокумента,
Табличная часть,
РегистрНакопленияНаборЗаписей,
РегистрСведенийНаборЗаписей,
РегистрБухгалтерииНаборЗаписей,
РегистрРасчетаНаборЗаписей.
Для того чтобы построитель отчета выводил отчет для произвольного источника данных, достаточно установить описание источника данных в свойство построителя ИсточникДанных.
Вообще на ИТС написано в чем разница Построителей: запроса и отчета., какие нюансы есть пр использовании оных.
И что пример использования построителя отчета с произвольным источником данных можно найти в универсальной обработке "Консоль анализа журнала регистрации".
При изменении источника данных результат изменится, потому что преобразование из исходных данных в данные запроса происходит при создании описания источника данных, что на мой взгляд понятно из его названия.
Здравый смысл наше все)
Процедура КнопкаВыполнитьНажатие(Кнопка)
Построитель = Новый ПостроительЗапроса;
Макет = ПолучитьМакет("Макет1");
Область = Макет.Область(1, 1, 2, 2); //в ячейке 1
Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(Область);
//Построитель.Выполнить();
ТЗ = Построитель.Результат.Выгрузить(); //результат = 1
Макет = ПолучитьМакет("Макет2");
Область = Макет.Область(1, 1, 2, 2); //в ячейке 2
Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(Область);
//Построитель.Выполнить();
ТЗ = Построитель.Результат.Выгрузить(); //результат = 2
КонецПроцедуры
ПоказатьУ меня где-то был некий отчет (обработка), где я строю в макете скд запросом - некий готовый «набор данных»
А затем, использую этот набор данных в своих целях - в качестве таблицы или дерева
Где-то примерчик на канале был….
Но я тогда могу свою публикацию
раздербанить штук на 20. Ибо эти "волшебные" строки где-то там используются.
Ещё больше удивляет реакция сообщества (цифровые показатели статьи)... Как говорится, победителей не судят)))
для корректного отображения имен колонок в итоговой таблице значений рекомендую добавить строку в табличную часть, пример для загрузки из файла Excel:
ТабДок= Новый ТабличныйДокумент;
ТабДок.Прочитать(<Файл>);
ТабДок.ВставитьОбласть(ТабДок.Область("R1"),
ТабДок.Область("R2"),ТипСмещенияТабличногоДокумента.ПоГоризонтали);
ТабДок.Область(1, 1).Текст = "ИмяКолонки1";
ТабДок.Область(1, 2).Текст = "ИмяКолонки2";
...
Построитель = Новый ПостроительЗапроса;
Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТабДок.Область());
ТабДанные = Построитель.Результат.Выгрузить();
.... ПоказатьА вообще согласен с 22 , зачем выгружать в ТЗ , если уже есть ровно такая же структура.
Например, попробуйте указанным подходом прочитать вот такую табличку:
колонка 1 2_колонка 3_колонка
дата строка число
01.01.2024 01_01 1
так что в любом случае без предварительной нормализации данных к какому-то стандарту или без постобработки зачастую не обойтись.
У Вас появился шанс написать статью об этом))) И показать всем класс, как читать Excel. Тема то не раскрыта)))))
У меня есть статья на сайте, не сочтите за рекламу, там как раз разные варианты рассмотрены, в т.ч. и через построитель
А так-то приходилось такой изврат загружать, врагу не пожелаешь.
например, pdf-файл, распознанный онлайн-сервисом в виде excel, в котором колонки/строки могут быть объединены в очень интересные сочетания, и один лист надо динамически разобрать на несколько ТЗ.
Ну или файл excel, где все таблицы на одном листе, и надо динамически определять их по заголовкам
Или еще вот вспомнил - плоская таблица excel - каталог номенклатуры - а в ней группы и подгруппы выделены цветом, и надо по цветам было разобрать структуру иерархии :)
Не все пользователи и заказчики готовы тратить свое время на нормализацию данных :)
Нет, падает методика... с объединенными не справилась.
выдало ошибку , потом выяснилось что нужно указать макет
в итоге полная форма выглядит так
ОбъектОбработки = РеквизитФормыВЗначение("Объект");
ТабДок = ОбъектОбработки.ПолучитьМакет("Макет");
Построитель = Новый ПостроительЗапроса;
Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТабДок.Область());
ТабДанные = Построитель.Результат.Выгрузить();
Когда построителем выводим таблицу значений на печать
Процедура ВывестиТаблицуЗначенийВТабличныйДокумент(Таблица, ТабДокумент, Заголовок = "")
ИсточникДанных = Новый ОписаниеИсточникаДанных(Таблица);
Для каждого Колонка Из ИсточникДанных.Колонки Цикл
Колонка.Измерение = Истина;
КонецЦикла;
ПостроительОтчета = Новый ПостроительОтчета;
ПостроительОтчета.ИсточникДанных = ИсточникДанных;
ПостроительОтчета.ВыбранныеПоля.Очистить();
ПостроительОтчета.ИзмеренияСтроки.Очистить();
ПостроительОтчета.ИзмеренияКолонки.Очистить();
Для Каждого ДоступноеПоле Из ПостроительОтчета.ДоступныеПоля Цикл
//Если ДоступноеПоле.Имя="СтатьяБюджетаПроекта" Тогда
ВыбранноеПоле = ПостроительОтчета.ВыбранныеПоля.Добавить(ДоступноеПоле.Имя);
//ИзмерениеСтроки = ПостроительОтчета.ИзмеренияСтроки.Добавить(ДоступноеПоле.Имя);
// ИзмерениеСтроки.ТипИзмерения = ТипИзмеренияПостроителяОтчета.Иерархия; // !!!!!!!!!!!!!!!
//ИначеЕсли ДоступноеПоле.Имя="НомерСценария" Тогда
// ВыбранноеПоле = ПостроительОтчета.ВыбранныеПоля.Добавить(ДоступноеПоле.Имя);
// ПостроительОтчета.ИзмеренияКолонки.Добавить(ДоступноеПоле.Имя);
//ИначеЕсли ДоступноеПоле.Имя="СуммаУпр" Тогда
// ВыбранноеПоле = ПостроительОтчета.ВыбранныеПоля.Добавить(ДоступноеПоле.Имя);
//КонецЕсли;
КонецЦикла;
ПостроительОтчета.ВыводитьОбщиеИтоги = Ложь;
Если Заголовок <> "" Тогда
ПостроительОтчета.ТекстЗаголовка = Заголовок;
КонецЕсли;
ПостроительОтчета.Выполнить();
ПостроительОтчета.Вывести(ТабДокумент);
Обл = ТабДокумент.Область();
Обл.РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Обрезать;
Обл = ТабДокумент.Область(2,2);
Обл.РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Авто;
ТабДокумент.ТолькоПросмотр = Истина;
КонецПроцедуры
ПоказатьРейтинг: 993
Вы можете заказать платную консультацию или разработку у автора. Будет создан приватный заказ на «Бирже заказов» для автора.
№ 2110771
Создание 21.05.24 06:00
Обновление 21.05.24 06:00
Просмотры 68958
Загрузки 0
Рейтинг
181
Комментарии 87
Код открыт Да
Рубрики Универсальные функции
Кому Разработчик
Тип файла Нет файла
Платформа 1С:Предприятие 8
Конфигурация 1C:Бухгалтерия
Операционная система Не имеет значения
Страна Не имеет значения
Отрасль Не имеет значения
Налоги Не имеет значения
Вид учета Не имеет значения
Доступ к файлу Бесплатно (free)