![]() |
![]() |
![]() |
|
Перевод на упр. формы | ☑ | ||
---|---|---|---|---|
0
Мисти
12.01.16
✎
17:08
|
Переписываю чужой кусочек.
Функция стала "на клиенте" А там - ТаблицаДанных = Новый ТаблицаЗначений; ПервыйЗаполненныйСтолбец = 0; Для Н = 1 По КоличествоСтолбцовВФайле Цикл НазваниеКолонки = Лист.Cells(СтрокаНачала, Н).Value; Если ЗначениеЗаполнено(НазваниеКолонки) Тогда Если Не ЗначениеЗаполнено(ПервыйЗаполненныйСтолбец) Тогда ПервыйЗаполненныйСтолбец = Н; КонецЕсли; Колонка = ТаблицаДанных.Колонки.Добавить("Колонка" + Н,,НазваниеКолонки); КонецЕсли; КонецЦикла; Для К = СтрокаНачала + 1 По КоличествоСтрокВФайле Цикл Стр = ТаблицаДанных.Добавить(); Для Н = ПервыйЗаполненныйСтолбец По КоличествоСтолбцовВФайле Цикл Не очень понимаю, зачем это всё, хочу не меняя алгоритма просто разложить на "на клиенте на сервере", ну и с помощью тестирования убедиться, что работает. Так вот, ТаблицаДанных = Новый ТаблицаЗначений; "НаКлиенте" не жрет. Что сделать? |
|||
1
ДенисЧ
12.01.16
✎
17:09
|
Ты зря моего вчерашнего совета не послушалась...
|
|||
2
Мисти
12.01.16
✎
17:12
|
Ну не помню я, уже с полгода этим не занималась.
|
|||
3
hhhh
12.01.16
✎
17:16
|
(2) ну, на сервере значит надо этот кусок
|
|||
4
Мисти
12.01.16
✎
17:19
|
на сервере весь кусок не получится, там ексель открывается, а с клиента на сервер ексель не передается.
|
|||
5
Мисти
12.01.16
✎
17:20
|
Excel = Новый COMОбъект("Excel.Application");
вот такое же на сервере не сработает? |
|||
6
ДенисЧ
12.01.16
✎
17:20
|
Потому что на сервере нет екселя. Важ сержант ЯХ.
|
|||
7
Euguln
12.01.16
✎
17:21
|
Просто так не получится.
1 вариант - сделать ТЗ реквизитом формы и колонки добавлять через ИзменитьРеквизиты. 2 вариант - считывать данные во что-то другое, например в список значений. |
|||
8
Euguln
12.01.16
✎
17:21
|
(7) + 3-ий вариант - считать на клиенте ёксель в mxl и передать на сервер.
|
|||
9
Timon1405
12.01.16
✎
17:34
|
(0)
&Клиент Эксель = Новый COMОбъект("Excel.Application"); Книга = Эксель.WorkBooks.Open(ПутьКФайлу); Лист = Книга.WorkSheets(1); Arr = Лист.UsedRange.Value; МассивКолонок = Arr.Выгрузить(); // в МассивКолонок сидит массив массивов ячеек из экселя // передаем его на сервер, мучаем его там |
|||
10
Мисти
12.01.16
✎
17:49
|
Спасибо!
|
|||
11
Euguln
12.01.16
✎
18:05
|
(9) Только не говори, что строки так же массивами на сервер гонять
|
|||
12
Мисти
12.01.16
✎
18:44
|
Определила ТаблицаДанных как реквизит формы с типом ТаблицаЗначений
&НаСервере Процедура ДобавитьКолонкуНаСервере(Н,НазваниеКолонки) Колонка = ТаблицаДанных.Колонки.Добавить("Колонка" + Н,,НазваниеКолонки); КонецПроцедуры Не жреть!! А как тогда? |
|||
13
Мисти
12.01.16
✎
18:45
|
А в чем разница, реквизит формы или переменная модуля формы?
|
|||
14
Мисти
12.01.16
✎
19:18
|
Давайте уже мне поможем!
Я морально готова по 10 раз вызывать серверную процедуру на каждый шаг, вопрос, как определить эту таблицу значений, чтоб она не пропадала в процессе вызова туда-сюда? И почему она имеет такой странный вид, если определена как реквизит формы? |
|||
15
kosts
12.01.16
✎
19:37
|
Нафиг этот Excel.
Делай на mxl. |
|||
16
Мисти
12.01.16
✎
19:41
|
У меня задание - из екселя загрузить, и я уверена, что это возможно.
Вопрос - что с таблицей сделать, где ее определить, чтоб она не пропадала, пока форма открыта? |
|||
17
Остап Сулейманович
12.01.16
✎
19:43
|
(16) Определи ее как табличную часть. И БуитТибеМногаСчастия.
Она (табличная часть) живет и на клиенте и на сервере. |
|||
18
kosts
12.01.16
✎
19:43
|
Данная ТЗ нужна видимо для определения какие колонки надо грузить.
Задействуй Соответствие вместо ТЗ. |
|||
19
Мисти
12.01.16
✎
19:51
|
Это у меня документ, у него есть форма - загрузка.
Табличная часть документа - это как-то слишком, при том, что там колонки могут меняться. Что такое соответствие, что за тип? Неужели нельзя таблицу-то как-то прописать?? Я не верю. |
|||
20
Остап Сулейманович
12.01.16
✎
19:54
|
(19) "Это у меня документ, у него есть форма - загрузка." Сделай все это отдельной обработкой. На клиенте заполнишь табличную часть из Екселя - потом перейдешь на сервер и уже там сформируешь свой документ.
|
|||
21
Остап Сулейманович
12.01.16
✎
19:57
|
+ (20) Таблица значений живет только на сервере. И там и там живет (например) структура, табличная часть, массив.
Многомерных соответствий в 1С я например не слышал. Ну что бы в них передавать табличные данные. Да оно и не для того предназначено. |
|||
22
Остап Сулейманович
12.01.16
✎
20:01
|
+ (21) Еще встречал такой вариант когда табличные данные хранились в регистре сведений. С ключом сеанса. На сервере обрабатывались непосредственно, а формы на клиенте обменивались ключом и тогда получали согласованные данные.
Но то уже ИМХО изврат. |
|||
23
Мисти
12.01.16
✎
20:15
|
То, на чем я застряла пока - в файле ексел считываются все колонки, зачем-то они запихиваются в таблицу значений.
|
|||
24
Остап Сулейманович
12.01.16
✎
20:17
|
(23) Да. Йес. Целиком и полностью да.
ЗЫ. В чем проблема? |
|||
25
Мисти
12.01.16
✎
20:19
|
Да я думаю, если я без этой таблицы обойдусь, то всё дальше получится.
Остап Сулейманович, а как быть со временем в соседней моей проблеме? |
|||
26
Мимохожий Однако
12.01.16
✎
20:20
|
Передавай таблицу значений, преобразованную в массив со структурой колонок.
|
|||
27
Остап Сулейманович
12.01.16
✎
20:23
|
(25)
Док - документ из базы семерки. Вытащить время из семерочного документа : Док.ПолучитьВремя(Чч,Мм,Сс>); прописать восьмерочному : Док8.Дата = Док.Дата + Чч*3600 + Мм*60 + Сс; |
|||
28
Мисти
12.01.16
✎
20:37
|
Вау!
Спасибо! |
|||
29
Остап Сулейманович
12.01.16
✎
20:39
|
+ (27)
В последней строке ошибка вместо Док.Дата писать Док.ДатаДок. Или так гг = Год(Док.ДатаДок); мм = Месяц(Док.ДатаДок); дд = День(Док.ДатаДок); чч = 0; мм = 0; сс = 0; Док.Док.ПолучитьВремя(Чч,Мм,Сс); Док8.Дата = Дата(гг, мм, дд, чч, мм, сс); |
|||
30
Остап Сулейманович
12.01.16
✎
20:40
|
+ (29) Опять ошибка((((. Минуты и месяцы нужно обозвать по разному.
|
|||
31
Мисти
12.01.16
✎
20:52
|
27.02.2134 0:00:00 - круто получилось!
|
|||
32
Мисти
12.01.16
✎
20:54
|
Док8.Дата = Дата(гг, мм, дд, чч, мм, сс); - через оле из 7 в 8 - так ведь не поймет?
А реквизиты должны быть числом или строкой? |
|||
33
Мисти
12.01.16
✎
20:55
|
Ну да, добавились-то дни!
|
|||
34
hhhh
12.01.16
✎
21:14
|
так попробуй
Док8.Дата = Дата(гг, мм, дд, чч, юю, сс); |
|||
35
Мисти
12.01.16
✎
21:19
|
Я ж в 7, она разве поймет такую дату?
Надо, как учили сделать внешнюю функцию и там проставить дату? Как через оле задать отбор? Как сделать проще всего? Конфигурацию 8 я сама поменять не могу! |
|||
36
hhhh
12.01.16
✎
21:22
|
(35) а если вместо месяца нафигачила часы, она тебя прямо поняла?
|
|||
37
hhhh
12.01.16
✎
21:23
|
(35) мм - у тебя минуты или месяцы, ты определись.
|
|||
38
Мисти
12.01.16
✎
21:23
|
ПутьКОбработке=ТвойПутьКepf;
ДляВнешнегоСоединения= Сервер.ВнешниеОбработки.Создать(ПутьКОбработке); Давайте эту тему развивать! |
|||
39
Мисти
12.01.16
✎
21:24
|
Док8.Дата = Док.ДатаДок + Чч*3600 + Мм*60 + Сс; - я вот так попробовала, добавились не секунды, а часы.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |