Есть много заказов за период 01.01.2020 по 31.01.2020, которые загружались с файлов от поставщика в 1с.
Потом некоторые из загруженных заказов в 1с изменили пользователи.
Сейчас необходимо обновить имеющиеся заказы за данный период из файлов, то есть вернуть им первозданный вид.
Для этого нахожу заказы за период и вывожу ссылки в таблицу. После выбираю папку с файлами и нажимаю кнопку "Обновить", на которую написал такой логичный код:
1. беру первый файл и нахожу по его данным заказ из таблицы - если в заказе что то не сходится - меняю и перезаписываю.
2. и так дальше с каждым файлом.
За день все относительно быстро, но когда взял период месяц, то 1с запустилась и долго стоит упершись в ограничение 8 Гб по памяти SQL. Долго ждал - ошибок нет, но и результата нет. Думаю зависло. Подскажите почему может виснуть?
Потом некоторые из загруженных заказов в 1с изменили пользователи.
Сейчас необходимо обновить имеющиеся заказы за данный период из файлов, то есть вернуть им первозданный вид.
Для этого нахожу заказы за период и вывожу ссылки в таблицу. После выбираю папку с файлами и нажимаю кнопку "Обновить", на которую написал такой логичный код:
1. беру первый файл и нахожу по его данным заказ из таблицы - если в заказе что то не сходится - меняю и перезаписываю.
2. и так дальше с каждым файлом.
За день все относительно быстро, но когда взял период месяц, то 1с запустилась и долго стоит упершись в ограничение 8 Гб по памяти SQL. Долго ждал - ошибок нет, но и результата нет. Думаю зависло. Подскажите почему может виснуть?
По теме из базы знаний
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(5) В сообщении (3) я указал что пытался по очереди выбирать папку со днем и восстанавливать каждый день - все быстро и не виснет. Но дошел до 21 го числа и зависло. Пришлось перезапустить службу 1с8 и перезайти в 1с8, после чего заново нажать на кнопку обновить и все отработало.
Такое чувство что где то ограничения по ресурсам что ли. В диспетчере загрузки в принцыпе нет, а почему то зависло. Мог бы грешить на зацикливание в 1с, но ведь после перезапуска 1с и повторного выполнения аналогичных действий - загрузилось. Важно заметить что базой кроме меня никто не пользуется в момент выполнения действий.
Сейчас выложу код. 5 минут
Такое чувство что где то ограничения по ресурсам что ли. В диспетчере загрузки в принцыпе нет, а почему то зависло. Мог бы грешить на зацикливание в 1с, но ведь после перезапуска 1с и повторного выполнения аналогичных действий - загрузилось. Важно заметить что базой кроме меня никто не пользуется в момент выполнения действий.
Сейчас выложу код. 5 минут
(7) Нет, есть площадка документооборота.
1 заказ = 1 заказ с площадки = 1 файл.
Общий алгоритм:
1. выбираю папку;
2. выбираю период заказов, которые нужно обновить (например, 01.01.2020-31.01.2020).
3. в ТЧ формы заполняются все ссылки на заказы.
4. Нажимаю кнопку обновить, после чего в цикле перебираю каждый файл и ищу соотвецтвующий ему заказ из таблицы, которая сформировалась заранее), если нахожу, то проверяю данные: 1- сошлось = оставляю; 2 - не сошлись - получаю по ссылке объект и изменяю данные, после чего перезаписываю(перепровожу) документ заказа.
Код:
1 заказ = 1 заказ с площадки = 1 файл.
Общий алгоритм:
1. выбираю папку;
2. выбираю период заказов, которые нужно обновить (например, 01.01.2020-31.01.2020).
3. в ТЧ формы заполняются все ссылки на заказы.
4. Нажимаю кнопку обновить, после чего в цикле перебираю каждый файл и ищу соотвецтвующий ему заказ из таблицы, которая сформировалась заранее), если нахожу, то проверяю данные: 1- сошлось = оставляю; 2 - не сошлись - получаю по ссылке объект и изменяю данные, после чего перезаписываю(перепровожу) документ заказа.
Код:
&НаКлиенте
Процедура Загрузить(Команда)
ЗагруженыеЗаказы.Очистить();
МассивФайлов=НайтиФайлы(Папка,"*.xml",Ложь);
Если МассивФайлов.Количество()=0 Тогда
Сообщить("Не найдены файлы заказов!");
Возврат;
КонецЕсли;
СообщениИнфо.Очистить();
Для каждого ФайлПуть Из МассивФайлов Цикл
ДвоичныеДанныеЗаказХХХ=Новый ДвоичныеДанные(ФайлПуть.ПолноеИмя);
УникальныйИдентификаторХранилища = Новый УникальныйИдентификатор;
Адрес=ПоместитьВоВременноеХранилище(ДвоичныеДанныеЗаказХХХ,УникальныйИдентификатор);
Результат=ЗагрузитьНаСервере(Адрес);
-------код оповещений в зависимости от результата--
КонецПроцедуры;
&НаСервере
Функция ЗагрузитьНаСервере(Адрес)
ДвоичныеДанныеЗаказХХХ=ПолучитьИзВременногоХранилища(Адрес);
НовыйПоток=Новый ПотокВПамяти;
ЗаписьДанных=Новый ЗаписьДанных(НовыйПоток);
ЗаписьДанных.Записать(ДвоичныеДанныеЗаказХХХ);
ЗаписьДанных.Закрыть();
НовыйПоток.Перейти(0, ПозицияВПотоке.Начало);
ПрочитатьXML=Новый ЧтениеXML;
ПрочитатьXML.ОткрытьПоток(НовыйПоток);
СтруктураЗаказа=Новый Структура;
ПрочитатьXML.Прочитать();
---заполнение структуры заказа из файла---
Возврат СозданиеЗаказаКлиента(СтруктураЗаказа); //обновление заказа если нужно сдесь
КонецФункции
&НаСервере
Функция СозданиеЗаказаКлиента(СтруктураЗаказа=Неопределено)
Если НЕ ЗначениеЗаполнено(СтруктураЗаказа) Тогда
Возврат Неопределено;
КонецЕсли;
//поиск заказа из отобранных за период
НовыйЗаказКлиента=Неопределено;
Для каждого ЗаказСсылка Из ЗаказыКлиентов Цикл
Если ЗаказСсылка.Пропустить Тогда
Продолжить;
КонецЕсли;
Если ЗаказСсылка.ЗаказКлиента.НомерЗаказаХХХ=СтруктураЗаказа.НомерЗаказаХХХ Тогда
НовыйЗаказКлиента=ЗаказСсылка.ЗаказКлиента.ПолучитьОбъект();
Прервать;
КонецЕсли;
КонецЦикла;
Если НовыйЗаказКлиента=Неопределено Тогда
Возврат "Заказ ХХХ"+СтруктураЗаказа.НомерЗаказаХХХ+" не найден в 1с таблице(возможно пропущен)";
КонецЕсли;
Для каждого ЭлементСтруктуры Из СтруктураЗаказа Цикл //не совсем оптимально, но отредактировал имеющийся свой код для других целей...
Если ЭлементСтруктуры.Ключ="Таблица" Тогда
ТаблицаТоваровСтруктура=ЭлементСтруктуры.Значение; //определение структуры товаров для дальнейшей обработки
КонецЦикла;
СтруктураПересчетаСуммы = ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруПересчетаСуммыНДСВСтрокеТЧ(НовыйЗаказКлиента);
СтруктураДействий = Новый Структура;
СтуктураЗаполнения=ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруЗаполненияЦеныВСтрокеТЧ(НовыйЗаказКлиента);
СтруктураДействий.Вставить("ЗаполнитьЦенуПродажи", СтуктураЗаполнения);
СтруктураДействий.Вставить("ПересчитатьСумму");
СтруктураДействий.Вставить("ЗаполнитьСтавкуНДС", Перечисления.ТипыНалогообложенияНДС.ПродажаОблагаетсяНДС);
СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
НуждаетсяВОбновлении=Ложь;
Для каждого НоменклатураХХХ Из ТаблицаТоваровСтруктура Цикл
НоменклатураИзХХХ=ОпределениеНоменклатуры(НоменклатураХХХ.Значение.ШтрихКод,НоменклатураХХХ.Значение.BuyerItemCode);
МассивНайденныхСтрок=НовыйЗаказКлиента.Товары.НайтиСтроки(Новый Структура("Номенклатура",НоменклатураИзХХХ));
Если НЕ МассивНайденныхСтрок.Количество()=0 Тогда
НеобходимаСтрока=МассивНайденныхСтрок[0];
Если НеобходимаСтрока.Количество=Число(НоменклатураХХХ.Значение.Количество) Тогда //если совпадает кол-во, то не обновляем
Продолжить;
КонецЕсли;
НеобходимаСтрока.Количество=Число(НоменклатураХХХ.Значение.Количество);
НеобходимаСтрока.КоличествоУпаковок=Число(НоменклатураХХХ.Значение.Количество);
ОбработкаТабличнойЧастиСервер.ОбработатьСтрокуТЧ(НеобходимаСтрока, СтруктураДействий, Неопределено);
НуждаетсяВОбновлении=Истина;
Иначе
СтрокаЗаказа=НовыйЗаказКлиента.Товары.Добавить();
СтрокаЗаказа.Номенклатура=ОпределениеНоменклатуры(НоменклатураХХХ.Значение.ШтрихКод,НоменклатураХХХ.Значение.BuyerItemCode);
СтрокаЗаказа.Количество=Число(НоменклатураХХХ.Значение.Количество);
СтрокаЗаказа.КоличествоУпаковок=Число(НоменклатураХХХ.Значение.Количество);
СтрокаЗаказа.ВидЦены=НовыйЗаказКлиента.Соглашение.ВидЦен;
СтрокаЗаказа.Склад=НовыйЗаказКлиента.Соглашение.Склад;
ОбработкаТабличнойЧастиСервер.ОбработатьСтрокуТЧ(СтрокаЗаказа, СтруктураДействий, Неопределено);
НуждаетсяВОбновлении=Истина;
КонецЕсли;
КонецЦикла;
Попытка
Если НуждаетсяВОбновлении Тогда
Если ОбновлятьДанные Тогда
НовыйЗаказКлиента.Записать(РежимЗаписиДокумента.Проведение);
Результат=НовыйЗаказКлиента.Ссылка;
Иначе
Результат="Заказ "+НовыйЗаказКлиента.Ссылка+" нуждается НО НЕ ОБНОВЛЕН";
КонецЕсли;
Иначе
Результат="Заказ "+НовыйЗаказКлиента.Ссылка+" не нуждается в обновлении и не обновлен";
КонецЕсли;
Исключение
Результат="Произошла ошибка при перепроведении документа согласно заказа из площадки документооборота номер "+Строка(СтруктураЗаказа.НомерЗаказаХХХ);
КонецПопытки;
Возврат Результат;
КонецФункции
Показать
(13) Я понял о чём вы. Но вот когда зависло я взял папки по дням (40 штук в день грубо).
И начал выбирать период 1 день заказов - вывелись в ТЧ заказы за день.
Потом начал выбирать папку с 40 файлами и грузить (обновлять, если нужно). Все очень быстро. Разве что немного подождать.
Но вот дошел я таким алгоритмом до 21го числа. Выбирал заказы за 21 число - вывелись они в ТЧ обработки. Выбрал папочку с файлами и нажал обновить заказы из тч, если нужно. В итоге повисла 1с...точнее я ждал - ждал и не дождался. Закрыл ее диспетчером задач. Попытался зайти - висит на окне запуска и даже не доходит до логина. Перезапустил службу 1с8 - зашел успешно в 1с8 - выбрал все так же само и загрузил(обновил) нормально заказы и за 21 число. Тут то пачки файлов явно не виноваты...
В диспетчере задач ресурсы в 100 не валятся
И начал выбирать период 1 день заказов - вывелись в ТЧ заказы за день.
Потом начал выбирать папку с 40 файлами и грузить (обновлять, если нужно). Все очень быстро. Разве что немного подождать.
Но вот дошел я таким алгоритмом до 21го числа. Выбирал заказы за 21 число - вывелись они в ТЧ обработки. Выбрал папочку с файлами и нажал обновить заказы из тч, если нужно. В итоге повисла 1с...точнее я ждал - ждал и не дождался. Закрыл ее диспетчером задач. Попытался зайти - висит на окне запуска и даже не доходит до логина. Перезапустил службу 1с8 - зашел успешно в 1с8 - выбрал все так же само и загрузил(обновил) нормально заказы и за 21 число. Тут то пачки файлов явно не виноваты...
В диспетчере задач ресурсы в 100 не валятся
(2) Я вот по дням клацаю вручную. Прошел 20 дней и на 21м зависло на перезаписи документов уже.
Отключил диспетчером задач 1с8. Передернул службу сервера 1с8 и только тогда вошел в 1с снова.
Зашел - поставил те же параметры что и перед этим, но уже все грузится в этот день...
Код обработки нужен?
Отключил диспетчером задач 1с8. Передернул службу сервера 1с8 и только тогда вошел в 1с снова.
Зашел - поставил те же параметры что и перед этим, но уже все грузится в этот день...
Код обработки нужен?
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот