Бегство из Frontol в Далион или очередной день программиста

22.09.16

Интеграция - ККМ

Если к вам пришел маленький серый зайчик в виде сломанного жесткого диска, и вы забыли, что нужно быть нежными и пушистыми и делать копии, то эта статья для вас

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
ЗагрузитьИзFrontolDBF
.epf 8,64Kb
15 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

Немножко предыстории.

Все началось с того, что сломался очередной жесткий диск и, как всегда, копий нет. Но есть рабочая касса под руководством программы FRONTOL 4 и нужно быстро реанимировать 1С хотя бы в части справочника номенклатуры, ну и цен соответственно.

Учет ведется в программе Далион:УНО (ПРО, Сеть)

Для того, чтобы все это осуществить, нам понадобится программа, которая умеет экспортировать из базы данных INTERBASE/FIRIBERD в Exсel или DBF,  я использовал вот такую:

IBExpert (http://www.ibexpert.net/ibe/index.php) (не спрашивайте, где брать не демо).

  1. Экспортируем следующие таблицы: SPRT -- SPRT.DBF, PRICEDATA -- PRICEDAT.DBF, BARCODE -- BARCODE.DBF, REMAIN -- REMAIN.DBF (для тех, кто использует сложные разрезы цен, думайте сами)
  2. Восстанавливаем чистую базу из шаблона или другим способом
  3. Запускаем обработку указываем ей каталог (жестко прописан, выбор не работает).
  4. После всего этого работать будет все, кроме выгрузки  в кассу.

Чтобы заработала выгрузка в кассу, нужно или заново перезаписать каждую группу, или написать обработку, которая заполнит регистр сведений "АссортиментСкладов"

Для всех, кто будет просить скачать ему обработку у друзей, привожу ее полный код. Не ленитесь, господа.

Функция ОткрытьТаблицуDBF(ИмяТаблицы)
    xbase = Новый xBase; xBase.ОткрытьФайл(ИмяТаблицы);
    Если xBase.Открыта() Тогда    Возврат xBase; иначе Возврат Неопределено; КонецЕсли;
КонецФункции

Процедура СкопироватьxBaseВТЗ(xBase,ТЗн)
    xBase.Первая();
    Пока НЕ xBase.вКонце() Цикл
        НоваяСтрока = ТЗн.Добавить();ЗаполнитьЗначенияСвойств(НоваяСтрока,xBase); xBase.Следующая();    
    КонецЦикла;
КонецПроцедуры

Процедура КнопкаВыполнитьНажатие(Кнопка)
    xBaseТовары         = ОткрытьТаблицуDBF(СокрЛП(КаталогТаблиц)+"SPRT.DBF");
    xBaseШтрихКоды         = ОткрытьТаблицуDBF(СокрЛП(КаталогТаблиц)+"BARCODE.DBF");
    xBaseЦены             = ОткрытьТаблицуDBF(СокрЛП(КаталогТаблиц)+"PRICEDAT.DBF");
    xBaseЦеныОстатка     = ОткрытьТаблицуDBF(СокрЛП(КаталогТаблиц)+"REMAIN.DBF");
    Если xBaseТовары=Неопределено или xBaseШтрихКоды =Неопределено или
        xBaseЦены =Неопределено или xBaseЦеныОстатка =Неопределено Тогда
        Сообщить("не могу открыть таблицы SPRT.DBF BARCODE.DBF PRICEDAT.DBF REMAIN.DBF");
        Возврат;
    КонецЕсли;
    
    ТзнШтрихКоды = Новый таблицаЗначений;
    ТзнШтрихКоды.Колонки.Добавить("ID",Новый ОписаниеТипов("Число"));
    ТзнШтрихКоды.Колонки.Добавить("WareID",Новый ОписаниеТипов("Число"));
    ТзнШтрихКоды.Колонки.Добавить("Barcode",Новый ОписаниеТипов("Строка"));
    ТзнШтрихКоды.Колонки.Добавить("Factor",Новый ОписаниеТипов("Число"));
    
    ТзнЦены = Новый таблицаЗначений;
    ТзнЦены.Колонки.Добавить("ID",Новый ОписаниеТипов("Число"));
    ТзнЦены.Колонки.Добавить("Price",Новый ОписаниеТипов("Число"));
    ТзнЦены.Колонки.Добавить("RemainID",Новый ОписаниеТипов("Число"));    //брать из таблице remain поле ID
    
    ТзнЦеныОстатка = Новый таблицаЗначений;
    ТзнЦеныОстатка.Колонки.Добавить("ID",Новый ОписаниеТипов("Число"));
    ТзнЦеныОстатка.Колонки.Добавить("WareID",Новый ОписаниеТипов("Число"));
    
    ТзнТовары = Новый ТаблицаЗначений;
    ТзнТовары.Колонки.Добавить("ID",Новый ОписаниеТипов("Число"));
    ТзнТовары.Колонки.Добавить("PARENTID",Новый ОписаниеТипов("Число"));
    ТзнТовары.Колонки.Добавить("Code",Новый ОписаниеТипов("Число"));
    ТзнТовары.Колонки.Добавить("Name",Новый ОписаниеТипов("Строка"));
    ТзнТовары.Колонки.Добавить("Text",Новый ОписаниеТипов("Строка"));
    ТзнТовары.Колонки.Добавить("Flags",Новый ОписаниеТипов("Число"));    //Flags = //9727 весовой товар
                                                                        //9726 - обычный товар  254 - группа
    ТзнТовары.Колонки.Добавить("IsWare",Новый ОписаниеТипов("Число"));    // 1- Товар
    ТзнТовары.Колонки.Добавить("Номенклатура",Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
    
    СкопироватьxBaseВТЗ(xBaseШтрихКоды,ТзнШтрихКоды);
    СкопироватьxBaseВТЗ(xBaseЦены,ТзнЦены);
    СкопироватьxBaseВТЗ(xBaseЦеныОстатка,ТзнЦеныОстатка);
    
    Начатьтранзакцию();
    
    ДокАкт = Документы.АктПереоценки.СоздатьДокумент();
    ДокАкт.Дата = Рабочаядата;
    ЗаполнитьШапкуДокумента(ДокАкт, ПараметрыСеанса.ТекущийПользователь);
    ДокАкт.ВидОперации = Перечисления.ВидыОперацийАктПереоценки.Переоценка;
    ДокАкт.ТОСоздания = ПараметрыСеанса.ТекущийТО;
    УстановитьНомерДокумента(ДокАкт.ЭтотОбъект);
    ДокАкт.ЗаписыватьРасценку = УправлениеРИБ.ТребуетсяПодтверждениеПереоценки(ДокАкт);
    
    xBaseТовары.Первая();
    Пока НЕ xBaseТовары.вКонце() Цикл
        НоваяСтрока = ТзнТОвары.Добавить();
        ЗаполнитьЗначенияСвойств(НоваяСтрока,xBaseТовары);
        
        Если xBaseТовары.IsWare<>1 Тогда    
            НовЭлем = Справочники.Номенклатура.СоздатьГруппу();
            НовЭлем.Код = xBaseТовары.Code;
            НовЭлем.Наименование = xBaseТовары.Name;
            НовЭлем.Записать();
            
            НоваяСтрока.Номенклатура = НовЭлем.Ссылка;    // для идетификации групп
            
            Если  xBaseТовары.PARENTID <> 0  Тогда
                НайденаяГруппа = ТзнТовары.Найти(xBaseТовары.PARENTID,"ID" );
                Если НЕ НайденаяГруппа=неопределено Тогда
                    НовЭлем.Родитель =НайденаяГруппа.Номенклатура;
                    НовЭлем.Записать();
                КонецЕсли;
            КонецЕсли;
        КонецЕсли;
        xBaseТовары.Следующая();
    КонецЦикла;
    
    Для каждого СтрокаТзн Из ТзнТОвары Цикл
        Если СтрокаТзн.IsWare <> 1 Тогда
            Продолжить;
        КонецЕсли;
        НовЭлем = Справочники.Номенклатура.СоздатьЭлемент();
        НовЭлем.Код             = СтрокаТзн.Code;
        НовЭлем.Наименование     = СтрокаТзн.Name;
        НовЭлем.НаименованиеПолное = СтрокаТзн.Text;
        
        НовЭлем.КатегорияТовара    = Справочники.КатегорииТоваров.УчетПоХарактеристикамНеВедется;
        Если Константы.УстанавливатьПроизводителяПоШК.Получить() Тогда
            НовЭлем.Производитель = Справочники.КлассификаторСтранМира.ПустаяСсылка();
        ИначеЕсли Не ЗначениеЗаполнено(НовЭлем.Производитель) Тогда
            НовЭлем.Производитель =  Константы.ОсновнойПроизводитель.Получить();
        КонецЕсли;
        НовЭлем.СтавкаНДС          = Константы.ОсновнаяСтавкаНДС.Получить();
        НовЭлем.ФирмаФР            = Константы.УправленческаяФирма.Получить();
        НовЭлем.ГруппаТоваровДляПривязкиКФР = Справочники.ГруппыТоваровДляПривязкиКФР.ОсновнаяГруппаТоваров;
        НовЭлем.ОсновноеИзображение = Справочники.ХранилищеДополнительнойИнформации.ПустаяСсылка();
            
        Если СтрокаТзн.Flags=9726 Тогда
            БазоваяЕдиницаОКЕИ = Константы.ОсновнаяЕдиницаОКЕИ.Получить();
        ИначеЕсли СтрокаТзн.Flags=9727 Тогда  
            БазоваяЕдиницаОКЕИ = Константы.ОсновнаяЕдиницаОКЕИВес.Получить();
            НовЭлем.ВыгружатьВВесы                 = истина;
            НовЭлем.РазрешеноДробноеКоличество     = истина;
            НовЭлем.ШтрихКодВключаетКоличество     = истина;
        Иначе
            БазоваяЕдиницаОКЕИ = Константы.ОсновнаяЕдиницаОКЕИ.Получить();
        КонецЕсли;
        НовЭлем.ОбменДанными.Загрузка = Истина;    //чтоб дал записать единицы измерения
        НовЭлем.Записать();
        
        НовЕдиница = Справочники.ЕдиницыИзмерения.СоздатьЭлемент();
        НовЕдиница.Владелец                 = НовЭлем.Ссылка;
        НовЕдиница.ЕдиницаПоКлассификатору     = БазоваяЕдиницаОКЕИ;
        НовЕдиница.Наименование             = БазоваяЕдиницаОКЕИ;
        НовЕдиница.Коэффициент                 = 1;
        НовЕдиница.Записать();
        
        НовЭлем.БазоваяЕдиницаИзмерения = НовЕдиница.Ссылка;
        НовЭлем.ЕдиницаИзмеренияОтчетов = НовЕдиница.Ссылка;
        НовЭлем.ЕдиницаИзмеренияЗаказов = НовЕдиница.Ссылка;
        НовЭлем.Записать();
        
        СтрокаТзн.Номенклатура = НовЭлем.Ссылка;
        
        Если  СтрокаТзн.PARENTID <> 0  Тогда
            НайденаяГруппа = ТзнТовары.Найти(СтрокаТзн.PARENTID,"ID" );
            Если НЕ НайденаяГруппа=неопределено Тогда
                НовЭлем.Родитель =НайденаяГруппа.Номенклатура;
                НовЭлем.Записать();
            КонецЕсли;
        КонецЕсли;
        
        НайденныеШтрихКоды = ТзнШтрихКоды.НайтиСтроки(Новый Структура("WareID",СтрокаТзн.ID));
        Для каждого СтрокаШтрихКод Из НайденныеШтрихКоды Цикл
            
            НаборЗаписей = РегистрыСведений.Штрихкоды.СоздатьНаборЗаписей();
            НаборЗаписей.Отбор.ШтрихКод.Установить(СокрЛП(СтрокаШтрихКод.Barcode));
            НаборЗаписей.Отбор.Номенклатура.Установить(НовЭлем.Ссылка);
            НаборЗаписей.Записать();
            
            НоваяЗапись = НаборЗаписей.Добавить();
            НоваяЗапись.Номенклатура     = НовЭлем.Ссылка;
            НоваяЗапись.Штрихкод         = СокрЛП(СтрокаШтрихКод.Barcode);
             НоваяЗапись.ТипШтрихкода     = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13;
            Новаязапись.ЕдиницаИзмерения= НовЭлем.БазоваяЕдиницаИзмерения;
            НаборЗаписей.Записать();
            
        КонецЦикла;
        //самое трудное
        найденыйостатокЦены = ТзнЦеныОстатка.Найти(СтрокаТзн.ID,"WareID");
        Если НЕ найденыйостатокЦены = Неопределено Тогда
            НайденнаяЦена             = ТзнЦены.найти(найденыйостатокЦены.ID,"RemainID");
            НоваяЦена                 = ДокАкт.Товары.Добавить();
            НоваяЦена.Номенклатура     = НовЭлем.Ссылка;
            НоваяЦена.Цена             = НайденнаяЦена.Price;
            //Сообщить("найденая цена "+СтрокаТзн.Code+" "+СтрокаТзн.Name+" "+НайденнаяЦена.Price);
        КонецЕсли;
    КонецЦикла;
    ДокАкт.Записать(РежимЗаписиДокумента.Запись);
    ЗафиксироватьТранзакцию();
КонецПроцедуры

Процедура КаталогТаблицНачалоВыбора(Элемент, СтандартнаяОбработка)
КонецПроцедуры

КаталогТаблиц = "D:\Supermarket\";

ВОТ ТАК И ЗАКОНЧИЛИСЬ ОЧЕРЕДНЫЕ БЕССОННЫЕ ВЫХОДНЫЕ.

Доработок не будет.

Вступайте в нашу телеграмм-группу Инфостарт

frontol Далион

См. также

ККМ Кассовые операции Розничная торговля НДС 22% Системный администратор Программист 1С:Предприятие 8 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Розница 2 1С:Управление производственным предприятием 1С:Бухгалтерия государственного учреждения 1С:Бухгалтерия 1.6 1С:Бухгалтерия автономного учреждения Россия Платные (руб)

Универсальная обработка для обслуживания любых фискальных регистраторов (ККТ), в том числе Веб сервер АТОЛ. Работает в соответствии с 54-ФЗ. (ФФД 1.0, ФФД 1.05, ФФД 1.1, ФФД 1.2). Подключайте любую онлайн кассу к практически любой конфигурации на обычных формах. Нет необходимости обновлять 1С. Можно бесплатно скачать и протестировать. Может работать одновременно с несколькими онлайн-кассами, либо одной с разных рабочих мест. (через RDP, TCP\IP или веб-сервер) Позволяет разделить один чек сразу на несколько ККТ или на несколько систем налогообложения. Поддерживает разрешительный режим и маркировку. Поддерживает локальный модуль честного знака для офлайн проверки. Можно настроить собственный шаблонов чека. Можно использовать эквайринг там, где он не поддерживается. Работает на LINUX и Windows Адаптировано к ставке НДС 22% и ТС ПИоТ.

6100 руб.

27.02.2017    908829    6480    10489    

3319

ККМ Кассовые операции Розничная торговля НДС 22% Системный администратор Программист 1С:Предприятие 8 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Розница 2 1С:Управление производственным предприятием 1С:Бухгалтерия государственного учреждения 1С:Бухгалтерия автономного учреждения Россия Платные (руб)

Обработка осуществляет обслуживание ККТ АТОЛ, Штрих, Вики Принт и Меркурий для конфигураций "УТ 10.3", "КА 1.1", "УПП 1.3", "Розница 1.0", "БП 2.0" и других отраслевых решений, построенных на основе указанных выше конфигурациях. Поддерживает возможность параллельно пробития чеков на одной ККМ несколькими пользователями. Поддерживает Веб-сервер Атол. Соответствует требованиям 54-ФЗ. Поддерживает ФФД 1.0, 1.05, 1.1 и 1.2. Разделяет чеки по нескольким СНО. Поддерживает механизмы подключения ККТ по TCP/IP, для работы через RDP или интернет. Поддержка маркировки и разрешительного режима. Поддержка пробития чеков с новыми ставками НДС 5%, НДС 7% и НДС 22%.

7900 руб.

25.05.2015    386214    2436    3347    

1181

ККМ Кассовые операции Розничная торговля НДС 22% Системный администратор Программист Пользователь 1С:Предприятие 8 1C:Бухгалтерия 1С:Бухгалтерия 3.0 1С:Торговля и склад 7.7 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 1С:Управление торговлей 10 1С:Управление торговлей 11 1С:Розница 3.0 Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Рестораны, кафе и фаст-фуд Россия Платные (руб)

«Сервер ККМ» позволяет приложениям работать с фискальными регистраторами по локальной сети или интернет, организовать печать на одном ККМ с нескольких рабочих мест с поддержкой очереди печати. Поддержка ТСПИоТ для Атол, Штрих, Ритейл и всех 1С-совместимых ККМ с драйвером ревизии 5.0. Поддерживаются ВСЕ ревизии требований фирмы 1С к разработке драйверов ККТ от 2.2 до 4.7. Возможность печати чеков с НДС 22% без изменения конфигурации 1С.

18000 руб.

02.09.2016    157209    235    210    

237

ККМ Розничная торговля Системный администратор Программист 1С:Предприятие 8 1С:Розница 2 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Обмен между 1С:Розница и Frontol 6 при торговле от нескольких организаций, а также ряд других полезных функций. Данный модуль синхронизации незаменим для тех, кто ведёт учет по нескольким организациям в 1С:Розница, а на РМК (рабочем месте кассира) установлен Frontol или планируется его установка. Подходит для 1С:Розница 2.3 / 3.0, 1С:УНФ 3.0

4200 руб.

22.03.2019    103096    823    490    

235

ККМ Кассовые операции Розничная торговля Программист Бухгалтер Пользователь 1С:Предприятие 8 1С:Розница 2 1С:Управление торговлей 11 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Расширение для типовых конфигураций для Управляемых форм позволяет выполнять печать кассовых чеков на одну ККМ 54-ФЗ с нескольких рабочих мест. НИКАКИХ НАСТРОЕК В РАЗРАБОТКЕ - ПОДКЛЮЧИЛ И ПЕЧАТАЙ. Если у вас несколько отделов и одна ККМ - печатайте на одной ККМ! Если у вас две ККМ и одна поломалась - печатайте на одной ККМ, пока ремонтируете другую! Решение для розничных продаж! Обновление 19.03.26 для 1С:Розница 2.3.23 и 27.04.2026 для 1С:УТ 11.5.25 в новых релизах tcp/ip

9500 руб.

27.08.2018    138565    800    603    

955

Кассовые операции ККМ Пользователь 1С:Предприятие 8 1С:Управление торговлей 11 Розничная и сетевая торговля (FMCG) Россия Управленческий учет Платные (руб)

Расширение для 1С:Управление торговлей 11.5, которое позволяет пробивать чеки ККМ и списывать товар с разных складов. Склад списание товара можно указывать в табличной части рабочего места кассира (РМК).

7198 руб.

12.04.2023    16369    125    13    

96

НДС 22% Учетные задачи ККМ Файловый обмен (TXT, XML, DBF), FTP 1С 8.3 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Управление производственным предприятием Бухгалтерский учет Налоговый учет НДС Платные (руб)

Готовое обновление для конфигурации 1С:Управление торговлей 10.3, 1С:Комплексная автоматизация 1.1 , 1С:Управление производственным предприятием 1.3 обеспечивающее полную поддержку новой ставки НДС 22%. Для 1С:УТ 10.3 реализована поддержка печати чеков ККМ, а также Правила обмена с 1С:БП 3.0. Решение встраивает необходимые изменения в перечисления и документы, включая торговые операции и печатные формы.

12200 руб.

16.12.2025    9019    92    0    

86

ККМ Кассовые операции Розничная торговля НДС 22% Системный администратор Программист 1С:Предприятие 8 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Управление производственным предприятием Россия Платные (руб)

Обработки осуществляют обслуживание фискальных регистраторов, поддерживаемых драйвером "АТОЛ: Драйвер ККМ v.10.10.8", "ШТРИХ-М: Драйвер ККМ v 5.21", "ВИКИ: Драйвер CSI v 1.6", для конфигураций БП, УТ, КА, УПП, "Розница 1.0", соответствующих требованиям закона ФЗ-54 о применении контрольно-кассовой техники. Поддержка НДС 20%, 22%. Поддержка маркировки 488-ФЗ. Марки. Акциз. Честный знак. Разрешительный режим. Локальный модуль Честный Знак. Поддержка УСН НДС 5%, 7%, 20%, 22%. Требования к ККТ по приказу Федеральной налоговой службы от 26.03.2025 № ЕД-7-20/23, вступающие в силе с 01.09.25. Сертификация ТС ПИоТ.

6000 руб.

02.02.2017    302645    412    2449    

581
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. maljaev 790 20.01.17 11:54 Сейчас в теме
Спасибо, помогло раскрутить связку tranzt-sprt-remain-pricedata при построении запроса.
P.S. Кстати да, а чего ADODB и запросы не юзаешь-то? Зачем этот изврат с DBF?
2. sodrk 08.09.21 23:41 Сейчас в теме
Спасибо за обработку, круто выручила. Правда, что-то с кодировкой и при загрузке номенклатуры вместо русских букв загрузились кракозябры, потом исправил загрузкой из табличного документа с перезаписью наименований. 3 минуты работы
Для отправки сообщения требуется регистрация/авторизация