Korolyoff Konstantin

18
Рейтинг

kos-1cpp



  •   Регистрация: 18.07.2018 (5 лет назад)

  •   Был(а) на сайте: сегодня в 12:05

Подписчики 1

Рейтинг 18

Получение структуры Параметров табличного документа (ПараметрыМакетаТабличногоДокумента)

Статья Программист Стажер Платформа 1С v8.3 Бесплатно (free) Нет файла Механизмы платформы 1С

Все знают, как заполнять параметры ТабДок (ПараметрыМакетаТабличногоДокумента) из структуры:  ЗаполнитьЗначенияСвойств(ТабДок.Параметры,Структура).  ТабДок.Параметры.Заполнить(Структура). А в обратную сторону - пробовали? Не работает! Платформа не поддерживает!  ЗаполнитьЗначенияСвойств(Структура,ТабДок.Параметры) - иниц.не предусмотрена  Структура = ТабДок.Параметры.Выгрузить() - нет такого метода Решение есть!

18.12.2023    3023    kos-1cpp    10       

18

Комментарии

DevКак избавиться от типа NULL в колонках результата запроса?#15 01.01.24 12:32
(1) По сути самого первого вопроса - есть ответ на ИТС (Сорри что поздно, но сам столкнулся)))):

https://its.1c.ru/db/metod8dev/content/2611/hdoc/
При использовании запросов следует учитывать, что в результате запроса в колонках,
кроме типов значений исходных полей, могут присутствовать значения типа NULL.
Поэтому тип колонки таблицы значений, полученной из результата запроса,
не будет полностью соответствовать типу исходного поля таблицы, а будет дополнительно содержать тип NULL.

Иными словами Запрос.Выполнить().Выгрузить() - всегда добавляет к описанию типа возвращаемых колонок тип("NULL")
Это заложено платформой. И никак по-другому.

Сделал для себя процедуру, которая потом из таблицы "выбрасывает" этот NULL, может кому пригодится:

Код
Процедура ТаблицаЗначенийБезNull(ТаблицаЗначений, фИзменилиТаблицу = ЛОЖЬ) Экспорт 

   фИзменилиТаблицу = ЛОЖЬ; 
   
   чКрайний = ТаблицаЗначений.Колонки.Количество()-1;
   Для чИндекс = 0 По чКрайний Цикл
      
      ТипКолонки = ТаблицаЗначений.Колонки[чИндекс].ТипЗначения;
      
      Если ТипКолонки.СодержитТип(Тип("Null")) Тогда

         ИмяКолонки = ТаблицаЗначений.Колонки[чИндекс].Имя;
         ЗагКолонки = ТаблицаЗначений.Колонки[чИндекс].Заголовок;
         ШирКолонки = ТаблицаЗначений.Колонки[чИндекс].Ширина;
         ЗнчКолонки = ТаблицаЗначений.ВыгрузитьКолонку(чИндекс);
         ТипКолонки = Новый ОписаниеТипов(ТипКолонки,,"NULL"
            ,ТипКолонки.КвалификаторыЧисла
            ,ТипКолонки.КвалификаторыСтроки
            ,ТипКолонки.КвалификаторыДаты
            ,ТипКолонки.КвалификаторыДвоичныхДанных
         );
         
         ТаблицаЗначений.Колонки.Удалить(чИндекс);
         ТаблицаЗначений.Колонки.Вставить(чИндекс,ИмяКолонки,ТипКолонки,ЗагКолонки,ШирКолонки);
         ТаблицаЗначений.ЗагрузитьКолонку(ЗнчКолонки,чИндекс);
         
         фИзменилиТаблицу = ИСТИНА;
         
      КонецЕсли;

   КонецЦикла;


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

ПубликацииПолучение структуры Параметров табличного документа (ПараметрыМакетаТабличногоДокумента)#10 20.12.23 15:33
(2) да, действительно, не обратил внимание. Спасибо. Посмотрю
ПубликацииПолучение структуры Параметров табличного документа (ПараметрыМакетаТабличногоДокумента)#9 20.12.23 15:31
(3) было 1 раз, в 2003, когда в платформу 7.7 наконец-то добавили исправление, про которое я им писал с 1998 года )))
А так больше не приходилось.....
ПубликацииПолучение структуры Параметров табличного документа (ПараметрыМакетаТабличногоДокумента)#8 20.12.23 15:28
(6) в самом начале я написал постановку задачи - имена параметров заранее не известны (это важно).
Понятно, что если - знаешь имена - то и получить значение можно.......
ПубликацииПолучение структуры Параметров табличного документа (ПараметрыМакетаТабличногоДокумента)#7 20.12.23 15:27
(4) это просто демонстрация - как хотелось бы, чтоб работало в платформе. Этот кусок кода можно удалить. Просто демонстрация - почему не работает в платформе....
ПубликацииПолучение структуры Параметров табличного документа (ПараметрыМакетаТабличногоДокумента)#0 17.12.23 11:13
Все знают, как заполнять параметры ТабДок (ПараметрыМакетаТабличногоДокумента) из структуры:
<br><font size=small color=blue> ЗаполнитьЗначенияСвойств(ТабДок.Параметры,Структура).</font>
<br><font size=small color=blue> ТабДок.Параметры.Заполнить(Структура).</font>
<br>
<br>А в обратную сторону - пробовали? Не работает! Платформа не поддерживает!
<br><font size=small color=blue> ЗаполнитьЗначенияСвойств(Структура,ТабДок.Параметры)</font> - иниц.не предусмотрена
<br><font size=small color=blue> Структура = ТабДок.Параметры.Выгрузить()</font> - нет такого метода
<br>

<br>Решение есть!
DevЗагрузка из EXCEL в 1С на платформе 8.3.6/8.3.7/8.3.8/8.3.9/8.3.10 (с картинками)#73 19.12.19 14:45
при чтении первого листа (без учета версий 1с8), предлагаю простую мини-функцию 8))

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