Таблица значений в модуле объекта внешней обработки

  1. 4 г. назад

    Господа! А как так может быть? В модуле объекта объявляю экспортную переменную. В некоей процедуре присваиваю ей значение (таблица значений). Потом хочу из другой процедуры обратиться к этой таблице. А таблицы - нет. Неопределено. Это как так получается?..

    Ответы: (2)
  2. Покажи код.

  3. 01.06.2020 15:50:22 отредактировано Фёдор14

    Дуб В некоей процедуре присваиваю ей значение (таблица значений)

    А где находится эта некая процедура?

  4. Тезисно.

    Перем РабочаяТаблица Экспорт;
    Функция SQLiteInit(ФайлБД) Экспорт
       РабочаяТаблица = Новый ТаблицаЗначений;
    КонецФункции
    
    Функция SQLiteQuery(Запрос) Экспорт
       ТЗ = РабочаяТаблица.Скопировать();
       // заполняется ТЗ
       Для Каждого Стр Из ТЗ Цикл
          НС = РабочаяТаблица.Добавить();
       КонецЦикла;
    КонецФункции
    
    Функция СформироватьОтчет() Экспорт
       ТД = Новый ТабличныйДокумент;
       Мак = ПолучитьМакет("Макет");
       ОбластьШапка = Мак.ПолучитьОбласть("Шапка|Колонка");
       ОбластьСтрока = Мак.ПолучитьОбласть("Строка|Колонка");
       ТД.Вывести(ОбластьШапка);
       ТД.Вывести(ОбластьСтрока);
    	
       Возврат ТД;
    КонецФункции
    

    Вся эта гадость вызывается из модуля формы:

    Если тОбъект.SQLiteInit(Объект.ПутьКФайлу) Тогда 
       тОбъект.SQLiteQuery("select * from logdata");
    КонецЕсли;
    

    В завершении SQLiteQuery таблица есть и она заполнена.
    А в СформироватьОтчет - таблицы не существует.

    Внутренний говнокод не привожу, поскольку там к таблице нет обращений.

    Ответы: (27) (28)
  5. Итить... Убрал переменную. Вместо этого завёл реквизит обработки. Ничего не поменялось: в СформироватьОтчет таблица без данных...

  6. Не вижу связи между SQLiteQuery и СформироватьОтчет. Где там используется РабочаяТаблица?

    Ответы: (6)
  7. (5) отладчиком смотрю. Могу в коде добавить: сути это не поменяет. В контексте этой функции РабочейТаблицы уже не существует.

  8. Где-то в коде накосячил. Должно работать. Вот такое:

    Процедура КнопкаВыполнитьНажатие(Кнопка)
    	
    	Инит();
    	Тест();
    	
    КонецПроцедуры
    
    Перем тзТест;
    
    Процедура Инит() 	Экспорт
    	
    	тзТест = Новый ТаблицаЗначений;
    	
    КонецПроцедуры
    
    Процедура Тест()	Экспорт
    	
    	Сообщить(тзТест.Колонки.Количество());
    	
    КонецПроцедуры
    

    у меня отработало

    Ответы: (8)
  9. (7) не, у меня СформироватьОтчет - отдельно вызывается. По другой кнопке. Т.е. таблица заполняется при открытии обработки, а потом, по нажатию кнопки хочу к этой таблице обращаться

    Ответы: (9)
  10. (8) Пох. Вот так все равно работает:

    Процедура КнопкаВыполнитьНажатие(Кнопка)
    	
    	Инит();
    	
    КонецПроцедуры
    
    Процедура Выполнить1Нажатие(Элемент)
    	
    	Тест();
    	
    КонецПроцедуры
    
  11. У тебя заполнение ТЗ случаем не фоновым идет?

  12. всё верно. будет неопределено

  13. используй временное хранилище

    Ответы: (13)
  14. (12) так я реквизит завёл. И всё равно та же шняга... Что за временное хранилище?
    ЗЫ: там таблица - не сказать чтобы маленькая. Несколько тысяч записей в сорока колонках.

  15. +реквизит формы Адрес (Строка)

    код формы


    код модуля

    Ответы: (17)
  16. Я что-то не понял. В SQLiteQuery ты делаешь локальную переменную ТЗ и ее заполняешь. А данные потом хочешь получить из модульной РабочаяТаблица?

    Ответы: (16)
  17. (15) не. Я потом РабочуюТаблицу заполняю, обходя ТЗ. Ещё раз: в конце функции она сформирована, там всё ок.

  18. (14) там, вроде, ограничение на объём. Они это под браузеры пилили.

  19. блять, у тебя обычное приложение что ли

    Ответы: (21)
  20. Решил сделать через временный файл: сериализую полученную таблицу в файл, потом восстанавливаю. Но - фигу с маслом: файл формируется, текстовым редактором он открывается, контент там есть. Но при ЗначениеИзФайла() выдаёт "ошибку преобразования" :)

  21. хотя [...] так-то

  22. (18) файловая база, управляемое приложение.

    Ответы: (26)
  23. Дуб, мозги не [...], делай как я написал

    Ответы: (23)
  24. (22) была нормальная среда - v7. Ну - хер с ним, v8 поначалу тоже терпимо было. Но как начали псевдобраузерность изображать, так покатилось всё в сраное говно... Почему элементарная сериализация не работает?

    Ответы: (24)
  25. (23) при переходе с сервера на клиент у тебя переменная обнуляется

    Дуб Почему элементарная сериализация не работает?

    а [...] знаэ. сериализуешь через ЗначениеВФайл? так-то по идее должно прокатывать

    Ответы: (25)
  26. (24) ЗначениеВФайл(ВрФайлРабочейТаблицы, РабТаб); РабТаб = ЗначениеИзФайла(ВрФайлРабочейТаблицы);
    На случай моего идиотизма - корректность пути ВрФайлРабочейТаблицы проверяю на этапе загрузки: оно корректно.
    Биополе неважнецкое, стопудова в этом трабла :)

  27. Дуб управляемое приложение.

    я, пожалуй, уточню: ты точно уверен, что у тебя обработка с управляемой формой?

  28. Дуб Вся эта гадость вызывается из модуля формы:

    Если тОбъект.SQLiteInit(Объект.ПутьКФайлу) Тогда
    тОбъект.SQLiteQuery("select * from logdata");
    КонецЕсли;

    покажи всю функцию из МФ, включая директивы

  29. Дуб В завершении SQLiteQuery таблица есть и она заполнена.
    А в СформироватьОтчет - таблицы не существует.

    Все правильно.
    Так только в обычном приложении работать могло.
    А в управляемом - значение переменной, объявленной на сервере, сохраняется только на время исполнения серверного вызова.

    Ответы: (29)
  30. (28) ок. Но почему значение из файла не вытаскивается

    Ответы: (30)
  31. (29) Возможно, ТЗ нельзя выгрузить в файл.
    Надо проще сделать.
    Например, вместо переменной ТЗ сделать реквизит формы. И обе процедуры перенести в модуль формы.

    Ответы: (32)
  32. [...] европейская. узнать это можно только загуглив твою обработку. пинай на мыло проверенным пацанам

  33. (30) выгружается. Файл есть, контент есть

  34. Да, ТЗ сериализуется.
    А почему не загружается из файла - непонятно, надо отладчиком смотреть.

    После отработки первой процедуры файл точно не пустой? Можешь его блокнотом открыть?

    Имя файла при выгрузке и загрузке точно идентичное? Каким образом ты его из одной процедуры в другую передаешь?

    Ответы: (34)
  35. (33) отладчиком смотреть нечего: он выдаёт ошибку на момент значения из файла. Имя идентичное: я-ж на этапе загрузки блокнотом смотрю файл.
    Хрень какая-то.

  36. ЧСХ: если в той же функции, где таблица сериализуется, восстановить её из файла, то без проблем восстанавливается. А если то же самое из другой функции, то ошибка преобразования.

  37. НаКлиенте ТЗ нет

    Ответы: (38)
  38. Дуб решил всему форуму прокачать телепатию. Хитрец!

    Ответы: (41)
  39. (36) всё в модуле объекта. При чём тут клиент?..

    Ответы: (39)
  40. (38) я не знаю , при чём здесь клиент. отсюда не видно

  41. ты бы выложил уже творение своё, а то приходится гадать на магическом шаре

    Ответы: (42)
  42. (37) странная фигня: по имени временного файла обратиться не получается. Если путь указать принудительно, типа C:\tmp.txt , то работает... При том, что временный файл открывается при выборе через проводник... Херня какая-то.
    Ладно, проехали. Всем спасибо :)

    Ответы: (43) (46)
  43. (40) стыдно такое выкладывать. Да и проблема, по ходу, в текущем компе, а не в 1С

    Ответы: (44)
  44. Дуб Ладно, проехали. Всем спасибо :)

    не, ты от нас так просто не отделаешься.
    давай обработину сюда

  45. (42) Я бы предположил что проблемы в неправильном подходе к управляемому режиму. Выкладывай поделие на ревью.

  46. Выкладывай, не тяни до пятницы ...

  47. (41) [...], Дуб

    Ответы: (47)
  48. jsmith82 [...], Дуб

    Всё ... не засираем тематическую ветку.

    Ответы: (50)
  49. there was no any засёр. как можно было на такой херне облажаться

  50. я кстати ту обработку переделал. код в форму перенёс. это где произвольная ТЗ

    Ответы: (51)
  51. (47) Igor, ты модератор, чтоль?

  52. +(49)
    https://yadi.sk/d/6KL1VESXbIOU6A

  53. Bumer , чо за херня, ты мне на хвост решил наступить?

  54. Девочки, не ссорьтесь

  55. Вопрос снялся, кстати. Не глобально, а в рамках задачи. Не надо там таблицу значений…

  56. Кстате, ктонить подскажет, сорри за оффтопик, можно ли сделать панель одной из баз другого цвета, причем сделать ето в пользовательском режиме?

    витоге получим список баз со стандартным цветом И!!!!!!!! копию базы с другим, шобы пользаки не путалис)

или зарегистрируйтесь чтобы ответить!