Не сохраняет текст в список

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 327
Благодарностей
9 082
Баллы
113
  • Спасибо
Реакции: ferr9918 и djaga

ferr9918

Client
Регистрация
20.01.2014
Сообщения
199
Благодарностей
97
Баллы
28
Да это все проверил изначально. Проблема имеет место быть когда работают два шаблона с одним файлом. Один шаблон записывает данные в файл по средством добавления строки в список, а второй шаблон берет строку с удалением с этого файла. И не важно одновременно запущены эти два шаблона или по очереди при любом исходе баг выходит через некоторое время. Через некоторое время видим такую картину - файл имеет нулевой размер (так как второй шаблон все выгреб с него), а при добавлении строк первым шаблоном мы видим типа в нем уже N количество строк добавлено хотя файл имеет нулевой размер и при его открытии он естественно пустой.
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 718
Баллы
113
Да это все проверил изначально. Проблема имеет место быть когда работают два шаблона с одним файлом. Один шаблон записывает данные в файл по средством добавления строки в список, а второй шаблон берет строку с удалением с этого файла. И не важно одновременно запущены эти два шаблона или по очереди при любом исходе баг выходит через некоторое время. Через некоторое время видим такую картину - файл имеет нулевой размер (так как второй шаблон все выгреб с него), а при добавлении строк первым шаблоном мы видим типа в нем уже N количество строк добавлено хотя файл имеет нулевой размер и при его открытии он естественно пустой.
такая же жесть.
Шаблоны в многопотоке работают со списком, через стандартный кубик. в начале шаблон забирает строку с удалением, в конце работы добавляет строку. При увеличении количества потоков, список просто выгребается в ноль и не пополняется.
Данный баг был обойден отказом от стандартных кубиков работы со списками и переходом на C#. очень трудозатратная операция скажу я вам по секрету. Но зато проверено, списки нормально начали работать.

вот такая конструкция была и чем заменена:

68656


если кому нужен код , вот он.
C#:
//---- входные настройки ----
string data = project.Variables["Input_Data_Akk_for_Retvit"].Value;     // данные
var list = project.Lists["Registered_Emails_for_Retvit"];                            // список для операций
var list_2 = project.Lists["Cant_Login_Registered_Emails_IMAP"];                    // список для операций
//---- действие ----
//CommonCode.Add_Data_to_Result(list, data);
lock (CommonCode.ResultDataLocker)
{
    list.Add(data);  // добавляем данные
    // ищем строку с данными и удаляем ее
    for (int i = list_2.Count-1; i >= 0 ; i-- ){
        if (list_2[i] == data) {
            list_2.RemoveAt(i);
        }
    }
    //--   
}
в общем коде надо добавить ResultDataLocker или использовать стандарт SyncObject
68658
 
Регистрация
03.12.2020
Сообщения
146
Благодарностей
103
Баллы
43
такая же жесть.
Шаблоны в многопотоке работают со списком, через стандартный кубик. в начале шаблон забирает строку с удалением, в конце работы добавляет строку. При увеличении количества потоков, список просто выгребается в ноль и не пополняется.
Данный баг был обойден отказом от стандартных кубиков работы со списками и переходом на C#. очень трудозатратная операция скажу я вам по секрету. Но зато проверено, списки нормально начали работать.

вот такая конструкция была и чем заменена:

Посмотреть вложение 68656

если кому нужен код , вот он.
C#:
//---- входные настройки ----
string data = project.Variables["Input_Data_Akk_for_Retvit"].Value;     // данные
var list = project.Lists["Registered_Emails_for_Retvit"];                            // список для операций
var list_2 = project.Lists["Cant_Login_Registered_Emails_IMAP"];                    // список для операций
//---- действие ----
//CommonCode.Add_Data_to_Result(list, data);
lock (CommonCode.ResultDataLocker)
{
    list.Add(data);  // добавляем данные
    // ищем строку с данными и удаляем ее
    for (int i = list_2.Count-1; i >= 0 ; i-- ){
        if (list_2[i] == data) {
            list_2.RemoveAt(i);
        }
    }
    //--  
}
в общем коде надо добавить ResultDataLocker или использовать стандарт SyncObject
Посмотреть вложение 68658
Вчера весь день потратил на то чтобы разобраться с подобной проблемой.
ZennoPoster ведет себя необъяснио. Такое ощущение, что при привязке файла к списку он изолируется от системы. Во всяком случае, шаблон на стандартных экшенах не видит изменений файла, если они производятся третьими программами.
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 327
Благодарностей
9 082
Баллы
113
Вчера весь день потратил на то чтобы разобраться с подобной проблемой.
ZennoPoster ведет себя необъяснио. Такое ощущение, что при привязке файла к списку он изолируется от системы. Во всяком случае, шаблон на стандартных экшенах не видит изменений файла, если они производятся третьими программами.
"Настройки - Выполнение", здесь ничего не менялось?

