Имя: Пароль:
1C
1С v8
УПП 1.3.88.2 - после обновления длительное формирование книги продаж
, ,
0 NorthWind
 
05.04.17
10:43
Добрый день. Несколько дней назад обновился с 1.3.87.1 до 1.3.88.2.
Довольно много продаж, примерно 10 000 реализаций в месяц.
Раньше операция заполнения документа "Формирование книги продаж" шла минут 5-10, сейчас - 40. Еще никто не смотрел, чего такого туда понапихали?
1 Пузан
 
05.04.17
10:46
Уже вышла 1.3.89.2 :)
2 NorthWind
 
05.04.17
10:56
Ого, оперативненько они. Ладно, тогда обновлюсь сегодня, посмотрим как оно
3 bizon2008
 
05.04.17
10:58
(2) Не надо, жди следующего. Тама ошибка у них где-то, аж сервер 1С падает.
4 NorthWind
 
05.04.17
10:59
(3) в процессе чего падает? Просто НДС ведь сдавать, меня бухи задерут если вопрос не решить с заполнением
5 NorthWind
 
05.04.17
11:00
ее перезаполняют в день по десять раз
6 Пузан
 
05.04.17
11:11
(4) НДС сдавать в конце месяца, еще сто раз все исправят.
7 Пузан
 
05.04.17
11:12
(3) О какой ошибке идет речь? Я как раз сейчас обновляю. Или это шутка была такая?
8 NorthWind
 
05.04.17
11:38
(6) дело в том что у нас НДС довольно громоздкий. За три месяца тридцать тыс доков, не так уж мало. Поэтому исправлять ошибки, довводить документы и смотреть что получается - начинают заранее. И тормозисторы при заполнении книг ну никак не катят.
9 bizon2008
 
05.04.17
16:15
(7) Нет не шутка, пришлось откатится.
10 NorthWind
 
05.04.17
16:17
(9) какая версия платформы и в каких случаях падает? Подробнее написать можете?
11 NorthWind
 
05.04.17
17:30
у кого-нибудь еще наблюдались проблемы с 89.2 как пишет (3)?
12 NorthWind
 
06.04.17
07:51
Апну с вашего позволения. При пользовании 89.2 ни у кого не наблюдались проблемы?
13 NorthWind
 
06.04.17
12:33
Ну что ж, еще раз ап, последний. Если нет, то видимо, надо самому пробовать обновляться.
14 Джинн
 
06.04.17
12:51
(12) На копию сейчас накатил - не падает. Долго - не долго оценить не могу. Это субъективно.
15 Джинн
 
06.04.17
12:54
(14) + Но немного подождите - погоняю еще по полной программе. С проведение по регистрам НДС, авансами и пр. хренью.
16 Джинн
 
06.04.17
13:07
Прогнал два месяца и заполнил - проблем не обнаружил. Правда записей немного - 800-900 в месяц. Не сезон. Может на больших проявится? Автор утверждения о баге что-то не колется.
17 shuhard
 
06.04.17
13:29
(16) смысла тестировать 88.2 уже нет,
89.2 на зарплатном блоке живуча
18 Операция 1Ы
 
06.04.17
13:35
ап, я сейчас готовлюсь к тому чтобы 89.2 накатить, колитесь что за проблемы? (3) В каких ситуациях падает? , а то вбросил и ушел.
19 Джинн
 
06.04.17
13:43
(17) Дык постепенно до нее и накатываю :) А тут аккурат в момент наличия 88.2 люди вопрос задали. Почему бы не помочь, если есть возможность?
20 NorthWind
 
06.04.17
16:09
(15) сейчас сам разворачиваю бэкап в тестовую базу, еще полчасика примерно осталось, потом накатывать обновку буду. Спасибо, что откликнулись!
21 Операция 1Ы
 
06.04.17
17:04
(20)на файловой все нормально, ничего не упало, сейчас на сервер натяну.
22 NorthWind
 
07.04.17
17:57
Проблема из (0) в обновлении 89.2 решена не была. Пришлось разбираться. Выяснилось, что дело в резко увеличившемся количестве С-Ф, на которые надо разносить оплату, и ммм... специфическом алгоритме этого самого распределения оплат в Модуле документа ФормированиеЗаписейКнигиПродаж. В этом алгоритме выполняется цикл по нескольким десяткам тысяч строк дерева, на каждой итерации которого запускается запрос из ПостроителяЗапроса (???!!!) к таблице значений, где тоже несколько десятков тысяч элементов. Пришлось проиндексировать таблицу и выкинуть нафиг построитель, переписав код через НайтиСтроки (). Разноска 500 фактур после этого вместо 40 секунд стала занимать 0-1. Если кому интересно, могу опубликовать код.
23 Джинн
 
