Загрузка в Астор из R-keeper

Форум 1С: Одинэс.Ру

Найти!

Загрузка в Астор из R-keeper

Djonni
03.06.2009 - 01:29
Господа, прошу помочь с загрузкой данных из R-keeper в 1С Астор (ресторан/общепит). В асторовской конфе реализована такая возможность, но я никак не могу подключиться к базе. Если кто пользовался прошу помочь, плиз.
К списку тем К списку форумов

Интересные темы

odines.ru
27.10.2020 - 17:07
Смотри также:
Перенос длинной текстовой строки без пробелов
Изменены все диалоги конфигурации
ФСС

Re: Загрузка в Астор из R-keeper

Rk
1 - 03.06.2009 - 04:51
Загружать нужно именно из R-Keeper или из StoreHouse? Если из R-Keeper, то подключаться не нужно, т.к. R-Keeper при закрытии дня формирует файлы по реализации. Вот эти файлы, возможно, и нужны? Но в этих файлах только реализация блюд, без их раскладки. Если же нужно грузить из StoreHouse - тогда да, нужно подключаться к базе.

Re: Загрузка в Астор из R-keeper

Djonni
2 - 04.06.2009 - 03:43
Именно из R-Keeper. Мне надо в конце дня делать загрузку в 1С всех реализованых блюд (все чеки). Раскладка ине нужна потому что в R-Keeper забиты только конечные блюда. Вся раскладка (калькуляции и т.п.) будет в 1С. Надо только выставлять соответствие в 1С всех блюд. Можно подробней о файлах, которые формируются? Что за файлы, куда они падают?
Но вообще интересует не только продажи, удобней было бы получить доступ и к справочникам R-Keeper. Подскажите пож. если кто-то работал с Парадоксовскими файлами DB

Re: Загрузка в Астор из R-keeper

Rk
3 - 04.06.2009 - 15:05
При закрытии дня на кассах R-Keeper файлы данных падают в каталог EndDay, откуда потом загружаются в менеджерскую часть K-Keeper (тоже закрытие дня, но уже на менеджере). После этого, в отчетах менеджера появляются данные о продажах блюд, скидках и т.д. Дальше, при использовании StoreHouse, данные выгружаются, где и происходит раскладка блюд на компоненты (калькуляционные карты заполняются предварительно, там же формируются приходные накладные, расходные и т.д.). Без использования SH, в R-Keeper-е настраивается выгрузка данных о продажах (файлы db), обычно в каталог STOCK. И вот оттуда и нужно брать файлы в вашем случае. В этих файлах содержится информация о чеках, блюдах, меню, катеориях и т.д..Догадываюсь, что описаний файлов не имеете. Если есть необходимость - попробую помочь, но сейчас под рукой нет. Поднимите тему завтра, если увижу - отпишусь.

Re: Загрузка в Астор из R-keeper

ГШ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);
КонецПроцедуры
//***************************************
 
К списку тем К списку форумов
Тема закрыта и находится в архиве.
Но Вы можете начать новую тему.
« что тормозит 7.7 ? ПУБ 308 при закрытии декабря не переносятся »
© 2009 Форум 1С: Одинэс.Ру