Имя: Пароль:
1C
 
Странное поведение обработки загрузки в БП3
,
0 DirecTwiX
 
20.10.14
13:53
Жил был клиент, не тужил, загружал данные в БП2 с помощью внешней обработки. Но потом перешёл на БП3 и полезли проблемы.
Обработка по екселевскому файлу создаёт однотипные поступления товаров услуг. Но иногда вылетают ошибки, что "розничная цена не равна учетной", но она равна. Причем ошибки вылетают каждый раз на разных строках.
С чем может быть связано такое поведение?

Два раза подряд запустил обработку:
https://www.dropbox.com/s/9wlfexkw1qkxpeg/Безымянный.png?dl=0
https://www.dropbox.com/s/oanq8hrc56ni50r/Безымянный2.png?dl=0
*на самом деле запускал обработку неоднократно - результат тот же.
1 Amfiaray
 
20.10.14
13:55
В отладчике смотрел при ошибке чему цены равны?
2 DirecTwiX
 
20.10.14
13:57
Загрузка происходит так:


Лист = Книга.WorkSheets(1);
        ВсегоСтрок = Лист.Cells(1,1).SpecialCells(11).Row;

        для Стр = 2 по ВсегоСтрок цикл
            //Сообщить("Реестр "+Строка(Стр-1)+" из "+Строка(ВсегоСтрок-1));
            ОбработатьСтроку(Лист, Стр, Ошибка);        
            Если Ошибка Тогда
                //Ошибка = Ложь;
                Возврат;    
            КонецЕсли;
            //Возврат;
        КонецЦикла;


Процедура ОбработатьСтроку(Лист, Строка, Ошибка)
    ТипДок = Екс(Строка, 3, Лист);
    Если ТипДок="1" ИЛИ Екс(Строка, 3, Лист)="15" ИЛИ ТипДок="28" ИЛИ ТипДок="21" ИЛИ Лев(ТипДок, 2)="22" Тогда
        Контрагент=Екс(Строка, 2, Лист);
        Сумма=Число(Екс(Строка, 11, Лист));                
        Цена=Число(Екс(Строка, 12, Лист));    
        ЦенаДляПТУ=Число(Екс(Строка, 17, Лист)); //Q
        Номер=Екс(Строка, 4, Лист);
        Дата=СтрокаВДату(СокрЛП(Лист.Cells(Строка,5).Value)+"."+Строка(Объект.Год), ".");
        Дата = КонецДня(Дата);
        Если ТипДок="1" Тогда
            ДобавитьПТУ(Номер, Дата, Контрагент, Цена, Сумма, Ошибка);
        ИначеЕсли ТипДок="15" ИЛИ ТипДок="28" Тогда     
            ДобавитьОтчётОПродажах(Номер, Дата, ЦенаДляПТУ, Сумма, ?(ТипДок="15", ложь, истина),Ошибка);
        ИначеЕсли ТипДок="21" Тогда
            ДобавитьВозврат(Номер, Дата, Контрагент, Цена, Сумма,Ошибка);
        ИначеЕсли Лев(ТипДок, 2)="22" Тогда    
            ДобавитьПереоценку(Дата, Сумма, "Номер: "+Номер);
        КонецЕсли;
    КонецЕсли;     
    Если Ошибка Тогда
        Сообщить("Не удалось обработать строку: "+Строка);
        Ошибка = Ложь;
    КонецЕсли;             
КонецПроцедуры

Процедура ДобавитьПТУ(Номер, Дата, Контрагент, Цена, Сумма, Ошибка)
    Попытка
        Док = Документы.ПоступлениеТоваровУслуг.НайтиПоНомеру(Номер, Дата);
        Если ЗначениеЗаполнено(Док) Тогда
            Док.ПолучитьОбъект().Удалить();    
        КонецЕсли;

        Документ = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
    
        Документ.Дата = Дата;
        Документ.Номер = Номер;
        Документ.Организация = Объект.Организация;
        Документ.ВалютаДокумента = Объект.Валюта;
        Документ.СуммаДокумента = Цена;
        Документ.КратностьВзаиморасчетов = 1;
        Документ.КурсВзаиморасчетов = 1;
        Документ.НДСВключенВСтоимость = Ложь;
        Документ.Склад = Объект.РозничныйСклад;
        Документ.СуммаВключаетНДС = Ложь;
        Документ.ВидОперации = Перечисления.ВидыОперацийПоступлениеТоваровУслуг.ПокупкаКомиссия;

        //Документ.ТипЦен = ТипЦенПродажи
        //Документ.УчитыватьНДС = Ложь;
        Документ.Контрагент=Справочники.Контрагенты.НайтиПоНаименованию(Контрагент);
        Если не ЗначениеЗаполнено(Документ.Контрагент) Тогда
            ВызватьИсключение ("Не найден Контрагент с наименованием """+Контрагент+"""");    
        КонецЕсли;
        

        Если Не БухгалтерскийУчетПереопределяемый.УстановитьДоговорКонтрагента(Документ.ДоговорКонтрагента,
        Документ.Контрагент, Объект.Организация, Перечисления.ВидыДоговоровКонтрагентов.СПоставщиком)
        Тогда
            ВызватьИсключение ("Не удалось найти договор контргагента """+Контрагент+"""");        
        КонецЕсли;         
        Документ.СчетУчетаРасчетовСКонтрагентом = ПланыСчетов.Хозрасчетный.НайтиПоКоду("60.01");
        Документ.СчетУчетаРасчетовПоАвансам = ПланыСчетов.Хозрасчетный.НайтиПоКоду("60.02");
        Документ.СпособЗачетаАвансов = Перечисления.СпособыЗачетаАвансов.Автоматически;
        
        Стр = Документ.Товары.Добавить();
        Стр.Номенклатура = Объект.Номенклатура;
        Стр.Количество = Сумма;
        Стр.Цена = Цена/Сумма;
        Стр.Сумма = Цена;
        Стр.ОтражениеВУСН = Перечисления.ОтражениеВУСН.Принимаются;
        Стр.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС;
        Стр.СчетУчета = ПланыСчетов.Хозрасчетный.НайтиПоКоду("41.11");
        
        //Стр.СчетРасчетов = ПланыСчетов.Хозрасчетный.НайтиПоКоду("60.01");
        
        //Попытка
            Документ.Записать(РежимЗаписиДокумента.Проведение);
    
        //Исключение
        //    Документ.Записать(РежимЗаписиДокумента.Запись);
        //    Сообщить("Документ <"+Документ+"> записан. Ошибка: "+ОписаниеОшибки());
        //КонецПопытки;
        
        УстановитьСвойствоОбъекта(Документ.Ссылка, СвойствоЗагружен, мДата);
    Исключение
        Сообщить(ОписаниеОшибки());
        Ошибка = Истина;
    КонецПопытки;    
    
КонецПроцедуры
3 DirecTwiX
 
20.10.14
13:59
(1) Смотрел - там всё нормально, как у рабочих документов.
4 Amfiaray
 
20.10.14
14:03
(3)Ну а пройти отладчиком по процедуре "ОбработкаПроведения" и посмотреть что там с учетными ценами?
5 DirecTwiX
 
20.10.14
14:13
(4) Непонятно, на какой строчке ошибка вылетит..
6 Amfiaray
 
20.10.14
14:14
поставь остановку по ошибке
7 Maniac
 
20.10.14
14:18
(6) коллега. ты сообщения смоитрел? там нет ПРОГРАММНЫХ ОШИБОК
Это все штатные типовые сообщения.
8 Maniac
 
20.10.14
14:22
(0) Чувак, у тебя перед глазами написано четко что хочет программа.

У тебя склад розничный!!!!!!!
а значит в ПТУ надо и указывать цену в рознице и сумму. Эти реквизиты есть.
9 kobzon2
 
20.10.14
14:23
Переоценка не проведена? Или в БП их нет?
10 Maniac
 
20.10.14
14:24
(6) мало того что это ти повые сообщения, и никакого отнеошения к ошибке КОДА вообще не имеют! А значит и отладчиком НЕЧЕГО смотреть.

Так это еще и сообщения из модцуля самого типового документа, процедуры проведения.

А проблема автора только в одном - что он программирует, а вообще нек значет что типовая от него требует.
И не до конца соблюдает процесс и требования.
11 kobzon2
 
20.10.14
14:34
Какие-то непонятные вещи:
Стр.Количество = Сумма;
Стр.Цена = Цена/Сумма;
Стр.Сумма = Цена;
12 DirecTwiX
 
20.10.14
14:44
(6) Да, в (5) я погорячился

(7) При чем тут программные ошибки? Я понимаю, что это типовые сообщения. Но непонятно, почему они каждый раз появляются в разных местах.

(8) Там используется счёт 42.01 и в документах поступления цена указывается отличная от розничной. А как раз с 42.01 списывается по розничной.

(10) Разбираюсь, не волнуйся. Повторюсь, используется схема с торговой наценкой.

(11) Это как раз для 42.01
13 DirecTwiX
 
20.10.14
14:53
Выглядит всё это дело так:
https://www.dropbox.com/s/fhnk6imprdzjyse/Безымянный3.png?dl=0
Таким образом на 41 всегда сумма равна количеству и показывает продажи, а на 42 висит прибыль.