07.04.17
18:17
(22) Давайте.
24 NorthWind
 
07.04.17
19:26
(23) Модифицируется процедура РаспределитьОплатыПоДеревуСФ в Модуле объекта документа ФормированиеЗаписейКнигиПродаж. По коду следующие пометки:
// [-] VVP и далее комментированный фрагмент - "родной" 1Совский код был удален;
// [+] VVP {
<фрагмент>
// } - фрагмент был добавлен мной. Если фрагмент однострочный, фигурных скобок нет, просто предполагается что строка ниже коммента вставлена мной.

[code]
Процедура РаспределитьОплатыПоДеревуСФ(Дерево_НДСНачисленный, ТаблицаРезультатов, СписокСчетовФактур, РаспределенныеОплаты, ОтражатьВРеестре = Истина, ОтражатьВидНачисления = Ложь )
    
    НДСНалоговыйПериод = Неопределено;
    
    // [-] VVP - удаляем подготовку построителя и его отбора    
    //Построитель_РаспределенныеОплаты = Новый построительЗапроса();
    //Построитель_РаспределенныеОплаты.ИсточникДанных = Новый ОписаниеИсточникаДанных(РаспределенныеОплаты);
    
    // Подготовка структуры отбора
    //Отбор = Построитель_РаспределенныеОплаты.Отбор;
    //Отбор.Добавить("СчетФактура");
    //Отбор.СчетФактура.Использование = Истина;
    //Отбор.Добавить("РаспределеннаяОплата");
    //Отбор.РаспределеннаяОплата.ВидСравнения = ВидСравнения.Больше;
    //Отбор.РаспределеннаяОплата.Значение = 0;
    //Отбор.РаспределеннаяОплата.Использование = Истина;
    
    //Построитель_РаспределенныеОплаты.Порядок.Добавить("ДатаОплаты");
    
    ТаблицаОплат = Новый ТаблицаЗначений();
    ТаблицаОплат.Колонки.Добавить("ДокументОплаты");
    ТаблицаОплат.Колонки.Добавить("ДатаОплаты",Новый ОписаниеТипов("Дата", , , Новый КвалификаторыДаты(ЧастиДаты.ДатаВремя)));
    ТаблицаОплат.Колонки.Добавить("СуммаОплаты",Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15,2)));
    
    // [-] VVP - удаляем ссылку на таблицу источника построителя
    // ТаблицаИсточникаПостроителя = Построитель_РаспределенныеОплаты.ИсточникДанных.ИсточникДанных;
    // [+] VVP - делаем свою "таблицу источника построителя" и индексируем ее {
    ТаблицаИсточникаПостроителя = РаспределенныеОплаты.Скопировать ();
    ТаблицаИсточникаПостроителя.Индексы.Добавить ("СчетФактура");
    ВыборкаОплат = РаспределенныеОплаты.СкопироватьКолонки ();
    // }
    МоментОпределения_ПоОтгрузке = Перечисления.МоментыОпределенияНалоговойБазыНДС.ПоОтгрузке;
        
    Для каждого СтрокаСФ Из Дерево_НДСНачисленный.Строки Цикл
                        
        ТаблицаОплат.Очистить();                          
        
        Если УчетНДС.ДляСчетаФактурыНеТребуетсяОплата(СтрокаСФ.СчетФактура) Тогда
            НаличиеОплатыНеТребуется = Истина;
        Иначе
            НаличиеОплатыНеТребуется = (СтрокаСФ.Строки[0].МоментОпределенияНалоговойБазыНДС = МоментОпределения_ПоОтгрузке) Или Дата >= '20080101';
            // [-] VVP - удаляем запрос построителем
            //Отбор = Построитель_РаспределенныеОплаты.Отбор;
            //Отбор.СчетФактура.Значение = СтрокаСФ.СчетФактура;
            //Отбор.РаспределеннаяОплата.ВидСравнения = ?(СтрокаСФ.СуммаСНДС>0,ВидСравнения.Больше,ВидСравнения.Меньше);
            //
            //Построитель_РаспределенныеОплаты.Выполнить();
            //Если Построитель_РаспределенныеОплаты.Результат.Пустой() и не НаличиеОплатыНеТребуется и СтрокаСФ.СуммаСНДС    >= 0 Тогда
            //    // Оплата не обнаружена
            //    Продолжить;
            //КонецЕсли;
            //
            //ВыборкаОплат = Построитель_РаспределенныеОплаты.Результат.Выгрузить(ОбходРезультатаЗапроса.Прямой);            
            
            // [+] VVP - делаем свой запрос данных через НайтиСтроки и далее навигацией по строкам {
            МассивСтрокОплатПоСФ = ТаблицаИсточникаПостроителя.НайтиСтроки (Новый Структура ("СчетФактура", СтрокаСФ.СчетФактура));
            ВыборкаОплат.Очистить ();
            Для Каждого СтрокаОплатыПоСФ Из МассивСтрокОплатПоСФ Цикл
                Если ((СтрокаСФ.СуммаСНДС > 0) И (СтрокаОплатыПоСФ.РаспределеннаяОплата > 0)) или
                     ((СтрокаСФ.СуммаСНДС <= 0) И (СтрокаОплатыПоСФ.РаспределеннаяОплата < 0)) Тогда
                      СтрокаВыборкиОплат = ВыборкаОплат.Добавить ();
                        Для каждого Колонка из ВыборкаОплат.Колонки Цикл
                            ИндексКолонки = ВыборкаОплат.Колонки.Индекс (Колонка);
                            СтрокаВыборкиОплат.Установить(ИндексКолонки, СтрокаОплатыПоСФ.Получить (ИндексКолонки));
                        КонецЦикла;
                КонецЕсли;
            КонецЦикла;
            ВыборкаОплат.Сортировать ("ДатаОплаты");
            // }

                
            СуммаКПогашению = СтрокаСФ.СуммаСНДС;

            Для каждого СтрокаРаспределеннойОплаты Из ВыборкаОплат Цикл
