Имя: Пароль:
1C
1С v8
Опять Ут и УФ, помогите разобраться
0 Kigo_Kigo
 
09.02.18
13:21
Ребят, честно я тока учусь этим УФ, не пинайте сильно, лузер в в 8.3-ке, но честно пытаюсь во всем разобраться, сам серт. спец по клюшкам, вот настало для меня время пинать снеговиков с УФ, смотрите такая задача, есть реквизит на форме таблица значений(та которая не хранимая в бд, хранить ее смысла нет), на клиенте вызываю процедуру на сервере,эта процедура обрашается в функцию общего модуля, она выплевывает мне ответом таблицу значений, мне этой таблицей надо заполнить таблицу значений на форме
раньше работало вот так
ИнформацияОтСервера = Окомпании.ПолучитьИнформациюОКомпании(Объект.КодСкидки);
теперь он меня посылет по адресу
Нельзя изменять поле, содержащее объект данных формы
я понимаю что теперь так делать низяя, подскажите как надо?
1 Рэйв
 
09.02.18
13:27
ЗначениеВРеквизитФормы() тебе в помощь.
2 Рэйв
 
09.02.18
13:28
только тз должна совпадать по именам и количеству полей
3 AlexTim03
 
09.02.18
13:28
ЗначениеВРеквизитФормы(ИнформацияОтСервера , "ИмяТаблицыНаФорме")
4 AlexTim03
 
09.02.18
13:30
Или обойти полученную таблицу и добавлять запись построчно:
Для каждого Строка из ИнформацияОтСервера  Цикл
  НоваяСтрока = ТвояТаблицаНаФорме.Добавить();
   ////тут заполнение
КонецЦикла
5 Kigo_Kigo
 
09.02.18
14:02
Теперь вроде прогружается , но как теперь работать то с ней
    ИскомаяСтрокаБаллов = ИнформацияОтСервера.Найти("КоличествоИмеющихсяБаллов","Поле");
Метод не обнаружен Найти, на клиенте нельзя возится с ТЗ?
6 Kigo_Kigo
 
09.02.18
14:05
Это трындец какой то задачу которую бы в клюшках и 8.2 написал бы за 10 минут, в УФ бьюсь уже 2-й день
7 Kigo_Kigo
 
09.02.18
14:28
Я понимаю вопрос ламера
Ребят как теперь на "ты" обратится к этой таблице значений, и найти значения которые меня интересуют?
8 ildary
 
09.02.18
14:31
(5) зачем на клиенте возиться с ТЗ, если она расположена на сервере, а на клиенте не она, а её отображение.
9 drcrasher
 
09.02.18
14:32
ТЗ - реквизит формы. на сервере заполняшь её данными (4) и там же всё дёргаешь.
между клиентом и сервером ТЗ не ездит, на клиенте вообще нет таблицы значений
10 Kigo_Kigo
 
09.02.18
14:32
(8) эта ТЗ болтается как реквизит формы
11 Kigo_Kigo
 
09.02.18
14:32
(9) Понял, сейчас попробую
12 Rema Dan
 
09.02.18
14:33
(5) ТЗ в форме представляет из себя ДанныеФормыКоллекция. Для неё нет найти, но есть НайтиСтроки()
13 dezss
 
09.02.18
14:49
(6) угу...но когда втянешься, понравится логичность и стройность УФ.
(12) + 1...зачем нагружать сервер, если реквизит можно на клиенте изменять
14 xxTANATORxx
 
09.02.18
14:50
(12)это из-за того что предполагается что твой код должен автоматом работать как и в тонком клиенте так и в веб клиенте, а это накладывает требования к разработке
15 FIXXXL
 
09.02.18
14:53
(13) (12)
ДанныеФормыКоллекция (FormDataCollection)
НайтиСтроки (FindRows)

Доступность:

Тонкий клиент, веб-клиент, сервер, толстый клиент, мобильное приложение(клиент), мобильное приложение(сервер).
Вызов метода выполняет обращение к серверу.

внимание на последнюю строку :)
лучше все на сервере
16 Rema Dan
 
09.02.18
15:01
(15) ТС не указал работает ли он в серверном или клиентском коде формы. Без использования РеквизитФормыВЗначение() его таблица всё равно будет ДанныеФормыКоллекция.
17 dezss
 
09.02.18
15:03
(15) интересно, а он делает контекстный вызов или нет...
18 Kigo_Kigo
 
09.02.18
15:05
(12) Занятненько
Пример:

ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("Номенклатура", ТекТовар);
НайденныеСтроки = Состав.НайтиСтроки(ПараметрыОтбора);

то есть надо еще нагрузить структурой, полить в ответ массив, перебрать массив в поиске нужного значения?
Ну офигеть логика, вместо простого найти
или есть более гуманные способы?
19 drcrasher
 
09.02.18
15:06
(17) контекстный конечно. без контекста просто не существуют формы на сервере
20 Вафель
 
09.02.18
15:06
Можно и так
ЭтаФорма.Таблица.Загрузить(Ответ);
21 drcrasher
 
09.02.18
15:07
(18) а зачем перебирать? в структуру складываешь все параметры отбора "И" и получаешь 1 строку. не?
если у тебя точно не повторяется номенклатура, то на сервере так тз.найти() можно
22 FIXXXL
 
09.02.18
15:08
(16) ДанныеФормыКоллекция (FormDataCollection)
Загрузить (Load)
23 Kigo_Kigo
 
09.02.18
15:15
(21) Я по этому и храню до закрытия документа ТЗ как реквизит формы, потому что к ней еще надо обратится из других модулей
24 drcrasher
 
09.02.18
15:19
(23) что-то мне посказывает, что ты решаешь задачу изначально не верным способом
25 Kigo_Kigo
 
09.02.18
15:25
(24) Я пытаюсь перенести то что работало на прежних версиях, на новую, то что когда то дорабатывал на 8.2, а теперь вот это все :)
параллельно пытаюсь разобраться, как это все фурычит по новому, я понимаю что здесь бы надо сделать через структуру, тем более что в тз 2 колонки, но с ТЗ тоже надо научиться работать
26 dezss
 
09.02.18
15:26
(25) решать задачу с использованием ТЗ только по-тому, что "с ТЗ тоже надо научиться работать", как-то неправильно
27 drcrasher
 
09.02.18
15:30
(25) если две колонки и есть номенклатура, я бы смотрел в сторону соответствия. а тз - часто зло %)
28 Kigo_Kigo
 
09.02.18
15:30
(26) Потому что эта ТЗ в других блока фигурирует, я имел ввиду, что запрос на сервер в общем модуле можно было сделать и получить ответ в структуре, но ее тоже надо сохранить, что бы в процессе пользоваться из других модулей, а так же там некоторые дае читаются при проведении, точнее должны считываться, я еще до этого не добрался
29 drcrasher
 
09.02.18
15:31
(28) курить галку "повторного использования" у общих модулей
30 Kigo_Kigo
 
09.02.18
15:32
(27) Там вебзапрос, куда вываливаются данные о клиенте, скидке, баллах и так далее, это все я уже адаптировал,вот теперь пытаюсь это все форме распихать
31 Kigo_Kigo
 
09.02.18
15:38
И еще, что бы не плодить тем спрошу, раньше вот такой код работал
    ФормаЗапросаСкидки = ЭтотОбъект.ПолучитьФорму("ФормаСкидки");
    ИнформацияОтСервера = ФормаЗапросаСкидки.ОткрытьМодально();

как теперь открыть допольнительную форму этого же документа?
32 dezss
 
09.02.18
15:40
(31) ОткрытьФормуМодально
33 Kigo_Kigo
 
09.02.18
15:43
(32) {Документ.РеализацияТоваровУслуг.Форма.ФормаДокумента.Форма(7867)}: Метод объекта не обнаружен (ПолучитьФорму)
ФормаЗапросаСкидки = ЭтотОбъект.ПолучитьФорму("ФормаСкидки");
34 dezss
 
09.02.18
15:46
(33) я не писал получитьформу
Глобальный контекст (Global context)
ОткрытьФормуМодально (OpenFormModal)
Вариант синтаксиса: По названию

Синтаксис:

ОткрытьФормуМодально(<ИмяФормы>, <Параметры>, <Владелец>, <НавигационнаяСсылка>)
Параметры:

<ИмяФормы> (обязательный)

Тип: Строка.
Имя формы. Образуется как полный путь к объекту метаданных Форма (например, "Справочник.Контрагенты.Форма.ФормаОбъекта") или как полный путь к прикладному объекту, дополненный именем формы по умолчанию (например, "Справочник.Товары.ФормаВыбора").
Имена форм по умолчанию:
ФормаОбъекта (ObjectForm) - форма объекта по умолчанию;
ФормаГруппы (FolderForm) - форма группы по умолчанию;
ФормаЗаписи (RecordForm) - форма записи регистра по умолчанию;
ФормаСписка (ListForm) - форма списка по умолчанию;
ФормаВыбора (ChoiceForm) - форма выбора по умолчанию;
ФормаВыбораГруппы (FolderChoiceForm) - форма выбора группы по умолчанию;
ФормаКонстант (ConstantsForm) - форма констант по умолчанию для обычного режима, установленная как форма констант для конфигурации;
Форма (Form) - форма константы, отчета и обработки по умолчанию;
ФормаНастроек (SettingsForm) - форма настроек отчета по умолчанию;
ФормаЗагрузки (LoadForm) - форма загрузки настроек;
ФормаСохранения (SaveForm) - форма сохранения настроек;
ФормаВарианта (VariantForm) - форма редактирования варианта отчета;
ФормаПоиска (SearchForm) - форма полнотекстового поиска в данных.
<Параметры> (необязательный)

Тип: Структура.
Параметры формы. Ключ структуры - имя параметра, а значение - значение параметра формы. Имя элемента должно совпадать с именем параметра структуры.
П = Новый Структура("Ключ", Поставщик);
Форма = ПолучитьФорму("Справочник.Контрагенты.ФормаОбъекта", П);
Форма.Открыть();


<Владелец> (необязательный)

Владелец формы - форма или элемент управления другой формы.
<НавигационнаяСсылка> (необязательный)

Тип: Строка, Неопределено.
Если содержит значение, отличное от Неопределено, то это значение присваивается свойству НавигационнаяСсылка формы, полученной в результате вызова данного метода, и свойство АвтоНавигационнаяСсылка этой формы устанавливается в Ложь.
Значение по умолчанию: Неопределено.
35 Вафель
 
09.02.18
15:48
И не забывать что модально то теперь нельзя, нужно на оповещениях
36 dezss
 
09.02.18
15:49
(35) иногда можно)
37 Вафель
 
09.02.18
15:50
(36) вроде в послдених уже запретили, разве нет?
38 dezss
 
09.02.18
15:51
(37) ну это на типовых...что у ТС, я хз...
39 Вафель
 
09.02.18
15:52
(38) ну вроде он в теме указывет УТ
40 dezss
 
09.02.18
15:52
(39) и что...не факт, что она типовая...да и не известно, какая версия...
41 Kigo_Kigo
 
09.02.18
15:57
СсылкаНаЭтотОбъект  = Новый Структура("Ключ",ЭтотОбъект);

    ОткрытьФормуМодально("Документ.РеализацияТоваровУслуг.Форма.ФормаСкидки",,,СсылкаНаЭтотОбъект);//ФормаЗапросаСкидки.ОткрытьМодально();

Пишет, что использование модального режима запрещено, но все равно открывает модально, но новый документ, а мне надо дополнительную форму этого объекта
42 Вафель
 
09.02.18
15:58
я же говорил )))
43 drcrasher
 
09.02.18
15:59
не надо открыть форму модально, надо открыть форму с блокировкой всего интерфеса
44 drcrasher
 
09.02.18
16:00
за "модально" и прочие выбратьзначение() зао "1с" разворачивает конфы в пять минут - это грубое нарушение в целом и "совместимо" в частности
45 drcrasher
 
09.02.18
16:02
(41) не этотОбъект, а этотОбъект.Ссылка.
через структуру исключительно ссылку можно передать
46 Kigo_Kigo
 
09.02.18
16:05
(43) РукаЛицо, во набуивертили, прастихоспади, а это как если не секрет?
(44) Там ситуация такая чтобы пользователь не мог вильнуть влево вправо, запрос с веб сервера скидки и балов, ввод списания баллов, отправить данные на вебсервер, закрытие проведение, ТолькоПросмотр
(45) Ругается на Ссылку , этотОбъект.Ссылка. так я сразу написал, не пракаттило
47 Mankubus
 
09.02.18
16:07
(46) объект.ссылка
48 Kigo_Kigo
 
09.02.18
16:10
(47) Открывает, все равно новый, попробую не модально
49 drcrasher
 
09.02.18
16:10
(46) ОткрытьФорму() и в последнем параметре РежимОткрытияОкнаФормы.БлокироватьВеcьИнтерфейс
50 dezss
 
09.02.18
16:11
(48) а ты точно в тот параметр структуру пихаешь?
вроде ж параметры открытия 2-й параметр?
51 drcrasher
 
09.02.18
16:13
(50 точно.  а не вроде
52 dezss
 
09.02.18
16:14
(51) Так он структуру в навигационную ссылку пихал? О_о
а чего тогда не было ошибки о том, что параметры не те?
53 drcrasher
 
09.02.18
16:16
(52) спасибо товарищам из 1с за это: всё, что имеет строковое представление (в данном случае "Структура") может быть записано в реквизит типа строка.
54 Kigo_Kigo
 
09.02.18
16:27
(49) (50) (51) (52) (53) (47) (49) (47)
Спасибо, взлетело, открывается с блокировкой интерфейса, без предупреждений
55 Kigo_Kigo
 
09.02.18
16:49
Ога фигушки, код то продолжает выполняться, а мне надо чтобы он дождался закрытия формы, так что наверно без модально никак
56 drcrasher
 
09.02.18
16:51
(55) поздравляю, вы познакомились с асинхронными вызовами.

курить открытьФорму() параметр ОписаниеОповещенияОЗакрытии и Новый ОписаниеОповещения.


это не страшно, но по первости может быть неочевидно
57 drcrasher
 
09.02.18
16:54
+(56) кратенько:
1. открыть форму с указанием оповещения;
2. потыкать кнопочки и закрыть форму своей кнопкой Закрыть(ДанныеКоторыеНужноОбработать);
3. в обработчике оповещения (РезультатИзФормы, ДопПараметры) _экспорт_ если результатИзФормы не равно неопределно - чтото сделать с результатом из формы.
58 Sapiens_bru
 
09.02.18
17:43
(56) "это не страшно, но по первости может быть неочевидно"
Я тут на днях курил коллбэки в фрагменты на андроиде через интерфейсы. Вроде вкурил.
После этого одинЭсные оповещения кажутся добрыми, милыми, будто базовыми понятиями.

Воистину говорят - хочешь полюбить 1С УФ , ознакомься с разработкой клиент-серверных приложений каком-то "настоящем" языке и общемировом фреймворке. Сразу ясно становится почему и как оно движется и сколько сил/нервов сэкономила 1С своим программистам.
59 Kigo_Kigo
 
09.02.18
17:47
(56) (57) Делал вот так, почему перед открытием она скачет по всем функциям и процедурам?
И есстественно вываливается с ошибкой в попытке прочитать не прочитаемое, прочитаемое должно из формы прилететь


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

&Наклиенте
Процедура ОсновныеДействияФормыСкидкаUDS(Кнопка)
    //ФормаЗапросаСкидки = Объект.ПолучитьФорму("ФормаСкидкиUDS");
    СсылкаНаЭтотОбъект  = Новый Структура("Ключ",Объект.Ссылка);

    ОткрытьФорму("Документ.РасходнаяНакладная.Форма.ФормаСкидки",СсылкаНаЭтотОбъект,,,,,ВыборЗавершение("ВыборЗавершение", Объект));//ФормаЗапросаСкидки.ОткрытьМодально();
    
    
КонецПроцедуры
#КонецОбласти
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший