Разработки

Мы занимаемся разработками на следующих языках 1С, Embarcadero C++Builder, Firebird. Есть много наработок на 1С в применении к розничной и оптовой торговле.


Логотип 1С Программа "Кассир"

Программа предназначена для автоматизации рабочего места кассира, для учета денежных средств и осуществления контроля реализации товаров на рабочем месте кассира в розничной торговле. Поддерживается подключение к программе торгового и кассового оборудования, а также банковских терминалов. Имеется возможность интеграции с сервисами в интернете и учётными программами. Область применения: розничные магазины, розничные торговые сети, бары.

Функциональные характеристики программного обеспечения:

Клиент-серверная архитектура, общая база данных для нескольких рабочих мест с расчетом текущих остатков товаров. Максимально адаптированный интерфейс под работу со стандартной клавиатурой. Интеграция с программами 1С:Розница, 1С:Управление торговлей, 1С:Бухгалтерия, Трактиръ Back-Office, 1С:Управление нашей фирмой, ДАЛИОН: Управление магазином. Удобный и быстрый поиск товаров методом фильтрации: по ключевым словам, артикулу, цене и коду. Поддержка ККМ известных брендов АТОЛ, Вики Принт, Штрих-М, Меркурий. Возможность работы на одном рабочем месте с двумя ККМ по разным организациям. Возможность работы на двух рабочих местах с одной общей на два рабочих места ККМ. Поддержка ЕГАИС и маркировки. Настройка ограничений продажи товаров по времени. Торговые весы с передачей веса в программу по протоколам Мера, Штрих Pos2, CAS AP/AD/CS/ER/ER Jr, ATOL. Возможность использовать одни торговые весы на несколько рабочих мест без сетевого интерфейса. Возможность проводить ревизию товара в магазине непосредственно на рабочем месте кассира. Загрузка весов с печатью этикеток Штрих-М. Работа с клавиатурными и COM сканерами штрихкодов одномерными и двумерными, включая возможности для маркировки. Поддержка дисплеев покупателей. Работа с дисконтными картами и бонусными системами, включая взаимодействие с сервисами контроля по SMS. Работа с банковскими терминалами Сбербанк, ВТБ, Газпром. Поддержка смешенного вида оплаты: наличными, банковской картой, подарочными сертификатами, бонусными балами, зачет внесенного аванса, запись в долг. Идентификация кассира по фамилии имени отчеству с паролем или по штрихкоду. Подробный отчет по продажам с информацией о товарах в пробитых чеках, информация о кассире, который продавал товар, рабочем месте, времени пробития. Возможность отслеживания сбойных чеков на ККМ. Отчет по остаткам товара. Работа с оформлением доставки товара с указанием адреса и времени доставки, реквизитов курьера и покупателя. Возможность видеть остатки товаров других магазинов из розничной сети. Работа с аналогами. Работа с отложенными чеками. Бля баров предусмотрена возможность указания столиков и работа с отложенными заказами. Возможность оформления документов оптовой торговли, выписка счета, документа реализации. Встроенная система предоплаты с внесением денежных средств авансом. Предусмотрена печать этикеток во время продажи для баров. Печать информационных чеков на принтер кухни для общепита. Работа с возвратами товаров, на основании или без основания, из текущей смены или из предыдущей. Результат торговли выгружается в товароучётные программы 1С в виде отчета о розничных продажах.


Логотип 1С Обработки

Обработка заполнения документов "Акт списания ЕГАИС" и "Передача в регистр №2 ЕГАИС" на основании документа "Остатки ЕГАИС" в 1С:Розница 2.2

Обработка позволяет заполнить табличную часть документов "Акт списания ЕГАИС" и "Передача в регистр №2 ЕГАИС" на основании табличной части "Остатки по данным ЕГАИС" из документа "Остатки ЕГАИС" в 1С:Розница 2.2. Из документа "Акт списания ЕГАИС" или "Передача в регистр №2 ЕГАИС". Номенклатура и Характеристика в табличную часть документов подставляются на основании Алкогольной продукции и Справки 2 из соответствия номенклатуры ЕГАИС. Цены в документе "Акт списания ЕГАИС" берутся из себестоимости. Если себестоимость отсутствует, по умолчанию подставляется 100 руб. Тестировалось на релизах 2.2.11.30, 2.2.12.30, 2.2.13.8.


Логотип 1С Отчёты

Анализ остатков и продаж, План закупок на основании остатков и продаж для 1С:Розница 2.3 и 1С:Управление торговлей 11.4

Отчет "Анализ остатков и продаж" позволяет в одном отчете видеть одновременно текущую цену, остатки товаров и сумму остатков в выбранном типе цен на конечную дату, а также среднюю цену по которой был продан товар, количество и сумму продажи товаров за период. Отчет "План закупок на основании остатков и продаж" позволяет сформировать остатки и продажи за период и на основании этих данных с учетом расчета количества месяцев на перед рассчитать потребность в товаре и вычислить план необходимой закупки.

Отчет содержит в себе два отчета "Анализ остатков и продаж" и "План закупок на основании остатков и продаж". Отчет "Анализ остатков и продаж" позволяет в одном отчете видеть одновременно текущую цену, остатки товаров и сумму остатков в выбранном типе цен на конечную дату, а также среднюю цену по которой был продан товар, количество и сумму продажи товаров за период. Отчет "План закупок на основании остатков и продаж" позволяет сформировать остатки и продажи за период и на основании этих данных с учетом расчета количества месяцев на перед рассчитать потребность в товаре и вычислить план необходимой закупки. В обоих отчетах есть колонка со штрихкодами. Количество месяцев задается параметром "Расчет". Если нужно рассчитывать в днях, то в запросе нужно поменять РАЗНОСТЬДАТ(&НачалоПериодаОбороты, &КонецПериодаОбороты, МЕСЯЦ) на РАЗНОСТЬДАТ(&НачалоПериодаОбороты, &КонецПериодаОбороты, ДЕНЬ). Для 1С:Управление торговлей есть третий отчет "План закупок на основании остатков и продаж по месяцам" имеющий 3 колонки продажи за последние 3 месяца от текущей даты. Данные отчеты позволяют анализировать потребности в товаре и план закупки. Тестировалось на релизах: 1С:Розница 2.2.11.30, 2.2.12.30, 2.2.13.8, 2.3.2.28; 1С:Управление торговлей 11.4.7.150.


Логотип 1С Печатные формы

Печатная форма "Доверенность на получение товаров от поставщика" для документа Заказ поставщику в 1С:Розница 2.2

Печатная форма "Доверенность на получение товаров от поставщика" для документа Заказ поставщику в 1С:Розница 2.2. Данная обработка позволяет печатать типовую межотраслевую форму № М-2 и № М-2а доверенности на получение товаров от поставщика из документа Заказ поставщику в 1С:Розница 2.2. Должность лица получающего доверенность оформляется дополнительным сведением "Должность" для справочника Физические лица, которое добавляется автоматически сразу при добавлении обработки. Документ основание получения материальных ценностей заполняется из комментария документа Заказ поставщику. Срок действия доверенности устанавливается статически в реквизите СрокДействияДоверенности данной обработки и по умолчанию равен 10. Тестирование производилось на 1С:Розница 2.2.11.29.


Логотип Firebird Методы Firebird

Работа с XML и JSON на языке хранимых процедур Firebird (PSQL)

Пакет функций (200 шт), написанных на языке хранимых процедур Firebird, позволяет работать с XML и JSON в триггерах, хранимых процедурах и функциях как с полями типа Строка или BLOB. Позволяет получать XML и JSON в запросах SQL. Позволяет получать результат запроса SQL обращаясь к данным XML и JSON. Поддерживает работу Firebird 3.0, UDF не используются.

:"FKS_Notation" принимает значения 1 - XML, 2 - JSON.

:"Block" параметр Строка или BLOB с содержанием XML или JSON.

Генератор XML и JSON

"NotationPropertyObjectListBegin"(:"FKS_Notation", 'ActList', (select count(*) as "Count" from "Act"), null, null, 'Act', 'Акты проделанных работ')
	|| coalesce((
		select
			list("NotationObjectBegin"(null, 'Act')
				|| "NotationPropertyDigit"('PK_Act', "Act"."PK_Act")
				|| "NotationPropertyGUIDExternal"('EK_Act', "Act"."EK_Act")
				|| "NotationPropertyDigit"('CD_Act', "Act"."CD_Act")
				|| "NotationPropertyDigit"('Year', "Act"."Year")
				|| "NotationPropertyDigit"('FKS_Month', "Act"."FKS_Month")
				|| "NotationPropertyGUIDExternal"('EK_User', "User"."EK_User")
				|| "NotationPropertyGUIDExternal"('EK_Partner', "Partner"."EK_Partner")
			--
				|| "UnloadActPosition"(:"FKS_Notation", "Act"."PK_Act")
			|| "NotationObjectEnd"(), '')
		from
			(
				select
					"Act"."PK_Act" as "PK_Act",
					"Act"."EK_Act" as "EK_Act",
					"Act"."CD_Act" as "CD_Act",
					"Act"."Year" as "Year",
					"Act"."FKS_Month" as "FKS_Month",
					"Act"."FKS_User" as "FKS_User",
					"Act"."FK_Partner" as "FK_Partner"
				from
					"Act"
				order by "Act"."PK_Act"
			) as "Act"
			join "User"
				on "User"."PKS_User" = "Act"."FKS_User"
			join "Partner"
				on "Partner"."PK_Partner" = "Act"."FK_Partner"
	), '')
|| "NotationObjectListEnd"()
						

Результат запроса XML

<!-- Акты проделанных работ -->
<ActList IsList="true" Count="2">
	<Act PK_Act="2" EK_Act="2E36B61515AF492E95090B3B7AEE5BFC" CD_Act="" Year="2020" FKS_Month="4" EK_User="00000000000000000000000000000001" EK_Partner="B697EB01CBBC4D9CAF1E775DD6A44345">
		<!-- Позиция в акте проделанных работ -->
		<ActPositionList IsList="true" Count="0" />
	</Act>
	<Act PK_Act="3" EK_Act="80D99482B5A84660BE22851E11EEFDD7" CD_Act="" Year="2020" FKS_Month="3" EK_User="00000000000000000000000000000001" EK_Partner="B697EB01CBBC4D9CAF1E775DD6A44345">
		<!-- Позиция в акте проделанных работ -->
		<ActPositionList IsList="true" Count="0" />
	</Act>
</ActList>
						

Результат запроса JSON

"ActList": {
	"Count": 2,
	"Act": 
	[
		{
			"PK_Act": 2,
			"EK_Act": "2E36B61515AF492E95090B3B7AEE5BFC",
			"CD_Act": null,
			"Year": 2020,
			"FKS_Month": 4,
			"EK_User": "00000000000000000000000000000001",
			"EK_Partner": "B697EB01CBBC4D9CAF1E775DD6A44345",
			"ActPositionList": 
			{
				"Count": 0,
				"ActPosition": 
				[
				]
			}
		},
		{
			"PK_Act": 3,
			"EK_Act": "80D99482B5A84660BE22851E11EEFDD7",
			"CD_Act": null,
			"Year": 2020,
			"FKS_Month": 3,
			"EK_User": "00000000000000000000000000000001",
			"EK_Partner": "B697EB01CBBC4D9CAF1E775DD6A44345",
			"ActPositionList": 
			{
				"Count": 0,
				"ActPosition": 
				[
				]
			}
		}
	]
}
						
Стоимость установки 10 000 ₽

Парсер XML и JSON

for
	select
		"NotationReadObjectList"."PK_TreeObject" as "PK_TreeObject",
		"NotationReadObjectList"."SQLUpdateOrInsert" as "SQLUpdateOrInsert",

		"NotationGetPropertyDigit"(:"FKS_Notation", "NotationReadObjectList"."PK_TreeObject", 'PK_Act') as "PK_Act",
		"NotationGetPropertyGUIDExternal"(:"FKS_Notation", "NotationReadObjectList"."PK_TreeObject", 'EK_Act') as "EK_Act",
		"NotationGetPropertyDigit"(:"FKS_Notation", "NotationReadObjectList"."PK_TreeObject", 'CD_Act') as "CD_Act",
		"NotationGetPropertyDigit"(:"FKS_Notation", "NotationReadObjectList"."PK_TreeObject", 'Year') as "Year",
		"NotationGetPropertyDigit"(:"FKS_Notation", "NotationReadObjectList"."PK_TreeObject", 'FKS_Month') as "FKS_Month",
		"NotationGet_User"(:"FKS_Notation", "NotationReadObjectList"."PK_TreeObject", 'EK_User') as "FKS_User",
		"NotationGet_Partner"(:"FKS_Notation", "NotationReadObjectList"."PK_TreeObject", 'EK_Partner') as "FK_Partner"
	from
		"NotationReadObjectList"(:"FKS_Notation", :"Block", :"FK_TreeObject", 'update or insert', iif(:"List", 'ActList', null), 'Act', false,
			'PK_Act;EK_Act;CD_Act;Year;FKS_Month;FKS_User=EK_User;FK_Partner=EK_Partner',
			null,
			'EK_Act',
			'PK_Act',
			null
		)
	into
		"PK_TreeObject",
		"SQLUpdateOrInsert",

		"PK_Act",
		"EK_Act",
		"CD_Act",
		"Year",
		"FKS_Month",
		"FKS_User",
		"FK_Partner"
do
	execute statement ("SQLUpdateOrInsert") (
		P_PK_Act := :"PK_Act",
		P_EK_Act := :"EK_Act",
		P_CD_Act := :"CD_Act",
		P_Year := :"Year",
		P_FKS_Month := :"FKS_Month",
		P_FKS_User := :"FKS_User",
		P_FK_Partner := :"FK_Partner"
	);
						
Стоимость установки 20 000 ₽

Логотип Firebird Функции Firebird

Функция переводит десятеричное число в строковое представление числа кодируемое в формате "Code"

Length - длинна строки результата. Обратная функция "BaseToInt".

create or alter function "IntToBase" (
    "Number" "NumberLarge",
    "Code" "Name",
    "Length" "NumberSmall" = null)
returns "Name"
as
declare variable "Base" "Name" = '';
declare variable "CodeLength" "NumberSmall";
begin
    if ("Number" is not null) then
      begin
        "CodeLength" = char_length("Code");
        if ("Number" = 0) then
            "Base" = substring("Code" from 1 for 1);
        else
            while ("Number" > 0) do
              begin
                "Base" = substring("Code" from mod("Number", "CodeLength")+1 for 1) || "Base";
                "Number" = "Number"/"CodeLength";
              end
        if ("Length" is not null and "Length" > 0 and "Length" > char_length("Base")) then
            "Base" = lpad("Base", "Length", substring("Code" from 1 for 1));
        return "Base";
      end
    else
        return null;
end
					

Функция переводит строковое представление числа кодируемое в формате "Code" в десятеричное число

Обратная функция "IntToBase".

create or alter function "BaseToInt" (
    "Base" "Name",
    "Code" "Name")
returns "NumberLarge"
as
declare variable "Length" "NumberSmall";
declare variable "Index" "NumberSmall" = 0;
declare variable "Pos" "NumberSmall";
declare variable "Number" "NumberLarge" = 0;
declare variable "CodeLength" "NumberSmall";
begin
    if ("Base" is not null) then
      begin
        "Length" = char_length("Base");
        "CodeLength" = char_length("Code");
        while ("Index" < "Length") do
          begin
            "Pos" = position(substring("Base" from "Length"-"Index" for 1), "Code");
            if ("Pos" = 0) then
                exception "Decode"("Base");
            "Number" = "Number"+power("CodeLength", "Index")*("Pos"-1);
            "Index" = "Index"+1;
          end
        return "Number";
      end
    else
        return null;
end
					

Функция переводит десятеричное число в строковое представление двоичного числа

Length - длинна строки результата. Обратная функция "BinToInt".

create or alter function "IntToBin" (
    "Number" "NumberSmall",
    "Length" "NumberSmall" = 8)
returns "Name"
as
begin
    return "IntToBase"("Number", '01', "Length");
end
					

Функция переводит строковое представление двоичного числа в десятеричное число

Обратная функция "IntToBin".

create or alter function "BinToInt" (
    "Bin" "Byte")
returns "NumberSmall"
as
begin
    return "BaseToInt"("Bin", '01');
end
					

Функция переводит десятеричное число в строковое представление шестнадцатеричного числа

"Length" - длинна строки результата. Обратная функция "HexToInt".

create or alter function "IntToHex" (
    "Number" "NumberLarge",
    "Length" "NumberSmall" = null)
returns "Name"
as
begin
    return "IntToBase"("Number", '0123456789ABCDEF', "Length");
end
					

Функция переводит строковое представление шестнадцатеричного числа в десятеричное число

Обратная функция "IntToHex".

create or alter function "HexToInt" (
    "Hex" "Name")
returns "NumberLarge"
as
begin
    return "BaseToInt"("Hex", '0123456789ABCDEF');
end