Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: 1с передача данных между фоновыми заданиями в оперативной памяти?

доброго вам утра, уважаемые специалисты.
в общем, есть задача критическая по скорости выполнения.
она выполняется в несколько потоков, потоки сбрасывают протоколы выполнения в хранилище системных настроек. а основной поток, который опрашивает вспомогательные с периодичностью льет логи во внешний сервис протоколирования.
сейчас для передачи сообщений протоколов между фоновыми заданиями и основным я использую хранилище общих настроек. а его методы тормозные, т. к. вполне возможно, что данное хранилище хранится в таблицах СУБД. по хорошему, мне надо выделить какую-то область в памяти сервака для каждого фонового задания и лить туда массивы с сообщениями протоколов напрямую. это возможно вообще в 1С?
заранее благодарю за помощь.
Ответ: () ясно, спасибо большое за технический ликбез.
Вопрос: УФ. Ошибка передачи данных между клиентом и сервером.

Пишу первую обработку на УФ. Вроде, ничего ужасного не делаю. А он так ругается, так ругается :))))

&НаКлиенте
Процедура Загрузить(Команда)
    Выборка = СформироватьВыборкуИЗЗапроса(); 
КонецПроцедуры
    
&НаСервере
Функция  СформироватьВыборкуИЗЗапроса()
    
    Запрос = Новый Запрос;
      Запрос.Текст =    "ВЫБРАТЬ
                      |    Пользователи.*
                      |ИЗ
                      |    Справочник.Пользователи КАК Пользователи";
    ТаблицаДанных = Запрос.Выполнить().Выбрать();
    
    Возврат ТаблицаДанных;
    
КонецФункции


{ВнешняяОбработка.ВнешняяОбработка1.Форма.Форма.Форма()}: Ошибка при вызове метода контекста (СформироватьВыборкуИЗЗапроса)
    Выборка = СформироватьВыборкуИЗЗапроса(); 
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства 'ret':
    форма: Элемент
    имя: {
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа 'ВыборкаИзРезультатаЗапроса'
Ответ: () Но не нужно конечно же)
Вопрос: v7: Передача данных между обработками.

Здравствуйте! Ситуация:
Из первой обработки вызывается вторая.

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

Процедура ПриПовторномОткрытии() в первой процедуре не будет работать ни при каких обстоятельствах?

Вопрос знатокам:
Можно ли каким либо образом организовать передачу данных из второй обработки без глобальных переменных и модального режима второй обработки?
Ответ: Сейчас попробую по ()...
Вопрос: Фоновые задания

Платформа 1С:Предприятие 8.3 (8.3.9.2170), конфа БП 3.0.
В конфигурации настроена интеграция через внешние источники данных (тип СУБД - OracleDatabase). Добавлен ряд таблиц, из которых идет загрузка НСИ, проводок. Т.к. данных очень много было решено сделать пакетную загрузку через фоновые задания. Размер порции - 100 000, размер пакета - 10 000, количество проводок в документе - 1000, количество одновременно работающих фоновых заданий - 8.
Запускаю, гружу, все ок. Но если ставлю на ночь, то такое ощущение, что 1с уходит в спящий режим, т.е. через какое-то время, как показывает лог, фоновые задания запускаются, но не завершаются. В итоге получилось, что задания запустились в 12 ночи, а были завершены в 8 утра (когда я пошурудил мышкой) и после этого продолжили выполняться далее в нормальном режиме. Запускал и в тонком и в толстом клиенте. В параметрах стоит настройка - время засыпания в пассивном сеансе 1200, но это разве не только на тонкий клиент распространяется и может ли быть в этом проблема? Отключать это не хочу, т.к. пользователи не выходят из программы, пусть засыпают. Может кто-то сталкивался с подобной проблемой? Как решили?
Ответ:
Нет такой возможности.

Смысл запускать фоновое задание и ждать его завершения?
чтобы не наплодить больше 8-ми фоновых заданий?

Перетащите "менеджер" фоновых заданий на сторону сервера и пусть контролирует....

Запускал на Pentuim D840 40-50 фоновых заданий - полет нормальный, дальше уже упирается в процессор/память.
Вопрос: Как передать файл в фоновое задание

