Имя: Пароль:
1C
1С v8
Ступор с аналогом ТЗ на клиенте
,
0 Команданте
 
06.02.13
11:16
Столкнулся с задачей
На клиенте необходимо перебирать ТЗ и после каждой итерации выдавать вопрос
ТЗ, как известно, на клиенте недоступна
Что делать? Юзать реквизит формы ДФК?
1 Wobland
 
06.02.13
11:19
что за вопрос?
2 МихаилМ
 
06.02.13
11:20
в толстом клиенте ТЗ доступна.
3 Команданте
 
06.02.13
11:22
(2) речь о тонком
4 Команданте
 
06.02.13
11:23
я так понимаю, внутреннее устройство веба не позволяет ему оперировать ТЗ вне реквизитов формы
5 Команданте
 
06.02.13
11:24
не понимаю, почему массивы, структуры доступны, а ТЗ нет
видимо, у него настолько сложная реализация, что необходимо генерить реквизит формы, загружать туда из сервера и юзать это на клиенте
жоскко, но ничего не поделаешь
6 mozzga
 
06.02.13
11:26
(0) массив структур
7 Команданте
 
06.02.13
11:26
(6) ты гений!
8 EasyRider
 
06.02.13
11:28
(7)собственно ТЗ это и есть массив структур
9 Команданте
 
06.02.13
11:29
(8) у которого до фига методов и свойств, которых нет у массива
10 Команданте
 
06.02.13
11:29
в хтмл 5, интересно, есть аналог ТЗ или там тоже надо контейнеры друг в друга класть
11 Aleksey
 
06.02.13
11:32
Есть ТЗ и на тонком и на веб
12 Команданте
 
06.02.13
11:37
(11) да?
13 Команданте
 
06.02.13
11:38
как называется этот класс
14 AaNnDdRrEeYy
 
06.02.13
11:40
(13)данные формы коллекция! при передачи на сервер автоматом конвертиться в ТЗ
15 Команданте
 
06.02.13
11:42
(14) конвертится в ТЗ? первый раз слышу
16 Команданте
 
06.02.13
11:42
ладно, пофик
массив структур
17 Sammo
 
06.02.13
11:43
(6) А массив строк таблицы значений взлетит?
18 Reset
 
06.02.13
11:44
(17) Нет
19 H A D G E H O G s
 
06.02.13
11:44
(8) Нет.
20 H A D G E H O G s
 
06.02.13
11:45
(15) Меньше неси бреда во флудоветках и больше читай и СП. И твой кислотно-щелочной баланс будет в порядке.
21 Команданте
 
06.02.13
11:47
(20) бред обычно несёшь ты
по теме не заметил за собой ляпов
ДФК не конвертится в ТЗ, для этого надо вызвать метод выгрузить
22 H A D G E H O G s
 
06.02.13
11:51
(21) RTFM, как говорится.
23 Команданте
 
06.02.13
11:54
(22)ДанныеФормыКоллекция.Выгрузить
Возвращаемое значение:
Тип: ТаблицаЗначений.
тут ничего про автомат не написано
24 Команданте
 
06.02.13
11:54
может, я чего-то не догоняю
25 H A D G E H O G s
 
06.02.13
11:58
(23) Никто про автомат не говорил

РеквизитФормыВЗначение()

ЗначениеВРеквизитФормы()
26 Команданте
 
06.02.13
12:01
(25) говорили в (14), поэтому я и приподнял брови
27 AaNnDdRrEeYy
 
06.02.13
12:05
(24) да не догоняешь. при вызове контекстного серверного метода платформа гонит форму на сервер предварительно упаковав ее на клиенте а потом распаковывает на сервере, в мосмет распаковки происходит конвертация типов.
28 Команданте
 
06.02.13
12:07
(27) не пойму этого, браза мэн
ДФК мне казалось ДФК и на клиенте и на сервере
а про ДФК я ещё и в (0) написал
вопрос вообще философский был
29 AaNnDdRrEeYy
 
06.02.13
12:17
ну вот смотри

контрагент - реквизит формы с типом ССправочникССылка.Контрагенты
&НаКлиенте
Процедура а()
Сообщить(Строка(ТипЗнч(контрагент))); //тут будет данные формы структура
код = контрагент.код; //так нельзя ошибка
код = б();//а так можно
КонецПроцедуры

&НаСервере
Функция б()
Сообщить(Строка(ТипЗнч(контрагент))); // а тут будет СправочникССылка.Контрагенты
Возврат контрагент.код;
КонецФункции

в момент функции Б() происходит конвертация из типа ДанныеФормыКоллекция в СправочникСсылка.Контрагенты.

То же самое происходит и с другими типами ДанныеФормыКллекция
ДАнныеФормыДерево и т.д
30 Команданте
 
06.02.13
12:24
(29) Строка(ТипЗнч(контрагент)) и на клиенте и на сервере вернёт "Контрагент" (Представление класса, заданное в справочнике)
код = контрагент.код выполнится без ошибок, ибо примитивные типы данных доступны через точку на клиенте
31 Команданте
 
06.02.13
12:24
по ходу вы, товарищ, только начали учить УФ
32 Команданте
 
06.02.13
12:24
а я уже 2 года ипусь над ними (делает грозное лицо)
33 vvp91
 
06.02.13
12:25
(14) > данные формы коллекция! при передачи на сервер автоматом конвертиться в ТЗ
Не происходит никакой конвертации! ДанныеФормыКоллекция на клиенте И на сервере остаются данными формы.

(29) >контрагент - реквизит формы с типом ССправочникССылка.Контрагенты
>в момент функции Б() происходит конвертация из типа ДанныеФормыКоллекция в СправочникСсылка.Контрагенты.
И здесь нет никакой конвертации, поскольку ссылка существует и на клиенте и на сервере.
34 Ursus maritimus
 
06.02.13
12:27
(0)>>На клиенте необходимо перебирать ТЗ и после каждой итерации выдавать вопрос

Передавай своим пользователям от меня искренние соболезнования.
35 Команданте
 
06.02.13
12:27
(34) :)
включу это в каждую итерацию
36 Reset
 
06.02.13
12:29
(29) Смешались в кучу кони, люди
37 wald
 
06.02.13
12:30
(0) кто мешает перебрать строки ТЗ на сервере и там сформировать строку сообщения и выдать ее на клиент?
38 НЕА123
 
06.02.13
12:32
(0)
на клиенте ДанныеФормыКоллекция можно обходить и смотреть свойства.
изменять нельзя, естественно.
39 H A D G E H O G s
 
06.02.13
12:32
(38) Можно менять.
40 H A D G E H O G s
 
06.02.13
12:33
(37) Ничто не мешает сделать это на клиенте.
41 wald
 
06.02.13
12:33
..еще идея, перебирай список значений, где номер каждого значения равен индексу табличной части, в переборе задавай вопрос и (я искренне надеюсь вопрос у тебя будет да/нет) передавай это значение в список. Затем на сервере обработай список
42 Команданте
 
06.02.13
12:34
(37) трабла была в другом, в том, что необходимо получать ответ в каждой итерации
отсюда и возник мой философский вопрос типа того, что реквизиты формы несут двойную функцию
1. Визуальное представление редактируемых данных
2. Скрытые служебные реквизиты
Но можно сделать этот служебные реквизит и видимым типа выдавать ещё одну форму с этим ДФК и чтобы чувак говорил, да, эта ДФК принимается и выбирать ответ для каждой строки в этой форме, а не при итерациях
43 НЕА123
 
06.02.13
12:34
(39)
не знал. спасибо.
44 H A D G E H O G s
 
06.02.13
12:35
Ничто не мешает собрать на клиенте МассивСсылок, отправить в
НаСервереБезКонтекста

Вернуть оттуда Соответстие: Ссылка-<>СтруктураСНужнымиЗначениямиРеквизитов и пользовать на клиенте.
45 H A D G E H O G s
 
06.02.13
12:36
кошмар, и эти люди занимаются УФ.
А потом всякие Евгении Шекины кричат, что УФ гуано.
46 Команданте
 
06.02.13
12:36
(41) (42) изменил парадигму
если клиент должен опрашивать пользователя манипулируя серверным классом, тогда
вынеси блеять этот класс на форму, а не храни в памяти
47 H A D G E H O G s
 
06.02.13
12:37
(46) Много умных красивых слов. Мало толку.
48 Команданте
 
06.02.13
12:38
(47) почему же мало толку
толк как-раз и есть
1. либо массив структур
2. либо визуализированная таблица формы
в первом случае ты технически решаешь задачу, но с точки зрения адекватной формализации неверно
во втором случае ты усложняешь форму, но формализация происходит адекватно
49 Команданте
 
06.02.13
12:39
в этом и состоит умение общаться с УФ
грамотно формализуй бизнес-процесс
в 8.1 такого не было
50 Команданте
 
06.02.13
12:39
УФ жосско ломает мозг, но в правильном направлении
имхо
51 Кокос
 
06.02.13
12:39
(0) СписокЗначений + Структура в качестве элементов
52 wald
 
06.02.13
12:40
(47) Не кричи, не надо. УФ это и правда пока темный лес. Мало того что одну и ту же задачу можно сделать разными способами, так еще и нет однозначности в типовых. Приходится велосипеды изобретать.. конечно следуя генеральной линии партии=))
53 H A D G E H O G s
 
06.02.13
12:42
(48) Напиши какой-нибудь кот. Твои заумные речи я не понимаю.
54 Команданте
 
06.02.13
12:42
(52) это ты верно заметил. в типовых часто грубо нарушаются канонические правила, о которых фирма 1С трубила при выходе 8.2
55 vvp91
 
06.02.13
12:43
>> (48) толк как-раз и есть
Что мешает на клиенте обойти ДанныеФормыКоллекция и спросить подтверждение для каждой строки?
56 H A D G E H O G s
 
06.02.13
12:43
(51) Структура индексирована, на 5000 элементах ты уже получишь серьезный просед в быстродействии.
57 H A D G E H O G s
 
06.02.13
12:45
(56) Ааа, нет, гоню.
58 H A D G E H O G s
 
06.02.13
12:45
(56) У тебя же список будет за строки, структура - за элементы 1-ой строки
59 Кокос
 
06.02.13
12:56
(1) структура это одна строка :) вообще я огромные эксель файлы грузил на 50-60 тыщ строк. ничего не тормозило.
60 H A D G E H O G s
 
06.02.13
12:58
(59) Скажи это пользователям рег. отчетности.
61 Кокос
 
06.02.13
12:58
&НаКлиенте
Функция ПодготовитьТаблицуТоваровADO() Экспорт

   СтрокаПодключения = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source="+xlsFile+"; Extended Properties=""Excel 8.0;""";
   Connection = Новый COMОбъект("ADODB.Connection");
   Connection.Open(СтрокаПодключения);
   
   Попытка
      RecordSet = Connection.Execute("SELECT * FROM [Данные$]");
   Исключение
       Сообщить("Не удалось выполнить запрос к файлу Excel
       |"+ ОписаниеОшибки(),СтатусСообщения.Важное);
       Возврат Неопределено;
   КонецПопытки;
   ТЗ = Новый СписокЗначений;
   ТЗ.Очистить();
   Сч = 0;
   Пока НЕ RecordSet.EOF() Цикл

       Если НЕ ЗначениеЗаполнено(RecordSet.Fields(0).Value) ТОгда
           RecordSet.MoveNext();
           Продолжить;
       КонецЕсли;

       СтрокаМассива = Новый Структура("
       |АртикулПроизвод,    
       |АртикулНоменкл,    
       |ОписаниеНаРусском,    
       |ЕдиницаТарифа,    
       |ТарифБезНДС,
       |ЦенаБезНДС4зн,    
       |ГруппаПродукции,    
       |Activity,    
       |COSL1,    
       |УровеньИерархии1,    
       |COSL2,    
       |УровеньИерархии2,    
       |COSL3,
       |УровеньИерархии3,
       |Коллекции,    
       |СкладскойСтатус1,    
       |CрокТранспортировки1,    
       |МинПартия1,
       |СкладскойСтатус2,    
       |CрокТранспортировки2,    
       |МинПартия2,    
       |ЕдиницаИзмерения,    
       |ШтрихКод,    
       |ДатаЦены,
       |КолВоВ_упаковке1,    
       |КолВоВ_упаковке2,    
       |ИзмененияВТарифе,
       |COSL123,
       |Заблокировано,
       |СнимаетсяСПродаж,
       |ЦеноваяГруппа,
       |СкидкаПоставщика,    
       |ГТД,
       |ВидНоменклатуры,    
       |ГруппаНоменклатуры,    
       |НеМатериалыПроизводства,    
       |НеПродается,    
       |НеПродаетсяЧерезИнтернет,    
       |Производитель,    
       |ГруппаФинУчета,    
       |ГруппаДоступа
       |");

       Сообщить(СокрЛП(RecordSet.Fields(0).Value));
       СтрокаМассива.АртикулПроизвод = СокрЛП(RecordSet.Fields(0).Value);    
       СтрокаМассива.АртикулНоменкл = СокрЛП(RecordSet.Fields(1).Value);    
       СтрокаМассива.ОписаниеНаРусском = СокрЛП(RecordSet.Fields(2).Value);    
       СтрокаМассива.ЕдиницаТарифа = СокрЛП(RecordSet.Fields(3).Value);    
       СтрокаМассива.ТарифБезНДС = СокрЛП(RecordSet.Fields(4).Value);
       СтрокаМассива.ЦенаБезНДС4зн = СокрЛП(RecordSet.Fields(5).Value);    
       СтрокаМассива.ГруппаПродукции = СокрЛП(RecordSet.Fields(6).Value);    
       СтрокаМассива.Activity = СокрЛП(RecordSet.Fields(7).Value);    
       СтрокаМассива.COSL1 = СокрЛП(RecordSet.Fields(8).Value);    
       СтрокаМассива.УровеньИерархии1 = СокрЛП(RecordSet.Fields(9).Value);    
       СтрокаМассива.COSL2 = СокрЛП(RecordSet.Fields(10).Value);    
       СтрокаМассива.УровеньИерархии2 = СокрЛП(RecordSet.Fields(11).Value);    
       СтрокаМассива.COSL3 = СокрЛП(RecordSet.Fields(12).Value);
       СтрокаМассива.УровеньИерархии3 = СокрЛП(RecordSet.Fields(13).Value);
       СтрокаМассива.Коллекции = СокрЛП(RecordSet.Fields(14).Value);    
       СтрокаМассива.СкладскойСтатус1 = СокрЛП(RecordSet.Fields(15).Value);    
       СтрокаМассива.CрокТранспортировки1 = СокрЛП(RecordSet.Fields(16).Value);    
       СтрокаМассива.МинПартия1 = СокрЛП(RecordSet.Fields(17).Value);
       СтрокаМассива.СкладскойСтатус2 = СокрЛП(RecordSet.Fields(18).Value);    
       СтрокаМассива.CрокТранспортировки2 = СокрЛП(RecordSet.Fields(19).Value);    
       СтрокаМассива.МинПартия2 = СокрЛП(RecordSet.Fields(20).Value);    
       СтрокаМассива.ЕдиницаИзмерения = СокрЛП(RecordSet.Fields(21).Value);    
       СтрокаМассива.ШтрихКод = СокрЛП(RecordSet.Fields(22).Value);    
       СтрокаМассива.ДатаЦены = СокрЛП(RecordSet.Fields(23).Value);
       СтрокаМассива.КолВоВ_упаковке1 = СокрЛП(RecordSet.Fields(24).Value);    
       СтрокаМассива.КолВоВ_упаковке2 = СокрЛП(RecordSet.Fields(25).Value);    
       СтрокаМассива.ИзмененияВТарифе = СокрЛП(RecordSet.Fields(26).Value);
       СтрокаМассива.COSL123 = СокрЛП(RecordSet.Fields(27).Value);
       СтрокаМассива.Заблокировано = СокрЛП(RecordSet.Fields(28).Value);
       СтрокаМассива.СнимаетсяСПродаж = СокрЛП(RecordSet.Fields(29).Value);
       СтрокаМассива.ЦеноваяГруппа = СокрЛП(RecordSet.Fields(30).Value);
       СтрокаМассива.СкидкаПоставщика = СокрЛП(RecordSet.Fields(31).Value);    
       СтрокаМассива.ГТД = СокрЛП(RecordSet.Fields(32).Value);
       СтрокаМассива.ВидНоменклатуры = СокрЛП(RecordSet.Fields(33).Value);    
       СтрокаМассива.ГруппаНоменклатуры = СокрЛП(RecordSet.Fields(34).Value);    
       СтрокаМассива.НеМатериалыПроизводства = СокрЛП(RecordSet.Fields(35).Value);    
       СтрокаМассива.НеПродается = СокрЛП(RecordSet.Fields(36).Value);    
       СтрокаМассива.НеПродаетсяЧерезИнтернет = СокрЛП(RecordSet.Fields(37).Value);    
       СтрокаМассива.Производитель = СокрЛП(RecordSet.Fields(38).Value);    
       СтрокаМассива.ГруппаФинУчета = СокрЛП(RecordSet.Fields(39).Value);    
       СтрокаМассива.ГруппаДоступа = СокрЛП(RecordSet.Fields(40).Value);
       ТЗ.Добавить(СтрокаМассива);
       RecordSet.MoveNext();
   КонецЦикла;
   RecordSet.Close();
   Connection.Close();

   СтруктураТаблиц = Новый Структура;
   СтруктураТаблиц.Вставить("ТаблицаЗначений",ТЗ);
   Адрес = ПоместитьВоВременноеХранилище(СтруктураТаблиц,ЭтаФорма.УникальныйИдентификатор);
   Возврат Адрес;
КонецФункции
62 Кокос
 
06.02.13
12:59
(60) хм. ничего не понял :) а что там?
63 Кокос
 
06.02.13
13:00
(6) в бассейн кстати один пойдешь: Пустой мидифайл для звонка. я в монастырь :)
64 Mort
 
06.02.13
13:00
Интересно на каком дцатом вопросе пользователь психанет,  забъет х и уйдет пить пиво.
65 НЕА123
 
06.02.13
13:01
(61) в веб работает?
66 Кокос
 
06.02.13
13:25
(65) а почему не должно? а вообще хз...
67 НЕА123
 
06.02.13
13:37
(66)
у меня в веб-клиненте с COMобъектами(ADODB) ни на клиенте, ни на сервере не работает.
наверное, должно. что-то, где-то не донастроил. или хз...
бум ковыряться. РТФМ.
68 H A D G E H O G s
 
06.02.13
13:40
(67) Только IE. Только хардкорр!
69 mistеr
 
06.02.13
13:51
(61) Ну и простыня. Цикл по полям не хочешь сделать?
70 НЕА123
 
06.02.13
13:52
(68)
эх. в веб и ADODB ламернее меня только дуб. значится откажемся от затеи.
ЗЫ! "дуб" к Уважаемому Дуб не имеет никакого отношения!
71 H A D G E H O G s
 
06.02.13
13:56
(70) Проблема не в ADO
Проблема в том, что COM поддерживает только IE
72 H A D G E H O G s
 
06.02.13
13:57
Огнелис на 2010 точно не поддерживал, как и Опера.
Как остальное зверье - не знаю.
73 H A D G E H O G s
 
06.02.13
13:58
(67) На Сервере должно работать, проблема на вашей стороне.
74 Кокос
 
06.02.13
14:13
(73) (63) тебе было :) А с фигали кстати на сервере должно это работать?:) чо серьезно чтоли работает?
75 H A D G E H O G s
 
06.02.13
14:14
(74) Ясно. Я попробую коллегу заманить :-)

Ну а че бы нет? Че бы ему на сервере не поработать?
76 Кокос
 
06.02.13
14:16
(75) ну сервер какбы предполагает имхо что дров нет файлов нет :) чистое общение с памятью и процом внутри "матрицы" :)
РОаботалобы на серваке сталбы я писать клиентскую функцию и морочиться с списоком значений :) Ты где на сервере файл возьмешьто?:)
77 H A D G E H O G s
 
06.02.13
14:17
(74) Обычным ADO - ваще милое дело.
Ну а всяким интерфейсным Excel.Application - тоже в путь, только у службы апача режим взаимодействия с рабочим столом выставить. Ну как то так.
78 Кокос
 
06.02.13
14:17
(69) админ оракловый неадекватный. может поменять поля местами и тогда цикл не пройдет :)
79 Кокос
 
06.02.13
14:18
(77) ну у меня вообще толстый клиент файловая версия :)
80 mistеr
 
06.02.13
14:31
(78) Тем более, сам бог велел перебирать в цикле.

P.S. Не понял, причем Oracle, если запрос к Excel.
81 Кокос
 
06.02.13
14:43
(80) да из оракла эксельник выгружается :)