Имя: Пароль:
1C
1С v8
1С 8.3 // Интерактивные операции недоступны
,
0 Kaavan
 
12.08.13
16:14
Добрый день!
Пишу разработку на 8.3, хотя думаю такое может выскочить и на 8.2.

Итак, как получить форму новой группы справочника?

На клиенте:
    ФормаНовойГруппы = ПолучитьФорму("Справочник.КошелькиИСчета.ФормаГруппы");
Всё было бы прекрасно, если бы платформа не подсовывала мне в форме группы элемент справочника.

Тогда был найден другой, работающий вариант:
&НаСервере
Процедура Команда1НаСервере()
        ФормаНовогоСчета = Справочники.КошелькиИСчета.ПолучитьФормуНовойГруппы();
        ФормаНовогоСчета.Открыть();
КонецПроцедуры

И несмотря на то, что вызов идет на сервере, это работает.

Периодически я обнуляю свою базу, создавая с нуля и загружая в неё конфу.
И вот сегодня вдруг этот код перестал работать с ошибкой "Интерактивные операции недоступны".
однимаю резервную копию, накатываю на неё эту же конфигурацию - работает.

Может быть дело в каких-то уж очень глубинных настройках базы-платформы-совместимости?
Есть соображения?

//Кстати, не могу в синтаксис-помощнике найти описание ПолучитьФормуНовойГруппы и ПолучитьФормуНовогоЭлемента.
Подозрительно всё это.
1 Kaavan
 
12.08.13
16:15
Платформа 8.3.3.687
2 Лефмихалыч
 
12.08.13
16:16
прав нет на форму эту
3 Нуф-Нуф
 
12.08.13
16:18
(2) права на форму? это фишка 8.3?
4 Fragster
 
модератор
12.08.13
16:21
толстый-тонкий клиент?
5 Лефмихалыч
 
12.08.13
16:31
(3) прав на интерактивные действия - просмотр, редактирование и т.д. На все, для чего нужна форма.
6 Kaavan
 
13.08.13
02:43
(4) Да-да, всё дело оказалось в клиенте. Новая база стала запускаться в режиме тонкого клиента и всё работать перестало. В толстом клиенте норм.
7 Kaavan
 
13.08.13
02:45
Интересно, говорит ли отсутствие в синтаксис-помощнике для управляемого описание метода ПолучитьФормуНовойГруппы() о недокументированной возможности?
Похоже нужно просто обратить внимание разработчиков 1С на косяк с методом ПолучитьФорму("Справочник.КошелькиИСчета.ФормаГруппы")
8 Kaavan
 
13.08.13
02:48
Кстати, не подскажите, где та форма, в которой можно написать разработчикам 1С об ошибке?
9 hhhh
 
13.08.13
02:54
(8) вообще-то это ваша недоработка. Элементарно не додумались сначала прочитать документацию, а потом уже программировать.

Справочники.КошелькиИСчета.ПолучитьФормуНовойГруппы() - это для толстого клиента, на тонком на сервере не будет у вас работать.
10 Kaavan
 
13.08.13
05:02
(9) Насчет недоработки согласен, но пришлось её использовать только от того, что не отработал метод
ПолучитьФорму("Справочник.КошелькиИСчета.ФормаГруппы")

Форма получается, но записывает она элемент, а не группу. Вот это неправильно. Поэтому пришлось искать альтернативу.

Сможете ли создать группу и открыть форму, не записывая её программно другим способом?
11 Kaavan
 
13.08.13
05:05
Ну и еще вопрос.
Чисто гипотетически: могу ли я в конфигурации задать основной режим запуска для конфигурации (толстый, а не тонкий, например).
Или вообще запретить тонкий?
Есть такая возможность?

Что касается своей программы, разумеется буду переделывать в сторону кошерного "ПолучитьФорму()", только с группами пока неясно как быть.
12 Kaavan
 
13.08.13
16:59
Решил я более менее аккуратно всё:

ФормаНовогоСчета = ПолучитьФорму("Справочник.КошелькиИСчета.ФормаГруппы");

А проблему с группой я обошел с помощью маленькой хитрости в форме самой группы. Оцените ;)

&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
    Если НЕ ТекущийОбъект.ЭтоГруппа Тогда
        НоваяГруппа = Справочники.КошелькиИСчета.СоздатьГруппу();
        ЗаполнитьЗначенияСвойств(НоваяГруппа, ТекущийОбъект, , "Владелец, Синхронизировать, Закрыт");
        НоваяГруппа.Записать();
        
        ТекущийОбъект = НоваяГруппа;
    КонецЕсли;        
КонецПроцедуры
13 Kaavan
 
13.08.13
17:03
Не, показалось.
Замена не вышла.
нужно давать отказ, но в этом случае не закрывается форма группы :(
14 ИсчадиеADO
 
13.08.13
17:04
(10) в параметры передать "ЭтоГруппа" = ложь?
15 ИсчадиеADO
 
13.08.13
17:06
тьфу блин, =истина, конечно
16 Kaavan
 
13.08.13
17:09
(15) Если так
ТекущийОбъект.ЭтоГруппа = Истина;
то не работает
//Поле объекта недоступно для записи (ЭтоГруппа)
17 Kaavan
 
13.08.13
17:10
Похоже всё же ждать исправления.
Инетерсно, в 1Сv82 та же проблема?
18 ИсчадиеADO
 
13.08.13
17:11
(16) че?
ПараметрыНовойФормы = новый структура("ЭтоОбект", ложь);
ОткрытьФорму("..ФормаГруппы", ПараметрыНовойФормы);
19 Kaavan
 
13.08.13
17:12
(18) А так не пробовал.
Мы в параметрах можем задать начальные значения реквизитов?
20 Kaavan
 
13.08.13
17:14
Уррраа!!!!! Заработала!

        ПараметрыНовойФормы = Новый Структура("ЭтоГруппа", Истина);
        ФормаНовогоСчета = ПолучитьФорму("Справочник.КошелькиИСчета.ФормаГруппы", ПараметрыНовойФормы);
21 ИсчадиеADO
 
13.08.13
17:14
книжечки читать нужно
22 Kaavan
 
13.08.13
17:14
(18) Спасибо!
23 Kaavan
 
13.08.13
17:15
(21) Каюсь, управляемое всё больше методом тыка..
24 ИсчадиеADO
 
13.08.13
17:15
(18) "ЭтоОбект" - нда, чет я сам не то пишу :)
25 ИсчадиеADO
 
13.08.13
17:16
ТС, а как это у тебя сей кусок

&НаСервере
Процедура Команда1НаСервере()
        ФормаНовогоСчета = Справочники.КошелькиИСчета.ПолучитьФормуНовойГруппы();
        ФормаНовогоСчета.Открыть();
КонецПроцедуры

может работать?
26 banco
 
13.08.13
17:22
(25) наверное толстый клиент обычное приложение
27 ИсчадиеADO
 
13.08.13
17:23
(25) и?  
&НаСервере ведь?
28 Kaavan
 
13.08.13
17:25
(25) Сам удивился, но на толстом клиенте вполне себе.
Я так и подумал, что наверное на сервере форму создает оттуда и инициализирует открытие.

Но судя по отсутствию метода ПолучитьФормуНовойГруппы() в синтаксис-помощнике в управляемом режиме говорит о побочных эффектах.

(26) Толстый клиент управляемое приложение.
Разработка полностью управляемая.
29 ИсчадиеADO
 
13.08.13
17:28
вах! точна, на толстом клиенте упр.приложение

ФормаНовогоСчета = Справочники.Контрагенты.ПолучитьФормуНовойГруппы();
    ФормаНовогоСчета.Открыть();
    
    #Если НаСервере Тогда
        Сообщить("НаСервере");
    #КонецЕсли
    #Если Сервер  Тогда
        Сообщить("Сервер");
    #КонецЕсли
    #Если НаКлиенте Тогда
        Сообщить("НаКлиенте");
    #КонецЕсли
    #Если Клиент  Тогда
        Сообщить("Клиент");
    #КонецЕсли


грит:
НаСервере
Сервер
Клиент
30 Kaavan
 
13.08.13
17:39
(29) Это значит, что в толстом клиенте &НаСервере доступны оба контекста?