Платформа 8.3.6.2152
Нужно из УФ передать файл в фоновое задание для последующей обработки.
Делал так:
&НаКлиенте
Процедура Команда1(Команда)
    ФайлДД = Новый ДвоичныеДанные(ИмяФайла);
    АдресХранилищаДляФонового = ПоместитьВоВременноеХранилище(ФайлДД, УникальныйИдентификатор);
    ЗапуститьВыгрузкуЗагрузкуНаСервере(АдресХранилищаДляФонового)
КонецПроцедуры

&НаСервере
Функция ЗапуститьВыгрузкуЗагрузкуНаСервере(АдресХранилищаДляФонового)
    ПараметрыМетода = Новый Массив;
    ПараметрыМетода.Добавить(АдресХранилищаДляФонового);
    Задание = ФоновыеЗадания.Выполнить("МойОбщийМодуль.МоеФоновое", ПараметрыМетода);
КонецФункции

В общем модуле:

Процедура МоеФоновое(АдресХранилища) Экспорт
    ФайлДД = ПолучитьИзВременногоХранилища(АдресХранилища);
    Если ТипЗнч(ФайлДД) = Тип("ДвоичныеДанные") Тогда
        ЗаписьЖурналаРегистрации("Отладка", , , ,"Есть ДД");
    Иначе
        ЗаписьЖурналаРегистрации("Отладка", , , ,"Нет ДД");
    КонецЕсли;
КонецПроцедуры

Пробовал так:
ПомещаемыеФайлы = Новый Массив;
ПомещаемыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла(ИмяФайла));
ПомещенныеФайлы = Новый Массив;
Если НЕ ПоместитьФайлы(ПомещаемыеФайлы, ПомещенныеФайлы, , Ложь,  УникальныйИдентификатор) Тогда
    Возврат; 
КонецЕсли;
АдресХранилищаДляФонового = ПомещенныеФайлы[0].Хранение;

Пробовал так:
АдресХранилищаДляФонового = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор);
ПоместитьФайл(АдресХранилищаДляФонового, ИмяФайла, , Ложь);

Из фонового на клиент через временное хранилище нормально передается, а вот с клиента в фоновое - никак почему-то.
Ответ: В общем все оказалось довольно просто. Получается можно тупо передавать ДвоичныеДанные как параметр к фоновому заданию. Для неквалифицированных любителей цитировать справку и рассказывать что "так и задумано" рабочий код:
&НаКлиенте
Процедура Команда1(Команда)
    ЗапуститьВыгрузкуЗагрузкуНаСервере(Новый ДвоичныеДанные(ИмяФайла))
КонецПроцедуры

&НаСервере
Функция ЗапуститьВыгрузкуЗагрузкуНаСервере(ДД)
    ПараметрыМетода = Новый Массив;
    ПараметрыМетода.Добавить(ДД);
    Задание = ФоновыеЗадания.Выполнить("МойОбщийМодуль.МоеФоновое", ПараметрыМетода);
КонецФункции

Процедура МоеФоновое(ФайлДД) Экспорт
    Если ТипЗнч(ФайлДД) = Тип("ДвоичныеДанные") Тогда
        ЗаписьЖурналаРегистрации("Отладка", , , ,"Есть ДД");
    Иначе
        ЗаписьЖурналаРегистрации("Отладка", , , ,"Нет ДД");
    КонецЕсли;
КонецПроцедуры
Вопрос: Передача товаров между организациями

Всем привет. Вопрос носит больше юридический характер. У клиента есть 2 ООО. Одна на ЕНВД, другая на ОСН с НДС. Назовем их организация №1 и №2. Собственник один. Склад один. Организации по сути не взаимосвязаны. Орг №1 выполняет продажи в течении месяца без контроля остатков с общего склада. В конце месяца делается передача товаров между организациями и закрываются минуса. Используется УТ 11 в связке с БП. По идеи Орг №1 не имеет права продавать товар, т.к. его еще нет в организации. В эту организацию поступления еще не было. Вопрос: с приходом он-лайн касс, как этот процесс сделать законным? То бишь налоговая будет видеть список товаров, проданных орг№1, но его еще нет в этой организации. Он лежит в другой. Даты и номера документов будут разные. Надеюсь понятно объяснил.
Ответ:
Ну, это Интеркампани в УТ 11 ( -КА 2 - ЕРП 2)

По какому-такому закону "не имеет права продавать товар"?
Практически весь бизнес крутится на том, что продают сейчас, оформляя-платя переход собственности позже, оптом, в кредит, в расрочку, по доверенности, по агентскому договору и пр

Ну, Вы закон-то прочитайте или объясните, о каком идёт речь
Вопрос: Запуск фонового задания под нужным пользователем

Здравствуйте!
Есть 1С:Предприятие 8.3 (8.3.11.2924), УТ 11.3.4.93 клиент - сервер.
В этой конфигурации движения по регистру "Расчеты с клиентами по документам " выполняется не в момент проведения документа, а регламентным заданием "Выполнение отложенных движений по расчетам с клиентами\поставщиками".
При этом иногда регламентное задание выдавало ошибку, т.к. пыталось сделать движения в закрытом периоде (Ранее даты запрета редактирования). В настройках регламентного задания прописали специального пользователя, у которого дата запрета открыта, после этого все стало работать.
Однако, есть необходимость сделать, чтобы данные движения по регистрам делались в момент проведения документа, а не тогда, когда запустится фоновое задание по расписанию.
Если запускать сам код, который выполняет регламентное задание при проведении документа, то возникает та же ошибка - закрыт период. И если программно запускать фоновое задание запускающее этот же код в момент проведения документа, то оно вызывает точно ту же ошибку, т.к. период закрыт, а фоновое задание, запускаемое программно, запускается под именем текущего пользователя, а у него дата запрета закрыта. Однако, когда запускается фоновое задание по расписанию, у которого установлен "правильный" пользователь в планировщике, то все проходит на ура. Вот как это сделать программно, как программно запустить фоновое задание под нужным пользователем "через планировщик" как это делают стандартные регламентные задания, подскажите пожалуйста?
Ответ:
Разве не под тем, под которым настроено?
Это должно быть глюк конфигурации

Вопрос: Отладка фонового задания

Фоновое задание выполняется с ошибкой. Решил отладить.
запускаю через внешнюю обработку с одной строкой:
ФоновыеЗадания.Выполнить("МойМодуль.МоеЗадание");
На точку останова в модуле не выходит.
Отладка на сервере разрешена, галка в отладке, автоматическое подключение, фоновые задания - стоит. В чем может быть ещё проблема?
Ответ: В общих модулях было обращение к функциям требующих клиентского а не серверного выполнения. Пришлось посадить их в скобки #Если Клиент Тогда. Отработало и фоновое.
Вопрос: Обмен данными между Oracle и 1C

Здравствуйте, мне нужно сделать обмен данными между приложением, написанным на Oracle Forms 6i и 1С. Самый удобный вариант как я понял, это делать все через выгрузку/загрузку XML файлов. Так же слышал о наличии так называемого "Универсального импорта", это штатное средство 1С или особенность определенной конфигурации? Если вы сталкивались с этим по работе, как реализовывали?
Ответ:
LsLee
Zerro,
Не подскажите, как сделать связку Oracle и 1С? делать связку с Oracle Forms не вариант, нужно прямо с БД делать?

В 1С есть Внешние источники данных. Можно прямо ораклевые таблицы прицепить и в 1С их смотреть, добавлять, что хотите делать.
Вопрос: rphost.exe съедает оперативную память

Ситуация такова. Установили конфигурацию УТ в серверном варианте. И было замечено, что процесс rphost.exe начинает понемногу съедать оперативную память. Постепенно, мб за мб он вырос с 250 метров до 2 гб 500 метров. Нагрузка со стороны пользователей минимальна - база тестовая, пользователей заходят пару-тройку раз в день, чтоб поучиться и пощупать ее (их у нас вообще всего 10+). Крутятся фоновые задания, периодически грузят проц. Но отключать их не хочу - при рабочей базе ведь они будут востребованы. При перезапуске сервера рпхост понятное дело сбрасывает память, но снова постепенно начинает жрать оперативку. Я знаю, можно написать батник. который каждую ночь будет перезапускать сервер 1с, но это не решение проблемы а борьба с ее следствием. Хотелось бы все же узнать причину и ее ликвидировать.
Параметры системы: проц core5 3 гц, 16 Гб оперативы, Win server 2008 sp 2, база крутится на ms sql 2008, платформа 1С:Предприятие 8.2 (8.2.15.310), УТ редакция 11.0.9.5
Ответ:
Внедрил, работает. А есть тут возможность вырубать их не только по размеру рабочего процесса но и по-расписанию? Например было бы идеально делать это ночью. Скажем "Если размер больше 1,5 гб и время от 11 вечера до 7 утра" Как-то так. иначе среди дня вырубится процесс и пользователи будут очень злы. Или отключение рпхоста не сбросит пользователей с сервера?