79252
 
Регистрация
03.12.2020
Сообщения
146
Благодарностей
103
Баллы
43

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 327
Благодарностей
9 082
Баллы
113
Вчера весь день потратил на то чтобы разобраться с подобной проблемой.
ZennoPoster ведет себя необъяснио. Такое ощущение, что при привязке файла к списку он изолируется от системы. Во всяком случае, шаблон на стандартных экшенах не видит изменений файла, если они производятся третьими программами.
Сейчас протестировал в ПМ и ЗП 7.4 поведение при взятии строки спсика при изменении извне (добавление строки вручную в Нотепад++ и сохранение) - все отлично. Попробуйте на простейшем примере шаблона со взятием строки тоже протестировать, а дальше уже будем думать, что произошло и как лечить.
 

zoneofsoft

Client
Регистрация
15.12.2014
Сообщения
53
Благодарностей
9
Баллы
8
Столкнулся с такой же ситуацией.
Есть два файла, в одном лежат данные для обработки, которые берутся построчно с удалением. В другой записывается результат.
В ПМ всё работает как надо. Запускаю в зеннопостере, ничего не работает. То есть данные из файла номер 1 не удаляются и результаты в файл номер 2 не пишутся. При этом сделал специально логирование, и судя по оповещениям каждый новый запуск берёт новую строку, то есть как будто они удаляются из файла.
 

clon4444

Client
Регистрация
27.10.2016
Сообщения
81
Благодарностей
9
Баллы
8
Столкнулся с такой же ситуацией.
Есть два файла, в одном лежат данные для обработки, которые берутся построчно с удалением. В другой записывается результат.
В ПМ всё работает как надо. Запускаю в зеннопостере, ничего не работает. То есть данные из файла номер 1 не удаляются и результаты в файл номер 2 не пишутся. При этом сделал специально логирование, и судя по оповещениям каждый новый запуск берёт новую строку, то есть как будто они удаляются из файла.
попробуй поставить кубик паузы после взятия строки и после записи.
 
  • Спасибо
Реакции: zoneofsoft

Wide

Client
Регистрация
04.02.2013
Сообщения
945
Благодарностей
257
Баллы
63
такая же жесть.
Шаблоны в многопотоке работают со списком, через стандартный кубик. в начале шаблон забирает строку с удалением, в конце работы добавляет строку. При увеличении количества потоков, список просто выгребается в ноль и не пополняется.
Данный баг был обойден отказом от стандартных кубиков работы со списками и переходом на C#. очень трудозатратная операция скажу я вам по секрету. Но зато проверено, списки нормально начали работать.

вот такая конструкция была и чем заменена:

Посмотреть вложение 68656

если кому нужен код , вот он.
C#:
//---- входные настройки ----
string data = project.Variables["Input_Data_Akk_for_Retvit"].Value;     // данные
var list = project.Lists["Registered_Emails_for_Retvit"];                            // список для операций
var list_2 = project.Lists["Cant_Login_Registered_Emails_IMAP"];                    // список для операций
//---- действие ----
//CommonCode.Add_Data_to_Result(list, data);
lock (CommonCode.ResultDataLocker)
{
    list.Add(data);  // добавляем данные
    // ищем строку с данными и удаляем ее
    for (int i = list_2.Count-1; i >= 0 ; i-- ){
        if (list_2[i] == data) {
            list_2.RemoveAt(i);
        }
    }
    //--  
}
в общем коде надо добавить ResultDataLocker или использовать стандарт SyncObject
Посмотреть вложение 68658
Парни, можно для дураков снипет разжевать? У меня трабла со списками уже давно, файлы 100-500 гб и 10 потоков, не объяснить что происходит со списками, то не пишет, то не читает и не удаляет. Попробовал на бд переделать, там тоже свои проблемы. Можно в снипите подсказать как писать, читать и удалять строку? Версия 7.5 и мне кажется ещё долго будет нас преследовать эта проблема.
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)