Загрузка в Астор из R-keeper
Djonni
03.06.2009 - 01:29
|
Форум 1С: Одинэс.Ру |
Djonni
03.06.2009 - 01:29
|
Господа, прошу помочь с загрузкой данных из R-keeper в 1С Астор (ресторан/общепит). В асторовской конфе реализована такая возможность, но я никак не могу подключиться к базе. Если кто пользовался прошу помочь, плиз. |
odines.ru
22.11.2024 - 01:16
|
Смотри также: Журнал регистрации Падает 1С при открытии обработки загрузки/выгрузки проводок Работа в английской винде |
Rk
1 - 03.06.2009 - 04:51
|
Загружать нужно именно из R-Keeper или из StoreHouse? Если из R-Keeper, то подключаться не нужно, т.к. R-Keeper при закрытии дня формирует файлы по реализации. Вот эти файлы, возможно, и нужны? Но в этих файлах только реализация блюд, без их раскладки. Если же нужно грузить из StoreHouse - тогда да, нужно подключаться к базе. |
Djonni
2 - 04.06.2009 - 03:43
|
Именно из R-Keeper. Мне надо в конце дня делать загрузку в 1С всех реализованых блюд (все чеки). Раскладка ине нужна потому что в R-Keeper забиты только конечные блюда. Вся раскладка (калькуляции и т.п.) будет в 1С. Надо только выставлять соответствие в 1С всех блюд. Можно подробней о файлах, которые формируются? Что за файлы, куда они падают? Но вообще интересует не только продажи, удобней было бы получить доступ и к справочникам R-Keeper. Подскажите пож. если кто-то работал с Парадоксовскими файлами DB |
Rk
3 - 04.06.2009 - 15:05
|
При закрытии дня на кассах R-Keeper файлы данных падают в каталог EndDay, откуда потом загружаются в менеджерскую часть K-Keeper (тоже закрытие дня, но уже на менеджере). После этого, в отчетах менеджера появляются данные о продажах блюд, скидках и т.д. Дальше, при использовании StoreHouse, данные выгружаются, где и происходит раскладка блюд на компоненты (калькуляционные карты заполняются предварительно, там же формируются приходные накладные, расходные и т.д.). Без использования SH, в R-Keeper-е настраивается выгрузка данных о продажах (файлы db), обычно в каталог STOCK. И вот оттуда и нужно брать файлы в вашем случае. В этих файлах содержится информация о чеках, блюдах, меню, катеориях и т.д..Догадываюсь, что описаний файлов не имеете. Если есть необходимость - попробую помочь, но сейчас под рукой нет. Поднимите тему завтра, если увижу - отпишусь. |
ГШ18
4 - 04.06.2009 - 16:35
|
я могу свой пример загрузки выложить. Работает уже 3 года. Много кода, но все в принципе понятно. Применительно к 1С Астору не скажу. Процедура ЗагрузкаРКипер() Если Выбран()=0 Тогда Док=СоздатьОбъект("Документ.ОтчетКассы"); Док.ВыбратьДокументы(ДатаДок,ДатаДок); Пока Док.ПолучитьДокумент()=1 Цикл Сообщить("За дату "+ДатаДок+" уже существует документ """"Отчет кассы"""". Работайте с существующим!"); СтатусВозврата(0); Возврат; КонецЦикла; КонецЕсли; Каталог=СокрЛП(Константа.ПутьКВнешнимБазам); Если ФС.СуществуетФайл(Каталог)=0 Тогда Предупреждение("Путь к каталогу с экпортными базами R-Keeper указан не верно! Проверьте значение константы ПутьКВнешнимБазам."); Возврат; КонецЕсли; Если КоличествоСтрок()>0 Тогда Если Вопрос("Документ будет переоформлен, а все существующие строки будут удалены. Продолжить?","Да+Нет")="Нет" Тогда Возврат; КонецЕсли; КонецЕсли; Спр=СоздатьОбъект("Справочник.Меню"); Спр.ИспользоватьДату(ДатаДок,1); //Сначала обновим меню Файл=Каталог+"\MENU.DBF"; Если ФС.СуществуетФайл(Файл)=0 Тогда Предупреждение("Отсутствует файл выгрузки R-Keeper! Сначала сформируйте файл.("+Файл+")"); Возврат; КонецЕсли; БД=СоздатьОбъект("XBase"); БД.ОткрытьФайл(Файл); ТЗЭлементов=СоздатьОбъект("ТаблицаЗначений"); ТЗЭлементов.НоваяКолонка("УникальныйКод","Число"); ТЗЭлементов.НоваяКолонка("НазваниеБД"); ТЗЭлементов.НоваяКолонка("ЦенаБлюдаБД"); ТЗЭлементов.НоваяКолонка("ИдентификаторГруппыБД"); ТЗЭлементов.НоваяКолонка("ПометкаУдаленияБД"); ТЗЭлементов.НоваяКолонка("КодМеню","Число"); Если БД.Открыта()=1 Тогда БД.Первая();//встаем на первую запись Пока 1=1 Цикл// Обработка записи базы данных УникальныйКод=Число(БД.SIFR);//УНИКАЛЬНЫЙ КОД КодБлюдаБД КодМеню=Число(БД.CODE);//Внутр. код (он идентифицирует меню) КодБД НазваниеБД=БД.NAME;//Наименование ТипБД=БД.TREETYPE;//"T" для группы ИдентификаторКатегорииБД=БД.CATEG;//Предположительно: 0-у групп,1-жратва,2-алкогольные,3-безалкогольнык //4-сигареты и др. легкие наркотики ЦенаБлюдаБД=БД.PRICE; //Цена в прайсе ИдентификаторГруппыБД=Число(БД.PARENT); //код родительской группы ПометкаУдаленияБД=БД.DEL;//Пометка удаления //Если группа, то в тз для групп Если СокрЛП(ТипБД)="T" Тогда //Группы уже не заводим Иначе Если ПометкаУдаленияБД=0 Тогда //Нужны только живые ТЗЭлементов.НоваяСтрока(); ТЗЭлементов.УникальныйКод=УникальныйКод; ТЗЭлементов.НазваниеБД=НазваниеБД; ТЗЭлементов.ЦенаБлюдаБД=ЦенаБлюдаБД; ТЗЭлементов.ИдентификаторГруппыБД=ИдентификаторГруппыБД; ТЗЭлементов.ПометкаУдаленияБД=ПометкаУдаленияБД; ТЗЭлементов.КодМеню=КодМеню; КонецЕсли; КонецЕсли; Если БД.Следующая()=0 Тогда // не удалось перейти к следующей записи Прервать; КонецЕсли; КонецЦикла; Иначе Сообщить("Файл меню занят другим приложением! Загрузка меню невозможна."); возврат; КонецЕсли; БД.ЗакрытьФайл(); НачатьТранзакцию(); Если ТЗЭлементов.КоличествоСтрок()>0 Тогда ТЗЭлементов.ВыбратьСтроки(); Пока ТЗЭлементов.ПолучитьСтроку()=1 Цикл Если ТЗЭлементов.ПометкаУдаленияБД=1 Тогда //Удаленные в меню игнорируем //хотя мы сверху их отсекли-новый вариант Продолжить; КонецЕсли; Если Спр.НайтиПоРеквизиту("КодМеню",ТЗЭлементов.КодМеню,1)=0 Тогда Спр.Новый(); Спр.ШИФР=ТЗЭлементов.УникальныйКод; Спр.Наименование=ТЗЭлементов.НазваниеБД; Спр.Цена=ТЗЭлементов.ЦенаБлюдаБД; Спр.КодМеню=ТЗЭлементов.КодМеню; Попытка Спр.Записать(); Исключение Сообщить("Невозможно создать элемент меню с кодом меню "+ТЗЭлементов.КодМеню); возврат; КонецПопытки; Иначе НадоОбновить=0; Если СокрЛП(Спр.Наименование)<>СокрЛП(ТЗЭлементов.НазваниеБД) Тогда Спр.Наименование=ТЗЭлементов.НазваниеБД; НадоОбновить=1; КонецЕсли; Если Спр.Цена<>ТЗЭлементов.ЦенаБлюдаБД Тогда Спр.Цена=ТЗЭлементов.ЦенаБлюдаБД; НадоОбновить=1; КонецЕсли; Если Спр.ШИФР<>ТЗЭлементов.УникальныйКод Тогда Спр.ШИФР=ТЗЭлементов.УникальныйКод; НадоОбновить=1; КонецЕсли; Если НадоОбновить=1 Тогда Попытка Спр.Записать(); Исключение Сообщить("Невозможно обновить элемент меню с кодом меню "+ТЗЭлементов.КодМеню); возврат; КонецПопытки; КонецЕсли; Если ТЗЭлементов.ПометкаУдаленияБД=1 Тогда Спр.Удалить(0); КонецЕсли; КонецЕсли; КонецЦикла; КонецЕсли; ЗафиксироватьТранзакцию(); //Неплательщики должны отдельной строкой (выдернем номера чеков); ФайлНеплательщиков=Каталог+"\APCHECK.DBF"; Если ФС.СуществуетФайл(ФайлНеплательщиков)=1 Тогда СписЧековНеплательщиков=СоздатьОбъект("СписокЗначений"); БДнп=СоздатьОбъект("XBase"); БДнп.ОткрытьФайл(ФайлНеплательщиков); Если БДнп.КоличествоЗаписей()>0 Тогда Если БДнп.Открыта()=1 Тогда БДнп.Первая();//встаем на первую запись Пока 1=1 Цикл// Обработка записи базы данных Неплательшик=Строка(БДнп.EXTRA); НомерЧека=Число(БДнп.CNUM); Если СокрЛП(Неплательшик)<>"" Тогда //Сообщить("-"+СокрЛП(Неплательшик)); СписЧековНеплательщиков.ДобавитьЗначение(НомерЧека); КонецЕсли; Если БДнп.Следующая()=0 Тогда // не удалось перейти к следующей записи Прервать; КонецЕсли; КонецЦикла; КонецЕсли; КонецЕсли; КонецЕсли; БДнп.ЗакрытьФайл(); //Поищем "перенесенные" чеки Файл=Каталог+"\ACHECK.DBF"; СписПеренесенных=СоздатьОбъект("СписокЗначений"); БД=СоздатьОбъект("XBase"); БД.ОткрытьФайл(Файл); Если БД.КоличествоЗаписей()=0 Тогда Сообщить("Нет данных в загружаемых файлах. Возможно файлы не сформированы на терминале!"); Возврат; КонецЕсли; Если БД.Открыта()=1 Тогда БД.Первая();//встаем на первую запись Пока 1=1 Цикл// Обработка записи базы данных //Если БД.ЗаписьУдалена()=0 Тогда КодДела=Число(БД.DELETED); НомерЧека=Число(БД.CNUM); Если КодДела>0 Тогда СписПеренесенных.ДобавитьЗначение(НомерЧека); КонецЕсли; Если БД.Следующая()=0 Тогда // не удалось перейти к следующей записи Прервать; КонецЕсли; КонецЦикла; Иначе Сообщить("Файл с чеками занят другим приложением! Загрузка чеков невозможна."); возврат; КонецЕсли; БД.ЗакрытьФайл(); //Теперь пройдемся по чекам Файл=Каталог+"\ARCHECK.DBF"; Если ФС.СуществуетФайл(Файл)=0 Тогда Предупреждение("Отсутствует файл выгрузки R-Keeper! Сначала сформируйте файл."+Файл+")"); Возврат; КонецЕсли; ТЧ=СоздатьОбъект("ТаблицаЗначений"); ТЧ.НоваяКолонка("Номенклатура","Справочник.Меню"); ТЧ.НоваяКолонка("УникальныйКод","Число"); //ЗДЕСЬ ТОЛЬКО ПО ШИФРУ!!! ТЧ.НоваяКолонка("Неплательщик","Перечисление.Булево"); ТЧ.НоваяКолонка("Количество","Число"); ТЧ.НоваяКолонка("Сумма","Число"); БД=СоздатьОбъект("XBase"); БД.ОткрытьФайл(Файл); ИтогоСуммаБД=0; Если БД.Открыта()=1 Тогда БД.Первая();//встаем на первую запись Пока 1=1 Цикл// Обработка записи базы данных //Если БД.ЗаписьУдалена()=0 Тогда УникальныйКод=Число(БД.SIFR); СуммаПоСтроке=БД.PAYSUM; НомерЧека=Число(БД.CNUM); Если СписПеренесенных.НайтиЗначение(НомерЧека)=0 Тогда //ПЕРЕНЕСЕННЫЕ НЕ НУЖНЫ ТЧ.НоваяСтрока(); ТЧ.УникальныйКод=УникальныйКод; ТЧ.Количество=БД.QNT; ТЧ.Сумма=СуммаПоСтроке; //Неплательщиков помечаем Если СписЧековНеплательщиков.НайтиЗначение(НомерЧека)>0 Тогда ТЧ.Неплательщик=Перечисление.Булево.Да; КонецЕсли; ИтогоСуммаБД=ИтогоСуммаБД+СуммаПоСтроке; КонецЕсли; Если БД.Следующая()=0 Тогда // не удалось перейти к следующей записи Прервать; КонецЕсли; КонецЦикла; Иначе Сообщить("Файл с чеками занят другим приложением! Загрузка чеков невозможна."); возврат; КонецЕсли; БД.ЗакрытьФайл(); ТЧ.Свернуть("1,2,3","4,5"); ТЧ.НоваяКолонка("КодМеню","Число"); //с=0; //ТЧ.ВыбратьСтроку(с); //Возврат; ТЧ.ВыбратьСтроки(); Пока ТЧ.ПолучитьСтроку()=1 Цикл Если Спр.НайтиПоРеквизиту("ШИФР",ТЧ.УникальныйКод,1)=0 Тогда Сообщить("...Блюдо с шифром "+ТЧ.УникальныйКод+" не найдено в справочнике """"Меню"""""); //Возврат; продолжить; КонецЕсли; ТЧ.Номенклатура=Спр.ТекущийЭлемент(); ТЧ.КодМеню=ТЧ.Номенклатура.КодМеню; КонецЦикла; ТЧ.Сортировать("КодМеню"); ЗагрузитьТабличнуюЧасть(ТЧ); //Если Итог("Сумма")<>ИтогоСуммаБД Тогда // Сообщить("Сумма в импортируемых данных= "+ИтогоСуммаБД+", а сумма в документе= "+Итог("Сумма")); //КонецЕсли; //Теперь пройдемся по возвратом с флагом 3 ТЧ=СоздатьОбъект("ТаблицаЗначений"); Флаг=1; Файл=Каталог+"\AVCHECK.DBF"; БД=СоздатьОбъект("XBase"); БД.ОткрытьФайл(Файл); ИтогоСуммаБД=0; Если БД.Открыта()=1 Тогда БД.Первая();//встаем на первую запись Пока 1=1 Цикл// Обработка записи базы данных УникальныйКод=Число(БД.SIFR); ЦенаФ=БД.PRICE; КолФ=БД.QNT; Причина=БД.REASON; Если Спр.НайтиПоРеквизиту("ШИФР",УникальныйКод,1)=0 Тогда Сообщить("Блюдо с шифром "+УникальныйКод+" не найдено в справочнике """"Меню"""""); //Возврат; продолжить; Иначе БлюдоФ=Спр.ТекущийЭлемент(); КонецЕсли; НоваяСтрока(); КодБлюда=УникальныйКод; Номенклатура=БлюдоФ; Количество=КолФ; СуммаВ=ЦенаФ*КолФ; Если Причина=1 Тогда Примечание="Ошибка"; ИначеЕсли Причина=2 Тогда Примечание="Перенос"; Иначе Примечание="Брак"; КонецЕсли; Если БД.Следующая()=0 Тогда // не удалось перейти к следующей записи Прервать; КонецЕсли; КонецЦикла; Иначе Сообщить("Файл с чеками занят другим приложением! Загрузка чеков невозможна."); возврат; КонецЕсли; БД.ЗакрытьФайл(); Предупреждение("Заполнение произведено!",5); КонецПроцедуры //*************************************** |
© 2009 Форум 1С: Одинэс.Ру |