|
Передать ТЗ с сервера на клиента | ☑ | ||
---|---|---|---|---|
0
leon92
22.01.19
✎
21:13
|
Ребят, Получил на Сервере ТЗ список листов в эксель файле
&НаСервере Процедура ОткрытьНаСервере(Наименование) Ексель = Новый COMОбъект("Excel.Application"); НомерЛиста = 2; файл = Ексель.WorkBooks.Open(ПолеВвода); Лист = файл .WorkSheets(НомерЛиста); СписокЛистов = Новый СписокЗначений; Для Каждого ТекущийЛист Из файл .WorkSheets Цикл СписокЛистов.Добавить(ТекущийЛист.Name); КонецЦикла; Создал поле выбора листа на форме &НаКлиенте Процедура ВыберитеНомерЛистаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) Что надо написать, чтобы в этом поле отобразился полученный список листов? |
|||
1
МихаилМ
22.01.19
✎
21:19
|
"ребята" на подростковых форумах
|
|||
2
leon92
22.01.19
✎
21:24
|
что ж ты тут делаешь тогда
|
|||
3
Fram
22.01.19
✎
21:29
|
(0) надо вызвать сервер и дождаться ответа от сервера со списком
|
|||
4
Fram
22.01.19
✎
21:32
|
правда возникает вопрос зачем открывать excel на сервере. почему бы на клиенте не открыть. ресурс недоступен с клиента?
|
|||
5
OldCondom
22.01.19
✎
21:51
|
Открывай через ado, открывай на клиенте
|
|||
6
palsergeich
22.01.19
✎
22:15
|
А сейчас дядя Паша раскажет страшную вещь.
На сервере путь, который Вы вводите на форме может быть недоступен. |
|||
7
palsergeich
22.01.19
✎
22:16
|
И вот такой отлаживаешь дома в уютной песочнике на файловой и все хорошо.
А потом релизишь клиенту и привет факап. |
|||
8
Сияющий в темноте
22.01.19
✎
22:17
|
список передается на клиента и через ПоказатьВыборЗначения из него можно выбирать.
только,когда мы ушли на клиента,на сервере эксель погиб вместе со всем остальным. |
|||
9
palsergeich
22.01.19
✎
22:17
|
А пот теме открой для себя паттерн: Массив структур.
На собеседованиях спрашивают чуть реже чем всегда. |
|||
10
Смотрящий
22.01.19
✎
22:21
|
(7) Да и пох, клиент чехлит.
|
|||
11
palsergeich
22.01.19
✎
22:24
|
(10) Вроде как прошли те времена.
Сейчас клиент как правило платит тыщу, а мозг сушит на 10. |
|||
12
Смотрящий
22.01.19
✎
22:27
|
(11) Т.е. ты убеждаешь что клиенту надо, реализовываешь это надо, потом защищаешь счет выставленный за надо ?
Вот это факап. |
|||
13
leon92
22.01.19
✎
22:33
|
Есть у кого Код примера не? (0)
|
|||
14
palsergeich
22.01.19
✎
22:39
|
(12) Нет потом слушаешь что за это 1000 рублей много, племянник за 500 сделает, а давай еще сделай это...
Это уже давно пройденный этап, но таких мозготрахов ну просто дофигищщу. (13) А ЗП я тоже за тебя получу? Я и путь реализации и опасные места указал. Остальное гуглится за 3 минуты. |
|||
15
palsergeich
22.01.19
✎
22:53
|
Тема названа некорректно.
Вариант 1: у элемента ставится режим выбора из списка и в список загружается список, полученный с сервера. Вариант 2. На клиенте пишешь стандартнаяобработка = ложь; ДанныеВыбора = твой список. Но есть ньюанс. В обработчиками событий элементов формы категорически не рекомендуются контекстные серверные вызовы. Это ведёт иногда к багам |
|||
16
palsergeich
22.01.19
✎
22:58
|
Я бы написал так
&НаСервереБезКонтекста // ИМХО должно быть &НаКлиенте Функция СписокЛистовФайла(ПутьКФайлу) Ексель = Новый COMОбъект("Excel.Application"); НомерЛиста = 2; файл = Ексель.WorkBooks.Open(ПутьКФайлу); Лист = файл .WorkSheets(НомерЛиста); СписокЛистов = Новый СписокЗначений; Для Каждого ТекущийЛист Из файл .WorkSheets Цикл СписокЛистов.Добавить(ТекущийЛист.Name); КонецЦикла; Возврат СписокЛистов; КонецФункции Создал поле выбора листа на форме &НаКлиенте Процедура ВыберитеНомерЛистаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; ДанныеВыбора = СписокЛистовФайла(ПолеВвода); КонецПроцедуры |
|||
17
leon92
22.01.19
✎
22:59
|
(15) вариант второй пробовал. переменная не определена
ДанныеВыбора = СписокЛистов |
|||
18
palsergeich
22.01.19
✎
22:59
|
(17) СМ (16)
|
|||
19
Смотрящий
22.01.19
✎
23:01
|
(14) Так пусть племянник и делает, кули ко мне то обратились ?
|
|||
20
BeerHelpsMeWin
22.01.19
✎
23:02
|
Зачем на сервере открывать непонятный эксель и как этот эксель там вообще оказался?
|
|||
21
BeerHelpsMeWin
22.01.19
✎
23:03
|
(6) а потом приходишь к клиенту, а там опенофис, ага :)
ну или просто линукс :) |
|||
22
palsergeich
22.01.19
✎
23:04
|
(19) Племянника до актов нет, а работа сделана. Риск невозвратных потерь. Торгуются так. Типа или давай скидос\доп работы или нихера не получишь.
(20) Это за рамками задачи, но я об этом уже писал. |
|||
23
leon92
22.01.19
✎
23:04
|
(18) есть ньюанс...код уже готовый, состоит примерно из 50-70 строк...взять и переименовать процедуру в функцию я не могу. Просто когда дописал код, приспичило сделать поле выбора...как без функции сделать?
|
|||
24
palsergeich
22.01.19
✎
23:06
|
(23) Процедура от ффункции отличается тем, что:
У функции есть оператор ВОЗВРАТ. Код, после попадания на оператор ВОЗВРАТ не выполняется. Если ты переименуешь процедуру в функцию и возврат сделаешь на самой последней строке - ничего не сломается. |
|||
25
palsergeich
22.01.19
✎
23:08
|
(24) И функция возвращает значение. но это не относится к телу функции
С точки зрения кода внутри функция конецФункции отличие только в (24) |
|||
26
Смотрящий
22.01.19
✎
23:08
|
(22) Шантаж ? Вариантов действий несколько.
Начиная от съема доработок, заканчивая принятием невозвратной потери. |
|||
27
palsergeich
22.01.19
✎
23:10
|
(26) На старте карьеры рук под таких гнулся, и вместо премии процентом у меня был чистый оклад.
Было дико противно. Наверное по этому тот франч и загнулся в итоге. |
|||
28
palsergeich
22.01.19
✎
23:16
|
А еще, что бы не дклать процедура-> функция, можно создать Реквизит формы СписокЛистов, и он будет глобальным для клиента и контекстного серверного вызова и перезаполнится в процедуре.
|
|||
29
palsergeich
22.01.19
✎
23:16
|
Тип значения - список значенйи
|
|||
30
leon92
22.01.19
✎
23:25
|
(28) так у меня и есть реквизит оно же поле
|
|||
31
palsergeich
22.01.19
✎
23:25
|
Это так не работает.
|
|||
32
palsergeich
22.01.19
✎
23:27
|
Тогда тебе не нужно ВыберитеНомерЛистаНачалоВыбора это событие
|
|||
33
leon92
22.01.19
✎
23:28
|
(24) сделал так, почти работает. но в коде указан номерЛиста = 2
и еще есть переменная Лист закоментировать не могу они в коде хорошо подвязаны... то есть при выборе из списка листа допустим третьего все равно грузится второй |
|||
34
leon92
22.01.19
✎
23:29
|
(32) так и есть
|
|||
35
leon92
22.01.19
✎
23:30
|
(32) &НаКлиенте
Процедура ВыберитеНомерЛистаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; ДанныеФормы = ОткрытьНаСервере(ВыберитеНомерЛиста); КонецПроцедуры |
|||
36
palsergeich
22.01.19
✎
23:30
|
(33) Уж коли ты в обители говнокода - напиши свою процедуру.
Тупо получаешь из Excel список листов и помещаешь его в реквизит формы. |
|||
37
palsergeich
22.01.19
✎
23:30
|
Так ты не будешь привязан к этой процедуре.
Так себе решение. |
|||
38
palsergeich
22.01.19
✎
23:31
|
Но оно лучше, чем копаться в процедуре код которой состоит из магических чисел
|
|||
39
leon92
22.01.19
✎
23:31
|
(37) это моя первая работа с кодом вообще
|
|||
40
Fram
22.01.19
✎
23:32
|
Палсергеич, я смотрю у тебя много свободного времени :)
|
|||
41
palsergeich
22.01.19
✎
23:33
|
НомерЛиста = 2; - одно это без внятного комментаря уже не гуд.
(40) Я кофе упился и меня штырит) |
|||
42
palsergeich
22.01.19
✎
23:35
|
А чем тебе мешает НомерЛиста = 2;
В цикле по заполнению списка это не учитывается |
|||
43
palsergeich
22.01.19
✎
23:37
|
СписокЛистов = Новый СписокЗначений;
Для Каждого ТекущийЛист Из файл.WorkSheets Цикл СписокЛистов.Добавить(ТекущийЛист.Name); КонецЦикла; При заполнении он обходит коллекцию всех листов и записывает в список. Конкрето здесь все нормально же. По идее должно работать |
|||
44
leon92
22.01.19
✎
23:38
|
(42) Лист = файл .WorkSheets(НомерЛиста); вот это мешает. переменная Лист фигурирует везде
|
|||
45
leon92
22.01.19
✎
23:39
|
(43) работатет. все видно. но выбираю. но грузит все равно НомерЛиста = 2
|
|||
46
palsergeich
22.01.19
✎
23:43
|
(45) Вот.
Теперь следующий шаг. Если решить его быстро, то тогде так. Меняешь НомерЛиста = 2; На НомерЛиста = 1 Для Каждого ТекущийЛист Из файл.WorkSheets Цикл Если ТекущийЛист.Name = Наименование Тогда Преррвать; КонецЕсли НомерЛиста = НомерЛиста+1; КонецЦикла; При условии, что Процедура ОткрытьНаСервере(Наименование) тут Наименование это имя листа |
|||
47
palsergeich
22.01.19
✎
23:44
|
Быстрое и не очень хорошее решение, но в нормальное решение - никто не поверит что ты сам)
|
|||
48
leon92
22.01.19
✎
23:57
|
(47) У меня сейчас нигде не указан НомерЛиста = 2, но НомерЛиста = Число(ВыберитеНомерЛиста); смотрю через отладку, номерЛиста = 2, ВыберитеНомерЛиста = "КОл"(он же в книги четвертый)..че за фигня не знаешь?
|
|||
49
palsergeich
22.01.19
✎
23:59
|
(48) См реквизиты формы.
|
|||
50
palsergeich
23.01.19
✎
00:00
|
может эти числа забиты в данныее формы ранее
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |