|
Создание Палтежных поручений (УПП 8.2) | ☑ | ||
---|---|---|---|---|
0
Ser_Vlad
05.10.14
✎
20:54
|
Доброго вечера Форумчане, если такое возможно, нужна помощь обработка "Создание ПлатежныхНоручений Исходящих "
при запуске обработки пишет Ошибка "Символ за границей массива", если нужно код сейчас выложу... |
|||
1
zulu_mix
05.10.14
✎
20:57
|
не нужно
|
|||
2
ОбычныйЧеловек
05.10.14
✎
20:57
|
(0) Выкладывай, посмотрим.
|
|||
3
Ser_Vlad
05.10.14
✎
20:59
|
//Перем ДатаПП;
Перем ВидВыплаты ; Перем Сумма ; Перем Контрагент ; Перем Проект ; Перем НомерСчета ; Перем ИмяВидаРасчета ; Перем НазначениеПлатежа ; ///// /////////////////////////////////////////////////////////////////////////// //Служебные процедуры и функии //Функция читает файл по переданному имени и возращает таблицу значений Функция ПолучитьТаблицуПлатежей(ИмяФайла) ТаблицаПлатежей = Новый ТаблицаЗначений; ТаблицаПлатежей.Колонки.Добавить("Сумма"); ТаблицаПлатежей.Колонки.Добавить("НомерСчета"); ТаблицаПлатежей.Колонки.Добавить("ИмяВидаРасчета"); ТаблицаПлатежей.Колонки.Добавить("НазначениеПлатежа"); ТаблицаПлатежей.Колонки.Добавить("ВидВыплаты"); ТаблицаПлатежей.Колонки.Добавить("Контрагент"); ТаблицаПлатежей.Колонки.Добавить("Банк"); ТаблицаПлатежей.Колонки.Добавить("Проект"); Попытка ServiceManager = Новый ComОбъект("com.sun.star.ServiceManager"); МетодЗагрузки = "ОО"; Исключение Сообщить("Отсутствует приложение для загрузки файла"); КонецПопытки; scr = Новый ComОбъект("MSScriptControl.ScriptControl"); scr.language = "javascript"; scr.eval("MassivParametrov = new Array()"); MassivParametrov = scr.eval("MassivParametrov"); scr.AddObject("OpenOffice", ServiceManager); scr.eval("MassivParametrov[0]=OpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue')"); scr.eval("MassivParametrov[0].Name='Hidden'"); scr.eval("MassivParametrov[0].Value=true"); ServiceManager = Новый ComОбъект("com.sun.star.ServiceManager"); Desktop = ServiceManager.CreateInstance("com.sun.star.frame.Desktop"); sv = ServiceManager.createInstance("com.sun.star.ucb.FileContentProvider"); Path = sv.getFileURLFromSystemPath("", ИмяФайла); Doc = Desktop.LoadComponentFromURL(Path, "_blank", 0, MassivParametrov); Попытка Doc.lockControllers(); Doc.addActionLock(); Исключение Сообщить("Не удалось заблокировать файл: "+ИмяФайла); Возврат Неопределено; КонецПопытки; Sheets = Doc.GetSheets();; Документ = Sheets.GetByIndex(0); ТекСтрокаДок = 4; //НачальнаяСтрока; Пока Истина Цикл Проверка = СокрЛП(""+Документ.getCellByPosition(0, ТекСтрокаДок).getString()); Если ПустаяСтрока(Проверка) Тогда Прервать; КонецЕсли; //Прочитать значения ячеек табличного документа БанкСтрока = СокрЛП(""+Документ.getCellByPosition(0, ТекСтрокаДок).getString()); ВидВыплатыСтрока = СокрЛП(""+Документ.getCellByPosition(2, ТекСтрокаДок).getString()); ИмяВидаРасчетаСтрока = СокрЛП(""+Документ.getCellByPosition(3, ТекСтрокаДок).getString()); КонтрагентСтрока = СокрЛП(""+Документ.getCellByPosition(4, ТекСтрокаДок).getString()); НазначениеПлатежа = СокрЛП(""+Документ.getCellByPosition(5, ТекСтрокаДок).getString()); НомерСчетаСтрока = СокрЛП(""+Документ.getCellByPosition(6, ТекСтрокаДок).getString()); ПроектСтрока = СокрЛП(""+Документ.getCellByPosition(7, ТекСтрокаДок).getString()); СуммаСтрока = СокрЛП(""+Документ.getCellByPosition(8, ТекСтрокаДок).getString()); // Найти ссылки на объекты в ИБ по наименованию Банк = Справочники.Банки.НайтиПоНаименованию(БанкСтрока, Истина); //Банк Если Найти(КонтрагентСтрока,"ГУДКСУ") > 0 Тогда ВидВыплаты = Перечисления.ВидыОперацийППИсходящее.ПеречислениеНалога; //вид операции (Перечсиление Налога ) Иначе ВидВыплаты = Перечисления.ВидыОперацийППИсходящее.ПеречислениеЗП; //вид операции (Перечсиление ЗП ) КонецЕсли; Контрагент = Справочники.Контрагенты.НайтиПоНаименованию(КонтрагентСтрока, Истина); //Контрагент НомерСчета = НомерСчетаСтрока; // номер счета //НомерСчета = СтрЗаменить(НомерСчета,Символ(32),""); //НомерСчета = СтрЗаменить(НомерСчета,Символ(160),""); Проект = Справочники.Проекты.НайтиПоНаименованию(ПроектСтрока, Истина); //Проект Если ЗначениеЗаполнено(СуммаСтрока) Тогда СуммаСтрока = СтрЗаменить(СуммаСтрока,Символ(32),""); //сумма СуммаСтрока = СтрЗаменить(СуммаСтрока,Символ(160),""); Сумма = Число(СуммаСтрока); Иначе Сумма = 0; КонецЕсли; //ИмяВидаРасчета ИмяВидаРасчета = Строка (СтрЗаменить(ИмяВидаРасчетаСтрока,Символ(160),"")); //Имя вида расчета //ИмяВидаРасчета НазначениеПлатежа = Строка (НазначениеПлатежа); //Добавить строки в таблицу из которой потом создать платежки НоваяСтрокаПлатеж = ТаблицаПлатежей.Добавить(); НоваяСтрокаПлатеж.Банк = Банк; НоваяСтрокаПлатеж.ВидВыплаты = ВидВыплаты; НоваяСтрокаПлатеж.ИмяВидаРасчета = ИмяВидаРасчета; НоваяСтрокаПлатеж.Контрагент = Контрагент; НоваяСтрокаПлатеж.НазначениеПлатежа= НазначениеПлатежа; НоваяСтрокаПлатеж.НомерСчета = НомерСчета; НоваяСтрокаПлатеж.Проект = Проект; НоваяСтрокаПлатеж.Сумма = Сумма; ТекСтрокаДок = ТекСтрокаДок+1; Попытка НоваяСтрокаПлатеж.Записать(РежимЗаписиДокумента.Запись); // //3.Записать документ Сообщить("Создан документ "+НоваяСтрокаПлатеж,СтатусСообщения.Обычное); Исключение Сообщить(ОписаниеОшибки()); Продолжить; КонецПопытки; КонецЦикла; //ПланСчетовСсылка.Хозрасчетный Возврат ТаблицаПлатежей; КонецФункции Процедура СоздатьПлатежкиВИБ(ТаблицаПлатежей) ТабПЛ = ТаблицаПлатежей.Количество(); ТабТк = 0; Для Каждого ТекСТрокаПлатежка ИЗ ТаблицаПлатежей Цикл ТабТк = ТабТк+1; Если ТабТк = ТабПл Тогда //Возврат; Попытка Сообщить("НЕ Создан документ "+ТекСТрокаПлатежка,СтатусСообщения.Обычное); // //3.Записать документ Исключение Сообщить(ОписаниеОшибки()); Возврат; //Продолжить; КонецПопытки; КонецЕсли; Сообщить(ТекСТрокаПлатежка); ПлатежноПоручение = Документы.ПлатежноеПоручениеИсходящее.СоздатьДокумент(); //1.Здесь заполнить реквизиты ШАПКИ документа //Орг,дату вид операции,сумму,контрагнет , ном сгенерировать (как написоно в событии при открытии) ПлатежноПоручение.Организация = Организация ; ПлатежноПоручение.Дата = ДатаПП; ПлатежноПоручение.ВидОперации = ВидВыплаты; ПлатежноПоручение.СуммаДокумента = Сумма; ПлатежноПоручение.Контрагент = Справочники.Контрагенты.НайтиПоНаименованию(Контрагент); ПлатежноПоручение.СчетУчетаДенежныхСредств = СчетУчета; // ПлатежноПоручение.НомерПоручения = ОбщегоНазначения.УстановитьНомерДокумента(ПлатежноПоручение); ????? пока // ПлатежноПоручение.Статус = ПокаНе заполняем Финансист после проверки сам проставит //???? 02.10.2014 19:33 пока стоп ПлатежноПоручение.СчетОрганизации = Справочники.БанковскиеСчета.НайтиПоРеквизиту("НомерСчета",НомерСчета); ПлатежноПоручение.Ответственный = ПараметрыСеанса.ТекущийПользователь; // глТекущийПользователь ПлатежноПоручение.НазначениеПлатежа= НазначениеПлатежа; //2.Заполнить реквизиты таб части ( перечисление з/п и перечисление налога) Если НЕ ВидВыплаты = Перечисления.ВидыОперацийППИсходящее.ПеречислениеНалога Тогда ТабЧасть = ПлатежноПоручение.ПеречислениеЗаработнойПлаты.Добавить(); ТабЧасть.Проект = Справочники.Проекты.НайтиПоНаименованию(Проект); ТабЧасть.ВидВзаиморасчетов = Перечисления.ВидыВзаиморасчетовСРаботниками.ЗаработнаяПлата; ТабЧасть.СуммаДокумента = Сумма; //СуммаПлатежа было - исправил ТабЧасть.СчетУчета = СчетУчетаЗП; //на форме 661 ТабЧасть.СтатьяДвиженияДенежныхСредств = Справочники.СтатьиДвиженияДенежныхСредств.НайтиПоНаименованию(СокрЛП("З/П с налогами НА и С з/п")); Иначе //НАЛОГИ ТабЧастьПеречислениеНалогов = ПлатежноПоручение.ПеречислениеНалогов.Добавить(); ТабЧастьПеречислениеНалогов.СтатьяЗатрат = Справочники.СтатьиЗатрат.НайтиПоНаименованию("23 Налоги по зарплате"); ТабЧастьПеречислениеНалогов.Сумма = Сумма; ТабЧастьПеречислениеНалогов.Ответственный = ПараметрыСеанса.ТекущийПользователь; //глТекущийПользователь // Субконто 1 , Субконто2, Субконто3 Если Найти(ИмяВидаРасчета,СокрЛП("ЕСВ"))>0 И Найти(ИмяВидаРасчета,СокрЛП("работники"))>0 Тогда ТабЧастьПеречислениеНалогов.СубконтоДт1 = Справочники.Налоги.НайтиПоКоду("ЕСВРаботники"); //СтрокаНВ.СубконтоДт1 = Справочники.Налоги.НайтиПоКоду("ЕСВ"); ТабЧастьПеречислениеНалогов.СубконтоДт2 = Справочники.СтатьиНалоговыхДеклараций.НайтиПоНаименованию("Удержание ЕСВ с сотрудников (3,6 %)"); ТабЧастьПеречислениеНалогов.СубконтоДт3 = Справочники.Проекты.НайтиПоНаименованию(Проект); ИначеЕсли Найти(ИмяВидаРасчета,СокрЛП("ЕСВ"))>0 И Найти(ИмяВидаРасчета,СокрЛП("работники"))>0 И Найти(ИмяВидаРасчета,СокрЛП("ФОТ"))>0 Тогда ТабЧастьПеречислениеНалогов.СубконтоДт1 = Справочники.Налоги.НайтиПоКоду("ЕСВФОТРаботники"); //СтрокаНВ.СубконтоДт1 = Справочники.Налоги.НайтиПоКоду("ЕСВ"); ТабЧастьПеречислениеНалогов.СубконтоДт2 = Справочники.СтатьиНалоговыхДеклараций.НайтиПоНаименованию("Начисление ЕСВ работодателями (36,76 - 49,7 %)"); ТабЧастьПеречислениеНалогов.СубконтоДт3 = Справочники.Проекты.НайтиПоНаименованию(Проект); ИначеЕсли Найти(ИмяВидаРасчета,СокрЛП("ЕСВ")) > 0 И Найти(ИмяВидаРасчета,СокрЛП("(больничные)"))>0 Тогда ТабЧастьПеречислениеНалогов.СубконтоДт1 = Справочники.Налоги.НайтиПоКоду("ЕСВФОТБольничные"); ТабЧастьПеречислениеНалогов.СубконтоДт2 = Справочники.СтатьиНалоговыхДеклараций.НайтиПоНаименованию("Начисление ЕСВ по больничным листам (33,2 %)"); ТабЧастьПеречислениеНалогов.СубконтоДт3 = Справочники.Проекты.НайтиПоНаименованию(Проект); ИначеЕсли Найти(ИмяВидаРасчета,СокрЛП("ЕСВ")) > 0 И Найти(ИмяВидаРасчета,СокрЛП("(больничные)"))>0 И Найти(ИмяВидаРасчета,СокрЛП("ФОТ"))>0 Тогда ТабЧастьПеречислениеНалогов.СубконтоДт1 = Справочники.Налоги.НайтиПоКоду("ЕСВФОТБольничные"); ТабЧастьПеречислениеНалогов.СубконтоДт2 = Справочники.СтатьиНалоговыхДеклараций.НайтиПоНаименованию("Начисление ЕСВ по больничным листам (33,2 %)"); ТабЧастьПеречислениеНалогов.СубконтоДт3 = Справочники.Проекты.НайтиПоНаименованию(Проект); ИначеЕсли Найти(ИмяВидаРасчета,СокрЛП("НДФЛ")) > 0 Тогда ТабЧастьПеречислениеНалогов.СубконтоДт1 = Справочники.Налоги.НайтиПоКоду("ЕСВФОТБольничные"); ТабЧастьПеречислениеНалогов.СубконтоДт2 = Справочники.СтатьиНалоговыхДеклараций.НайтиПоНаименованию("Начисление ЕСВ по больничным листам (33,2 %)"); ТабЧастьПеречислениеНалогов.СубконтоДт3 = Справочники.Проекты.НайтиПоНаименованию(Проект); КонецЕсли; КонецЕсли; Попытка ПлатежноПоручение.Записать(РежимЗаписиДокумента.Запись); // //3.Записать документ Сообщить("Создан документ "+ТекСТрокаПлатежка,СтатусСообщения.Обычное); Исключение Сообщить(ОписаниеОшибки()); Продолжить; КонецПопытки; КонецЦикла; КонецПроцедуры Процедура СоздатьПлатежкиИзФайла(ИмяФайла) Экспорт //1.Получим таблицу платежей из файла табличного документа ПолучитьТаблицуПлатежей(ИмяФайла); //2.По полученной таблице создадим платежки в ИБ //СоздатьПлатежкиВИБ(ТаблицаПлатежей); // пока так надо КонецПроцедуры //ПараметрыСеанса.ТекущийПользователь |
|||
4
Ser_Vlad
05.10.14
✎
21:00
|
а это на форме-
//////////////////////////////////////////////////////////// //Обработчики событий формы Процедура КнопкаВыполнитьНажатие(Кнопка) СоздатьПлатежкиИзФайла(ПутьКФайлу); КонецПроцедуры Процедура ИмяФайлаНачалоВыбора(Элемент, СтандартнаяОбработка) ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); ДиалогОткрытияФайла.ПолноеИмяФайла = ПутьКФайлу; ДиалогОткрытияФайла.Фильтр = "Excel(*.ods)|*.ods|Excel(*.ods)|*.ods|Все файлы|*.*"; ДиалогОткрытияФайла.МножественныйВыбор = Ложь; ДиалогОткрытияФайла.Заголовок = "Выберите файл"; Если ДиалогОткрытияФайла.Выбрать() Тогда ПутьКФайлу = ДиалогОткрытияФайла.ПолноеИмяФайла; КонецЕсли; КонецПроцедуры |
|||
5
Ser_Vlad
05.10.14
✎
21:01
|
что то перекрутил с параметрами(а теперь не могу добить)
|
|||
6
ОбычныйЧеловек
05.10.14
✎
21:02
|
(3) предпологалалось, что ты строчку с ошибкой выложишь...давай ошибку - как она выходит (скопируй и сюда) а не своими словами
|
|||
7
Jump
05.10.14
✎
21:03
|
(5)Да ты не стесняйся, выкладывай сюда весь код из модуля, и желательно еще и конфигурацию полностью.
|
|||
8
Ser_Vlad
05.10.14
✎
21:07
|
{ВнешняяОбработка.ВнешняяОбработка1.МодульОбъекта(250)}: Ошибка при вызове метода контекста (Записать)
ПлатежноПоручение.Записать(РежимЗаписиДокумента.Запись); по причине: Ошибка при выполнении обработчика - 'ПередЗаписью' по причине: {Документ.ПлатежноеПоручениеИсходящее.МодульОбъекта(2494)}: Индекс находится за границами массива ПлатежноПоручение.Записать(РежимЗаписиДокумента.Запись); |
|||
9
Ser_Vlad
05.10.14
✎
21:08
|
Извиняюсь за неуклюжесть, в следующий раз буду аккуратней
|
|||
10
Джинн
05.10.14
✎
21:16
|
(3) За такое убивать нужно.
|
|||
11
ОбычныйЧеловек
05.10.14
✎
21:17
|
Убери Пыпытку и тогда система выдаст тебе настоящую ошибку в не эту отписку...
|
|||
12
Ser_Vlad
05.10.14
✎
21:18
|
За такое убивать нужно. ??? силенок хватит?
|
|||
13
Ser_Vlad
05.10.14
✎
21:18
|
ща поробую
|
|||
14
Джинн
05.10.14
✎
21:21
|
(12) Ваш искрометный юмор не меняет сути - за это нужно отбирать клавиатуру и давать метлу.
|
|||
15
ОбычныйЧеловек
05.10.14
✎
21:23
|
эм... а что такое "НоваяСтрокаПлатеж" ??? ты что пытаешься строку таблицы записать как документ?
|
|||
16
Ser_Vlad
05.10.14
✎
21:37
|
да точно , вот еще , ({ВнешняяОбработка.ВнешняяОбработка1.МодульОбъекта(250)}: Ошибка при вызове метода контекста (Записать)
ПлатежноПоручение.Записать(РежимЗаписиДокумента.Запись); по причине: Ошибка при выполнении обработчика - 'ПередЗаписью' по причине: {Документ.ПлатежноеПоручениеИсходящее.МодульОбъекта(2494)}: Индекс находится за границами массива ПлатежноПоручение.Записать(РежимЗаписиДокумента.Запись); ) |
|||
17
ОбычныйЧеловек
05.10.14
✎
21:41
|
(16) Я так понимаю этот искрометный юмор не закончится ни когда? :) Правильно ли Я понимаю, что ты хочешь, что бы я нашел 10 отличий (16) от (8) ?
|
|||
18
Ser_Vlad
05.10.14
✎
21:51
|
нет отличия искать не нужно (просто нуно сегодня доделать) а я за неделю так набегался (читаю свои же ответы и самому смешно), я не очень силен в написании кода, поэтому и обратился за помощью...
|
|||
19
Ser_Vlad
05.10.14
✎
22:01
|
все, Все баеньки???
|
|||
20
ОбычныйЧеловек
05.10.14
✎
22:03
|
(19) чем тебе помочь? переписать за тебя код? я же сказал где у тебя ошибки - но ответа так и не получил.
|
|||
21
Ser_Vlad
05.10.14
✎
22:08
|
Убрал я энту строку , не помогло (это мне один "умный человек попосоветовал" , ну я и, "Чем Чорт не шутит" попробовал), все равно Шибка повторяется
|
|||
22
ОбычныйЧеловек
05.10.14
✎
22:13
|
(21) какую строку ты убрал? записать()? какая ошибка тогда повторяется?
|
|||
23
Ser_Vlad
05.10.14
✎
22:20
|
да убрал вот это <Попытка
НоваяСтрокаПлатеж.Записать(РежимЗаписиДокумента.Запись); // //3.Записать документ Сообщить("Создан документ "+НоваяСтрокаПлатеж,СтатусСообщения.Обычное); Исключение Сообщить(ОписаниеОшибки()); Продолжить; КонецПопытки; > |
|||
24
Ser_Vlad
05.10.14
✎
22:20
|
все равно индекс за границей...
|
|||
25
ОбычныйЧеловек
05.10.14
✎
22:24
|
(23) нет, ну ты точно издеваешься...
Расскажи мне,что делает вот эта строка (я с тааким удовольствием послушаю) НоваяСтрокаПлатеж.Записать(РежимЗаписиДокумента.Запись); ??? |
|||
26
Banned
05.10.14
✎
22:29
|
(25) Ты не поверишь... Попытка записи строки....
|
|||
27
Ser_Vlad
05.10.14
✎
22:31
|
Я же сказал что все это (23) вырезано (и изначально даже не планировалось быть)
|
|||
28
Ser_Vlad
05.10.14
✎
22:32
|
и все равно "ошибки"
|
|||
29
ОбычныйЧеловек
05.10.14
✎
22:34
|
(26) поверю, но не пойму.
(27) отключи все попытки...тогда система скажет тебе ошибку по "человечески" так сказать...ты нифига их все не убрал. |
|||
30
Ser_Vlad
05.10.14
✎
22:36
|
аа понял , ща секундочку....
|
|||
31
Ser_Vlad
05.10.14
✎
22:40
|
{ВнешняяОбработка.ВнешняяОбработка1.МодульОбъекта(141)}: Итератор для значения не определен
Для Каждого ТекСТрокаПлатежка ИЗ ТаблицаПлатежей Цикл Отсутствует приложение для загрузки файла Не удалось заблокировать файл: C:\Users\Desktop\ОтчетТест.ods |
|||
32
ОбычныйЧеловек
05.10.14
✎
22:52
|
(31) Вот интересно - тебе ошибка, что нить говорит? (мне почему-то кажется, что нет). Мой тебе совет - вызовите специалиста - все сделает за 5-10 минут.
|
|||
33
Ser_Vlad
05.10.14
✎
23:02
|
хорошо совет принят, но тогда откуда получается так что Таблица значений заполняется данными из Файла (я понял что ты имеешь ввиду "Вот интересно - тебе ошибка, что нить говорит?" ) ,Вообщем с файлом и его чтением думаю все ок если (Возврат ТаблицаПлатежей;) заполняется данными. ИЛИ нет? Давайте так если есть желание помочь, я буду благодарен, а советы раздавать (как и получать ...) как нибудь потом
|
|||
34
ОбычныйЧеловек
05.10.14
✎
23:08
|
(33) у тебя вместо ТаблицыЗначений вернулось Неопределено - вот и ошибка возникает. А вот почему ТаблицаЗначений не заполнилось - вот это уже вопрос - понять это ты сможешь если отладчиком по процедуре заполнения пробежишься..но суди по ошибке - система не может считать данные с файла
|
|||
35
Ser_Vlad
05.10.14
✎
23:11
|
так вот и я том же , если выставить попытки, то ТаблицыЗначений - красивенько заполнена, Воот я и зарылся на этом,
|
|||
36
ОбычныйЧеловек
05.10.14
✎
23:15
|
(35) Ты попытки надеюсь просто убрал а не закоментарил там весь код?
|
|||
37
Ser_Vlad
05.10.14
✎
23:26
|
ну да, может еще раз выложить код модуля, надеюсь никто не умрет от этого (потом темку наверное можно удалить), ?
Серьезно (меня немного подвел человек(), а так уже горит доработать, а мой опыт не позволяет сделать быстро) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |