Контроль: Разработки

Разработки

Мы занимаемся разработками на следующих языках 1С, Embarcadero C++Builder, Firebird. Есть много наработок на 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