Имя: Пароль:
1C
1С v8
Сохраненные значения элементов формы
0 cube033
 
16.10.12
06:44
Делаю внешнюю обработку для работы с конфигурацией на поддержке. Одна из задач обработки - создавать стандартный отчет. Отчет автоматически заполняется нужными настройками и формируется. Все было бы идеально, но "Организация" в отчет подставляется как последнее сохраненное значение формы. Пользователю в течение дня придется работать с двумя организациями  и он будет постоянно путаться.
Можно ли обратиться к сохраненному значению и изменить его программно?
P.S. Все попытки изменить реквизит отчета, или значения элемента формы - провалились.
1 Галахад
 
гуру
16.10.12
06:53
Не понятно.
2 cube033
 
16.10.12
07:02
В принципе можно упростить условие. По моему в большинстве отчетов в большинстве конфигураций. В форме отчета есть "Организация". Мы открываем отчет - видим "Организация1", меняем на "Организация2", закрываем. Открываем снова - видим "Организация2" - т.е форма сохраняет последнее значение при закрытии. Отчеты из моей обработки должны всегда открываться с "Организация2", даже если пользователь работал до этого с "Организация1"
3 чувак
 
16.10.12
07:04
Создай реквизит отчета "Организация", спихай код в событии "ПриОткрытии". Всего то делов
4 Живой Ископаемый
 
16.10.12
07:06
2(2) зачем? Чтобы другой пользователь замучался перевыбирать? Убери тогда организацию из сохранеямых значений
5 cube033
 
16.10.12
07:11
Вот за этим были написаны первые два предложения. Внешняя обработка рассчитывает нормы потребления, принимает платежи от населения, устанавливает тарифы, создавая документы и записи регистров основной конфигурации, а затем кассир должен выдать человеку СТАНДАРТНУЮ квитанцию из ОСНОВНОЙ конфигурации, и менять там ничего нельзя.
6 Живой Ископаемый
 
16.10.12
07:13
ничего не понятно. впрочем как и то, что же помешало реализовать любым доступным способом.
7 cube033
 
16.10.12
07:25
Ситуация в том, что Организация подставляется только при автоматическом заполнении квитанции, его можно отключить. Но заполнение вручную еще хуже. Там куча неприятных мелочей, как например - изначально у Отчета отсутствует необходимая форма, которая пришла с обновлением, список форм отчета формируется кодом разработчика и т.д.
Пробовал создав отчет поменять ему организацию, пробовал получив форму отчета поменять в ней организацию - не поддается.
Пробовал, даже кривые варианты вроде: открыть квитанцию  без заполнения, поменять организацию, ЗАКРЫТЬ, потом открыть с заполнением. Но там тоже много подводных камней, а главное - при программном ЗАКРЫТИИ не запоминаются значения формы.

" реализовать любым доступным способом." - вот это самое интересное. Какие для этого есть способы.
8 Живой Ископаемый
 
16.10.12
07:26
Я ж говорю, ничего не понятно. Известно только, что любой реквизит любой формы установить в нужное значение можно.
9 Живой Ископаемый
 
16.10.12
07:28
не понятен контекст, не понятно в какой момент, откуда пытался установить...
Можешь отряхнуть от пыли самый по-твоему годный способ, которым ты пытался это сделать, но не вышло, и запостить сюда с пометкой, типа вот в этом месте что-то должно происходить, но не происходит?
10 cube033
 
16.10.12
07:45
Сложность как раз в логике. В автоматическом заполнении, разобрать его трудно, так как в модуле отчета 39 процедур и функций + вызываемые экспортные.
Формирование происходит при открытии, все, что сделано до открытия будет затерто, а после открытия уже не имеет смысла. Поэтому единственную лазейку вижу в том, что Автозаполнение берет Организацию из сохраненных данных форм - их я и хочу заменить, но не знаю как


Отчет = Отчеты.КВП_КвитанцииИзвещения.Создать();
   ФормаОтчета = Отчет.ПолучитьФорму();
   ФормаОтчета.НеЗаполнятьНастройкиПриОткрытии = Ложь; //Автоматическое заполнение
   ФормаОтчета.ФормироватьПриОткрытии          = Истина;
   //ФормаОтчета.Организация=Организация;
   ФормаОтчета.Открыть();
11 Живой Ископаемый
 
16.10.12
07:50
ЭтотОтчет Стандартный?
Этот код
ФормаОтчета.Организация=Организация;
ФормаОтчета.Открыть();

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

поменять эти две строчки местами. Либо внимательней изучить модули отчеты, чтобы разглядеть как он может принимать параметры.
12 cw014
 
16.10.12
07:51
А сложно галку убрать у "Организация" - "Сохранять значения"?
13 cube033
 
16.10.12
07:53
конфа на поддержке
14 Живой Ископаемый
 
16.10.12
07:54
а сложно включить возможность изменений?
15 Галахад
 
гуру
16.10.12
07:59
Гм. А если перед закрытием очищать организацию?
16 Живой Ископаемый
 
16.10.12
08:02
2(15) конфа на поддержке.
17 cube033
 
16.10.12
08:02
менять не выход - так как после формирования уже не актуально во первых, а во-вторых пробовал - не меняет и все. Более того - менял организацию после открытия, а потом записывал в переменную данные из формы. Отладчик говорит, что в перемнной хранится "Организация2", а на форме выведена "Организация1". Сложность в том, что трудно убедится в названии элемента формы, так как форма пришла с обновлением и в конфигураторе её нет. Но во всех остальных вариантах квитанции поле называется именно так. Запись в переменную из поля происходит, значит такое поле есть.

По поводу изменений - оно того не стоит. Такой вариант внешней обработки вполне закончен, просто не могу успокоится - три дня бьюсь над такой мелочью.

И все же вопрос - как достучаться до Сохраненных значений формы?????

"Гм. А если перед закрытием очищать организацию?" - да уж лучше перед закрытием выбирать нужную, только метод Закрыть("ОК"); не сохраняет значения формы, да и формой этой пользуются и из конфигурации (как раз тогда и нужна "Организация1", тогда очистка нужна там.
18 cw014
 
16.10.12
08:03
o_O

форма пришла с обновлением и в конфигураторе её нет
19 cube033
 
16.10.12
08:06
"форма пришла с обновлением и в конфигураторе её нет"
более того есть код, который добавляет новую форму в список для выбора динамически
20 cube033
 
16.10.12
08:07
СписокФорм = Новый СписокЗначений();
   
   СписокФорм.Добавить("Плат. документ (приказ №454 в соответ. с пост. №354)");
   СписокФорм.Добавить("Плат. документ (с полями для отметки банка)");
   
   Для Каждого ТекФорма Из Метаданные.Отчеты.КВП_КвитанцииИзвещения.Формы Цикл
       Если Найти(ТекФорма.Имя, "Форма_") = 1
          И СтрДлина(ТекФорма.Имя) = СтрДлина("Форма_00") Тогда
           СписокФорм.Добавить(Прав(ТекФорма.Имя, 2));
       КонецЕсли;
   КонецЦикла;
   
   СписокФорм.Добавить("Внешний отчет", "Выбрать из внешних отчетов...");    

   Если ПустаяСтрока(ФормаКвитанции)
      И Не СписокФорм.Количество() = 0 Тогда
       ФормаКвитанции = СписокФорм.Получить(0).Значение;
   КонецЕсли;

   ЭлементыФормы.ФормаКвитанции.СписокВыбора = СписокФорм;
21 Галахад
 
гуру
16.10.12
08:07
(16) Ну, идея такая.
Программно открыть отчет.
Программно установить "Организацию".
Программно закрыть отчет.
Тут все как надо сохранится.
Программно открыть отчет.

Я не сильно извратился?
22 cube033
 
16.10.12
08:09
В сообщении №7 я описывал данный вариант):
"Пробовал, даже кривые варианты вроде: открыть квитанцию  без заполнения, поменять организацию, ЗАКРЫТЬ, потом открыть с заполнением. Но там тоже много подводных камней, а главное - при программном ЗАКРЫТИИ не запоминаются значения формы. "
23 cube033
 
16.10.12
08:09
"Программно закрыть отчет.
Тут все как надо сохранится." Нужен метод закрытия с сохранением, а я такого не знаю
24 cube033
 
16.10.12
08:11
подводные камни типа: при открытии без заполнении выскакивает сначала форма настроек, так как я её не просил, то и в переменной её у меня нет. Приходится извращаться методами Sendkey
25 cube033
 
16.10.12
08:13
На очередном этапе таких эксперемнтов с посылами Enter'a обработка стала грузится минуты на 3, что убедило меня порвать с Wscript.Shell
26 Галахад
 
гуру
16.10.12
08:14
(23) А если закрывать методами Sendkey alt + F4?
27 cube033
 
16.10.12
08:16
Интересно
28 cube033
 
16.10.12
08:22
Как по вашему мнению по итогам такого кода

Отчет = Отчеты.КВП_КвитанцииИзвещения.Создать();
   ФормаОтчета = Отчет.ПолучитьФорму();
   ФормаОтчета.НеЗаполнятьНастройкиПриОткрытии = Ложь; /////Подставляет Орг1
   ФормаОтчета.ФормироватьПриОткрытии          = Ложь;
   ФормаОтчета.Открыть();
       ФормаОтчета.Организация=Организация_АРМ_Уголь_Ассорти; ////Подставляет Орг2

Что должно быть на экране?


У меня Организация1