Keyword patcher for highlight.js — restores
hljs-keyword, hljs-literal and hljs-meta on BSL
tokens the official 1c grammar misses.
· GitHub
· npm
· README RU
· androman.pro
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ОстаткиИОбороты.Номенклатура КАК Номенклатура,
| ОстаткиИОбороты.Номенклатура.Наименование КАК НоменклатураНаименование,
| ОстаткиИОбороты.КоличествоКонечныйОстаток КАК Остаток
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(
| &НачалоПериода, &КонецПериода, Авто, Движения,
| Склад = &Склад) КАК ОстаткиИОбороты
|ГДЕ
| ОстаткиИОбороты.КоличествоКонечныйОстаток <> 0";
Запрос.УстановитьПараметр("НачалоПериода", НачалоДня(ТекущаяДата()));
Запрос.УстановитьПараметр("КонецПериода", КонецДня(ТекущаяДата()));
Запрос.УстановитьПараметр("Склад", Склад);
Результат = Запрос.Выполнить();
Если НЕ Результат.Пустой() Тогда
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
ОбщегоНазначения.СообщитьПользователю(СтрШаблон(
"%1, остаток: %2",
Выборка.НоменклатураНаименование,
Формат(Выборка.Остаток, "ЧДЦ=3")));
КонецЦикла;
КонецЕсли;
&НаСервере
Процедура ЗаписатьДанныеНаСервере(Объект, Отказ)
Попытка
НаборЗаписей = РегистрыНакопления.ТоварыНаСкладах.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(Объект.Ссылка);
Для Каждого СтрокаТЧ Из Объект.Товары Цикл
Движение = НаборЗаписей.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Номенклатура = СтрокаТЧ.Номенклатура;
Движение.Количество = СтрокаТЧ.Количество;
КонецЦикла;
НаборЗаписей.Записать();
Исключение
ОбщегоНазначения.СообщитьПользователю(
ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()),
,,,, Отказ);
КонецПопытки;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучитьОстаток(Номенклатура, Склад) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЕСТЬNULL(Остатки.КоличествоОстаток, 0) КАК КоличествоОстаток
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки(
| , Номенклатура = &Номенклатура И Склад = &Склад) КАК Остатки";
Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
Запрос.УстановитьПараметр("Склад", Склад);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Возврат Выборка.КоличествоОстаток;
КонецЕсли;
Возврат 0;
КонецФункции
Перем ЗначениеПоУмолчанию;
Если НЕ ЗначениеЗаполнено(ЗначениеПоУмолчанию) Тогда
ЗначениеПоУмолчанию = Истина;
КонецЕсли;
// NULL в запросах — безопасное сравнение через ЕСТЬNULL()
Если Выборка.Остаток = NULL Тогда
ОбщегоНазначения.СообщитьПользователю(НСтр("ru = 'нет данных'"));
КонецЕсли;
Процедура, КонецПроцедуры,
Функция, КонецФункции, Знач — no coloring.
&НаСервере, &НаКлиентеНаСервере — plain text.
Истина, Неопределено — no literal class.
Query = New Query;
Query.Text =
"SELECT
| StockBalance.Product AS Product,
| StockBalance.Product.Description AS ProductDescription,
| StockBalance.QuantityBalance AS Balance
|FROM
| AccumulationRegister.StockInWarehouses.Balance(
| &StartDate, &EndDate,
| Warehouse = &Warehouse) AS StockBalance
|WHERE
| StockBalance.QuantityBalance <> 0";
Query.SetParameter("StartDate", BegOfDay(CurrentDate()));
Query.SetParameter("EndDate", EndOfDay(CurrentDate()));
Query.SetParameter("Warehouse", Warehouse);
Result = Query.Execute();
If NOT Result.IsEmpty() Then
Selection = Result.Choose();
While Selection.Next() Do
Common.MessageToUser(StrTemplate(
"%1, balance: %2",
Selection.ProductDescription,
Format(Selection.Balance, "NFD=3")));
EndDo;
EndIf;
&AtServer
Procedure WriteDataAtServer(Object, Reject)
Try
RecordSet = AccumulationRegisters.StockInWarehouses.CreateRecordSet();
RecordSet.Filter.Recorder.Set(Object.Ref);
For Each LineItem In Object.Goods Do
Movement = RecordSet.Add();
Movement.MovementType = AccumulationRecordType.Expense;
Movement.Product = LineItem.Product;
Movement.Quantity = LineItem.Quantity;
EndDo;
RecordSet.Write();
Except
Common.MessageToUser(
ErrorProcessing.DetailErrorDescription(ErrorInfo()),
,,,, Reject);
EndTry;
EndProcedure
&AtServerNoContext
Function GetBalance(Product, Warehouse) Export
Query = New Query;
Query.Text =
"SELECT
| ISNULL(Balance.QuantityBalance, 0) AS QuantityBalance
|FROM
| AccumulationRegister.StockInWarehouses.Balance(
| , Product = &Product AND Warehouse = &Warehouse) AS Balance";
Query.SetParameter("Product", Product);
Query.SetParameter("Warehouse", Warehouse);
Selection = Query.Execute().Choose();
If Selection.Next() Then
Return Selection.QuantityBalance;
EndIf;
Return 0;
EndFunction
Var DefaultValue;
If NOT ValueIsFilled(DefaultValue) Then
DefaultValue = True;
EndIf;
// NULL in queries — safe comparison via ISNULL()
If Selection.Balance = Null Then
Common.MessageToUser(NStr("en = 'no data'"));
EndIf;
1c grammar is
Russian-only. Without this patch, English BSL code gets zero syntax coloring —
keywords, literals, annotations all render as plain text.