![]() |
Модераторы: stron |
![]() ![]() ![]() |
|
IvanVL |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 33 Регистрация: 31.10.2005 Репутация: нет Всего: нет |
Вот код:
//******************************************* Процедура Сформировать() НадоСин = 0; Файл = ФС.НайтиПервыйФайл(Путь+"*.dbf"); DBF = СоздатьОбъект("XBase"); СпрКон = СоздатьОбъект("Справочник.Контрагенты"); Опер = СоздатьОбъект("Операция"); Если ПустаяСтрока(Файл) = 1 Тогда Вопрос("В папке нет данных",0); Возврат; КонецЕсли; Пока ПустаяСтрока(Файл) <> 1 Цикл Дубликат = 0; ДатаПроверки = Дата(""); ДатаПроверки = Дата(Число(Сред(Файл,7,2)),Число(Сред(Файл,5,2)),Число(Сред(Файл,3,2))); Если DBF.Открыта() = 1 Тогда DBF.ЗакрытьФайл(); КонецЕсли; DBF.ОткрытьФайл(Путь+Файл); Если DBF.Открыта() = 0 Тогда Сообщить("Не удалось открыть файл "+Строка(ДатаПроверки),"!!!"); Файл = ФС.НайтиСледующийФайл(); Продолжить; КонецЕсли; Делать = DBF.Первая(); Если Делать = 0 Тогда Сообщить("Пустая база "+Строка(ДатаПроверки),"!!"); Если DBF.Открыта() = 1 Тогда DBF.ЗакрытьФайл(); КонецЕсли; ФС.УдалитьФайл(Путь+Файл); Файл = ФС.НайтиСледующийФайл(); Продолжить; КонецЕсли; Если Константа.ДатаЗапретаРедактирования <= ДатаПроверки Тогда Сообщить("Дата отчета входит в закрытый период "+Строка(ДатаПроверки),"!"); Если DBF.Открыта() = 1 Тогда DBF.ЗакрытьФайл(); КонецЕсли; ФС.УдалитьФайл(Путь+Файл); Файл = ФС.НайтиСледующийФайл(); Продолжить; КонецЕсли; Пока Делать = 1 Цикл а=0;б=0; Если ПустаяСтрока(DBF.NaimPod) = 1 Тогда Делать = DBF.Следующая(); Продолжить; КонецЕсли; Если ТСин.НайтиЗначение(СокрЛП(DBF.NaimPod),а,б) = 0 Тогда НадоСин = 1; ТСин.НоваяСтрока(); ТСин.НаимПодр = СокрЛП(DBF.NaimPod); КонецЕсли; Делать = DBF.Следующая(); КонецЦикла; Если НадоСин = 1 Тогда Если DBF.Открыта() = 1 Тогда DBF.ЗакрытьФайл(); КонецЕсли; Вопрос("Необходима синхронизация",0); Форма.ИспользоватьСлой("Подбор",2); Возврат; КонецЕсли; Делать = DBF.Первая(); Склад = DBF.NaimPod; НачатьТранзакцию(); Опер.Новая(); Опер.ДатаОперации = ДатаПроверки; Опер.Документ.ДатаДок=ДатаПроверки; Опер.Документ.УстановитьНовыйНомер("О-"); Опер.Содержание = "Автоматическое внесение данных "+Склад; Состояние(Строка(ДатаПроверки) + " "+Строка(Делать)); Пока Делать <> 0 Цикл Состояние(Строка(ДатаПроверки) + " "+Строка(Делать)); Если Склад = DBF.NaimPod Тогда Иначе Если (DBF.КоличествоЗаписей() = DBF.НомерЗаписи()) Тогда Если Опер.КоличествоПроводок() <> 0 Тогда ОСум = 0; Опер.ВыбратьПроводки(); Пока Опер.ПолучитьПроводку() = 1 Цикл ОСум = ОСум + Опер.Сумма; КонецЦикла; Опер.СуммаОперации = ОСум; Опер.Записать(); ЗафиксироватьТранзакцию(); НачатьТранзакцию(); КонецЕсли; Если DBF.КоличествоЗаписей() = 0 Тогда Прервать; КонецЕсли; DBF.Первая(); Склад = DBF.NaimPod; Опер.Новая(); Опер.ДатаОперации = ДатаПроверки; Опер.Документ.УстановитьНовыйНомер("О-"); Опер.Содержание = "Автоматическое внесение данных "+Склад; Иначе DBF.Следующая(); КонецЕсли; Делать = DBF.КоличествоЗаписей(); Продолжить; КонецЕсли; Если DBF.Summa = 0 Тогда НомерЗап = DBF.НомерЗаписи(); DBF.Удалить(); DBF.Сжать(); DBF.Перейти(НомерЗап); Делать = DBF.КоличествоЗаписей(); Продолжить; КонецЕсли; Опер.НоваяПроводка(); Опер.Дебет.Счет = СчетПоКоду(DBF.SchDt); Для ш = 1 По Опер.Дебет.Счет.КоличествоСубконто() Цикл Если Опер.Дебет.Счет.ВидСубконто(ш) = ВидыСубконто.ЗначениеПоИдентификатору("Контрагенты") Тогда ИНН = СокрЛП(DBF.InnKon); Если ПустоеЗначение(ИНН) = 0 Тогда ИНН = ?(Лев(ИНН,2)="00",Сред(ИНН,3),ИНН); Если СпрКон.НайтиПоРеквизиту("ИНН",ИНН,1) = 1 Тогда Опер.Дебет.Контрагенты = СпрКон.ТекущийЭлемент(); ИначеЕсли(СпрКон.НайтиПоРеквизиту("ИНН",ИНН+"\280101001",1) = 1) Тогда Опер.Дебет.Контрагенты = СпрКон.ТекущийЭлемент(); ИначеЕсли(СпрКон.НайтиПоРеквизиту("ИНН",ИНН+"/280101001",1) = 1) Тогда Опер.Дебет.Контрагенты = СпрКон.ТекущийЭлемент(); КонецЕсли; Для о = 1 По Опер.Дебет.Счет.КоличествоСубконто() Цикл Если Опер.Дебет.Счет.ВидСубконто(о) = ВидыСубконто.ЗначениеПоИдентификатору("Договоры") Тогда Если ПустоеЗначение(Опер.Дебет.Контрагенты)=0 Тогда Опер.Дебет.Договоры = Опер.Дебет.Контрагенты.ОсновнойДоговор; КонецЕсли; КонецЕсли; КонецЦикла; КонецЕсли; КонецЕсли; КонецЦикла; а=0;б=0; Для ш = 1 По Опер.Дебет.Счет.КоличествоСубконто() Цикл Если Опер.Дебет.Счет.ВидСубконто(ш) = ВидыСубконто.ЗначениеПоИдентификатору("МестаХранения") Тогда Если ТСин.НайтиЗначение(СокрЛП(DBF.NaimPod),а,б) = 1 Тогда ТСин.ПолучитьСтрокуПоНомеру(а); Опер.Дебет.МестаХранения = ТСин.МестаХранения; КонецЕсли; КонецЕсли; КонецЦикла; а=0;б=0; Для ш = 1 По Опер.Дебет.Счет.КоличествоСубконто() Цикл Если Опер.Дебет.Счет.ВидСубконто(ш) = ВидыСубконто.ЗначениеПоИдентификатору("Подразделения") Тогда Если ТСин.НайтиЗначение(СокрЛП(DBF.NaimPod),а,б) = 1 Тогда ТСин.ПолучитьСтрокуПоНомеру(а); Опер.Дебет.Подразделения = ТСин.Подразделения; КонецЕсли; КонецЕсли; КонецЦикла; а=0;б=0; Для ш = 1 По Опер.Дебет.Счет.КоличествоСубконто() Цикл Если Опер.Дебет.Счет.ВидСубконто(ш) = ВидыСубконто.ЗначениеПоИдентификатору("ВидыНоменклатуры") Тогда Если ТСин.НайтиЗначение(СокрЛП(DBF.NaimPod),а,б) = 1 Тогда ТСин.ПолучитьСтрокуПоНомеру(а); Опер.Дебет.ВидыНоменклатуры = ТСин.ВидыНоменклатуры; КонецЕсли; КонецЕсли; КонецЦикла; Для ш = 1 По Опер.Дебет.Счет.КоличествоСубконто() Цикл Если Опер.Дебет.Счет.ВидСубконто(ш) = ВидыСубконто.ЗначениеПоИдентификатору("Номенклатура") Тогда Опер.Дебет.Номенклатура = ВыбНоменклатура; КонецЕсли; КонецЦикла; Опер.Кредит.Счет = СчетПоКоду(DBF.SchKt); Для ш = 1 По Опер.Кредит.Счет.КоличествоСубконто() Цикл Если Опер.Кредит.Счет.ВидСубконто(ш) = ВидыСубконто.ЗначениеПоИдентификатору("Контрагенты") Тогда ИНН = СокрЛП(DBF.InnKon); Если ПустоеЗначение(ИНН) = 0 Тогда ИНН = ?(Лев(ИНН,2)="00",Сред(ИНН,3),ИНН); Если СпрКон.НайтиПоРеквизиту("ИНН",ИНН,1) = 1 Тогда Опер.Кредит.Контрагенты = СпрКон.ТекущийЭлемент(); ИначеЕсли(СпрКон.НайтиПоРеквизиту("ИНН",ИНН+"\280101001",1) = 1) Тогда Опер.Кредит.Контрагенты = СпрКон.ТекущийЭлемент(); ИначеЕсли(СпрКон.НайтиПоРеквизиту("ИНН",ИНН+"/280101001",1) = 1) Тогда Опер.Кредит.Контрагенты = СпрКон.ТекущийЭлемент(); КонецЕсли; Для о = 1 По Опер.Кредит.Счет.КоличествоСубконто() Цикл Если Опер.Кредит.Счет.ВидСубконто(о) = ВидыСубконто.ЗначениеПоИдентификатору("Договоры") Тогда Если ПустоеЗначение(Опер.Кредит.Контрагенты)=0 Тогда Опер.Кредит.Договоры = Опер.Кредит.Контрагенты.ОсновнойДоговор; КонецЕсли; КонецЕсли; КонецЦикла; КонецЕсли; КонецЕсли; КонецЦикла; а=0;б=0; Для ш = 1 По Опер.Кредит.Счет.КоличествоСубконто() Цикл Если Опер.Кредит.Счет.ВидСубконто(ш) = ВидыСубконто.ЗначениеПоИдентификатору("МестаХранения") Тогда Если ТСин.НайтиЗначение(СокрЛП(DBF.NaimPod),а,б) = 1 Тогда ТСин.ПолучитьСтрокуПоНомеру(а); Опер.Кредит.МестаХранения = ТСин.МестаХранения; КонецЕсли; КонецЕсли; КонецЦикла; а=0;б=0; Для ш = 1 По Опер.Кредит.Счет.КоличествоСубконто() Цикл Если Опер.Кредит.Счет.ВидСубконто(ш) = ВидыСубконто.ЗначениеПоИдентификатору("Подразделения") Тогда Если ТСин.НайтиЗначение(СокрЛП(DBF.NaimPod),а,б) = 1 Тогда ТСин.ПолучитьСтрокуПоНомеру(а); Опер.Кредит.Подразделения = ТСин.Подразделения; КонецЕсли; КонецЕсли; КонецЦикла; а=0;б=0; Для ш = 1 По Опер.Кредит.Счет.КоличествоСубконто() Цикл Если Опер.Кредит.Счет.ВидСубконто(ш) = ВидыСубконто.ЗначениеПоИдентификатору("ВидыНоменклатуры") Тогда Если ТСин.НайтиЗначение(СокрЛП(DBF.NaimPod),а,б) = 1 Тогда ТСин.ПолучитьСтрокуПоНомеру(а); Опер.Кредит.ВидыНоменклатуры = ТСин.ВидыНоменклатуры; КонецЕсли; КонецЕсли; КонецЦикла; Для ш = 1 По Опер.Кредит.Счет.КоличествоСубконто() Цикл Если Опер.Кредит.Счет.ВидСубконто(ш) = ВидыСубконто.ЗначениеПоИдентификатору("Номенклатура") Тогда Опер.Кредит.Номенклатура = ВыбНоменклатура; КонецЕсли; КонецЦикла; Опер.Сумма = DBF.Summa; НомерЗап = DBF.НомерЗаписи(); DBF.Удалить(); DBF.Сжать(); Если DBF.КоличествоЗаписей() = 0 Тогда Прервать; КонецЕсли; DBF.Перейти(НомерЗап); Делать = DBF.КоличествоЗаписей(); КонецЦикла; Если Опер.КоличествоПроводок() <> 0 Тогда // Опер.Записать(); ОСум = 0; Опер.ВыбратьПроводки(); Пока Опер.ПолучитьПроводку() = 1 Цикл ОСум = ОСум + Опер.Сумма; КонецЦикла; Опер.СуммаОперации = ОСум; Опер.Записать(); КонецЕсли; ЗафиксироватьТранзакцию(); // ДатаПроверки = Дата(""); Если DBF.Открыта() = 1 Тогда DBF.ЗакрытьФайл(); КонецЕсли; ФС.УдалитьФайл(Путь+Файл); Файл = ФС.НайтиСледующийФайл(); КонецЦикла; Вопрос("Завершил",0); КонецПроцедуры При записи пропадает датаоперации (именно при записи), и оперрацию потом не найти, а если записать 2 раза подряд то при втором проведении сообщает что надо указать датуоперации. |
|||
|
||||
Naghual |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1893 Регистрация: 15.5.2004 Где: Украина, Днепр Репутация: 5 Всего: 49 |
А чему равна ДатаПроверки после строки
ДатаПроверки = Дата(Число(Сред(Файл,7,2)),Число(Сред(Файл,5,2)),Число(Сред(Файл,3,2))); ? -------------------- Я желаю всем Счастья! |
|||
|
||||
programador |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 12.4.2006 Репутация: нет Всего: нет |
Попробуй привести значение года не к 2, а к 4 цифрам. Возможно он тебе операцию записывает на начало первого тысячелетия от рождества христова (реально видал такое
![]() ![]() (Как вариант, проинициализируй переменную рабочей датой
Ну и, в принципе, согласно представленному коду нет никаких гараний, что переменная "файл" будет содержать желаемое значение. Т.е. неизвестно, что вообще найдет обработка и какое вернет значение. Более того, у меня есть подозрение, что последний цикл значение этой переменной, все же, пустое. Т.е попробуй хотя бы так (вариант далек от идеала, но 2 потенциальные "дыры" убираем 100% ):
тогда операция, в крайнем случае будт записана на "рабочую дату" (опять-таки, проконтролируй "Сервис/Параметры/Общие"). Это сообщение отредактировал(а) programador - 25.2.2007, 06:12 |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "1C: Предприятие, SAP, ERP и учётные системы" | |
|
Запрещается! 1. Обсуждение крэков, кейгенов и других подобных программ Пробуйте искать сами или обращайтесь в приват к участникам форума. Темы с подобными вещами будут немедленно удаляться, а нарушители - получать предупреждения. Также запрещается обсуждение проблем работы этих программ (что куда вписать, куда что скопировать и т.п...) 2. Давать ссылки на взломанные продукты
|
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | 1C: Предприятие, SAP, ERP и учётные системы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |