Модераторы: stron
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Исчезает дата операции при записи, 1С 
:(
    Опции темы
IvanVL
  Дата 16.1.2007, 02:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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 раза подряд то при втором проведении сообщает что надо указать датуоперации.
PM MAIL ICQ   Вверх
Naghual
Дата 16.1.2007, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1893
Регистрация: 15.5.2004
Где: Украина, Днепр

Репутация: 5
Всего: 49



А чему равна ДатаПроверки после строки
ДатаПроверки = Дата(Число(Сред(Файл,7,2)),Число(Сред(Файл,5,2)),Число(Сред(Файл,3,2)));
?


--------------------
Я желаю всем Счастья!
PM ICQ Skype   Вверх
programador
Дата 25.2.2007, 06:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 12.4.2006

Репутация: нет
Всего: нет



Попробуй привести значение года не к 2, а к 4 цифрам. Возможно он тебе операцию записывает на начало первого тысячелетия от рождества христова (реально видал такое  smile ). (Зайди в "Сервис/Параметры/Общие" и глянь сколько там знаков в представлении даты, наверняка - "2" - смени на "4"и поищи в журнале в начале летоисчисления smile )
(Как вариант, проинициализируй переменную рабочей датой 
Код

ДатаПроверки = РабочаяДата();
 - не нужно провоцировать программу на создание пустой даты ;) )
Ну и, в принципе, согласно представленному коду нет никаких гараний, что переменная "файл" будет содержать желаемое значение. Т.е. неизвестно, что вообще найдет обработка и какое вернет значение. Более того, у меня есть подозрение, что последний цикл значение этой переменной, все же, пустое.
Т.е попробуй хотя бы так (вариант далек от идеала, но 2 потенциальные "дыры" убираем 100% ):
Код

ДатаПроверки = РабочаяДата();
Если ПустоеЗначение(Файл) = 0 тогда
       ДатаПроверки = Дата("20"+Число(Сред(Файл,7,2)),Число(Сред(Файл,5,2)),Число(Сред(Файл,3,2)));
КонецЕсли;

тогда операция, в крайнем случае будт записана на "рабочую дату" (опять-таки, проконтролируй "Сервис/Параметры/Общие").
 

Это сообщение отредактировал(а) programador - 25.2.2007, 06:12
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "1C: Предприятие, SAP, ERP и учётные системы"
stron

Запрещается!

1. Обсуждение крэков, кейгенов и других подобных программ

Пробуйте искать сами или обращайтесь в приват к участникам форума.

Темы с подобными вещами будут немедленно удаляться, а нарушители - получать предупреждения.

Также запрещается обсуждение проблем работы этих программ (что куда вписать, куда что скопировать и т.п...)

2. Давать ссылки на взломанные продукты

  • Пожалуйста, пользуйтесь поиском перед тем, как задать вопрос - возможно ответ уже есть на форуме.
  • Название темы должно отражать её суть
  • Действия модераторов можно обсудить здесь

С уважением, stron, Pegas.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | 1C: Предприятие, SAP, ERP и учётные системы | Следующая тема »


 




[ Время генерации скрипта: 0.0643 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.