[/code]
... далее пошел неизменный код процедуры. Ниже в нем есть ссылка на ТаблицаИсточникаПостроителя, она отработает корректно.
25 NorthWind
 
07.04.17
19:34
Сейчас еще по коду вижу, что не обработал ситуацию, когда ничего найти не удалось. В оригинальном коде в этом случае идет переход на следующую итерацию:
Если Построитель_РаспределенныеОплаты.Результат.Пустой() и не НаличиеОплатыНеТребуется и СтрокаСФ.СуммаСНДС    >= 0 Тогда
    // Оплата не обнаружена
    Продолжить;
КонецЕсли;
Соответственно, в моем случае также следует добавить
МассивСтрокОплатПоСФ = ТаблицаИсточникаПостроителя.НайтиСтроки (Новый Структура ("СчетФактура", СтрокаСФ.СчетФактура));
Если МассивСтрокОплатПоСФ.Количество ()=0 и не НаличиеОплатыНеТребуется и СтрокаСФ.СуммаСНДС    >= 0 Тогда
Продолжить;
КонецЕсли;
26 Злопчинский
 
07.04.17
19:48
А просветитель я чего-то отстал от жизни
Нафига какая-то разноска опдат по счф?
27 NorthWind
 
07.04.17
21:03
(26) Ну дык штатный механизм УПП 1.3 для момента определения налоговой базы НДС "по оплате". Используется при заполнении табличной части документа "Формирование записей книги продаж".
28 Злопчинский
 
07.04.17
21:24
(27) что-то я совсем туплю не в теме. А где сейчас НДС по оплате?
29 NorthWind
 
07.04.17
21:55
(28) Вообще по отгрузке, но там такая история: если оплата по данному документу требуется, то механизм, который они предусмотрели в этом заполнении, должен выполняться. Иначе книга продаж кривая получится. Поэтому либо надо дожидаться, пока 30 тысяч раз отработает построитель, либо чего-то придумывать.
30 Злопчинский
 
08.04.17
02:53
(29) опять нифига не понял
Как какая-то оплата каких-то счетфактур влияет на книгу продаж?
31 Пузан
 
08.04.17
06:02
Может имеет смысл забанить бизона, за вброс, дезинформацию, вандализм и издевательство над психикой 1С-ников?
32 NorthWind
 
08.04.17
07:20
(30) если у вас клиент платит (что авансом, что после) сразу за много поставок и это происходит многократно, то обязательно частичные оплаты будут. В этом случае - вот что написано в справке по доку:
При политике «по отгрузке», если была частичная оплата по счету-фактуре то суммы оплаты и остатка попадают разными строками, для оплаченной суммы указывается документ оплаты, при этом в отчете «Книга продаж» они отражаются одной строкой.
Т.е. какая бы политика по НДС у вас не была, оплаты этим документом все равно просматриваются, такая логика его работы.
33 NorthWind
 
08.04.17
07:42
по коду в (24) видно, что вне зависимости от политики момента возникновения НДС, оплаты оно обязательно запрашивает для всех фактур, кроме тех, у которых УчетНДС.ДляСчетаФактурыНеТребуетсяОплата(СтрокаСФ.СчетФактура). Я не вижу смысла спорить правильно это или нет, но оно - вот такое, так спецы из 1С решили.