|   |   | 
| 
 | Создание Палтежных поручений (УПП 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 | 
        ну да, может еще раз выложить код модуля, надеюсь никто не умрет от этого (потом темку наверное можно удалить), ? 
 Серьезно (меня немного подвел человек(), а так уже горит доработать, а мой опыт не позволяет сделать быстро) | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |