Имя: Пароль:
1C
 
Перевод на упр. формы
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 + Сс; - я вот так попробовала, добавились не секунды, а часы.
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший