Одновременная работа с таблицей обработки нескольких пользователей

1. BorisBelov 889 28.08.12 23:01 Сейчас в теме
Казалось бы, что сложного? Но, по порядку!
Есть обработка, которая позволяет диспетчеру (назовем пользователя так), собрать в большую таблицу заказы покупателей на производимую продукцию на следующий день.
Таблица выглядит просто:
- в вертикальной в колонке заданы покупатели (сейчас где-то 200-300 контрагентов);
- в первой горизонтальной колонке задана производимая продукция (порядка 100 наименований).
Диспетчер работает один и все просто.
Разговор по телефону, диспетчер для покупателя пишет в таблице заказанное количество.
Периодически, раз в 10 минут (период задается) , таблица автоматически сохраняется на жестком диске в формате Excel. Обработку можно закрыть, снова открыть, восстановить из сохраненной копии последнее состояние заказов, продолжить собирать заказы. В любой момент можно пересчитать таблицу (подсчет итоговых значений по контрагентам и продукции). Все просто.
Восстановление таблицы занимает по времени около минуты.
Сохранение копии выполняется значительно быстрее.
Пересчет занимает около минуты.
Что надо? Организовать работу нескольких диспетчеров, чтобы они видели актуальное состояние таблицы заказа суммарно по всем диспетчерам.
Возникают проблемы:
1. Как хранить таблицу заказа. Если как сейчас, в Excel файле, много времени уходит на восстановление, пересчет, это замедляет оперативность работы. Если иначе, то как?
2. Как сохранять текущее состояние таблиц нескольких диспетчеров в одну общую. У каждого диспетчера таблица дополнена принятыми им заказами, надо сохранить заказы всех диспетчеров в одну общую таблицу.
Не приходилось мне решать такую задачку!
Надеюсь на обсуждение программистов ИС.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
27. xxi 13.09.12 18:24 Сейчас в теме
(1) Стресс-демо: 01.7z (946 953 byte) - используется файл mxl (43 129 044 byte) 1000 х 1000 ячеек, заполненных числами вида: 80008887 - прямой ввод, как в Excel, т.е. кликнули на ячеку, вводим, по [Enter] или при клике в другую ячеку изменения отображаются у других пользователей со скоростью обновления 1/25 сек (или около того). Пересчёта, автоматического сохранения, в т.ч. в формат Excel и детализации по пользователям нет, но и это возможно реализовать под конкретные условия задачи. Хотелось бы услышать отзывы тестеров, т.к. в логике учтены ещё не все нюансы.
28. BorisBelov 889 13.09.12 21:26 Сейчас в теме
(27) Заявленные параметры 1/25 сек это СУПЕР!
Тестировать не удалось.
Двойной щелчок левой кнопкой на 01.7z выдает сообщение:

Ошибка 404. Документ не найден.

Error 404. Document not found.
Запрашиваемый документ отсутствует на сервере
30. BorisBelov 889 13.09.12 21:41 Сейчас в теме
(27)При разархивировании вывалилось:
! C:\Users\Борис\Downloads\1С\ТаблицаЗаказа\Временная\01.7z: Неизвестный метод в 1Cv7.MD
! C:\Users\Борис\Downloads\1С\ТаблицаЗаказа\Временная\01.7z: Неизвестный метод в 1SBLOB.DBF
! C:\Users\Борис\Downloads\1С\ТаблицаЗаказа\Временная\01.7z: Неизвестный метод в 1SCONST.DBF
! C:\Users\Борис\Downloads\1С\ТаблицаЗаказа\Временная\01.7z: Неизвестный метод в 1SCRDOC.DBF
! C:\Users\Борис\Downloads\1С\ТаблицаЗаказа\Временная\01.7z: Неизвестный метод в 1SDNLOCK.DBF
! C:\Users\Борис\Downloads\1С\ТаблицаЗаказа\Временная\01.7z: Неизвестный метод в 1SJOURN.DBF
! C:\Users\Борис\Downloads\1С\ТаблицаЗаказа\Временная\01.7z: Неизвестный метод в 1SSYSTEM.DBF
! C:\Users\Борис\Downloads\1С\ТаблицаЗаказа\Временная\01.7z: Неизвестный метод в 1SUIDCTL.DBF
! C:\Users\Борис\Downloads\1С\ТаблицаЗаказа\Временная\01.7z: Неизвестный метод в 1SUSERS.DBF
! C:\Users\Борис\Downloads\1С\ТаблицаЗаказа\Временная\01.7z: Неизвестный метод в 1SBLOB.CDX
! C:\Users\Борис\Downloads\1С\ТаблицаЗаказа\Временная\01.7z: Неизвестный метод в 1SCONST.CDX
! C:\Users\Борис\Downloads\1С\ТаблицаЗаказа\Временная\01.7z: Неизвестный метод в 1SCRDOC.CDX
! C:\Users\Борис\Downloads\1С\ТаблицаЗаказа\Временная\01.7z: Неизвестный метод в 1SDNLOCK.CDX
! C:\Users\Борис\Downloads\1С\ТаблицаЗаказа\Временная\01.7z: Неизвестный метод в 1SJOURN.CDX
! C:\Users\Борис\Downloads\1С\ТаблицаЗаказа\Временная\01.7z: Неизвестный метод в 1SUIDCTL.CDX
! C:\Users\Борис\Downloads\1С\ТаблицаЗаказа\Временная\01.7z: Неизвестный метод в 1Cv7.CFG
! C:\Users\Борис\Downloads\1С\ТаблицаЗаказа\Временная\01.7z: Неизвестный метод в 1Cv7.DD
! C:\Users\Борис\Downloads\1С\ТаблицаЗаказа\Временная\01.7z: Неизвестный метод в ExtForms\1.ert
! C:\Users\Борис\Downloads\1С\ТаблицаЗаказа\Временная\01.7z: Неизвестный метод в ExtForms\1.log
! C:\Users\Борис\Downloads\1С\ТаблицаЗаказа\Временная\01.7z: Неизвестный метод в 1cv7flt.lst
! C:\Users\Борис\Downloads\1С\ТаблицаЗаказа\Временная\01.7z: Неизвестный метод в ExtForms\1.mxl
! C:\Users\Борис\Downloads\1С\ТаблицаЗаказа\Временная\01.7z: Неизвестный метод в 1CV7.ORD
! C:\Users\Борис\Downloads\1С\ТаблицаЗаказа\Временная\01.7z: Неизвестный метод в 1CPP.dll
! C:\Users\Борис\Downloads\1С\ТаблицаЗаказа\Временная\01.7z: Неизвестный метод в FormEx.dll
! C:\Users\Борис\Downloads\1С\ТаблицаЗаказа\Временная\01.7z: Неизвестный метод в TableDoc.dll
! C:\Users\Борис\Downloads\1С\ТаблицаЗаказа\Временная\01.7z: Ошибка - сбой при операции

Сейчас попробую запустить!
2. alexpa2005 29.08.12 01:19 Сейчас в теме
Для меня немного странная схема. Из Excel данные закачиваются в 1С и отображаются пользователю в виде таблицы значений. Затем с указанным интервалом сохраняются обратно в Excel. Я правильно понял? По моему должно быть - либо все в Excel, либо все в 1С. Почему недьзя просто всех пользователей посадить за Excel? Последние версии позволяют совместную работу над одним файлом.
Либо формировать таблицу значений по данным, хранящимся в 1С. Создать справочник или документ с такой же структурой, как файл Excel и работать с ним. Поскольку 1С не позволяет одновременную работу нескольких пользователей с одним справочником или документом, то решение формировать таблицу значений - правильное. К таблице значений подключить процедуру, чтобы она обновляла необходимые справочники или документы в режиме реального времени, сразу, как только пользователь обновит данные в своей таблице значений. А уж в Excel сбрасывать данные периодически или по нажатию кнопки "Экспорт", если это необходимо. Единственная сложная задача - обновлять таблицы значений у остальных пользователей при изменении её кем-то. Ведь обновлять нужно только изменённую ячейку, чтобы не потерялась работа других диспетчеров. Решается путём создания временной глобальной таблицы значений, в которых будут храниться пользователи, создавшие свой экземпляр таблицы заказов и сами таблицы заказов пользователей, как объект. Тогда любой пользователь с помошъю процедуры обновления данных сможет обновить таблицы заказов остальных пользователей. И не забыть включить режим транзакций, чтобы не было рассинхронизации.
3. alexpa2005 29.08.12 01:24 Сейчас в теме
Кстати 1С 8.х позволяет одновременную работу нескольких пользователей с одним справочником или документом. Там реализовать задачу будет проще.
5. BorisBelov 889 29.08.12 01:34 Сейчас в теме
4. BorisBelov 889 29.08.12 01:33 Сейчас в теме
Хранение в Excel таблицы надо только в архивных целях. После принятия всех заказов данные из таблицы обрабатываются с целью создания документов реализации, которые и записываются в базу данных. Дальше не нужна ни сама таблица, ни архивные файлы Excel.
Возможность работать с одной таблицей Excel - это очень интересно, если можно подробнее, какой для этого необходим Excel? Это могло бы решить все трудности!
6. alexpa2005 29.08.12 01:45 Сейчас в теме
(4) BorisBelov,
Начиная с Excel 2007. Вот инструкция: http://blog.depit.ru/odnovremennaya-rabota-v-excel/
8. BorisBelov 889 29.08.12 10:12 Сейчас в теме
(6), (7) Большое спасибо! С Excel практически работал очень немного, поэтому и озадачился!
Надеюсь , теперь свою "задачку" смогу решить.
7. Shomak 45 29.08.12 03:03 Сейчас в теме
А почему бы и не 2003 Excel, у меня и внем шпарят иногда человек по 20 :)
9. BorisBelov 889 29.08.12 22:08 Сейчас в теме
(7) До практической реализации пока не добрался. Хотелось узнать как у "практика".
Работают два (или более) пользователя. Первый пользователь сразу видит изменения, внесенные другим пользователем? или после сохранения другим пользователем? или после сохранения первым пользователем? Короче, в какой момент изменения внесенные другими пользователями попадают на экран первого пользователя. Свои-то изменения он видит сразу!
10. Ta_Da 29.08.12 23:02 Сейчас в теме
Дополнительный регистр с двумя измерениями или забалансовый счет с 2мя субконто. Соответственно измерения/субконто контрагент и номенклатура. Можно до кучи третье субконто/измерение - Диспетчер.
+ документ, который двигает регистр или рисует проводки. Документ заполняется и создается вашей обработкой (можно допустим по документу на каждого диспетчера).
В конце дня когда все заказы собраны движения по счету/регистру удаляются.

На выходе получаете все текущие возможности + адекватную работу нескольких диспетчеров + работу отчетов по остаткам на текущий день, а при необходимости по старым документам (движений по ним уже не будет) можете "восстановить" план на любую дату.
11. BorisBelov 889 30.08.12 01:07 Сейчас в теме
(10) Не понятно, как разные диспетчеры будут видеть в своих таблицах, что сделали другие диспетчеры?
И сейчас могут работать несколько диспетчеров. Новым в вашем подходе является хранение результатов работы диспетчеров в "общем котле" - проводках или регистре. Это хорошо! Но как видеть оперативно, что какие-то покупатели уже "обработаны"?
12. Ta_Da 30.08.12 09:36 Сейчас в теме
(11) BorisBelov,
Сейчас обработка ваша тянет данные из Excel файла, а будет брать остатки по регистру/проводкам. Если важна оперативность, можно вешать на обработку ОбработкуОжидания с периодическим пересчетом остатков по регистру (либо по времени, либо по наступлению события "какой-то диспетчер обновил заказ", например).
Или под "обработаны" подразумевается что заказ увидели на складе/производстве? Увидели появившийся заказ - ткнули кнопку - движение по списанию заказа произошло. В документе тоже поставили флаг что заказ обработан.
Проводки по обработанным заказам в конце какого-то периода (день, неделя, месяц) просто удаляете (чтобы не разрасталась база).
13. BorisBelov 889 30.08.12 21:56 Сейчас в теме
(12) Обработка не "тянет данные из файла"! Практически диспетчер открывает обработку и начинает заполнять пустую таблицу. Автосохранение по обработке ожидания - страховой случай: отключили аварийно свет и проч. Ручное сохранение не делается, в этом нет необходимости: диспетчер работает за компьютером и ему никто не мешает. И, наконец, после сохранения таблица не меняется, ничего из файла "не тянется"!
Предложенный Вами подход периодически обновлять таблицы операторов, с которыми они работают, по остаткам регистров несомненно интересен. Остается проверить, сколько будет "съедаться времени" на обновление (записать свою таблицу и прочитать чужие).
Возможные коллизии при записи таблиц будут и при таком подходе и при использовании общей таблицы Excel.
14. Ta_Da 30.08.12 22:35 Сейчас в теме
(13) BorisBelov, видимо я что-то не так понял. Собственно сейчас мне понятней не стало =)

1) Excel таблица одна или по одной на каждого оператора?
2) В 1С данные по сути не хранятся, а Excel нужен только на случай "случайно закрыли 1С" ?
15. BorisBelov 889 30.08.12 22:59 Сейчас в теме
(14) По порядку.
1. Сейчас диспетчер один. Его таблица сохраняется в файлах Excel с именами вида "25 Августа 2012 г. 20ч 43мин", в которых меняется дата и время сохранения.
2. В 1С таблица как таковая не хранится. После заполнения таблицы заказа диспетчер жмет кнопку "Создать документы" и обработка создает новые документы реализации и счета-фактуры, они хранятся в 1С. При закрытии обработки таблица заказа автоматом записывается в файл Excel, но практически она не нужна. Документы созданы и записаны.
Обсуждается переход к одновременной работе нескольких диспетчеров.
16. dusha0020 1107 31.08.12 00:24 Сейчас в теме
Борис, посидел, подумал над Вашей проблемой. Увидел для себя такой план:
1. Создаем форму с таблицей значений нужного формата и размера. Предусматриваем возможность ввода в ТЗ данных.
2. В процедуре ввода в эту ТЗ предусматриваем установку флага в файле или константе о необходимости обновить таблицы остальным операторам.
3. Также в процедуре ввода обновляем содержимым ТЗ внешний файл. Можно использовать ЗначениеВСтроку() и текстовый файл для хранения полученой строки.
4. Вешаем на форму обработку ожидания, которая проверяет флаг необходимости обновления и если он установлен загружает из него ТЗ на форму (ЗначениеИзСтроки() также упростит эту процедуру при обмене через текстовый файл).
5. При обновлении сохраняем метку о том, что такой-то пользователь выполнил обновление чтобы не обновляться повторно. Дополнительно проверяем все ли пользователи у которых открыта данная форма выполнили обновление и если это так то глобальную метку обновления снимаем, а также чистим метки обновления всех диспетчеров.
6. Сам список пользователей операторов и меток их обновления можно хранить списке значений, обновляя его в текстовом файле при открытии/закрытии формы нашей обработки.
У меня по подобной схеме 4 бухгалтера сверяют с кладовщиками остатки материалов в конце месяца. Так как материалов десятки тысяч позиций то тупое обновление по времени всей ТЗ сильно тормозило. Пришлось выдумать эту затею с флагами и метками, чтобы не гонять обновления впустую. Теперь работает с приемлемой скоростью, но может быть в Вашем случае просто периодическое обновление раз в 2-3 секунды будет терпимым.
17. ADirks 186 31.08.12 06:53 Сейчас в теме
Если говорить за организацию интерфейса именно в 1С, то идеально подходит ТабличноеПоле (1С++). В отличии от штатных 1С-ных контролов обновляется оно нормально.
А если база на SQL, или он под рукой есть, то ещё проще. Нинада регистров, и прочего - делаем свою табличку нужной структуры, и сами пишем/читаем.
18. Ёпрст 1063 31.08.12 11:47 Сейчас в теме
(17) в дбф аналогично - своя табличка в сторонней базе, в скульлайте, к примеру.
20. BorisBelov 889 07.09.12 20:15 Сейчас в теме
(18) Прошу, если не затруднит, немного подробнее. Я не "ботаю по фене"!
19. BorisBelov 889 07.09.12 20:12 Сейчас в теме
(17) Внешние компоненты в организации не приветствуются... База dbf
21. xxi 09.09.12 15:39 Сейчас в теме
Если придерживаться штатных средств (19), то сделать документ "Заказ" и таблицу в журнале "Заказы", а в Excel выгружать/изменять из документа в процедуре ПриЗаписи().
22. BorisBelov 889 09.09.12 23:59 Сейчас в теме
(21) Что из себя должен представлять документ "Заказ"?
Что такое "сделать таблицу в журнале "Заказы"?
Обычно в журнале 1С таблица вида "Документ, Номер, Дата..."
23. xxi 10.09.12 18:52 Сейчас в теме
Попытался реализовать.. Осталось отловить "жуков" в логике, тем не менее это работает и уже сейчас есть что показать. Ammyy Admin: 11 379 707
Прикрепленные файлы:
24. BorisBelov 889 11.09.12 00:49 Сейчас в теме
(23) Установил Ammyy Admin, связь не состоялась! Жаль!
25. xxi 11.09.12 01:06 Сейчас в теме
26. BorisBelov 889 11.09.12 09:37 Сейчас в теме
29. xxi 13.09.12 21:40 Сейчас в теме
мистика.. оптправляю почтой (25)
31. BorisBelov 889 13.09.12 21:46 Сейчас в теме
(29) Не разглядел: конечно же размеры всех распакованных файлов 0!
"С нетерпением ожидаем продолжения сериала!"
32. xxi 13.09.12 21:57 Сейчас в теме
ушло на ящик в самораспаковывающемся rar-е..
33. BorisBelov 889 13.09.12 22:46 Сейчас в теме
(32) Уже распаковал 7-zip. Запустил. Работает.
Если заявленные скорости реальны (в этом не сомневаюсь),
то до практической реализации осталось немного.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот