Кузнецов Николай

1914
Рейтинг

kuzyara
Николай Кузнецов



  •   Регистрация: 30.11.2012 (11 лет назад)

  •   Был(а) на сайте: 25.04.2024

Друзья
  • Станислав Ганиев
  • Il'ya Mankov
  • Виталий Подымников
  • Михаил Филимонов
  • Emlen Ra
  • Дмитрий Котов
  • Евгений Комиссаров
  • Nik P
  • Вадим Фоминых
  • Фурцев Дмитрий
  • Сергей Новиков
  • Михаил П
  • Валентин Катаев
  • Алексей Кирин
  • Василина Соболева
  • Сергей Созинов
Подписчики 95

Группы

Профессиональный разработчик

Участник Meetup

IE2023 Участник

Рейтинг 1914

Правила работы с транзакциями 1С

Статья Программист Платформа 1С v8.3 Конфигурации 1cv8 Россия Бесплатно (free) Нет файла Рефакторинг и качество кода Механизмы платформы 1С

Список правил при работе с транзакциями из BSL Language Server и SonarQube 1C (BSL) Plugin. Переработка и осмысление материала.

01.12.2022    14176    kuzyara    48       

95

Последовательность выполнения расширений

Статья Программист Бесплатно (free) Нет файла Механизмы платформы 1С

Вынес в отдельную статью порядок применения нескольких расширений для одного метода

23.06.2022    9752    kuzyara    11       

73

[8.2] Консоль запросов Чистова (обновленная)

Инструменты и обработки Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m) Внешняя обработка (ert,epf) Инструментарий разработчика

Понадобилась консоль запросов под ОФ, одной из самых простых оказалась консоль Чистова. По старой традиции решил обновить консоль, добавив пару необходимых фич, чтобы было ещё удобнее пользоваться - как в ИР.

1 стартмани

24.03.2022    3124    9    kuzyara    2       

9

Свойства общих модулей

Инструменты и обработки Программист Платформа 1С v8.3 Управляемые формы Система компоновки данных Конфигурации 1cv8 Абонемент ($m) Внешний отчет (ert,erf) Инструментарий разработчика

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

1 стартмани

14.04.2021    7082    4    kuzyara    6       

5

Комментарии

ПубликацииПримеры настроек технологического журнала#0 27.04.24 8:30
Шпаргалка по настройке технологического журнала.
ОбменВыгрузка результата запроса (таблицы значений) в JSON#2 03.04.24 13:39
пример сериализации ТЗ в json с помощью XDTO
Цитата
{
"#type": "jv8:ValueTable",
"#value": {
"column": [
{
"Name": {
"#type": "jxs:string",
"#value": "Ссылка"
},
"ValueType": {
"Type": [
"{http://v8.1c.ru/8.1/data/enterprise/current-config}CatalogRef.Номенклатура",
"{http://v8.1c.ru/8.1/data/core}Null"
]
},
...
Реализация:
Код
&НаКлиенте
Процедура ВыгрузитьДанные(Команда)
   
   ФайлВыгрузки = ВыгрузитьДанныеНаСервере();
   
   Каталог = КаталогВременныхФайлов();
   
   ДвоичныеДанные = ПолучитьИзВременногоХранилища(ФайлВыгрузки.Адрес);
   ПутьФайла = Каталог + ФайлВыгрузки.ИмяФайла;
   
   ДвоичныеДанные.Записать(ПутьФайла);

КонецПроцедуры

&НаСервере
Функция ВыгрузитьДанныеНаСервере()

   ФайлВыгрузки = Новый Структура("ИмяФайла, Адрес");
   
   Запрос = Новый Запрос;
   Запрос.Текст = "Выбрать ПЕРВЫЕ 1 * Из Справочник.Номенклатура";
   Таблица = Запрос.Выполнить().Выгрузить();


   ЗаписьJSON = Новый ЗаписьJSON;
   ЗаписьJSON.УстановитьСтроку();
   СериализаторXDTO.ЗаписатьJSON(ЗаписьJSON, Таблица, НазначениеТипаXML.Явное);
   СтрокаJSON = ЗаписьJSON.Закрыть();
   
   ДанныеТаблицы = ПолучитьДвоичныеДанныеИзСтроки(СтрокаJSON);
   
   ФайлВыгрузки.Адрес = ПоместитьВоВременноеХранилище(ДанныеТаблицы, Новый УникальныйИдентификатор);
   ФайлВыгрузки.ИмяФайла = "Номенклатура.json";
   
   Возврат   ФайлВыгрузки;
   
КонецФункции
чтение:
Код
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(ТекстJSON); // или ОткрытьФайл()
ТаблицаЗначений = СериализаторXDTO.ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();

Прикрепленные файлы:

Номенклатура.json
ВнешняяОбработка_ТестЗаписиТаблицыВJson.epf
DevПолезные хоткеи конфигуратора#51 01.04.24 16:27
(50)
а в 8.3.22.2501 работает?

от 04.03.24 релиз который
ОбменПоинтегрируем: сервисы интеграции – новый стандарт или просто коннектор?#2 11.03.24 11:28
Кто тестировал под нагрузкой, скажите сколько сообщений в секунду переваривает?
ПубликацииПрактика применения DevOps. Работа с SonarQube#26 06.03.24 10:57
(25) настройка есть такая в сонаре, в профиле пользователя Notifications -> My new issues
и все замечания оперативно присылаются на почту

https://youtu.be/NG7MLpFmqvs?t=959

Прикрепленные файлы:

2024-03-06_10-55-41.png
ПубликацииПопытка не пытка#24 05.03.24 15:11
(23) здесь имеется ввиду "как транзакция", приводится аналогия то есть. И далее объясняется в чем схожесть.
ПубликацииПопытка не пытка#22 05.03.24 13:50
Использование попыток в коде (копипаста с одного форума)

Ответ1: Попытка - это транзакция, использование ее в других транзакция может привести к не всегда очевидным последствиям отмены транзакции-родителя. Использование оператора Попытка оправдано лишь в случае когда нет другого способа проверки корректности исполняемого кода. К примеру удаление файла с диска, есть файл или нет мы гарантировать системе не можем. (Для особо дотошных: после проверки на то что файл физически существует и до строки с удалением этого файла он может быть удален другим процессом).

Ответ2: Меня с детства учили, что и попытка, и метка - одного уровня зло

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

Ответ4: Чем их меньше, тем лучше. Рассматривайте попытку и переход по исключению в блок исключение как неявный GoTo. Если можно обойтись без попытки, нужно обойтись без попытки. Например при преобразовании строки в число можно написать
Попытка Возврат Число(стрЧисло); Исключение КонецПопытки; и ловить исключение каждый раз при возведенном флажке "Останавливаться на ошибке" или можно написать сложнее:
Возврат ТолькоЦифрыВСтроке() или Еще есть такой вариант ОписаниеТипа = Новый ОписаниеТипов(“Число”); Текчисло = ОписаниеТипа.ПривестиЗначение(ТекстовоеПоле);
но код не будет генерить ненужных исключений

Ответ5: любая ошибка бд внутри транзакции рвет эту транзакцию, поэтому внутри транзакции можно не пытаться ловить ошибки, если не предусмотрен полный выход из транзакции
Если есть подозрения, что код может работать некорректно, то нужно сделать все, чтобы устранить эту неопределенность, а не совать его в попытку, чтоб разбирались другие программисты. За код типа
Попытка СделатьЧтото(); Исключение КонецПопытки;
будут отстреливаться лишние органы. В блоке исключение ВСЕГДА должен быть код по отработке, иначе потом нереально найти что рвет транзакцию

Ответ6: Использовать попытку нужно
- для проверки входных параметров в код, которые мы не можем проверить еще выше. Это актуально для методов-баррикад (Совершенный код, 198 страница)
- для вызова методов, предугадать результат которых мы не можем, например вызов кода внешней обработки, которая будет независимо обновляться (те же баррикады)
-для вызова методов, которые сами генерят исключения, например подключение компоненты

От себя: не пытайтесь построить логику кода на условных переходах вида Попытка Если НЕ <проверка> Тогда ВызватьИсключение ... - это излишне запутывает и усложняет чтение кода другими программистами.
Вместо этого лучше провести предварительный рефакторинг, используя приёмы:
- Replace Nested Conditional with Guard Clauses, известный так же как ранний возврат из функции - расположив финальную операцию в самом конце
- Remove Logic for Controlling the Iteration, или "Вынос контролирующей логики из цикла" - отфильтровывая ненужные элементы коллекции (в запросе или в функции) _перед_ циклом заранее
- Extract into a function, так же известный как "Извлечение метода" - извлекая условный код в методы с говорящими именами

А почему заявление
Цитата
«Попытка - Исключение» не оказывает хоть сколь-нибудь заметного влияния на скорость выполнения
не соответствует действительности - уже ответили в (3)
UtilsКонсоль запросов 8.3 @AlexxSys#113 04.03.24 7:48
прошу доработать консоль в части запрета использования модальности в веб-клиенте
Код
&НаКлиенте

Процедура СписокПараметровЗначениеПараметраНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

//СтандартнаяОбработка = Ложь;

Если Элементы.СписокПараметров.ТекущиеДанные.ЗначениеПараметра = Неопределено Тогда

 ФормаВыбораТипа = ПолучитьФорму(ПутьКФормам + "ФормаВыбораТипа", , ЭтаФорма);

 //Результат = ФормаВыбораТипа.ОткрытьМодально(); // заменил модальный вызов оповещением, а в форме выбора типа по кнопке Ок вместо Закрыть(Результат) стало ОпоповеститьОВыборе(Результат)

 ФормаВыбораТипа.Открыть();

 //Если Результат <> Неопределено Тогда

 // МассивТиповДляОписания = Новый Массив;

 // МассивТиповДляОписания.Добавить(Результат);

 // РезультатОписаниеТипа = Новый ОписаниеТипов(МассивТиповДляОписания);

 // Элементы.СписокПараметров.ТекущиеДанные.ЗначениеПараметра = РезультатОписаниеТипа.ПривестиЗначение(Элементы.СписокПараметров.ТекущиеДанные.ЗначениеПараметра);

 // Элементы.СписокПараметров.ТекущиеДанные.ТипЗначенияПараметра = "Тип: " + Результат;  

 //Иначе

 // Возврат;

 //КонецЕсли;

КонецЕсли;

КонецПроцедуры


&НаКлиенте

Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)

Если ТипЗнч(ИсточникВыбора) = Тип("ФормаКлиентскогоПриложения") И ИсточникВыбора.Заголовок = "Выбор типа" Тогда

 Результат = ВыбранноеЗначение;

 Если Результат <> Неопределено Тогда

  МассивТиповДляОписания = Новый Массив;

  МассивТиповДляОписания.Добавить(Результат);

  РезультатОписаниеТипа = Новый ОписаниеТипов(МассивТиповДляОписания);

  Элементы.СписокПараметров.ТекущиеДанные.ЗначениеПараметра = РезультатОписаниеТипа.ПривестиЗначение(Элементы.СписокПараметров.ТекущиеДанные.ЗначениеПараметра);

  Элементы.СписокПараметров.ТекущиеДанные.ТипЗначенияПараметра = "Тип: " + Результат;  

 КонецЕсли;

КонецЕсли;

КонецПроцедуры
DevВсе консоли запросов для 1С#84 04.03.24 6:58
(80) попробуйте МегаКонсоль запросов 8.3 @AlexxSys | //infostart.ru/public/331421/
работает в веб-клиенте в режиме совместимости 8.2

а вообще для 8.2 УФ лучше использовать режим запуска /RunModeOrdinaryApplication, ибо поддержка старых платформ в вебе никому не интересна
https://helpf.pro/faq/view/1735.html