Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
12 дек 2024, 04:43

Проблемы с выгрузкой

Автор stix, 19 апр 2015, 15:02

0 Пользователей и 1 гость просматривают эту тему.

stix

1c 8.2 Бухгалтерия для Казахстана... Есть регламентное задание чтобы выгружать в MS SQL даные в две таблицы - tb_PaymentStud и tb_FinanceStud... в tb_PaymentStud данные выгружаются,  а в tb_FinanceStud - нет. Помогите ,пожалуйста , разобраться с этой проблемой. Всем заранее благодарен за советы
Процедура ВыгрузитьОплатуВЕКИС(ДатаНачала, ДатаОкончания, ТаблицаОплаты = Неопределено) Экспорт

БазаСтудентов = Справочники.SP_ПодключениеКВнешнимИБ.БазаАбитуриентовСтудентов;
БазаСтудентовИмя = Справочники.SP_ПодключениеКВнешнимИБ.БазаАбитуриентовСтудентов.ИмяИБНаСервере;

#Если Клиент Тогда
Состояние("Идет подключение к базе """ + БазаСтудентов.Наименование + """...");
#КонецЕсли

СтруктураПодключения = МодульРегламентныхЗаданий.ПодключитьВнешнююИнформационнуюБазу(БазаСтудентов);
Если СтруктураПодключения = Неопределено Тогда
Возврат;
КонецЕсли;

Соединение = СтруктураПодключения.Соединение;

СтруктураЗагрузки = ПолучитьСтруктуруЗагрузки(БазаСтудентов, Соединение);

ДобавитьЗаписьВЛогФайл("------------------------------------", СтруктураЗагрузки);
ДобавитьЗаписьВЛогФайл("Начало выгрузки оплаты: " + ТекущаяДата(), СтруктураЗагрузки);
#Если Клиент Тогда
Сообщить("------------------------------------");
Сообщить("Начало выгрузки оплаты: " + ТекущаяДата());
ДобавитьЗаписьВЛогФайл("Пользователь: " + глЗначениеПеременной("глТекущийПользователь"), СтруктураЗагрузки);
Сообщить("1. Очистка таблицы оплаты!");
#Иначе
ДобавитьЗаписьВЛогФайл("Пользователь: регламентное задание", СтруктураЗагрузки);
#КонецЕсли

ДобавитьЗаписьВЛогФайл("1. Очистка таблицы оплаты!", СтруктураЗагрузки);

Попытка             
Соединение.Execute("DELETE tb_PaymentStud WHERE Date_Pay >= '" + Формат(ДатаНачала, "ДФ=""гггг-MM-дд""") + "' AND Date_Pay <= '" + Формат(ДатаОкончания, "ДФ=""гггг-MM-дд""") + "'");
Исключение

#Если Клиент Тогда
Сообщить("Не удалось очистить таблицу оплаты в ЕКИС. Выгрузка не осуществлена!");
Сообщить(ОписаниеОшибки());
#КонецЕсли
ДобавитьЗаписьВЛогФайл("Не удалось очистить таблицу оплаты в ЕКИС. Выгрузка не осуществлена!", СтруктураЗагрузки);
ДобавитьЗаписьВЛогФайл(ОписаниеОшибки(), СтруктураЗагрузки);
Возврат;

КонецПопытки;

ТекущийПользователь = Справочники.Пользователи.ЕКИС;
мОрганизация = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(ТекущийПользователь, "ОсновнаяОрганизация");

#Если Клиент Тогда
Сообщить("2. Выгрузка таблицы оплаты!");
#КонецЕсли
ДобавитьЗаписьВЛогФайл("2. Выгрузка таблицы оплаты!", СтруктураЗагрузки);

Запрос = Новый Запрос();
Запрос.УстановитьПараметр("парамОрганизация", мОрганизация);
Запрос.УстановитьПараметр("парамНачало", ДатаНачала);
Запрос.УстановитьПараметр("парамКонец", КонецМесяца(ДатаОкончания));

Если ТаблицаОплаты = Неопределено Тогда
ТекстЗапроса = "ВЫБРАТЬ
| НАЧАЛОПЕРИОДА(ТаблицаПоСтудентам.Период, МЕСЯЦ) КАК ПериодРегистрации,
| ТаблицаПоСтудентам.Студент КАК Студент,
| ТаблицаПоСтудентам.ВидНачисления КАК ВидНачисления,
| ТаблицаПоСтудентам.Регистратор,
| СУММА(ВЫБОР
| КОГДА ТаблицаПоСтудентам.КодОперации = ЗНАЧЕНИЕ(Перечисление.SP_КодыОперацийРасчетовСоСтудентами.Оплата)
| ТОГДА ТаблицаПоСтудентам.Сумма
| ИНАЧЕ 0
| КОНЕЦ) КАК Оплата,
| СУММА(ВЫБОР
| КОГДА ТаблицаПоСтудентам.КодОперации = ЗНАЧЕНИЕ(Перечисление.SP_КодыОперацийРасчетовСоСтудентами.Возврат)
| ТОГДА -ТаблицаПоСтудентам.Сумма
| ИНАЧЕ 0
| КОНЕЦ) КАК ВозвратОплаты
|ПОМЕСТИТЬ ВТ_ТаблицаПоСтудентам
|ИЗ
| РегистрНакопления.SP_РасчетыСоСтудентами КАК ТаблицаПоСтудентам
|ГДЕ
| ТаблицаПоСтудентам.Организация = &парамОрганизация
| И ТаблицаПоСтудентам.Период МЕЖДУ &парамНачало И &парамКонец
| И (ТаблицаПоСтудентам.КодОперации = ЗНАЧЕНИЕ(Перечисление.SP_КодыОперацийРасчетовСоСтудентами.Оплата) ИЛИ
| ТаблицаПоСтудентам.КодОперации = ЗНАЧЕНИЕ(Перечисление.SP_КодыОперацийРасчетовСоСтудентами.Возврат))
| И НЕ ТаблицаПоСтудентам.Регистратор ССЫЛКА Документ.SP_ПереносОплатыЗаОбучение
|
|СГРУППИРОВАТЬ ПО
| НАЧАЛОПЕРИОДА(ТаблицаПоСтудентам.Период, МЕСЯЦ),
| ТаблицаПоСтудентам.Студент,
| ТаблицаПоСтудентам.ВидНачисления,
| ТаблицаПоСтудентам.Регистратор
|
|ИМЕЮЩИЕ
| НЕ СУММА(ТаблицаПоСтудентам.Сумма) = 0
|;
|////////////////////////////////////////////";
Иначе
Запрос.УстановитьПараметр("Оплата", ТаблицаОплаты);
ТекстЗапроса = "ВЫБРАТЬ
| ТаблицаПоСтудентам.ПериодРегистрации КАК ПериодРегистрации,
| ТаблицаПоСтудентам.Студент КАК Студент,
| ТаблицаПоСтудентам.ВидНачисления КАК ВидНачисления,
| ТаблицаПоСтудентам.Регистратор КАК Регистратор,
| ТаблицаПоСтудентам.Оплата КАК Оплата,
| ТаблицаПоСтудентам.ВозвратОплаты КАК ВозвратОплаты
|ПОМЕСТИТЬ ВТ_ТаблицаПоСтудентам
|ИЗ
| &Оплата КАК ТаблицаПоСтудентам
|;
|////////////////////////////////////////////";
КонецЕсли;

Запрос.Текст = ТекстЗапроса + "
|ВЫБРАТЬ
| ИтоговаяТаблица.ПериодРегистрации,
| ИтоговаяТаблица.Студент,
| ИтоговаяТаблица.ВидНачисления,
| ИтоговаяТаблица.Регистратор,
| СУММА(ИтоговаяТаблица.Оплата) КАК Оплата,
| СУММА(ИтоговаяТаблица.ВозвратОплаты) КАК ВозвратОплаты
|ИЗ
| ВТ_ТаблицаПоСтудентам КАК ИтоговаяТаблица
|СГРУППИРОВАТЬ ПО
| ИтоговаяТаблица.ПериодРегистрации,
| ИтоговаяТаблица.Студент,
| ИтоговаяТаблица.ВидНачисления,
| ИтоговаяТаблица.Регистратор
|
|УПОРЯДОЧИТЬ ПО
| ИтоговаяТаблица.Студент,
| ИтоговаяТаблица.ПериодРегистрации,
| ИтоговаяТаблица.ВидНачисления,
| ИтоговаяТаблица.Регистратор
|АВТОУПОРЯДОЧИВАНИЕ";

Оплата = Запрос.Выполнить().Выгрузить();
Для Каждого Строка Из Оплата Цикл

#Если Клиент Тогда
Состояние("Добавление студента в таблицу оплаты: " + Строка.Студент);
#КонецЕсли

ДатаНачалаУчебногоГода = SP_УправлениеРасчетамиСоСтудентами.ПолучитьДатуНачалаУчебногоГода(Строка.ПериодРегистрации);

ТекстЗапроса = "INSERT INTO tb_PaymentStud (IKT, Date_Pay, KodVid_Pay, PaymentSum, PaymentDoc, UchYear) VALUES (
|'" + Строка.Студент.ИКТ + "',
|'" + Формат(Строка.ПериодРегистрации, "ДФ=""гггг-MM-дд""") + "',
|'" + Строка.ВидНачисления.Код + "',
|" + СтрЗаменить(УбратьПробелы(Строка((Строка.Оплата - Строка.ВозвратОплаты))), ",", ".") + ",
|'" + Строка.Регистратор + "',
|" + УбратьПробелы(Строка(Год(ДатаНачалаУчебногоГода))) + ")";

Попытка             
Соединение.Execute(Строка(ТекстЗапроса));
Исключение

#Если Клиент Тогда
Сообщить("Не удалось загрузить студента """ + Строка.Студент + """ в таблицу оплаты!");
Сообщить(ОписаниеОшибки());
#КонецЕсли
ДобавитьЗаписьВЛогФайл("Не удалось загрузить студента """ + Строка.Студент + """ в таблицу оплаты!", СтруктураЗагрузки);
ДобавитьЗаписьВЛогФайл(ОписаниеОшибки(), СтруктураЗагрузки);
    Продолжить;

КонецПопытки;

#Если Клиент Тогда
ОбработкаПрерыванияПользователя();
#КонецЕсли

КонецЦикла;

#Если Клиент Тогда
Сообщить("3. Пересчет сводной таблицы!");
#КонецЕсли
ДобавитьЗаписьВЛогФайл("3. Пересчет сводной таблицы!", СтруктураЗагрузки);

НаборЗаписей = Новый COMОбъект("ADODB.Recordset");

Оплата.Свернуть("Студент, ВидНачисления, ПериодРегистрации", "Оплата, ВозвратОплаты");
Запрос.УстановитьПараметр("Оплата", Оплата);
Запрос.Текст = "ВЫБРАТЬ
| ТаблицаПоСтудентам.ПериодРегистрации КАК ПериодРегистрации,
| ТаблицаПоСтудентам.Студент КАК Студент,
| ТаблицаПоСтудентам.ВидНачисления КАК ВидНачисления,
| ТаблицаПоСтудентам.Оплата КАК Оплата,
| ТаблицаПоСтудентам.ВозвратОплаты КАК ВозвратОплаты
|ПОМЕСТИТЬ ВТ_ТаблицаПоСтудентам
|ИЗ
| &Оплата КАК ТаблицаПоСтудентам
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ИтоговаяТаблица.ПериодРегистрации,
| ИтоговаяТаблица.Студент КАК Студент,
| ИтоговаяТаблица.ВидНачисления КАК ВидНачисления,
| ИтоговаяТаблица.Оплата КАК Оплата,
| ИтоговаяТаблица.ВозвратОплаты КАК ВозвратОплаты
|ИЗ
| ВТ_ТаблицаПоСтудентам КАК ИтоговаяТаблица
|
|УПОРЯДОЧИТЬ ПО
| ИтоговаяТаблица.Студент,
| ИтоговаяТаблица.ВидНачисления,
| ИтоговаяТаблица.ПериодРегистрации
|ИТОГИ
| СУММА(Оплата),
| СУММА(ВозвратОплаты)
|ПО
| Студент,
| ВидНачисления
|АВТОУПОРЯДОЧИВАНИЕ";

ВыборкаСтудент = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

Пока ВыборкаСтудент.Следующий() Цикл

ВыборкаВидНачисления = ВыборкаСтудент.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаВидНачисления.Следующий() Цикл

УспешноОбновлено = Истина;
Выборка = ВыборкаВидНачисления.Выбрать();
Пока Выборка.Следующий() Цикл
ТекстЗапроса = "SELECT
| IKT,
| Date_Pay,
| KodVid_Pay,
| BeginSum,
| YearCost,
| LgotaSum,
| PaymentSum,
| ReturnPayment,
| AmnestySum,
| TransferSum,
| EndSum,
| UchYear
|FROM tb_FinanceStud
| WHERE IKT = '" + Выборка.Студент.ИКТ + "'
| AND KodVid_Pay = '" + Выборка.ВидНачисления.Код + "'
| AND Date_Pay >= '" + Формат(Выборка.ПериодРегистрации, "ДФ=""гггг-MM-дд""") + "'";

Попытка             
НаборЗаписей = Соединение.Execute(Строка(ТекстЗапроса));
Исключение
#Если Клиент Тогда
Сообщить("Не удалось подкоючиться к сводной таблице!");
Сообщить(ОписаниеОшибки());
#КонецЕсли
ДобавитьЗаписьВЛогФайл("Не удалось подкоючиться к сводной таблице!", СтруктураЗагрузки);
ДобавитьЗаписьВЛогФайл(ОписаниеОшибки(), СтруктураЗагрузки);

Перейти ~метка1;

КонецПопытки;

ПериодРегистрации = Выборка.ПериодРегистрации;
Пока НаборЗаписей.EOF() = 0 Цикл

Если ПериодРегистрации < НаборЗаписей.Fields("Date_Pay").Value Тогда
ОстатокНаНачало = 0;
Иначе
ОстатокНаНачало = НаборЗаписей.Fields("BeginSum").Value;
КонецЕсли;
Оплата = ?(ПериодРегистрации = Выборка.ПериодРегистрации, Выборка.Оплата, 0);
ВозвратОплаты = ?(ПериодРегистрации = Выборка.ПериодРегистрации, Выборка.ВозвратОплаты, 0);

Пока ПериодРегистрации < НаборЗаписей.Fields("Date_Pay").Value Цикл

#Если Клиент Тогда
Состояние("Добавление студента """ + Выборка.Студент + """ в сводную таблицу!");
#КонецЕсли

ДатаНачалаУчебногоГода = SP_УправлениеРасчетамиСоСтудентами.ПолучитьДатуНачалаУчебногоГода(Выборка.ПериодРегистрации);
                ОстатокНаКонец = ОстатокНаНачало - Оплата + ВозвратОплаты;
ТекстЗапроса = "INSERT INTO tb_FinanceStud (IKT, Date_Pay, KodVid_Pay, BeginSum, YearCost, LgotaSum, PaymentSum, ReturnPayment, AmnestySum, TransferSum, EndSum, UchYear) VALUES (
|'" + Выборка.Студент.ИКТ + "',
|'" + Формат(ПериодРегистрации, "ДФ=""гггг-MM-дд""") + "',
|'" + Выборка.ВидНачисления.Код + "',
|" + СтрЗаменить(УбратьПробелы(Строка(ОстатокНаНачало)), ",", ".") + ",
|0,
|0,
|" + СтрЗаменить(УбратьПробелы(Строка(Оплата)), ",", ".") + ",
|" + СтрЗаменить(УбратьПробелы(Строка(ВозвратОплаты)), ",", ".") + ",
|0,
|0,
|" + СтрЗаменить(УбратьПробелы(Строка(ОстатокНаКонец)), ",", ".") + ",
|" + УбратьПробелы(Строка(Год(ДатаНачалаУчебногоГода))) + ")";

Попытка             
Соединение.Execute(Строка(ТекстЗапроса));
Исключение
#Если Клиент Тогда
Сообщить("Не удалось добавить студента """ + Выборка.Студент + """ в сводную таблицу!");
Сообщить(ОписаниеОшибки());
#КонецЕсли
ДобавитьЗаписьВЛогФайл("Не удалось добавить студента """ + Выборка.Студент + """ в сводную таблицу!", СтруктураЗагрузки);
ДобавитьЗаписьВЛогФайл(ОписаниеОшибки(), СтруктураЗагрузки);
УспешноОбновлено = Ложь;
    Прервать;
КонецПопытки;

ОстатокНаНачало = ОстатокНаКонец;
ПериодРегистрации = ДобавитьМесяц(ПериодРегистрации, 1);

КонецЦикла;

Если Не УспешноОбновлено Тогда
Прервать;
КонецЕсли;

#Если Клиент Тогда
Состояние("Обновление студента """ + Выборка.Студент + """ в сводной таблице!");
#КонецЕсли

ОстатокНаКонец = ОстатокНаНачало + НаборЗаписей.Fields("YearCost").Value - НаборЗаписей.Fields("LgotaSum").Value - Оплата + ВозвратОплаты + НаборЗаписей.Fields("TransferSum").Value - НаборЗаписей.Fields("AmnestySum").Value;
ТекстЗапроса = "UPDATE tb_FinanceStud SET
|BeginSum = " + СтрЗаменить(УбратьПробелы(Строка(ОстатокНаНачало)), ",", ".") + ",
|PaymentSum = " + СтрЗаменить(УбратьПробелы(Строка(Оплата)), ",", ".") + ",
|ReturnPayment = " + СтрЗаменить(УбратьПробелы(Строка(ВозвратОплаты)), ",", ".") + ",
|EndSum = " + СтрЗаменить(УбратьПробелы(Строка(ОстатокНаКонец)), ",", ".") + "
|WHERE IKT = '" + Выборка.Студент.ИКТ + "'
| AND KodVid_Pay = '" + Выборка.ВидНачисления.Код + "'
| AND Date_Pay = '" + Формат(ПериодРегистрации, "ДФ=""гггг-MM-дд""") + "'";
Попытка             
СтруктураЗагрузки.Соединение.Execute(Строка(ТекстЗапроса));
Исключение
Комментарий = "Не удалось для студента """ + Выборка.Студент + """ обновить сводную таблицу!";
#Если Клиент Тогда
Сообщить(Комментарий, СтатусСообщения.Внимание);
Сообщить(ОписаниеОшибки());
#КонецЕсли
ДобавитьЗаписьВЛогФайл(Комментарий, СтруктураЗагрузки);
ДобавитьЗаписьВЛогФайл(ОписаниеОшибки(), СтруктураЗагрузки);
УспешноОбновлено = Ложь;
Прервать;
КонецПопытки;

ОстатокНаНачало = ОстатокНаКонец;

НаборЗаписей.MoveNext();

#Если Клиент Тогда
ОбработкаПрерыванияПользователя();
#КонецЕсли

КонецЦикла;

КонецЦикла;
КонецЦикла;

КонецЦикла;

~метка1:

#Если Клиент Тогда
Сообщить("Выгрузка оплаты закончена!
|------------------------------------");
#КонецЕсли
ДобавитьЗаписьВЛогФайл("Выгрузка оплаты закончена!", СтруктураЗагрузки);
ДобавитьЗаписьВЛогФайл("------------------------------------", СтруктураЗагрузки);

#Если Клиент Тогда
Состояние("Идет отключение от базы """ + БазаСтудентов.Наименование + """...");
#КонецЕсли

Соединение = Неопределено;

КонецПроцедуры

Процедура ВыгрузитьОплатуВЕКИСРегламентнымЗаданием() Экспорт

ВыгрузитьОплатуВЕКИС(НачалоДня(ТекущаяДата()), КонецДня(ТекущаяДата()));

КонецПроцедуры


cska-fanat-kz

проверяйте что возвращает запрос по финансам на стороне 1с
и каким то чудом (оооооочень мало общался с transact-sql) отлаживайте запрос на стороне сервера
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск