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


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