|
Загрузка товаров в розницу | ☑ | ||
---|---|---|---|---|
0
ColonelAp4u
13.08.15
✎
15:22
|
Добрый день, не подскажите как разобраться с такой проблемой? На кассах стоит розница 1.0 8.2 Написана служба которая каждые 90 сек грузит товар цены кассиров права и т.д. в базу розницы из ут. Данная служба вызывает модуль в рознице ОбменСУТ далее происходит загрузка в транзакции(если есть что грузить). Если в это время кассир производит действия и затрагивает таблицы с которыми работает обмен то касса зависает и потом кассиру выдает конфликт блокировок с указанием таблицы которая заблокирована. Как можно сделать так что бы все работали и друг другу не мешали? (когда касса зависает создается очередь) раньше все проходило быстро и таких вещей не было (логи почистил, базу на ТиИ отправил с удалением битых сылок)
|
|||
1
ДенисЧ
13.08.15
✎
15:30
|
грузите данные кусками (в плане обмена есть настройка)
|
|||
2
ColonelAp4u
13.08.15
✎
15:32
|
(1) там не через план обмена)
|
|||
3
ДенисЧ
13.08.15
✎
15:36
|
(2) тем проще будет внести изменения )
|
|||
4
ColonelAp4u
13.08.15
✎
15:40
|
(3) Денис подскажите как а то пока не могу понять в какую сторону вы меня подталкиваете!
|
|||
5
ДенисЧ
13.08.15
✎
15:41
|
(4) Откуда же я могу знать, как там у вас выгрузка идёт, если не по плану обмена...
Мне отсюда не видно... |
|||
6
ColonelAp4u
13.08.15
✎
15:45
|
Процедура ОбменУТ() Экспорт
КаталогИБ=КаталогИБ(); ПутьОбмена=Константы.ПутьОбмена.Получить(); ВыборкаТоваров = Справочники.Номенклатура.Выбрать(); НачатьТранзакцию(); Попытка Если Ping(ПутьОбмена) Тогда КопируемФайлыИзСетевойНаКассу(ПутьОбмена); ПередачаСторноВУТ(ПутьОбмена); КонецЕсли; Товары=Новый Файл(КаталогИБ+"\TOVARVS.DBF"); Если Товары.Существует() Тогда //Лог("Загрузка товаров!",0); Если ОчисткаЗагрузкаТовары(Товары.ПолноеИмя) Тогда Лог("Очистка и загрузка товаров выполнена!",0); Иначе Лог("Ошибка загрузки товаров!",1); КонецЕсли; КонецЕсли; Карты=Новый Файл(КаталогИБ+"\Cards.DBF"); Если Карты.Существует() Тогда //Лог("Загрузка информационных карт!",0); Если ОчисткаЗагрузкаКарты(Карты.ПолноеИмя) Тогда Лог("Загрузка информационных карт выполнена!",0); Иначе Лог("Ошибка загрузки информационных карт!",1); КонецЕсли; КонецЕсли; НастройкаРМК = Новый Файл (КаталогИБ+"\NastrRMK.xml"); Если НастройкаРМК.Существует() Тогда //Обработка настройки РМК Если ОчисткаЗагрузкаНастройкиРМК(НастройкаРМК.ПолноеИмя) Тогда Лог ("Загрузка настройки РМК выполнена!", 0); Иначе Лог (ОписаниеОшибки(), 1); КонецЕсли; КонецЕсли; ТоварыПодбора=Новый Файл(КаталогИБ+"\Podbor.DBF"); Если ТоварыПодбора.Существует() Тогда //Лог("Загрузка информационных карт!",0); Если ОчисткаЗагрузкаТоваровПодбора(ТоварыПодбора.ПолноеИмя) Тогда Лог("Загрузка товаров подбора выполнена!",0); Иначе Лог("Ошибка загрузки товаров подбора!",1); КонецЕсли; КонецЕсли; Кассиры=Новый Файл(КаталогИБ+"\Users.DBF"); Если Кассиры.Существует() Тогда //Лог("Загрузка пользователей ИБ!",0); Если ОчисткаЗагрузкаПользователей_Стар(Кассиры.ПолноеИмя) Тогда Лог("Загрузка пользователей ИБ выполнена!",0); Иначе Лог("Ошибка пользователей ИБ!",1); КонецЕсли; КонецЕсли; ПраваКассиров=Новый Файл(КаталогИБ+"\KassRoles.xml"); Если ПраваКассиров.Существует() Тогда //Лог("Загрузка информационных карт!",0); Если ОчисткаЗагрузкаПравКассиров(ПраваКассиров.ПолноеИмя) Тогда Лог("Загрузка прав кассиров выполнена!",0); Иначе Лог(ОписаниеОшибки(),1); КонецЕсли; КонецЕсли; //Загрузка Товаров текущие цены Файлы=НайтиФайлы(КаталогИБ, "TOVAR*.DBF"); Если Файлы.Количество()>0 Тогда СписокФайлов=Новый ТаблицаЗначений; СписокФайлов.Колонки.Добавить("ИмяФайла"); Для каждого Файл из Файлы Цикл Если (Найти(Файл.ИмяБезРасширения,"TOVARVS"))Тогда Продолжить; КонецЕСли; Стр=СписокФайлов.Добавить(); Стр.ИмяФайла=Файл.ПолноеИмя; КонецЦикла; СписокФайлов.Сортировать("ИмяФайла"); Для каждого Файл из СписокФайлов Цикл //Лог("Загрузка товаров промежуточная!",0); ЗагрузитьФайлУТ(Файл.ИмяФайла); Лог("Загрузка товаров промежуточная выполнена!",0); КонецЦикла; КонецЕсли; Попытка ЗафиксироватьТранзакцию(); Исключение Лог("Ошибка загрузки МА! "+ОписаниеОшибки(),1); КонецПопытки; Исключение ОтменитьТранзакцию(); УдалитьФайлы(КаталогИБ(), "*.DBF"); УдалитьФайлы(КаталогИБ(), "*.opo"); УдалитьФайлы(КаталогИБ(), "*.jpg"); попытка УдалитьФайлы(КаталогИБ(), "NastrRMK.xml"); исключение конецПопытки; попытка УдалитьФайлы(КаталогИБ(), "KassRoles.xml"); исключение конецПопытки; Лог("Ошибка загрузки данных!",1); КонецПопытки КонецПроцедуры Вот такую процедуру запускает служба |
|||
7
ColonelAp4u
13.08.15
✎
15:47
|
Я Выгрузил из Ут Скидочные карты 25 к штук, пока идет загрузка этих карт я спокойно добавляю товар изменяю количество, но если делаю сторно сразу конфликт
|
|||
8
ejikbeznojek
13.08.15
✎
15:50
|
Как-то странно, зачем это делать раз в 90 секунд?
Если объём выгрузки большой, то ничего с этим особо не сделаешь. Разве что извращаться как-нибудь...например продажи не проводить, а записывать, а проводить потом в конце дня |
|||
9
ColonelAp4u
13.08.15
✎
15:54
|
(8) Объем выгрузки большой бывает ночью когда кассы полностью чистятся и заново грузятся в этот момент магазины не работают.
А в течении дня может из ут прийти новая цена на товары новый кассир с правами новая номенклатура, и когда обмен работает с таблицей к которой относится та и или иная выгрузка то если кассир в этот момент производит действие то происходит блокировка данной таблицы |
|||
10
ejikbeznojek
13.08.15
✎
16:01
|
(9) Ну согласись, что обменом новая номенклатура когда придёт из УТ. В живую этот товар ещё не приедет. Реально чаще чем 2-3 раза в день нужна только информация по ценам. Если вдруг внезапно решили что-то поменять.
База то наверняка файловая а магазине? Если раньше не было блокировок, а теперь есть - это значит что либо больший объём выгружается чем раньше, либо медленнее записывается в базу что-то. Может хард по быстрее поставить? Но лучше бы убедить всех что обмен нужен 2-3 раза в день) |
|||
11
ColonelAp4u
13.08.15
✎
16:07
|
(10) цены могут приходить новые и по этому приходится грузит часто. Есть кассы новые на ССД дисках и там тоже случается тоже самое. процедура в начале смотрит есть ли файлы, если есть она в начале их копирует к себе в базу а потом из папки с базой загружает в 1с. Выгрузка может быть и не большой просто в момент достаточно 1 секунды если таблица заблокирована обменом и в этот момент кассир что то делает происходит конфликт. Я прошу вас помочь/ответить/подсказать как сделать так чтобы обмен работал и не мешал кассиру. Может создать еще таблицу такую же? и пусть один работает с одной другой с другой. а после сделать перенос данных из одной в другую когда не будут выполняться ни какие операции кассиром?
|
|||
12
ejikbeznojek
13.08.15
✎
16:36
|
Может сделать константу какую-то,"ИдётЗагрузка"
И в момент обращения к таблице условие если ИдётЗагрузка тогда //ждём пока загрузка кончится конецесли |
|||
13
разработчик 1с
13.08.15
✎
16:38
|
(12) лучше константу - ОткрытЧек.
пока продавец оформляет, ничего не грузится пришёл ты на кассу с товарами, денег достал, а кассир руками разводит - тут 1с пишет, идёт загрузка..стоим.. |
|||
14
ejikbeznojek
13.08.15
✎
16:56
|
(13) ну не суть, главное разделить по времени загрузку и всё остальное.
Ещё лучше тогда "СейчасПроводитсяДокумент" потому что кассир откроет чек и убежит в туалет по писать. И может быть наверное не только чек. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |