|
Перенос данных из 7.7 в 8 | ☑ | ||
---|---|---|---|---|
0
Cameron_Rifkin
15.07.16
✎
10:42
|
Дали задачу сделать отчёт из древней базы - 2009 года. В 7ке я не силен, поэтому решил подцепить 7ку из 8ки и перетащить данные туда, а там уж засунуть их в СКД и всё такое. После некоторых плясок с синтаксис-помощником и перевода части функций на английский всё заработало. Но! Работает оно только в пределах месяца, как только я пытаюсь построить отчёт хотя бы за 2 месяца, при переходе на следующий месяц у меня вылетает семерка. Не по ошибке, а просто вылетает. Не понимаю, что может быть не так.
Вот код, если что. Проблема происходит когда я иду на второй заход по внешнему циклу и пытаюсь из него зайти во внутренний... Коннектор = Новый COMОбъект("V77.Application"); Если Коннектор = Неопределено Тогда Сообщить("Не удалось создать объект V77.Application "); КонецЕсли; ПутьКБухБазе = ""; ПользовательБухБазы = ""; Парольпользователя=""; Попытка СтрокаПодключения = "/D""" + ПутьКБухБазе + """ /N""" + ПользовательБухБазы + """ /P"""+ ПарольПользователя + """"; V77 = Коннектор.Initialize(Коннектор.RMComplex, СтрокаПодключения, ""); Если НЕ V77 Тогда Сообщить("Неудачная попытка входа в 77"); Возврат; КонецЕсли; Исключение Сообщить("Не удалось загрузить 1С 77." + ОписаниеОшибки()); Возврат; КонецПопытки; Сч50 = Коннектор.evalexpr("СчетПоКоду(""50"")"); Сч51 = Коннектор.evalexpr("СчетПоКоду(""51"")"); Сч58_3 = Коннектор.evalexpr("СчетПоКоду(""58.3"")"); Сч58 = Коннектор.evalexpr("СчетПоКоду(""58"")"); Сч60 = Коннектор.evalexpr("СчетПоКоду(""60"")"); Сч60_1 = Коннектор.evalexpr("СчетПоКоду(""60.1"")"); Сч62 = Коннектор.evalexpr("СчетПоКоду(""62"")"); Сч62_1 = Коннектор.evalexpr("СчетПоКоду(""62.1"")"); Сч62_3 = Коннектор.evalexpr("СчетПоКоду(""62.3"")"); Сч68_1 = Коннектор.evalexpr("СчетПоКоду(""68.1"")"); Сч68 = Коннектор.evalexpr("СчетПоКоду(""68"")"); Сч69 = Коннектор.evalexpr("СчетПоКоду(""69"")"); Сч70 = Коннектор.evalexpr("СчетПоКоду(""70"")"); Сч90 = Коннектор.evalexpr("СчетПоКоду(""90"")"); Сч44 = Коннектор.evalexpr("СчетПоКоду(""44"")"); Сч71 = Коннектор.evalexpr("СчетПоКоду(""71"")"); НачДата = ДатаНачала; КонДата = ДатаОкончания; ТаблицаДвижений = Новый ТаблицаЗначений; ТаблицаДвижений.Колонки.Добавить("Дата",Новый ОписаниеТипов("Дата")); ТаблицаДвижений.Колонки.Добавить("ВО",Новый ОписаниеТипов("Строка" , , Новый КвалификаторыСтроки(2, ДопустимаяДлина.Фиксированная))); ТаблицаДвижений.Колонки.Добавить("Операция",Новый ОписаниеТипов("Строка" , , Новый КвалификаторыСтроки(100, ДопустимаяДлина.Переменная))); ТаблицаДвижений.Колонки.Добавить("Документ",Новый ОписаниеТипов("Строка" , , Новый КвалификаторыСтроки(10, ДопустимаяДлина.Переменная))); ТаблицаДвижений.Колонки.Добавить("Корреспондент",Новый ОписаниеТипов("Строка" , , Новый КвалификаторыСтроки(200, ДопустимаяДлина.Переменная))); ТаблицаДвижений.Колонки.Добавить("Дебет",Новый ОписаниеТипов("Число")); ТаблицаДвижений.Колонки.Добавить("Кредит",Новый ОписаниеТипов("Число")); ТаблицаДвижений.Колонки.Добавить("НазначениеПлатежа",Новый ОписаниеТипов("Строка" , , Новый КвалификаторыСтроки(200, ДопустимаяДлина.Переменная))); Счетчик=1; ДатаПериода = НачДата; Пока ДатаПериода < КонДата Цикл; БухИт = Коннектор.CreateObject("БухгалтерскиеИтоги"); БухИт.ВключатьСубсчета(0, 0); БухИт.ПериодМ(ДатаПериода); НачМ = БухИт.НачПериода(); КонМ = БухИт.КонПериода(); СтрокаСчетов = "50,62.1;50,90;51,62.1;51,90;58.3,62.1;58.3,90;62.3,62.1;62.3,90;44,50;44,51;44,62.3;44,71.1;60.1,50;60.1,51;60.1,62.3;60.1,71.1;68.1,50;68.1,51;68.1,62.3;68.1,71.1;69,50;69,51;69,62.3;69,71.1;70,50;70,51;70,62.3;70,71.1"; БухИт.DoQuery(НачМ, КонМ,СтрокаСчетов); БухИт.ВыбратьПериоды(); Попытка Работаем = БухИт.ПолучитьПериод(); Исключение Работаем = 0; КонецПопытки; Пока Работаем = 1 Цикл Нач = БухИт.НачПериода(); Кон = БухИт.КонПериода(); Опер = Коннектор.CreateObject("Операция"); Опер.ВыбратьОперацииСПроводками(Нач, Кон,СтрокаСчетов); Пока Опер.ПолучитьПроводку() = 1 Цикл СчДт = Опер.Дебет.Счет; СчКт = Опер.Кредит.Счет; ПервичныйДокумент = Опер.ПервичныйДокумент; СчетГруппаДт = СчДт.Родитель(1); СчетГруппаКт = СчКт.Родитель(1); // Если проводка сложная, то не рассматриваем проводку // в которй не указан один из счетов. Если Опер.ComplexEntry() = 1 Тогда Если (Коннектор.ПустоеЗначение(СчДт)=1) или (Коннектор.ПустоеЗначение(СчКт) = 1) Тогда Продолжить; КонецЕсли; КонецЕсли; Если Опер.Сумма = 0 Тогда Продолжить; КонецЕсли; Контрагент=""; Если (СчетГруппаДт.Наименование = Сч50.Наименование) ИЛИ ( СчетГруппаДт.Наименование = Сч51.Наименование) ИЛИ (СчетГруппаДт.Наименование = Сч58.Наименование) ИЛИ (СчетГруппаДт.Наименование = Сч62.Наименование) Тогда Дебет = Опер.Сумма; Кредит = 0; Попытка Контрагент = "ИНН "+Опер.Кредит.Субконто(1).ИНН+" "+Опер.Кредит.Субконто(1).Наименование; Исключение Контрагент=""; КонецПопытки; ИначеЕсли ( СчетГруппаДт.Наименование = Сч44.Наименование) ИЛИ ( СчетГруппаДт.Наименование = Сч60.Наименование) ИЛИ ( СчетГруппаДт.Наименование = Сч68.Наименование) ИЛИ ( СчетГруппаДт.Наименование = Сч69.Наименование) ИЛИ ( СчетГруппаДт.Наименование = Сч70.Наименование) Тогда Кредит = Опер.Сумма; Дебет = 0; Если НЕ СчетГруппаДт.Наименование = Сч70.Наименование И НЕ СчетГруппаДт.Наименование = Сч69.Наименование Тогда Попытка Контрагент = "ИНН "+Опер.Дебет.Субконто(1).ИНН+" "+Опер.Дебет.Субконто(1).Наименование; Исключение Контрагент=""; КонецПопытки; ИначеЕсли НЕ СчетГруппаДт.Наименование = Сч69.Наименование Тогда Попытка Контрагент = Опер.Дебет.Субконто(1).Наименование; Исключение Контрагент=""; КонецПопытки; КонецЕсли; Иначе Продолжить; КонецЕсли; Содержание = Опер.СодержаниеПроводки; Документ = Опер.Документ; Если СокрЛП(СтрЗаменить(СтрЗаменить(СтрЗаменить(ПервичныйДокумент,".",""),",",""),"№","")) <> "" Тогда Операция=ПервичныйДокумент; Иначе Операция= Опер.ДатаОперации; КонецЕсли; СтрокаДвижений = ТаблицаДвижений.Добавить(); СтрокаДвижений.Дата = Документ.ДатаДок; СтрокаДвижений.Операция = Операция; СтрокаДвижений.Документ = Документ.НомерДок; КоличествоСубконто = Опер.Кредит.Счет.КоличествоСубконто(); СтрокаДвижений.Корреспондент = Контрагент; СтрокаДвижений.Дебет = Дебет; СтрокаДвижений.Кредит = Кредит; Попытка СтрокаДвижений.НазначениеПлатежа = Документ.НазначениеПлатежа; Исключение СтрокаДвижений.НазначениеПлатежа = ""; КонецПопытки; Если Найти(СтрокаДвижений.НазначениеПлатежа,"комисси")>0 Тогда СтрокаДвижений.ВО="02"; Иначе СтрокаДвижений.ВО="01"; КонецЕсли; Состояние("Обработано "+Счетчик+" записей"); Счетчик=Счетчик+1; КонецЦикла; ДатаПериода = ДобавитьМесяц(ДатаПериода,1); Попытка Работаем = БухИт.ПолучитьПериод(); Исключение Работаем = 0; КонецПопытки; КонецЦикла; КонецЦикла; Подскажите, что я делаю не так |
|||
1
lubitelxml
15.07.16
✎
12:32
|
отладчиком посмотри
|
|||
2
Горогуля
15.07.16
✎
12:33
|
не глядя: не используешь силу КД
|
|||
3
Cameron_Rifkin
15.07.16
✎
15:47
|
(2) у меня нет задачи перенести эти данные в 8ку. Мне просто нужно получить отчет в вменяемом виде. В 8 я это сделаю за 5 минут на СКД, в 7ке я очень смутно представляю как это делать.
|
|||
4
Cameron_Rifkin
15.07.16
✎
15:47
|
(1) как? работает-то 8ка, а вываливается 7ка
|
|||
5
lubitelxml
15.07.16
✎
15:57
|
(4) ну так посмотри на какой строке вываливается то
|
|||
6
lubitelxml
15.07.16
✎
15:57
|
и отпиши сюда
|
|||
7
youalex
15.07.16
✎
16:00
|
Можно попробовать сделать внешний на 7.7.
А из 8 - пинать 77 на открытие этого отчета. |
|||
8
MaxS
15.07.16
✎
20:39
|
А нельзя, разве в 7-ке написать функцию извлечения данных в ТЗ и из 8-ки просто её вызывать?
|
|||
9
MadJhey
15.07.16
✎
21:04
|
(8) можно, только автор наверно данные в тз не сможет засунуть.
|
|||
10
MaxS
15.07.16
✎
21:12
|
(9) В крайнем случае - в 7-ке сохранить в mxl, в 8-ке открыть файл и загрузить в ТЗ.
|
|||
11
EvgeniuXP
16.07.16
✎
00:30
|
(9) они также суются с маленьким отличием!
|
|||
12
Aleksey
16.07.16
✎
00:32
|
(8) перепиши и запусти этот же отчет в 7-ке и посмотри на что ругается
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |