![]() |
|
Обработка загрузки из Excel глючит на серверной базе и корректно работает на файл | ☑ | ||
---|---|---|---|---|
0
Soul771
22.11.16
✎
13:16
|
Доброго дня.
Столкнулась сегодня с очень странным для меня явлением, ума не приложу, куда копать даже...... Есть обработка, считывает exel-вский файл продаж, сначала в таблицу значений, после чего таблицу значений сворачивает по полям номенклатура, ед изм, ндс, цена, дата, суммирует количество и создает документ Отчет о розничных продажах в 1С. Вроде самая обычная простая обработка...... Суть свертки таблицы значений - занести все продажи за день в 1 документ, а не разбрасывать по чекам. Дата предварительно преобразуется, чтобы время во всех строках было одинаковое. В чем косяк.... На файловой базе, на свежей, только что снятой у клиента копии .dt все отрабатывает идеально. У клиента - создается куча документов, т.е. свертка таблицы значений не срабатывает.... Даты созданных документов - вразброс. Ковыряюсь отладчиком, дабы выявить какую-то закономерность,но, честн говоря, сам факт того, что один и тот же, простой вроде совсем код по-разному повел себя в файловом и серверном варианте - для меня непонятно.... Подскажите что-нибудь, пожалуйста..... Или пристыдите и ткните куда почитать, если вопрос тривиальный(((( У клиента толком в отладчике не посидишь- работают в базе, вот пытаюсь понять хотя бы,как так, что код один, база одна, результат - разный...Код обработки выложу, если нужно.Запускала и под толстым и под тонким клиентами.... Версии платформ отличаются 8.3.6 - у клиента и 8.3.9.1818 у меня. |
|||
1
Defender aka LINN
22.11.16
✎
13:19
|
(0) "Версии платформ отличаются"
Какой смысл в дальнейшем разговоре вообще? |
|||
2
Soul771
22.11.16
✎
13:21
|
(1) - а как версия платформы влияет на ТЗ.Свернуть("Номенкл,СтавкаНДС,ЕдИзм, Цена,Дата","Кол");
?..... в СП ничего про это.... |
|||
3
b_ru
22.11.16
✎
13:22
|
Самый вероятный косяк - файл загружается по адресу "C:\bla-bla", а не с сетевой шары. И на сервере на месте вашего файлика лежит что-нить с тем же именем.
|
|||
4
RomaH
naïve
22.11.16
✎
13:22
|
дату как к дате приводишь?
|
|||
5
RomaH
naïve
22.11.16
✎
13:23
|
Суть свертки таблицы значений - занести все продажи за день в 1 документ
т.е. у тебя разные даты из екселя приводятся на начало дня вот как? |
|||
6
RomaH
naïve
22.11.16
✎
13:23
|
Даты созданных документов - вразброс.
|
|||
7
Pahomich
22.11.16
✎
13:26
|
Первым делом надоть платформу у клиента обновить...
|
|||
8
elCust
22.11.16
✎
13:27
|
(0) Гадание на кофейной гуще на самом деле.
|
|||
9
Pahomich
22.11.16
✎
13:27
|
(7) Или дома тестировать на его релизе...
|
|||
10
Soul771
22.11.16
✎
13:32
|
(3) - спасибо! В обработке выбираю файл через ДиалогВыбораФайла, пробовала с 2 компов клиентских, в разные места файл кидала...
(4) - спасибо! Коряво привожу, наверно, но приводится) текдата=СокрЛП(ход.дата); текДата = СтрЗаменить(текДата,".",""); текДатаДень = Лев(текДата, 2); текДатаМесяц = Лев(текДата, 4); ТекДатаМесяц=Прав(текДатаМесяц,2); текДатаГод = Прав(текДата,4); текстр.дата = Дата(текДатаГод+ТекДатаМесяц+текДатаДень+"000000"); (5) - да, разные по времени даты приводятся к началу дня. В файле идут сначала продажи за 14 ноября, с начала дня, потом за 15, с начала дня и т.д. . Привожу все, что за 14 к виду 14112016000000 и т.д... (6) - да, у клиента даты вразброс: 14,15,16,20, потом опять 14 и дальше как попало.. (7),(9) - спасибо, поставлю сейчас у себя тот же релиз, просто не понимаю, вроде Свернуть() он как был так и остался по описанию.... Версии Exel, кст, одинаковые.... (8) - да, понимаю... но хотя бы направление узнать... вариантов для гадания своих уже не осталось.. |
|||
11
Pahomich
22.11.16
✎
13:35
|
(10) Фантазирую что, скорее всего у тебя разные версии платформы по разному считывают ексель файл, ну там типы значений, квалификаторы типров и т.д.
|
|||
12
b_ru
22.11.16
✎
13:41
|
(3) Загрузка файла происходит &НаСервере? Путь к файлу через диалог указывается на локальном диске или на сетевом?
На всякий случай напоминаю, что для кода &НаСервере диск C: будет содержать совсем не то же самое, что для кода &НаКлиенте >>Коряво привожу, наверно, но приводится) Воистину коряво. А эксель как читается? С помощью COM-объекта Excel? Или через ТабличныйДокумент? Или вовсе через ADO? |
|||
13
Soul771
22.11.16
✎
13:58
|
(12)
&НаКлиенте Процедура ИмяФайлаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; РасширениеПодключено = ПодключитьРасширениеРаботыСФайлами(); Если РасширениеПодключено Тогда Режим = РежимДиалогаВыбораФайла.Открытие; ДиалогСохраненияФайла = Новый ДиалогВыбораФайла(Режим); ДиалогСохраненияФайла.ПолноеИмяФайла = ""; //Фильтр = "Файл Excel (*.xls, *.xlsx)|*.xls, *.xlsx"; //ДиалогСохраненияФайла.Фильтр = Фильтр; ДиалогСохраненияФайла.Заголовок = НСтр("ru = 'Выберите каталог для сохранения результата'"); Если ДиалогСохраненияФайла.Выбрать() Тогда ФайлВыгрузки = ДиалогСохраненияФайла.ПолноеИмяФайла; //Если Прав(ФайлВыгрузки,4) <> ".xls" И Прав(ФайлВыгрузки,4) <> ".xlsx" И Прав(ФайлВыгрузки,1) <> "." Тогда // ФайлВыгрузки = ФайлВыгрузки + ".xlsx"; //КонецЕсли; КонецЕсли; КонецЕсли; объект.ИмяФайла = ФайлВыгрузки; КонецПроцедуры |
|||
14
Soul771
22.11.16
✎
13:59
|
(12) - через Com
//подключаемся к эксель Попытка Excel = Новый COMОбъект("Excel.Application"); Excel.WorkBooks.Open(Объект.ИмяФайла); Состояние("Обработка файла Microsoft Excel..."); Исключение Сообщить("Ошибка при открытии файла с помощью Excel! Загрузка не будет произведена!"); Сообщить(ОписаниеОшибки()); Возврат; КонецПопытки; Попытка //Открываем необходимый лист Excel.Sheets(1).Select(); // лист 1, по умолчанию Исключение //Закрываем Excel Excel.ActiveWorkbook.Close(); Excel = 0; Сообщить("Файл "+Строка(Объект.ИмяФайла)+" не соответствует необходимому формату! Первый лист не найден!"); //ОтменитьТранзакцию(); Возврат; КонецПопытки; |
|||
15
Soul771
22.11.16
✎
14:01
|
(12) - путь к файлу на локальном диске. С рабочего стола и с диска Д(той машины, с которой 1С запущена)
|
|||
16
RomaH
naïve
22.11.16
✎
14:05
|
текДата = СтрЗаменить(текДата,".","");
текДатаДень = Лев(текДата, 2); текДатаМесяц = Лев(текДата, 4); ТекДатаМесяц=Прав(текДатаМесяц,2); текДатаГод = Прав(текДата,4); а в екселе дата как дата? а уверена что на севрере клиента дата в екселе представляется как 21.01.2016? а не 2016/1/21, наприер |
|||
17
Soul771
22.11.16
✎
14:08
|
(16) - если открыть файл(на моем компе или на клиентском (сервере и другом)), то в виде "14.11.2016 8:17:06"
а на сервере - имеете ввиду, на sql-сервере? как это посмотреть, подскажите, пожалуйста.. |
|||
18
MM
22.11.16
✎
14:08
|
На какой строке ошибка и какая? СОМ-объект может на сервере не создаётся?
|
|||
19
RomaH
naïve
22.11.16
✎
14:11
|
то в виде "14.11.2016 8:17:06"
тогда твой алгоритм (10) какой-то не очевидный текДатаГод = Прав(текДата,4); вернет "7:06" |
|||
20
Soul771
22.11.16
✎
14:11
|
(18) - обработка отрабатывает без сообщений об ошибках... а первый созданный у клиента документ - это 50-я строка файла.
А как посмотреть, создается Com на сервере или нет? Через точку останова на строке Excel = Новый COMОбъект("Excel.Application"); ? |
|||
21
b_ru
22.11.16
✎
14:13
|
Если у тебя вот это
исполняется на сервере, то он пытается открыть файл, лежащий на диске Д сервера, а не твоего компьютера. Впрочем, если это все происходит в терминале, и сервер 1С запущен на том же сервере терминалов (что есть рукojoпствo админов), тогда будет работать (случайно) И попробуй делать просто вот так:
|
|||
22
Soul771
22.11.16
✎
14:15
|
(19) - простите, забыла строку дописать....
при считывании файла сначала Врем.Дата = Лев(Строка(Excel.Cells(НС, 2).Value),10); и уже после в др. процедуре код для каждого ход из Врем цикл .... текдата=СокрЛП(ход.дата); текДата = СтрЗаменить(текДата,".",""); текДатаДень = Лев(текДата, 2); текДатаМесяц = Лев(текДата, 4); ТекДатаМесяц=Прав(текДатаМесяц,2); текДатаГод = Прав(текДата,4); текстр.дата = Дата(текДатаГод+ТекДатаМесяц+текДатаДень+"000000"); ... |
|||
23
Soul771
22.11.16
✎
14:23
|
(21) - спасибо!
&НаКлиенте.... |
|||
24
Soul771
22.11.16
✎
14:35
|
(11) - загрузила у себя на компе на той версии платформы, что и у клиента, все идеально...
|
|||
25
Soul771
22.11.16
✎
15:34
|
(21) - на всякий случай файл переименовала, все равно грузится кучей документов(((
|
|||
26
Soul771
22.11.16
✎
16:27
|
Разбила файл по дням, загрузилось по 1 файлу на день. А исходный файл с выгрузкой за несколько дней не группирует строки по дням((((((
|
|||
27
Soul771
22.11.16
✎
20:47
|
Выгрузила .dt, загрузила в чистую файловую базу на том же компе клиента, где и рабочая база (и где консоль управления сервером 1С), в эту файловую копию все загружается как надо - по дням группирует. А в рабочую серверную - ну ни в какую.....
|
|||
28
Мимохожий Однако
22.11.16
✎
21:16
|
(22) Сумасшедший код. ИМХО.
|
|||
29
Soul771
22.11.16
✎
21:17
|
(22) - да и мне не нравится) лучше не придумала)
подскажите?) |
|||
30
shuhard_серый
22.11.16
✎
21:25
|
(29) продать тебе отладчик ?
за 12 часов на форум не выложен кусок ТЗ |
|||
31
Soul771
22.11.16
✎
21:33
|
(30) - проблема в том, что толком не могу в отладчике посидеть, люди работают. Урывками подключаюсь, смотрю.
А что по ТЗ выложить? Задачу вроде описала, куски кода, какие спрашивали, прикрепила. Вот сижу 12 часов и голову ломаю, какого простейшая обработка на одних и тех же данных в файловом варианте пашет корректно, а в серверном - нет. Ясно, что не знаю каких-то особенностей работы серверной базы. Стыдно, что не знаю. Пока в гугле не нашла то, что покроет пробел по данной теме(((( |
|||
32
shuhard_серый
22.11.16
✎
21:42
|
(31) ТЗ = таблица значений
то, что тебя ломает поднять себе локальный сервер 1С - твоя проблема |
|||
33
Soul771
22.11.16
✎
21:45
|
(32) - а спасибо за идею! как-то не пришло в голову, повод узнать, как это вообще делается....
|
|||
34
FIXXXL
23.11.16
✎
09:32
|
(29) у тебя одинФайл=одинДокумент? тогда вообще плюнь ты на дату, ставь нужную сразу в документ
|
|||
35
Soul771
23.11.16
✎
09:51
|
(34) - в одном файле несколько документов...
|
|||
36
zva
23.11.16
✎
10:13
|
(35) Я бы формат даты на винде у клиента посмотрел, если там стоит что-то d.mm.yyyy вместо dd.mm.yyyy, то будет то что в (0) и возможно документы и создаются, только в 16 году, а не в 2016
"обработка отрабатывает без сообщений об ошибках... а первый созданный у клиента документ - это 50-я строка файла." |
|||
37
FIXXXL
23.11.16
✎
10:46
|
(35) как ты их делишь?
|
|||
38
Wit77
23.11.16
✎
10:58
|
(36) Очень похоже что проблема в этом. Очень часто серверную ОС ставят без русского языкового пакета. Соотв. форматы дат в екселе могут быть для английского языка. Тогда приведенный разбор даты из строки будет некорректные данные возвращать. Соотв. свертка неправильно будет работать по полю "Дата".
|
|||
39
Wit77
23.11.16
✎
11:00
|
(0) По хорошему надо дописать обработку: дату не приводить к дате, а писать в ТЗ как получили из екселя. и такую ТЗ куда-нибудь сохранять. В табличный документ или на экран выводить. И сравнить полученные таблички при корректной работе и некорректной. Думаю что проблема будет видна.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |