Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Переход с УТ версии 3.1 на 3.2 (BAS) , Проблема с длительным выполнением обработчиков отложенного обновления          
python Подменю пользователя
сообщение 20.05.19, 16:57
Сообщение #1

Говорящий
***
Группа: Пользователи
Сообщений: 83
Из: Киев
Спасибо сказали: 13 раз
Рейтинг: 0

Доброго дня!

Предпринята попытка обновить конфигурацию УТ версии 3.1.5 до 3.2.
База тестовая. Размер не малый, клиент-сервер, БД MS SQL Server 2017. База на SSD диске, памяти достаточно.
Активно используется документ регистрации цен поставщиков.

Обновление проходит нормально (практически).

Проблема присутствует при выполнении обработчиков отложенного обновления.
В частности, процедура "Документы.РегистрацияЦенНоменклатурыПоставщика.ЗаполнитьВидЦеныПоставщикаВТабличнойЧастиТовары".
Выполняется сутками!

Текст процедуры, которая выполняется.
// Обработчик обновления BAS УТ 3.2.1
// Заполняет "ВидЦеныПоставщика" в табличных частях документа и обновляет движения по регистру сведений ЦеныНоменклатурыПоставщиков
Процедура ЗаполнитьВидЦеныПоставщикаВТабличнойЧастиТовары(Параметры) Экспорт
    
    ПолноеИмяОбъекта = "Документ.РегистрацияЦенНоменклатурыПоставщика";
    
    МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
    
    Результат = ОбновлениеИнформационнойБазы.СоздатьВременнуюТаблицуСсылокДляОбработки(
        Параметры.Очередь,
        ПолноеИмяОбъекта,
        МенеджерВременныхТаблиц
    );
    
    Если НЕ Результат.ЕстьДанныеДляОбработки Тогда
        Параметры.ОбработкаЗавершена = Истина;
        Возврат;
    КонецЕсли;
    
    Если НЕ Результат.ЕстьЗаписиВоВременнойТаблице Тогда
        Параметры.ОбработкаЗавершена = Ложь;
        Возврат;
    КонецЕсли;
    
    ЗапросПоДокументам = Новый Запрос;
    ЗапросПоДокументам.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
    ЗапросПоДокументам.Текст = "
    |ВЫБРАТЬ
    |    Т.Ссылка                                     КАК Ссылка,
    |    Т.Ссылка.Партнер                             КАК Партнер,
    |    Т.Ссылка.УдалитьСоглашение                   КАК Соглашение,
    |    Т.Ссылка.УдалитьСоглашение.ВидЦеныПоставщика КАК ВидЦеныПоставщика
    |ИЗ
    |    Документ.РегистрацияЦенНоменклатурыПоставщика.Товары КАК Т
    |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТДляОбработки КАК ДокументыКОбработке
    |            ПО Т.Ссылка = ДокументыКОбработке.Ссылка
    |ГДЕ
    |    Т.Ссылка.Проведен
    |    И (Т.ВидЦеныПоставщика = ЗНАЧЕНИЕ(Справочник.ВидыЦенПоставщиков.ПустаяСсылка)
    |        И ЕСТЬNULL(Т.Ссылка.УдалитьСоглашение, ЗНАЧЕНИЕ(Справочник.СоглашенияСПоставщиками.ПустаяСсылка)) <> ЗНАЧЕНИЕ(Справочник.СоглашенияСПоставщиками.ПустаяСсылка))
    |";
    
    ЗапросПоДокументам.Текст = СтрЗаменить(ЗапросПоДокументам.Текст, "ВТДляОбработки", Результат.ИмяВременнойТаблицы);
    
    Выборка = ЗапросПоДокументам.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
        
        НачатьТранзакцию();
        
        Попытка    
            
            Блокировка = Новый БлокировкаДанных;
            ЭлементБлокировки = Блокировка.Добавить(ПолноеИмяОбъекта);
            ЭлементБлокировки.УстановитьЗначение("Ссылка", Выборка.Ссылка);
            ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ЦеныНоменклатурыПоставщиков.НаборЗаписей");
            ЭлементБлокировки.УстановитьЗначение("Регистратор", Выборка.Ссылка);
            Блокировка.Заблокировать();
            
            ДокументОбъект = Выборка.Ссылка.ПолучитьОбъект();
            
            // Если объект ранее был удален или обработан другими сеансами, пропускаем его
            Если ДокументОбъект = Неопределено Тогда
                ОтменитьТранзакцию();
                ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(Выборка.Ссылка);
                Продолжить;
            КонецЕсли;
            
            Для Каждого СтрокаТовары Из ДокументОбъект.Товары Цикл
                Если Не ЗначениеЗаполнено(СтрокаТовары.ВидЦеныПоставщика) Тогда
                    СтрокаТовары.ВидЦеныПоставщика = Выборка.ВидЦеныПоставщика;
                КонецЕсли;
            КонецЦикла;
            
            ДокументОбъект.УдалитьСоглашение = Неопределено;
            
            ОбновлениеИнформационнойБазы.ЗаписатьДанные(ДокументОбъект);
            
            НаборЗаписей = РегистрыСведений.ЦеныНоменклатурыПоставщиков.СоздатьНаборЗаписей();
            НаборЗаписей.Отбор.Регистратор.Значение = ДокументОбъект.Ссылка;
            НаборЗаписей.Отбор.Регистратор.Использование = Истина;
            НаборЗаписей.Прочитать();
            Если НаборЗаписей.Выбран() Тогда
                
                Для Каждого СтрокаНабора Из НаборЗаписей Цикл
                    
                    Если НЕ ЗначениеЗаполнено(СтрокаНабора.ВидЦеныПоставщика) Тогда
                        СтрокаНабора.ВидЦеныПоставщика = Выборка.ВидЦеныПоставщика;
                    КонецЕсли;
                    
                    СтрокаНабора.Соглашение = Неопределено;
                    СтрокаНабора.Партнер = Выборка.Партнер;
                    
                КонецЦикла;
                
                ОбновлениеИнформационнойБазы.ЗаписатьДанные(НаборЗаписей);
                
            КонецЕсли;
            
            ЗафиксироватьТранзакцию();
            
        Исключение
            
            ОтменитьТранзакцию();
            ОбновлениеИнформационнойБазыУТ.СообщитьОНеудачнойОбработке(Выборка.Ссылка);
                                        
        КонецПопытки;
        
    КонецЦикла;
    
    Параметры.ОбработкаЗавершена = ОбновлениеИнформационнойБазы.ОбработкаДанныхЗавершена(
        Параметры.Очередь,
        ПолноеИмяОбъекта
    );
    
КонецПроцедуры


Что-то мне подсказывает, что долго. По всей видимости - причина в количестве строк в документах, запись данных большими порциями.
Исправить можно только через разбиение на более мелкие документы? Или есть еще варианты оптимизации?

Пытался ли кто управлять последовательностью выполнения обработчиков отложенного обновления?
Хотелось бы посмотреть на эту разработку, но не бесплатная она: [необходимо зарегистрироваться для просмотра ссылки]

На этом проблемы с обновлением не заканчиваются, к сожалению.
Так как не все обработки отложенного обновления выполнены - при открытии документа (к примеру, заказа покупателя) выдается ошибка "Недостаточно фактических параметров".
Ошибка возникает при вызове необходимых обработчиков при открытии формы, но вылетает. Как бороться? Перепроверять все доки, все процедуры?
{(1)}: Недостаточно фактических параметров
Документы.РасходныйОрдерНаТовары.РасходныеОрдераОбновленыНаНовуюВерсию(Параметры)


Есть подозрение, что разработчики не тестировали обновление на больших базах.
Кто-то уже переходил на УТ BAS? Как успехи, какие впечатления?

О себе:
1С:Предприятие 8.3 (8.3.13.1809)
BAS Управление торговлей, редакция 3.2 (3.2.8.1)

python Подменю пользователя
сообщение 23.05.19, 19:26
Сообщение #2

Говорящий
***
Группа: Пользователи
Сообщений: 83
Из: Киев
Спасибо сказали: 13 раз
Рейтинг: 0

Еще один косяк с обновлением обнаружился при выполнении отложенных обработчиков обновления.
В модуле менеджера документа ПриходныйКассовыйОрдер в процедуре ЗаполнитьСуммуКонвертации в запросе ошибка:

