|
Из Excel в 1С | ☑ | ||
---|---|---|---|---|
0
Яна93
12.07.13
✎
16:12
|
Всем Привет!:) Сегодня столкнулась с такой проблемой..в таблице эксель изменилось расположение данных, в обработке которую всегда использовала удалось понять немного код, и внесла небольшие изменения по части расположения обрабатываемых данных, но одну колонку "Держатель" применить уже не получится т.к. она уже пустая (в коде она записана как - КонтрагентID), но появилась колонка "Номер карты" которая ранее была записана не в виде колонки..так вот не могу придумать для нее условие, потому что не имела ранее дело с таким сложным кодом.. Подскажите пожалуйста
Процедура КнопкаВыполнитьНажатие(Кнопка) Попытка Excel = Новый COMОбъект("Excel.Application"); Исключение Сообщить("Не удалось инициализировать Excel"); Возврат; КонецПопытки; Попытка ЗапросПоКонтрагентам = Новый Запрос; ЗапросПоКонтрагентам.Текст="ВЫБРАТЬ | ИнформацияПоРаботеКонтрагентовПоСмартКартамСрезПоследних.Период, | ИнформацияПоРаботеКонтрагентовПоСмартКартамСрезПоследних.Контрагент, | ИнформацияПоРаботеКонтрагентовПоСмартКартамСрезПоследних.ДоговорПоСмартКартам, | ИнформацияПоРаботеКонтрагентовПоСмартКартамСрезПоследних.Филиал.Код КАК КодФилиала, | ИнформацияПоРаботеКонтрагентовПоСмартКартамСрезПоследних.КодПЦ |ИЗ | РегистрСведений.Ю_ИнформацияПоРаботеКонтрагентовПоСмартКартам.СрезПоследних(&ДатаТранзакции, ) КАК ИнформацияПоРаботеКонтрагентовПоСмартКартамСрезПоследних"; ЗапросПоТО = Новый Запрос; ЗапросПоТО.Текст= "ВЫБРАТЬ | Ю_ТочкиОбслуживания.Ссылка КАК ТО, | Ю_ТочкиОбслуживания.Эмитент, | Ю_ТочкиОбслуживания.КодТО_ОЦ как НомерТО |ИЗ | Справочник.Ю_ТочкиОбслуживания КАК Ю_ТочкиОбслуживания" ; Excel.Workbooks.Open(ПутьКФайлу); НомерКниги=Excel.Workbooks.count; Книга=Excel.Workbooks.Item(НомерКниги); Лист=Excel.Sheets(1); метка = ложь; номерСтроки=8; индекс=0; ВыборкаТранзакцийЗаОдинДень=Новый ТаблицаЗначений; ВыборкаТранзакцийЗаОдинДень.Очистить(); ВыборкаТранзакцийЗаОдинДень.Колонки.Добавить("ID_OPERATION"); ВыборкаТранзакцийЗаОдинДень.Колонки.Добавить("ID_CLIENT"); ВыборкаТранзакцийЗаОдинДень.Колонки.Добавить("DATE_OF"); ВыборкаТранзакцийЗаОдинДень.Колонки.Добавить("POS_EMITENT"); ВыборкаТранзакцийЗаОдинДень.Колонки.Добавить("POS_NUMBER"); ВыборкаТранзакцийЗаОдинДень.Колонки.Добавить("CARD_GRAF_NUM"); ВыборкаТранзакцийЗаОдинДень.Колонки.Добавить("ID_SERVICE_FOR"); ВыборкаТранзакцийЗаОдинДень.Колонки.Добавить("POS_PRICE"); ВыборкаТранзакцийЗаОдинДень.Колонки.Добавить("SUM_AMOUNT"); ВыборкаТранзакцийЗаОдинДень.Колонки.Добавить("BASE_SUM_DELTA"); ВыборкаТранзакцийЗаОдинДень.Колонки.Добавить("SERVICE_AMOUNT"); Пока метка <> истина цикл значениеД = Лист.Cells(номерСтроки,4).Value; значениеФ = Лист.Cells(номерСтроки,6).Value; Если Не значениеД = Неопределено тогда индекс = 0; НомерКарты_ = ""; длинаСтроки = СтрДлина(значениеД); Для к=1 по длинаСтроки Цикл СимволСтр = Сред(значениеД,к,1); Если СимволСтр = "0" или СимволСтр = "1" или СимволСтр = "2" или СимволСтр = "3" или СимволСтр = "4" или СимволСтр = "5" или СимволСтр = "6" или СимволСтр = "7" или СимволСтр = "8" или СимволСтр = "9" тогда НомерКарты_ = НомерКарты_ + СимволСтр; КонецЕсли; КонецЦикла; НомерКарты = НомерКарты_; ИначеЕсли Не значениеФ = Неопределено тогда ЗначениеДаты_ = СокрЛП(Лист.Cells(номерСтроки,5).Value); Попытка ДатаиВремя_ = Формат(ЗначениеДаты_,"ДЛФ=DT"); ЗначениеДаты = Дата(ДатаиВремя_); индекс = 0; стр=ВыборкаТранзакцийЗаОдинДень.Добавить(); стр.CARD_GRAF_NUM = НомерКарты; //номер карты стр.DATE_OF = СокрЛП(Лист.Cells(номерСтроки,5).Value); //дата ДатаНачалаЗагрузкиТранзакцийИзБДПетрол = Дата(стр.DATE_OF); значение = Лист.Cells(номерСтроки,6).Value; Эмитент = Сред(значение,2,4); номерСим_1 = Найти(значение,"]"); к = 1; НомерТО_ = "";СимволСтр=""; Пока СимволСтр<>"," Цикл СимволСтр = Сред(значение,номерСим_1-к,1); Если СимволСтр = "0" или СимволСтр = "1" или СимволСтр = "2" или СимволСтр = "3" или СимволСтр = "4" или СимволСтр = "5" или СимволСтр = "6" или СимволСтр = "7" или СимволСтр = "8" или СимволСтр = "9" тогда НомерТО_ = СимволСтр + НомерТО_; КонецЕсли; к = к+1; КонецЦикла; стр.POS_EMITENT = Эмитент; //эмитент ТО стр.POS_NUMBER = Число(НомерТО_); // Номер ТО попытка КонтрагентID = Число(Лист.Cells(номерСтроки,9).Value); стр.ID_CLIENT = КонтрагентID; //id Исключение Сообщить("Не числовое значение держателя соответствующее ID клиента " + Лист.Cells(номерСтроки,9).Value); КонецПопытки; Операция_ = Лист.Cells(номерСтроки,10).Value; Если Операция_ = "Обсл." тогда Операция = 29 ИначеЕсли Операция_ = "Возв. С." тогда Операция = 31 Иначе Операция = 100; Сообщить("Не опознанная операция " + Операция_ +" по карте " + НомерКарты + " от " + стр.DATE_OF); КонецЕсли; стр.ID_OPERATION = Операция; // Операции Услуга_ = Лист.Cells(номерСтроки,11).Value; Если Услуга_ = "Бензин А-92" тогда Услуга = 15 ИначеЕсли Услуга_ = "Аи-95" тогда Услуга = 17 ИначеЕсли Услуга_ = "Аи-98" тогда Услуга = 18 ИначеЕсли Услуга_ = "А-76" или Услуга_ = "А-76/80" тогда Услуга = 13 ИначеЕсли Услуга_ = "ДТ летнее" тогда Услуга = 11 ИначеЕсли Услуга_ = "ДТ зимнее" или Услуга_ = "ДТ" тогда Услуга = 12 ИначеЕсли Услуга_ = "Газ пропан-бутан" тогда Услуга = 22 Иначе Услуга = 100; Сообщить("Не опознанная услуга " + Услуга_ +" по карте " + НомерКарты + " от " + стр.DATE_OF); КонецЕсли; стр.ID_SERVICE_FOR = Услуга; // Номенклатура стр.SERVICE_AMOUNT = -Лист.Cells(номерСтроки,12).Value; // Количество стр.POS_PRICE = Лист.Cells(номерСтроки,13).Value; // Цена ТО стр.SUM_AMOUNT = -Лист.Cells(номерСтроки,17).Value; // Стоимость на ТО со скидкой стр.BASE_SUM_DELTA = -Лист.Cells(номерСтроки,16).Value; // скидка Исключение //Сообщить("бла бла Не удалось инициализировать Excel"); //Возврат; КонецПопытки; Иначе индекс = индекс+1; КонецЕсли; номерСтроки=номерСтроки+1; Если индекс > 30 тогда метка = Истина; конецЕсли; КонецЦикла; Исключение Сообщить(ОписаниеОшибки()); Excel.Quit(); КонецПопытки; НачатьТранзакцию(); ДокТранзакцииЗаСутки = Документы.Ю_ТранзакцииЗаСуткиЭмитента1070.СоздатьДокумент(); ДокТранзакцииЗаСутки.Дата = КонецМесяца(ДатаНачалаЗагрузкиТранзакцийИзБДПетрол); ЗапросПоКонтрагентам.УстановитьПараметр("ДатаТранзакции",КонецДня(ДатаНачалаЗагрузкиТранзакцийИзБДПетрол)); РезультатЗапросаПоКонтрагентам = ЗапросПоКонтрагентам.Выполнить(); РезультатЗапросаПоТО = ЗапросПоТО.Выполнить(); НомерСвоегоЭмитента = Константы.Ю_СвойЭмитент.Получить().Код; НомерСтроки=0; для каждого выборка из ВыборкаТранзакцийЗаОдинДень цикл НастройкиФилиала = ПолучитьНастройкиФилиалаПетрол(Справочники.Ю_Филиалы.НайтиПоКоду("1")); Если НЕ НастройкиФилиала.СостояниеФилиала.Пустая() Тогда Если НомерЭмитента(Выборка.POS_EMITENT)<>НомерСвоегоЭмитента Тогда ЗаполнитьСтрокуТабЧастиДокТранзакции(ДокТранзакцииЗаСутки.ТранзакцииНаЧужихТО,ДокТранзакцииЗаСутки,НастройкиФилиала,Выборка,РезультатЗапросаПоКонтрагентам,РезультатЗапросаПоТО) Иначе ЗаполнитьСтрокуТабЧастиДокТранзакции(ДокТранзакцииЗаСутки.Транзакции,ДокТранзакцииЗаСутки,НастройкиФилиала,Выборка,РезультатЗапросаПоКонтрагентам,РезультатЗапросаПоТО) КонецЕсли; КонецЕсли; КонецЦикла; //ЗапросПоДокументам = Новый Запрос; //ЗапросПоДокументам.Текст = "ВЫБРАТЬ // | ТранзакцииЗаСутки.Ссылка, // | ТранзакцииЗаСутки.Номер // |ИЗ // | Документ.Ю_ТранзакцииЗаСуткиЭмитента412 КАК ТранзакцииЗаСутки // |ГДЕ // | ТранзакцииЗаСутки.Дата = &НачПериодаУдаления"; //ЗапросПоДокументам.УстановитьПараметр("НачПериодаУдаления",КонецМесяца(ДатаНачалаЗагрузкиТранзакцийИзБДПетрол)); //РезультатЗапросаПоДокументам = ЗапросПоДокументам.Выполнить(); //ВыборкаЗапросаПоДокументам = РезультатЗапросаПоДокументам.Выбрать(); //НачатьТранзакцию(); //Пока ВыборкаЗапросаПоДокументам.Следующий() Цикл // ДокОбъект = ВыборкаЗапросаПоДокументам.Ссылка.ПолучитьОбъект(); // ДокОбъект.Удалить(); //КонецЦикла; //ЗафиксироватьТранзакцию(); //ОбновитьНумерациюОбъектов(Метаданные.Документы.Ю_ТранзакцииЗаСутки); //ДокТранзакцииЗаСутки.Записать(РежимЗаписиДокумента.Проведение); ДокТранзакцииЗаСутки.Записать(РежимЗаписиДокумента.Запись); ЗафиксироватьТранзакцию(); КонецПроцедуры |
|||
1
Ненавижу 1С
гуру
12.07.13
✎
16:13
|
позови программиста
|
|||
2
Никола_
Питерский 12.07.13
✎
16:17
|
(1) + И лучше Маню ))
|
|||
3
Maxus43
12.07.13
✎
16:19
|
на форуме такой код разбирать неблагодарное дело, и врятли кто-то будет читать 5-ти страничный код...
|
|||
4
yurec_k
12.07.13
✎
16:22
|
и как бэ, и фото нет,
тема не наберет и 10 постов |
|||
5
МихаилМ
12.07.13
✎
16:22
|
||||
6
sunson
12.07.13
✎
16:22
|
Вряд ли мы вам дадим тут решение, посидите повнимательней и сама поймите, что вам надо сделать. Вы взяли обработку, что-то в ней поменяли и выложили сюда... мы не телепаты и структуру вашего файла эксель не знаем, что вы заменили тоже не знаем. Код вовсе не сложный.
|
|||
7
Яна93
12.07.13
✎
16:22
|
Да мне просто бы удалить безболезненно ту часть кода которая отвечает за обработку колонки "Держатель"
КонтрагентID = Число(Лист.Cells(номерСтроки,9).Value); стр.ID_CLIENT = КонтрагентID; //id Пробывала закомментить..но обработка зависает..похоже он застревает на какомто из циклов.. |
|||
8
Яна93
12.07.13
✎
16:23
|
Я перепостила свое же сообщение из другого форума..т.к. там не смогли помчь..
|
|||
9
Iv-less
12.07.13
✎
16:29
|
Особо не вникал, но кажись
попытка КонтрагентID = Число(Лист.Cells(номерСтроки,9).Value); стр.ID_CLIENT = КонтрагентID; //id Исключение Сообщить("Не числовое значение держателя соответствующее ID клиента " + Лист.Cells(номерСтроки,9).Value); КонецПопытки; Закомменти это и проверь |
|||
10
Яна93
12.07.13
✎
16:31
|
Iv-less, спасибо за отзыв. Но я пробывала комментить..от самой Попытки и до КонецПопытки..Обработка зависает и молчит..
|
|||
11
Яна93
12.07.13
✎
16:33
|
Просто я как бухгалтер самостоятельно начала изучать 1С, чтобы упростить себе задачу в работе..но такой код для меня еще в новинку..не научилась еще..
|
|||
12
sunson
12.07.13
✎
16:35
|
Посмотрев на ваши файлы эксель стало понятно что раньше номер карты был в 4 колонке файла и осуществлялся перебор строк до тех пор пока не находим новый номер карты. Теперь номер карты переехал в колонку 8, сами данные сместились. (11)
|
|||
13
sunson
12.07.13
✎
16:41
|
Обработка зависает не потому что вы комментируете строку контрагентов. А потому что структура файла поменялась критично для этой обработки.
|
|||
14
Яна93
12.07.13
✎
16:43
|
sunson, да, это я немного пыталась корректировать обработку..но проблема из-за которой я не могу сдвинутся с мертвой точки - это отсутствие данных в колонке Держатель..
|
|||
15
Яна93
12.07.13
✎
16:44
|
А как же тогда быть? ведь структура смненилась не так сильно..
|
|||
16
Iv-less
12.07.13
✎
16:45
|
+ колонка держатель видимо критична, ибо идет загрузка в документ. Держатель может содержать обязательный реквизит для заполнения документа.
|
|||
17
mikecool
12.07.13
✎
16:45
|
20 летний бух, какая прелесть
я бы помог наверное, глядя на фото.... |
|||
18
jsmith
12.07.13
✎
16:46
|
с такой простынёй только маня может разобраться
|
|||
19
pessok
12.07.13
✎
16:47
|
раз уж начала сама изучать 1С, будучи бухом, то будь уж мужиком, блджад, до конца - изучи отладчик!
|
|||
20
Яна93
12.07.13
✎
16:47
|
Фото обработки? Здесь невозможно прикреплять файлы..я не нашла кнопку прикрепить..
|
|||
21
Iv-less
12.07.13
✎
16:47
|
xD
|
|||
22
jsmith
12.07.13
✎
16:48
|
(20) бухахахаааа
он твои сиськи имел в виду |
|||
23
jsmith
12.07.13
✎
16:48
|
тут традиция такая на мисте
если новенькая чёто просит, то должна свою прелесть показать после этого обязательно найдутся доброжелатели |
|||
24
mikecool
12.07.13
✎
16:49
|
(22) фу пошляк )
|
|||
25
Яна93
12.07.13
✎
16:49
|
Я за помощью обратилась..а вы смеетесь..
|
|||
26
jsmith
12.07.13
✎
16:49
|
ну или хотя бы фотку где-нибудь стырь, только чтобы не гуглилась
можно с сайтов знакомств зарубежных |
|||
27
Яна93
12.07.13
✎
16:50
|
А если к вам новенький парень обратится за помощью?)
|
|||
28
Remark
12.07.13
✎
16:52
|
(27) Тебе легче, поверь ))
А вообще, ты в Екселе колонки можешь копировать в тот порядок, который был. |
|||
29
sunson
12.07.13
✎
16:53
|
(27) парням не помогают) у них сисек нет
|
|||
30
Remark
12.07.13
✎
16:53
|
+28 Сорри, пропустил момент про пропавшую колонку "Держатель"
|
|||
31
jsmith
12.07.13
✎
16:53
|
(27) затюкают, заклюют, обольют сарказмом и навсегда отобьют охоту что-то спрашивать
в редких случаях удаётся отбить охоту кодить на 1с вообще |
|||
32
Яна93
12.07.13
✎
16:53
|
Пробывала..Но все равно колонка Держатель останется пустой..
|
|||
33
sunson
12.07.13
✎
16:53
|
(15) Самый простой способ обратиться к программисту. Есть у вас программист? Кто-то ведь эту обработку писал?
|
|||
34
jsmith
12.07.13
✎
16:54
|
самый простой способ - овладеть отладчиком
иначе придётся всю жизнь сиськи показывать |
|||
35
Яна93
12.07.13
✎
16:55
|
Был..месяца 4 назад..уехал в Москву добиваться новых высот..вакансия свободня до сих пор..
|
|||
36
sunson
12.07.13
✎
16:55
|
[0647, 1, 1392] "ЗАРЯ" ООО - что значат эти цифры?
|
|||
37
Remark
12.07.13
✎
16:56
|
(0) Решается административным методом: "Верните колонку Деражатель!".
|
|||
38
pessok
12.07.13
✎
16:56
|
Яна, внемлите моему совету, используйте точки останова и отладчик, сразу все поймете.
Тяяяяяпница, пора домой :) |
|||
39
jsmith
12.07.13
✎
16:57
|
(36) где ты это колдунство надыбал
|
|||
40
Remark
12.07.13
✎
16:57
|
(38) Ждем темы "Как пользоваться отладчиком?"
|
|||
41
Яна93
12.07.13
✎
16:57
|
Использовала..он застревает на одном цикле..и так до бесконечности..после того как закомментила попытка
КонтрагентID = Число(Лист.Cells(номерСтроки,9).Value); стр.ID_CLIENT = КонтрагентID; //id Исключение Сообщить("Не числовое значение держателя соответствующее ID клиента " + Лист.Cells(номерСтроки,9).Value); КонецПопытки; |
|||
42
pessok
12.07.13
✎
16:57
|
||||
43
pessok
12.07.13
✎
16:58
|
(41) значит закомментила увеличение итератора, делов то. НомерСтроки = НомерСтроки + 1;
|
|||
44
pessok
12.07.13
✎
16:59
|
Попытка
//Старый код Исключение НомерСтроки = НомерСтроки + 1; КонецПопытки |
|||
45
sunson
12.07.13
✎
16:59
|
(39) тут http://www.1c-pro.ru/topic51829.html
|
|||
46
Cyberhawk
12.07.13
✎
17:04
|
(35) город?
|
|||
47
sunson
12.07.13
✎
17:04
|
(41) Яна, вы что хотите сказать, что до того как вы закомментировали попытку по контрагенту обработка работала?))))
|
|||
48
sunson
12.07.13
✎
17:09
|
Рекомендую обратиться к ближайшей фирме занимающейся 1С, скажите руководству, что вам необходимо переделать эту обработку. Однако если они вам скажут более 2-х часов за работу, то они пытаются вас обмануть) (41)
|
|||
49
mikecool
12.07.13
✎
17:11
|
(35) так ты сейчас без парня??
|
|||
50
Iv-less
12.07.13
✎
17:15
|
Та нельзя убирать "держатель". Там идет заполнение документа по таблице. Держатель 90% необходимый реквизит, так что даже если получится найти, где завис, документ не будет проводится и придется в ручную доделывать.
|
|||
51
Iv-less
12.07.13
✎
17:17
|
ВыборкаТранзакцийЗаОдинДень.Колонки.Добавить("ID_CLIENT");
Попробуй это еще закоментить,помимо попытки. может идет проверка на пустые поля... |
|||
52
Яна93
12.07.13
✎
17:28
|
Iv-less, тоже комментила..итог тот же..зависает..
|
|||
53
sunson
12.07.13
✎
17:29
|
В самом начале цикла идет вычисление номера карты... при измененном файле эксель, номер вычислять не надо, его надо брать из колонки
|
|||
54
sunson
12.07.13
✎
17:31
|
так и чешутся руки разбить вашу процедурку на несколько маленьких, логично названных понятных процедур
|
|||
55
Iv-less
12.07.13
✎
17:32
|
(53) Ты про это?
Если Не значениеД = Неопределено тогда индекс = 0; НомерКарты_ = ""; длинаСтроки = СтрДлина(значениеД); Для к=1 по длинаСтроки Цикл СимволСтр = Сред(значениеД,к,1); Если СимволСтр = "0" или СимволСтр = "1" или СимволСтр = "2" или СимволСтр = "3" или СимволСтр = "4" или СимволСтр = "5" или СимволСтр = "6" или СимволСтр = "7" или СимволСтр = "8" или СимволСтр = "9" тогда НомерКарты_ = НомерКарты_ + СимволСтр; КонецЕсли; |
|||
56
Яна93
12.07.13
✎
17:35
|
тогда стоит всего лишь вместо КонтрагентаID написать следующее:
Попытка НомерКарты = Число(Лист.Cells(номерСтроки,8).Value); стр.CARD_GRAF_NUM = НомерКарты; Исключение Сообщить("Не числовое значение" + Лист.Cells(номерСтроки,8).Value); КонецПопытки; |
|||
57
Яна93
12.07.13
✎
17:35
|
если это глупое предположение, то извиняюсь)
|
|||
58
sunson
12.07.13
✎
17:36
|
(55) ага
|
|||
59
Iv-less
12.07.13
✎
17:39
|
Вощем тут работы на пару часов, не используя скил "телепатия", боюсь все же стоит позвать спеца или хотя б немного изучить отладчик. Имхо
|
|||
60
sunson
12.07.13
✎
17:41
|
(57) не надо сомневаться, надо пробовать
я вот попробовал, у меня получилось))) |
|||
61
sunson
12.07.13
✎
17:42
|
(59) да на самом деле меньше
|
|||
62
Яна93
12.07.13
✎
17:42
|
(60) Как может получится если у Вас нет конфигурации?)
|
|||
63
sunson
12.07.13
✎
17:47
|
Все очень просто я закомментировал те строки которые обращаются к конфигурации и попробовал вашу обработку на вашем же файле "КАК СТАЛО". Обработка отрабатывает и заполняет таблицу "ВыборкаТранзакцийЗаОдинДень" единственно, что колонка номер карты там пустая, но об этом я сказал ранее, потому что надо подправить, и вы уже даже знаете как
|
|||
64
Яна93
12.07.13
✎
17:51
|
Спасибо, sunson!!;) сейчас попробую поэкспериментировать)
|
|||
65
sunson
12.07.13
✎
17:53
|
Так что Яна, ваше утверждение, что обработка бесконечно крутит цикл все же не верно.
рекомендую вам вместо строки ДокТранзакцииЗаСутки.Записать(РежимЗаписиДокумента.Запись); Написать открытие файла, что бы вы видели чем же документ все таки заполнился |
|||
66
sunson
12.07.13
✎
17:54
|
(64) Хороших вам выходных, мой рабочий день закончен)))
|
|||
67
Яна93
12.07.13
✎
17:57
|
(66) Спасибо, и Вам)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |