Ошибка при вызове метода контекста получитьизвременногохранилища

Получить Из Временного Хранилища

Получить Из Временного Хранилища

Я
   hasan-rusel

02.12.14 — 11:10

Подскажите в чем ошибка пожалуйста:

{Форма.Форма.Форма(19)}: Ошибка при вызове метода контекста (ПолучитьИзВременногоХранилища)

    ДанныеСтроки = ПолучитьИзВременногоХранилища(Адрес);

по причине:

Недопустимое значение параметра (параметр номер ‘1’)

//////////////////////////////////////////////////////////

Перем Адрес;

&НаКлиенте

Процедура ПриОткрытии(Отказ)

    ДБФ = Новый XBase(«D:Kontr.dbf»);

    ДБФ.Кодировка = КодировкаXBase.OEM;

    Адрес = Неопределено;

    ВХ = ПоместитьВоВременноеХранилище(ДБФ,Адрес);

    ЗагрузкаДБФ(Адрес);

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

&НаСервере

Процедура ЗагрузкаДБФ(Адрес)

    Сообщить(Адрес);

    ДанныеСтроки = ПолучитьИзВременногоХранилища(Адрес);

    ДанныеСтроки.Первая();

    Пока Не ДанныеСтроки.ВКонце() Цикл

        Если НЕ ДанныеСтроки.ЗаписьУдалена() Тогда

            Контр     = Справочники.Корреспонденты.НайтиПоНаименованию(СокрЛП(ДанныеСтроки.Name));

            Если Контр    = Справочники.Корреспонденты.ПустаяСсылка() тогда

                Контр=Справочники.Корреспонденты.СоздатьЭлемент();

                Контр.Наименование=СокрЛП(ДанныеСтроки.Name);

…………………………………………………………………………………………………

                Контр.Записать();

            КонецЕсли;

        КонецЕсли;

        ДанныеСтроки.Следующая();

    КонецЦикла;

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

Заранее спасибо !

   Wobland

1 — 02.12.14 — 11:12

Неопределено — так себе адрес

   Легат

2 — 02.12.14 — 11:13

=»»;

   Maxus43

3 — 02.12.14 — 11:13

Адрес = ПоместитьВоВременноеХранилище(ДБФ);

   hasan-rusel

4 — 02.12.14 — 11:16

(2) не помогло.

(3) не помогло.

{Форма.Форма.Форма(19)}: Ошибка при вызове метода контекста (ПолучитьИзВременногоХранилища)

    ДанныеСтроки = ПолучитьИзВременногоХранилища(Адрес);

по причине:

Недопустимое значение параметра (параметр номер ‘1’)

   Любопытная

5 — 02.12.14 — 11:17

(4) а Сообщить(Адрес) что сообщает?

   Maxus43

6 — 02.12.14 — 11:19

Адрес = ПоместитьВоВременноеХранилище(ДБФ);

ЗагрузкаДБФ(Адрес);

не работает? да ладно. Код в студию

   Легат

7 — 02.12.14 — 11:21

Возвращаемое значение:

Тип: Строка.

Адрес во временном хранилище.

Должно было прокатить..

   hasan-rusel

8 — 02.12.14 — 11:21

(6) Перем Адрес;

&НаКлиенте

Процедура ПриОткрытии(Отказ)

    ДБФ = Новый XBase(«D:Kontr.dbf»);

    
    ДБФ.Кодировка = КодировкаXBase.OEM;

    //    УникальныйИдентификатор = Новый УникальныйИдентификатор;

    Адрес = «»;

    Адрес = ПоместитьВоВременноеХранилище(ДБФ);

    ЗагрузкаДБФ(Адрес);

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

&НаСервере

Процедура ЗагрузкаДБФ(Адрес)

    Сообщить(Адрес);

    ДанныеСтроки = ПолучитьИзВременногоХранилища(Адрес);

    ДанныеСтроки.Первая();

    Пока Не ДанныеСтроки.ВКонце() Цикл

        Если НЕ ДанныеСтроки.ЗаписьУдалена() Тогда

            Контр     = Справочники.Корреспонденты.НайтиПоНаименованию(СокрЛП(ДанныеСтроки.Name));

            Если Контр    = Справочники.Корреспонденты.ПустаяСсылка() тогда

                Контр=Справочн

   Любопытная

9 — 02.12.14 — 11:23

(8) Убери объявление переменной, оно тебе всю картину маслом портит

   Maxus43

10 — 02.12.14 — 11:24

Адрес = «»;

выкинь, чо за привычка так писать

   hasan-rusel

11 — 02.12.14 — 11:26

(10)

теперь новая ошибка:

{Форма.Форма.Форма(20)}: Значение не является значением объектного типа (Первая)

    ДанныеСтроки.Первая();

   Любопытная

12 — 02.12.14 — 11:26

(8) Написавши

Перем Адрес;

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

   Maxus43

13 — 02.12.14 — 11:28

(11) ты сначала файл в двоичные данные, двоичные данные во врем хранилище, из врем хранилища в двоичные данные, двоичные данный сохрани на винт во врем каталог как дбф. И только потом Новый XBase (путь к временному файлу);

   hasan-rusel

14 — 02.12.14 — 11:31

(13) О_О

А можно строчкой кода ?

   Любопытная

15 — 02.12.14 — 11:32

ДвоичныеДанные = Новый ДвоичныеДанные(«D:Kontr.dbf»);

   hasan-rusel

16 — 02.12.14 — 11:36

(15) а как ?

«двоичные данный сохрани на винт во врем каталог как дбф. И только потом Новый XBase (путь к временному файлу);»

   Любопытная

17 — 02.12.14 — 11:40

ох, блин…

ИмяВременногоФайла = КаталогИБ()+»TmpDBF.dbf»;

ДвоичныеДанные.Записать(ИмяВременногоФайла);



Ну и далее по тексту.

И вообще, читайте СП, там все написано

   Maxus43

18 — 02.12.14 — 11:47

(17) ну с КаталогИБ() перебор имхо, лучше КаталогВременныхФайлов, да ещё и удалить потом тоже на всякий не забыть бы

   Любопытная

19 — 02.12.14 — 11:48

(18) первое, что в голову пришло) Не помню я их, я их в СП читаю обычно

   hasan-rusel

20 — 03.12.14 — 12:22

(19)

&НаКлиенте

Процедура ПриОткрытии(Отказ)

//    ДБФ = Новый XBase(«D:Kontr.dbf»);

    ДвоичныеДанные = Новый ДвоичныеДанные(«D:Kontr.dbf»);

    Времянка = КаталогВременныхФайлов() + «TmpDBF.dbf»;

    ДвоичныеДанные.Записать(Времянка);

//    ДБФ.Кодировка = КодировкаXBase.OEM;

    //    УникальныйИдентификатор = Новый УникальныйИдентификатор;

//    Адрес = «»;

    Адрес = ПоместитьВоВременноеХранилище(Времянка);

    ЗагрузкаДБФ(Адрес);

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

&НаСервере

Процедура ЗагрузкаДБФ(Времянка)

    
    ДанныеСтроки1 = ПолучитьИзВременногоХранилища(Времянка);

    ДанныеСтроки = Новый XBase(ДанныеСтроки1);

    ДанныеСтроки.Кодировка = КодировкаXBase.OEM;

    ДанныеСтроки.Первая();

    Пока Не ДанныеСтроки.ВКонце() Цикл

ЧЯДНТ ?

   hasan-rusel

21 — 03.12.14 — 12:23

{Форма.Форма.Форма(25)}: Ошибка при вызове метода контекста (Первая)

    ДанныеСтроки.Первая();

по причине:

Перед выполнением операции нужно открыть базу

   Wobland

22 — 03.12.14 — 12:24

(21) это ты так XBase на основе двоичных данных формируешь?

   Wobland

23 — 03.12.14 — 12:25

(22) а, не. на основе какого-то левого пути

   Любопытная

24 — 03.12.14 — 12:26

(21)

Синтаксис:

Новый XBase(<ПутьКБазе>, <ПутьКИндексу>, <ТолькоЧтение>)

Параметры:

<ПутьКБазе> (необязательный)

Тип: Строка.

Полное имя файла таблицы базы данных в формате DBF.

<ПутьКИндексу> (необязательный)

Тип: Строка.

Путь к индексному файлу таблицы.

<ТолькоЧтение> (необязательный)

Тип: Булево.

Истина — открывать файл только для чтения, Ложь — открывать файл для чтения и записи.

Значение по умолчанию: Ложь.

Описание:

Создает объект XBase. При создании могут быть сразу открыты файлы таблицы и индекса.

И еще раз:

<ПутьКИндексу> (необязательный)

Тип: Строка.

Путь к индексному файлу таблицы.

<ТолькоЧтение> (необязательный)

Тип: Булево.

Истина — открывать файл только для чтения, Ложь — открывать файл для чтения и записи.

Значение по умолчанию: Ложь.

   Любопытная

25 — 03.12.14 — 12:26

И вообще, ты чего-то не то делаешь

   hasan-rusel

26 — 03.12.14 — 12:27

(23) да я хз как, впервые с УФ сталкиваюсь, обычно то проще)

    ДБФ = Новый XBase(«\ServbdFormaDok_UL.dbf»);

    

    ДБФ.Кодировка = КодировкаXBase.OEM;

    ДБФ.Первая();

    Симв = Символ(160);

    Пока Не ДБф.ВКонце() Цикл

и т.д.

   Любопытная

27 — 03.12.14 — 12:27

Ты из временного хранилища получаешь двоичные данные. А XBase на основании пути к файлу поднимается. Так что ты свои ДвоичныеДанные сохрани на сервере в файл и этот файл уже делай

   Wobland

28 — 03.12.14 — 12:28

(26) обычно в управляемом режиме файловые системы разные у клиента и сервера

   Wobland

29 — 03.12.14 — 12:28

(27) Времянка. он туда строку отдаёт

   Любопытная

30 — 03.12.14 — 12:29

(26) ну не сталкивайся тогда. Забей, отдай работу тому, кто сталкивался.

Чего вы все ноете про эти упр формы? Не нравится вам инструмент, не работайте с ним. Работайте с тем, что вам нравится.

Нитики

   Любопытная

31 — 03.12.14 — 12:29

*Нытики.

Извините

   hasan-rusel

32 — 03.12.14 — 12:30

(28) вот это и вызывает затруднения.

   hasan-rusel

33 — 03.12.14 — 12:32

(30) Ну не обижайся, помощи же прошу)

Если бы можно было как-то обойти эти УФ, не сталкивался бы… А тут такое… И отдать тут некому.

   hasan-rusel

34 — 03.12.14 — 12:46

хелп…

   Wobland

35 — 03.12.14 — 12:49

то есть, сделайте за меня?

   hasan-rusel

36 — 03.12.14 — 12:50

(35) не, направьте на путь истинный с (20)

   Wobland

37 — 03.12.14 — 12:53

(36) -> (24)(30)

   DrZombi

38 — 03.12.14 — 13:09

(34) Бросай передавай в хранилище «XBase» объект.

Передай сперва на сервер сам файл, в виде двоичного коду.

А потом запиши его во временную папочку, открой, как XBase :)

И работак

   МишельЛагранж

39 — 03.12.14 — 13:23

(30)>>Не нравится вам инструмент, не работайте с ним.

— типичные «аргументы» УФ-маньяков.

Они и в автобусе на билет через электронный банк передают. И их «не аргументет», что у водилы нет банковского терминала…

   МишельЛагранж

40 — 03.12.14 — 13:24

+ да и вообще, водите управлять автобусом надо, а не изысками заниматься с пассажирами…

   МишельЛагранж

41 — 03.12.14 — 13:24

*водиле

   ramir

42 — 03.12.14 — 15:29

(0) Измени

ПоместитьВоВременноеХранилище(ДБФ,Адрес);

На

ПоместитьВоВременноеХранилище(ДБФ, ЭтаФорма.УникальныйИдентификатор);

   hasan-rusel

43 — 04.12.14 — 07:02

Всем спасибо, вот так получилось)

/////////////////

//Перем Адрес;

&НаКлиенте

Процедура ПриОткрытии(Отказ)

//    ДБФ = Новый XBase(«D:Kontr.dbf»);

    ////ДвоичныеДанные = Новый ДвоичныеДанные(«D:Kontr.dbf»);

    ////Времянка = КаталогВременныхФайлов() + «TmpDBF.dbf»;

    ////ДвоичныеДанные.Записать(Времянка);

    
    
    Файл = Новый Файл(«D:Kontr.dbf»);

    ФайлИсточник = Файл.ПолноеИмя;

    Адрес = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ФайлИсточник));

    
    
    
//    ДБФ.Кодировка = КодировкаXBase.OEM;

    //    УникальныйИдентификатор = Новый УникальныйИдентификатор;

//    Адрес = «»;

    ////    Адрес = ПоместитьВоВременноеХранилище(Времянка);

    ЗагрузкаДБФ(Адрес);

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

&НаСервере

Процедура ЗагрузкаДБФ(Адрес)

    ФайлПриемник = КаталогВременныхФайлов() + «temp_v82.dbf»;

    ДанныеХранилища = ПолучитьИзВременногоХранилища(Адрес);

    ДанныеХранилища.Записать(ФайлПриемник);

    ДанныеСтроки = Новый XBase(ФайлПриемник);

    ДанныеСтроки.Кодировка = КодировкаXBase.OEM;

    ДанныеСтроки.Первая();

    Пока Не ДанныеСтроки.ВКонце() Цикл

   Wobland

44 — 04.12.14 — 07:19

можешь на досуге почитать про ПолучитьИмяВременногоФайла

  

hasan-rusel

45 — 04.12.14 — 07:20

(44) ок.

ОсновнаяФорма:


&НаКлиенте
Процедура ОткрытьФормуПодбора(Команда)
ОткрытьФорму("Обработка.ПередачаПараметровВФормах.Форма.ФормаПобдора",,ЭтаФорма);
КонецПроцедуры

&НаКлиенте
Процедура ОбработатьПодбор(АдресВХ) Экспорт
А = ОбработатьПодборНаСервере(АдресВХ);
КонецПроцедуры

&НаСервере
Функция ОбработатьПодборНаСервере(АдресВХ)
Возврат ПолучитьИзВременногоХранилища(АдресВХ);
КонецФункции

Форма подбора:


&НаКлиенте
Процедура ЗавершитьПодборИПередатьДанныеВОсновнуюформу(Команда)
АдресВХ = Неопределено;
ЗавершитьПодборИПередатьДанныеВОсновнуюформуНаСервере(АдресВХ);
ВладелецФормы.ОбработатьПодбор(АдресВХ);
Закрыть();
КонецПроцедуры

&НаСервереБезКонтекста
Процедура ЗавершитьПодборИПередатьДанныеВОсновнуюформуНаСервере(АдресВХ)
АдресВХ = ПоместитьВоВременноеХранилище("Данные для передачи", Новый УникальныйИдентификатор);
КонецПроцедуры

Добавлено: 28 июн 2018, 01:20


Добавил вариант с оповещением.
Основная форма:


&НаКлиенте
Процедура ОткрытьФормуПодбора(Команда)
ОповещениеОЗакрытии = Новый ОписаниеОповещения("ПриЗавершенииПодбора", ЭтотОбъект);
ОткрытьФорму("Обработка.ПередачаПараметровВФормах.Форма.ФормаПобдора",,ЭтаФорма,,,,ОповещениеОЗакрытии,РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры

&НаКлиенте
Процедура ОбработатьПодбор(АдресВХ) Экспорт
А = ОбработатьПодборНаСервере(АдресВХ);
КонецПроцедуры

&НаСервере
Функция ОбработатьПодборНаСервере(АдресВХ)
Возврат ПолучитьИзВременногоХранилища(АдресВХ);
КонецФункции

&НаКлиенте
Процедура ПриЗавершенииПодбора(Результат, ДополнительныеПараметры) Экспорт
Если ТипЗнч(Результат) = Тип("Структура") Тогда
А = ПолучитьИзВременногоХранилища(Результат.ОповещениеАдресВХ);
КонецЕсли;
КонецПроцедуры


Форма подбора:


&НаКлиенте
Процедура ЗавершитьПодборИПередатьДанныеВОсновнуюформу(Команда)
АдресВХ = Неопределено;
ЗавершитьПодборИПередатьДанныеВОсновнуюформуНаСервере(АдресВХ);
ВладелецФормы.ОбработатьПодбор(АдресВХ);

ПараметрыПриЗакрытии = Новый Структура;
ПараметрыПриЗакрытии.Вставить("ОповещениеАдресВХ",АдресВХ);
Закрыть(ПараметрыПриЗакрытии);
КонецПроцедуры

&НаСервереБезКонтекста
Процедура ЗавершитьПодборИПередатьДанныеВОсновнуюформуНаСервере(АдресВХ)
АдресВХ = ПоместитьВоВременноеХранилище("Данные для передачи", Новый УникальныйИдентификатор);
КонецПроцедуры

Добрый день всем! Я не очень в УФ, подскажите, пожалуйста такую задачу как решить: Есть документ с ТЧ Товары. ОНИ хотят, чтобы при изменении количества какого-либо товара все изменения записывались и потом в отчёт выводились сколько раз и на какое количество менялся товар. Я подумала,что можно при открытии формы документа запоминать во временное хранилище ТЧ товары, а его адрес — в реквизит формы. А потом при перепроведении сравнивать старую и новую ТЧ. Вообщем выходит ошибка: Ошибка при вызове метода контекста (ПолучитьИзВременногоХранилища)     ТЗ = ПолучитьИзВременногоХранилища(Адрес); по причине:Ошибка получения значения из временного хранилища

Я уже думала от безысходности создать реквизит объекта и в него записывать старую ТЧ. Но как-то не хочется такое делать.

Ну поместилось во временное хранилище значение на долгое хранение (минут 20), ну вернула функция уникальный идентификатор формы. По этому идентификатору значение не достать. Тут скорее надо возвращать полученный адрес:

Что-то «потом в отчёт» и «при перепроведении сравнивать» не вяжется…

так надо при изменении количества записывать или при записи документа?

Эпитафия на могиле программиста: «Они хотели.» :) Включите версионирование документа (если оно есть в Вашей конфигурации).

при записи документа записывать, если количество менялось. ну это я в регистр буду записывать. мне сначала надо сравнить таблицы,чтоб понять, менялось или нет.

Из справки: ПоместитьВоВременноеХранилище  — Возвращаемое значение: Тип: Строка. Адрес во временном хранилище. У мадмуазели: ???

+ И свой отчет (или внешнюю печатную форму документа) по регистру ВерсииОбъектов.

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

Попробую в модуль объекта написать: …

сравни передЗаписью в ДокОбъект и в ДокСсылка

Через год будете писать как почистить самолично созданный регистр версионирования , а того что база распухнет.

дак версионирование будет больше съедать места, чем мой маленький регистрик. Еще вдруг и затормозит всё из-за него..

Смотря как «ОНИ» вашу тему потом разовьют и попросят по натыкать это куда попало, и этот маленький регистрик разовьется в большой — проходили уже, и не раз. Хотелки начинаются с малого.

в передЗаписью прочитай запросом табличную часть из БД и сравни с той, что в ЭтотОбъект.ТвояТабличнаяЧасть. Это можно даже одним запросом.

Тэги: 1С 8

Комментарии доступны только авторизированным пользователям

Дарья92

0 / 0 / 0

Регистрация: 13.10.2013

Сообщений: 7

1

1C 8.x

Работа с временным хранилищем

13.10.2013, 22:32. Показов 11339. Ответов 12

Метки нет (Все метки)


Здравствуйте, у меня есть 2 обработки. Я передаю данные с формы одной на форму второй, через ВременноеХранилищеДанных.
Код обработки отправителя

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
&НаКлиенте
Процедура Получить(Команда)
    
    Форма = ПолучитьФорму("Обработки.Получатель.Форма",, ЭтаФорма);
    Форма.АдресВременногоХранилища = ПолучитьТЗ();
    Форма.Открыть();
    Форма= Обработки.Получатель.ПолучитьФорму(ЭтаФорма
КонецПроцедуры
 
 
&НаСервере
Функция ПолучитьТЗ()
    
     Возврат ПоместитьВоВременноеХранилище(ТабЗнач.Выгрузить(), Новый УникальныйИдентификатор);
    
КонецФункции
 
Код обработки получателя
 
&НаКлиенте
Процедура ПриОткрытии(Отказ)
    ПриОткрытииНаСервере();
КонецПроцедуры
 
 
&НаСервере
Процедура ПриОткрытииНаСервере()
    
     ТабИзменений = ПолучитьИзВременногоХранилища(АдресВременногоХранилища);
    
    ТЗ.Загрузить(ТабИзменений);
    
КонецПроцедуры

Пишет ошибку: {Форма.Форма.Форма(5)}: Ошибка при вызове метода контекста (ПолучитьФорму)
Форма = ПолучитьФорму(«Обработки.Получатель.Форма»,, ЭтаФорма);
по причине:
Неизвестное имя формы. Имя: «Обработки.Получатель.Форма»

Помогите, пожалуйста.

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

13.10.2013, 22:32

Ответы с готовыми решениями:

Работа с хранилищем
Всем добрый день!

Такой вопрос — есть два хранилища: основное и моё, рабочее. Я вношу свои…

работа с хранилищем
Помогите, пожалуйста. Необходимо вывести различные данные из 2х HashTabel
Т.Е. если в одном…

Работа с облачным хранилищем
Всем привет. Возник вопрос, над которым я бьюсь уже не первый день.
Представим, что у меня есть…

Работа с локальным хранилищем
Как я могу получить и записать в переменную, id кого-либо элемента?

12

duk337

2954 / 1766 / 82

Регистрация: 03.11.2011

Сообщений: 8,280

14.10.2013, 00:35

2

Можыд

1C
1
Форма = Обработки.Получатель.ПолучитьФорму("Форма");

вообще-то, синт.пом имеется



0



Модератор

Эксперт 1С

3700 / 2899 / 570

Регистрация: 10.03.2011

Сообщений: 11,414

Записей в блоге: 1

14.10.2013, 03:00

3

«Обработка.Получатель.Форма.Форма»



1



Дарья92

0 / 0 / 0

Регистрация: 13.10.2013

Сообщений: 7

14.10.2013, 17:05

 [ТС]

4

Спасибо большое, не доглядела. Теперь другая проблема:

Создала элемент формы. с типом поле ввода, установила свойство кнопка списка выбора = истина. Хочу сделать выпадающий список. Список значения формируется из реквизитов переданной формы. Перечитала уже весь интернет. Вроде делаю правильно, а не работает.

Код получения данных из временного хранилища:

1C
1
2
3
ТабИзм = ПолучитьИзВременногоХранилища(АдресВременногоХранилища);
    
ТаблЗнач.Загрузить(ТабИзм);

Код создания поля ввода:

1C
1
2
3
4
5
ПолеВыбора = Элементы.Добавить("ИзменяемыйРеквизит", Тип("ПолеФормы"), ЭтаФорма);
ПолеВыбора.Вид = ВидПоляФормы.ПолеВвода;
ПолеВыбора.КнопкаСпискаВыбора = Истина;
ПолеВыбора.ПутьКДанным  = "ИзменяемыйРеквизит";
ПолеВыбора.РедактированиеТекста = Ложь;

Код процедуры выпадающего списка:

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 &НаКлиенте
Процедура ПолеВыбораНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    
        СтандартнаяОбработка = Ложь;
        
Если ДанныеВыбора <> Неопределено Тогда
    
         СЗ = Новый СписокЗначений;
         
    Для Каждого Колонка Из ТаблЗнач.Колонки Цикл
        
         
        СЗ.Добавить(Колонка.Имя);
        
    КонецЦикла;
    
    ИзменяемыйРеквизит = ВыбратьИзСписка(СЗ, Элементы.ПолеВыбора);
    
КонецЕсли;
 
 
КонецПроцедуры



0



2954 / 1766 / 82

Регистрация: 03.11.2011

Сообщений: 8,280

14.10.2013, 17:23

5

Цитата
Сообщение от Дарья92
Посмотреть сообщение

Код процедуры выпадающего списка:

не надо. Почитайте синт.пом СписокВыбора. Если у поля есть кнопка выбора, то достаточно заполнить его список выбора.



0



0 / 0 / 0

Регистрация: 13.10.2013

Сообщений: 7

14.10.2013, 18:54

 [ТС]

6

Заполнять то понятно как, а как связать СписокВыбора и Поле?

Не так?

ИзменяемыйРеквизит =СписокВыбора(СписокВыбор, Элементы.ПолеВыбора);



0



2954 / 1766 / 82

Регистрация: 03.11.2011

Сообщений: 8,280

14.10.2013, 19:33

7

Элементы(Формы).Поле.СписокВыбора=ВашСписок;



0



Дарья92

0 / 0 / 0

Регистрация: 13.10.2013

Сообщений: 7

14.10.2013, 20:49

 [ТС]

8

Я туплю. Сделала, как Вы говорите, все равно не выходит.

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
&НаКлиенте 
Процедура ПолеВыбораНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка);
     
     СтандартнаяОбработка = Ложь;
     
     
     Если ДанныеВыбора <> Неопределено Тогда
     
            Список = Новый СписокЗначений;
 
         
         Для Каждого Колонка Из ТаблЗнач.Колонки Цикл
             
                     
            Список.Добавить(Колонка.Имя); 
        
                 
        КонецЦикла;
        
        Элементы.ПолеВыбора.СписокВыбора = Список;
 
КонецЕсли;
 
КонецПроцедуры



0



2954 / 1766 / 82

Регистрация: 03.11.2011

Сообщений: 8,280

15.10.2013, 01:06

9

ТаблЗнач — это что? И где она? Тут Dethmontt с ТЗ на клиент-сервере такое завернул… я просто в ужасе: начну работать с УФ — никаких ТЗ… Но вообще, Вы отрабатываете событие по кнопке Выбора, чтобы эмулировать нажатие кнопки списка. А надо заполнить список выбора ПЕРЕД активизацией поля. При открытии формы, при изменении другого реква и т.п. Список заработает сам по кнопке выбора из списка.



0



0 / 0 / 0

Регистрация: 13.10.2013

Сообщений: 7

15.10.2013, 07:47

 [ТС]

10

ТаблЗнач — это ТЗ в которую я записываю значения полученные с ВременногоХранилища. ПриОткрытииНасервере или на Клиенте?

P.S.Лично мое мнение, чтобы делать УФ, надо думать, как УФ.



0



2954 / 1766 / 82

Регистрация: 03.11.2011

Сообщений: 8,280

15.10.2013, 16:30

11



0



0 / 0 / 0

Регистрация: 13.10.2013

Сообщений: 7

15.10.2013, 18:26

 [ТС]

12

Спасибо большое, получилось!

А не подскажете, я в начале писала, что мне нужно передать грубо говоря одну форму. с заполненными данными, на другую — пустую. Сейчас у меня на форме Получатель создана такая же ТЗ, что и на первой, а если я ее удалю с формы ничего передаваться и отображаться не будет. как сделать чтобы форма сама по себе формировалась.
по нажатию кнопки грубо говоря копировалась и открывалась вторая, точно такая же.



0



duk337

2954 / 1766 / 82

Регистрация: 03.11.2011

Сообщений: 8,280

15.10.2013, 20:38

13

Попробуйте создавать не форму, а обработку.

1C
1
2
3
4
Обр1=Обработки.ОБР.Создать();
Обр1.ПолучитьФорму().Открыть();
Обр2=Обработки.ОБР.Создать();
Обр2.ПолучитьФорму().Открыть();



0



  1. Добрый день.
    Не понимаю почему метод получить() возвращает неопределено?
    2016-08-13_00-15-23.png

    Что за подстава? Платформа 8.3.6.2363


  2. nomad_irk

    Online

    nomad_irk
    Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.889
    Симпатии:
    1.029
    Баллы:
    204

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

  3. Не получилось. С хранилищем значения, результат ровно тот же.
    А вот в толстом клиенте оба варианта (и мой, и с хранилищем значения) отрабатывают. Не пойму в чем дело.


  4. nomad_irk

    Online

    nomad_irk
    Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.889
    Симпатии:
    1.029
    Баллы:
    204

    А как делал через временное хранилище?

  5. Привет.
    Код ниже. Я во временное хранилище помещаю структуру, в которую входят двоичные данные. Так вот остальные элементы структуры (дата, строка) получаются из хранилища корректно. А двоичные данные — нет.

    &НаКлиенте
    Процедура ОткрытьФайлОписания()
    
        ТекСтрока = Элементы.ПрикрепленныеФайлы.ТекущиеДанные;
        Если ТекСтрока=Неопределено Тогда Возврат; КонецЕсли;
    
        Адрес = Новый УникальныйИдентификатор;
    
        ПолучитьФайлОписанияВХранилищеСервер(ТекСтрока.ПрикрепленныйФайл, Адрес);
    
        ДанныеФайлаОписания = ПолучитьИзВременногоХранилища(Адрес);
    
        ВременныйФайл = ПолучитьИмяВременногоФайла(ДанныеФайлаОписания.РасширениеФайла);
        ДвоичныеДанные = ДанныеФайлаОписания.ДвоичныеДанные.Получить();
        ДвоичныеДанные.Записать(ВременныйФайл);
    
        НачатьЗапускПриложения(
            Новый ОписаниеОповещения("ВыполнитьОткрытиеФайлаОписания", ЭтотОбъект),
            ВременныйФайл,
            ,
            Истина
        );
    
    КонецПроцедуры
    
    &НаСервереБезКонтекста
    Процедура ПолучитьФайлОписанияВХранилищеСервер(ПрикрепленныйФайл, Адрес=Неопределено)
    
        Запрос = Новый Запрос("ВЫБРАТЬ
                              |    ПрикрепленныеФайлы.Наименование,
                              |    ПрикрепленныеФайлы.ХранилищеЗначения КАК ДвоичныеДанные,
                              |    ПрикрепленныеФайлы.РасширениеФайла,
                              |    ПрикрепленныеФайлы.РазмерФайла
                              |ИЗ
                              |    Справочник.ПрикрепленныеФайлы КАК ПрикрепленныеФайлы
                              |ГДЕ
                              |    ПрикрепленныеФайлы.Ссылка = &ПрикрепленныйФайл");
        Запрос.УстановитьПараметр("ПрикрепленныйФайл", ПрикрепленныйФайл);
        ДанныеФайла = Запрос.Выполнить().Выбрать();
        ДанныеФайла.Следующий();
        Результат = Новый Структура("Наименование, ДвоичныеДанные, РасширениеФайла, РазмерФайла");
        ЗаполнитьЗначенияСвойств(Результат, ДанныеФайла);
    
        Адрес = ПоместитьВоВременноеХранилище(Результат, Адрес);
    
    КонецПроцедуры
    

  6. nomad_irk

    Online

    nomad_irk
    Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.889
    Симпатии:
    1.029
    Баллы:
    204

    А так?

    ........
    Результат = Новый Структура("Наименование, ДвоичныеДанные, РасширениеФайла, РазмерФайла");
    
    ЗаполнитьЗначенияСвойств(Результат, ДанныеФайла, , "ДвоичныеДанные");
    
    Результат.Вставить("ДвоичныеДанные". ДанныеФайла.ДвоичныеДанные.Получить());
    .............
    
  7. Вот же ж! Работает, спасибо!


  8. pihy

    Offline

    pihy

    Регистрация:
    14 сен 2012
    Сообщения:
    4
    Симпатии:
    0
    Баллы:
    1

    Сделал все по аналогии. Но все равно
    ДанныеФайла.ДвоичныеДанные.Получить() принимает значение НЕОПРЕДЕЛЕНО, хотя
    ДанныеФайла.ДвоичныеДанные имеет значение ХранилищеЗначения

    это платформа выделывается?


  9. AlexeyKh

    Offline

    AlexeyKh
    Опытный в 1С

    Регистрация:
    27 июл 2012
    Сообщения:
    148
    Симпатии:
    19
    Баллы:
    29

    блин, ну СП кто читать будет?

    ХранилищеЗначения.Получить() — Сервер и толстый клиент, … !

    1.получите на сервере значение
    2.сохраните во временный файл
    3.передайте его на клиент

    ХранилищеЗначения (ValueStorage)
    Получить (Get)
    Синтаксис:
    Получить()
    Возвращаемое значение:
    Тип: Произвольный.
    Значение, содержащееся в хранилище.
    Описание:
    Получает из хранилища сохраненное в нем значение.
    Доступность:
    Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер).
    Пример:
    МояКартинка = ХранилищеКартинки.Получить


  10. pihy

    Offline

    pihy

    Регистрация:
    14 сен 2012
    Сообщения:
    4
    Симпатии:
    0
    Баллы:
    1

    А если я на сервере получаю запросом список прикрепленных файлов к номенклатуре и на клиент мне не нужно его передавать, а сохранить на диск с определенным наименованием по маске?
    ХранилищеЗначения.Получить().Записать([ПутьСохраненияФайла]) — так не корректно?


  11. nomad_irk

    Online

    nomad_irk
    Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.889
    Симпатии:
    1.029
    Баллы:
    204


  12. pihy

    Offline

    pihy

    Регистрация:
    14 сен 2012
    Сообщения:
    4
    Симпатии:
    0
    Баллы:
    1

    Застрял и все тут. Вот мой код:

    &НаСервере
    Процедура ЗаполнитьНаСервере()
        Запрос = Новый Запрос;
        Запрос.Текст =
        "ВЫБРАТЬ
        |    НоменклатураПрисоединенныеФайлы.ВладелецФайла КАК Номенклатура,
        |    НоменклатураПрисоединенныеФайлы.Ссылка КАК ПрисоединенныйФайл,
        |    "" "" КАК ИмяФайла,
        |    НоменклатураПрисоединенныеФайлы.ВладелецФайла.Код КАК Код,
        |    НоменклатураПрисоединенныеФайлы.Расширение КАК РасширениеФайла,
        |    НоменклатураПрисоединенныеФайлы.Размер КАК РазмерФайла
        |ИЗ
        |    Справочник.НоменклатураПрисоединенныеФайлы КАК НоменклатураПрисоединенныеФайлы
        |ГДЕ
        |    НоменклатураПрисоединенныеФайлы.ВладелецФайла.ПометкаУдаления = ЛОЖЬ
        |
        |УПОРЯДОЧИТЬ ПО
        |    Номенклатура,
        |    ПрисоединенныйФайл
        |АВТОУПОРЯДОЧИВАНИЕ";
       
        ДанныеФайла = Запрос.Выполнить().Выбрать();
       
        ИндексФайла = 1;
        ПредыдущаяНоменклатура = Справочники.Номенклатура.ПустаяСсылка();
       
        Пока ДанныеФайла.Следующий() Цикл
           
           
            Если ДанныеФайла.Номенклатура = ПредыдущаяНоменклатура Тогда
               
                ИндексФайла = ИндексФайла+1;
               
                ПредыдущаяНоменклатура = ДанныеФайла.Номенклатура;
                ИмяФайла = ?(Прав(Объект.ПутьККаталогу,1)="",Объект.ПутьККаталогу,Объект.ПутьККаталогу+"") + ДанныеФайла.Код +"-" +Строка(ИндексФайла) + ".jpg";
               
            Иначе
               
                ИндексФайла = 1;
               
                ПредыдущаяНоменклатура = ДанныеФайла.Номенклатура;
                ИмяФайла = ?(Прав(Объект.ПутьККаталогу,1)="",Объект.ПутьККаталогу,Объект.ПутьККаталогу+"") + ДанныеФайла.Код + ".jpg";
               
            КонецЕсли;
           
            ДанныеФайла.ПрисоединенныйФайл.ФайлХранилище.Получить().Записать(ИмяФайла);
           
        КонецЦикла;
       
    КонецПроцедуры
    

    ДанныеФайла.ПрисоединенныйФайл.ФайлХранилище имеет значение:
    [​IMG]
    а ДанныеФайла.ПрисоединенныйФайл.ФайлХранилище.Получить() возвращает Неопределено
    [​IMG]
    ну и, соответственно, дальше ошибка «значение не является значением объектного типа…»

    Ткните, пожалуйста, в каком моменте туплю.


  13. nomad_irk

    Online

    nomad_irk
    Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    9.889
    Симпатии:
    1.029
    Баллы:
    204

    Если возвращает неопределено, значит нет ничего в хранилище.


  14. pihy

    Offline

    pihy

    Регистрация:
    14 сен 2012
    Сообщения:
    4
    Симпатии:
    0
    Баллы:
    1

    Действительно. Оказалось, изображения хранятся в РегистрыСведений.ПрисоединенныеФайлы — там все заработало. Спасибо всем)


1C-pro.ru - форум по 1С:Предприятию 7.7, 8.0, 8.1, 8.2, 8.3

Это моя первая статья на данном портале, но попытаюсь изложить все понятно и подробно.
Долгое время у меня заняло создание такой вот внешней обработки. Есть очень много примеров, как сделать подобное на неуправляемых формах (2.0) и очень мало информации касательно управляемых(3.0), по крайней мере я многого найти не смог в доступе. Создание подобное обработки выглядит вполне несложно, если производить все действия на сервере, как это было с 2.0, но в нашем случае необходимо инициализировать открытие документа на клиенте, чему сильно мешает отсутствие возможности передать макет Active Document с сервера на клиент.

Итак, пойдем по порядку. Подобная информация уже есть в сети, но для полноты картины кратко разъясню регистрацию обработки в системе:

1. Открываем модуль объекта обработки и создаем там Функцию СведенияОВнешнейОбработке() (естественно экспортную):

  СведенияОВнешнейОбработке()

Как мы видим, использовать будем ВызовКлиентскогоМетода, по скольку открыть файл нужно будет на компьютере пользователя.

Далее понадобится создать еще две процедуры здесь же:

2. Функция добавления команды, которую мы вызываем ранее(просто, чтобы все было визуально разделено и не награмождалось скопом в одной функции):

 ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = «»)

3. И функция по созданию этой самой таблицы команд:

(Из комментариев можно подробней понять, для чего используется тот или иной параметр-поле данной таблицы)

На этом настройка регистрации внешней обработки в нужной вам конфигурации закончена.

Далее. Самое интересное: создание, заполнение и вывод макета клиенту.

Первое, что нам необходимо сделать, это создать макет нашего документа(Изображение 3). Макет понадобится двоичный, т.к. обычный мы на клиент не передадим(как я и говорил ранее). Заменяем нужные данные в шаблоне, перед загрузкой в обработку, «Параметрами», у меня они выглядят так, на примере: «{Сотрудник}»(кавычки не учитывать), после чего загружаем в Обработку-Макет.

Теперь в модуле формы создаем процедуру, которая будет вызвана при обращении к печати именно в таком виде(за исключением содержимого, заполнять можете как вам угодно), процедура так же должна быть экспортной и на клиенте, так как вызывается из конфигурации и выполнение назначено на клиентской стороне:

 Печать(ИдентификаторКоманды, МассивОбъектов)

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

 СобратьМакет(СсылкаНаОбъект)

Для сбора макета нам понадобится получить этот самый макет уже с сервера. Передаю я его через временное хранилище:

 ПолучитьМакетСервер(ИмяМакета)

Далее нужно получить данные для заполнения макета, естественно на сервере, по скольку может понадобиться обратиться к сторонним регистрам и справочникам, если нет, то можно выполнить и на клиенте, получив ссылку на интересующий нас объект:

 ПолучитьДанные(СсылкаНаОбъект)

Данные складываем в структуру,где ключ — имя параметра в макете(без фигурных скобок), а значение — собственно значение, которое необходимо подставить.

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

Понравилась статья? Поделить с друзьями:
  • Ошибка при вызове конструктора comобъект 2147467262 0x80004002 интерфейс не поддерживается
  • Ошибка при восстановлении пароля госуслуги
  • Ошибка при вызове метода контекста получитьcomобъект
  • Ошибка преобразование значения к типу дата не может быть выполнено 1с как исправить
  • Ошибка при вызове конструктора comобъект 2147221164 0x80040154 класс не зарегистрирован