ЗапросПоДокументам.Текст = "
    |ВЫБРАТЬ РАЗЛИЧНЫЕ
    |    ДанныеДокумента.Ссылка,
    |    ЕСТЬNULL(ДанныеДокумента.СписаниеБезналичныхДенежныхСредств.СуммаДокумента, 0) КАК СуммаКонвертации
    |ИЗ
    |    Документ.ПриходныйКассовыйОрдер КАК ДанныеДокумента
    |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТДляОбработки КАК ДокументыКОбработке
    |            ПО ДанныеДокумента.Ссылка = ДокументыКОбработке.Ссылка
    |ГДЕ
    |    ДанныеДокумента.ХозяйственнаяОперация = ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.КонвертацияВалюты)
    |    И ДанныеДокумента.СуммаКонвертации = 0
    |";


Цитата
.СписаниеБезналичныхДенежныхСредств
- нужно удалить!

Явный копи-паст, но неужели не тестировали? Если не ошибаюсь, данная ошибка присутствует во всех релизах 3.2.

alex1c Подменю пользователя
сообщение 31.05.19, 10:06
Сообщение #3

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 235
Спасибо сказали: 45 раз
Рейтинг: 40

Не подскажете как перевести 3.1 на 3.2? Что-то не вижу на сайте в списке таких обновлений?!

alex1c @ Сегодня, 10:32 * ,
Все разобрался, надо было обновить до 3.1.8, и дальше будет обновление 3.2.

sobaka sutulaya Подменю пользователя
сообщение 31.05.19, 16:42
Сообщение #4

Молчаливый
*
Группа: Пользователи
Сообщений: 2
Спасибо сказали: 0 раз
Рейтинг: 0


На этом проблемы с обновлением не заканчиваются, к сожалению.
Так как не все обработки отложенного обновления выполнены - при открытии документа (к примеру, заказа покупателя) выдается ошибка "Недостаточно фактических параметров".
Ошибка возникает при вызове необходимых обработчиков при открытии формы, но вылетает. Как бороться? Перепроверять все доки, все процедуры?

Добрый день, как решили проблему?

python Подменю пользователя
сообщение 31.05.19, 20:21
Сообщение #5

Говорящий
***
Группа: Пользователи
Сообщений: 83
Из: Киев
Спасибо сказали: 13 раз
Рейтинг: 0

Цитата(sobaka sutulaya @ 31.05.19, 17:42) *
как решили проблему?

Выполнением обработчиков необходимых.

sobaka sutulaya Подменю пользователя
сообщение 01.06.19, 17:33
Сообщение #6

Молчаливый
*
Группа: Пользователи
Сообщений: 2
Спасибо сказали: 0 раз
Рейтинг: 0

python @ Вчера, 20:21 * ,
Спасибо за ответ, а возможно подробнее получить ответ?

При переходе возникает такая ошибка по обработке данных: Формирует корректировки регистра "Денежные средства в пути" по операциям возврата по эквайрингу.

Получается обработка данных выполнена не все процедуры, 70 из 265.

Последовательность сделана правильно, база целая, конфигурация типовая.

python Подменю пользователя
сообщение 02.06.19, 12:05
Сообщение #7

Говорящий
***
Группа: Пользователи
Сообщений: 83
Из: Киев
Спасибо сказали: 13 раз
Рейтинг: 0

Цитата(sobaka sutulaya @ 01.06.19, 18:33) *
Спасибо за ответ, а возможно подробнее получить ответ?


Какой ответ Вы желаете получить? Все базы разные, разные контуры учета используются разными предприятиями, у всех разные данные, и разные ошибки могут быть. Причины ошибок нужно устранять, и добиться того, чтоб все процедуры были выполнены корректно.

Цитата(sobaka sutulaya @ 01.06.19, 18:33) *
При переходе возникает такая ошибка по обработке данных: Формирует корректировки регистра "Денежные средства в пути" по операциям возврата по эквайрингу.

Это только описание процедуры, при выполнении которой возникла ошибка. Смотрите в журнале регистрации сообщение об ошибках. Ну а дальше - конфигуратор в руки.

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 28.03.24, 13:53
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!