0. ivanov660 1626 04.07.19 17:12 Сейчас в теме

По следам код-ревью

Приведу примеры с картинками и небольшим пояснением по вопросам, связанным с код-ревью (обзором кода).

Перейти к публикации

Комментарии
Избранное Подписка Сортировка: Древо
71. AntonSm 25 11.07.19 11:15 Сейчас в теме
(68) БСП сейчас (по заявлению руководителя евойной разработки) тестами покрыта чуть менее, чем полностью.
БСП крутая стала.

Хорошо бы пример вот такого:

(68)
Иногда может сломаться что-то, что сломаться в принципе не должно бы было.
73. starik-2005 1961 11.07.19 11:26 Сейчас в теме
(71)
Хорошо бы пример вот такого:
Ну, например, не так давно функция создания временного каталога перекочевала в другой модуль, в итоге все ништяки, которые с этим работали, внезапно перестали. Или в функциях управления файлами внезапно добавились параметры (а кое-где внезапно пропали). И пропали не из конца, и добавились не в конец. Было за весь период эксплуатации БСП несколько реальных подстав. С другой стороны, лично я БСП использую, мирясь с тем, что иногда придется проходить по всем функциям, чтобы восстановить их работоспособность. Ну и копировать из БСП в модуль обработки - тоже не самое лучшее решение, иногда лучше переписать так, чтобы этого было не нужно (то же создание временного каталога дергает штук пять функций из других модулей для поддержания совместимости между ОС).
100. Vladimir Litvinenko 1791 17.07.19 23:06 Сейчас в теме
«ЗаполнитьЗначенияСвойств» - это самый оптимальный вариант заполнения данных

За простоту метода ЗаполнитьЗначенияСвойств приходится платить повышением рисков и усложнением рефакторинга. Просто так реквизит или поле структуры уже не переименовать, обязательно надо пройтись и вручную просмотреть все свойства всех заполняемых объектов-корреспондентов. Да и при использовании с выборками из результатов запросов надежность алгоритма резко падает, при всей внимательности... Никаких подсказок от платформы получить не удастся.

При этом ошибка во многих случаях не будет обнаружена даже в процессе исполнения кода, но последствия могут оказаться непредсказуемыми. Например "Партнер" превратился в "Клиент" и поле не заполнилось, документ провелся с неправильным ключем аналитики, разъехались взаиморасчеты, а обнаружится это где-то в конце месяца, если проверки учета вовремя делаются. Даже обход коллекции свойств и обращение к ним через [....] дают большую надежность алгоритма. Ошибка хотя бы будет выявлена при исполнении кода.

Конечно таких моментов много при разработке в 1С, но там где это возможно, хотелось бы такого избегать.
101. Rustig 1195 29.07.19 08:36 Сейчас в теме
3. Используем «запросную модель», а не «объектную модель».


Как сравнивать введенное значение в поле: что было и что стало? Цель - узнать, был ли изменен реквизит документа.
Например:
Если Контрагент<>Ссылка.Контрагента Тогда ....

Как в таких ситуациях использовать запросную модель? Или есть другой способ?
102. ivanov660 1626 29.07.19 09:15 Сейчас в теме
(101)
1. А кто мешает сделать вот так:
выбрать * из Справочник.Контрагенты
, а потом перебрать (к примеру, сравнив со структурой или объектом перед записью)?
или используя метаданные сразу построить запрос с верным набором полей.
2. Хотя обычно должен быть список отслеживаемых полей. Единственное что приходит в голову сходу - это применение данного запроса по результатам обмена, чтобы понять а были ли изменения) Данный алгоритм мы применяли и довольно успешно.
103. Rustig 1195 29.07.19 09:24 Сейчас в теме
(102)
Часто использую такой подход в документах:
Процедура ПриИзмененииКонтаргента()
Если Контрагент<>Ссылка.Контрагент Тогда
ДоговорКонтрагента = Неопределено;
КонецЕсли......

не понял ваших рекомендаций :)
104. ivanov660 1626 29.07.19 10:59 Сейчас в теме
(103)
1. Я привел относительно абстрактный пример, как сравнить все поля объекта. Это можно применить в процедуре, к примеру, "перед записью" или "при записи" модуля объекта.
а) По ссылке вы получаете данные объекта хранящиеся в базе
б) У вас есть текущее измененное состояние объекта (сам объект)
с) Зная состояние в базе и текущее вы легко можете получить расхождения в обычном цикле сравнив каждый реквизит на равенство.

2. В вашем случае думаю можно использовать процедуру общего назначения (я приводил где-то выше по тексту): ОбщегоНазначенияУТВызовСервера.ЗначениеРеквизитаОбъекта(Ссылка,ИмяРеквизита)
т.е.

Если Контрагент<>ОбщегоНазначенияУТВызовСервера.ЗначениеРеквизитаОбъекта(Ссылка,"Контрагент") Тогда


3. Можно воспользоваться чем-то вроде типового функционала из БСП "ЗначенияДоИзменения": ОбщегоНазначенияУТКлиентСервер.ПолучитьЗначениеДоИзменения (почитайте справку в модуле)
107. Hans 1 02.10.19 15:12 Сейчас в теме
А что за вэбинары? Где они?
108. ivanov660 1626 02.10.19 17:39 Сейчас в теме
(107)Вебинары проходят внутри нашей команды.
Если будет время опубликую статью по некоторым из вебинаров, посмотрим как зайдет.
109. Hans 1 02.10.19 17:45 Сейчас в теме
(108) А почему не выложить сам вебинар?
110. ivanov660 1626 02.10.19 18:24 Сейчас в теме
(109)Потому что он внутренний и на нем поднимаются и рассматриваются вопросы не для всех.
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Программист, аналитик, эксперт 1С
Санкт-Петербург
По совместительству

Бизнес-аналитик 1С
Санкт-Петербург
зарплата от 100 000 руб.
Полный день

Программист 1С
Нижний Новгород
зарплата от 80 000 руб. до 130 000 руб.
Полный день

Программист 1С
Москва
зарплата от 150 000 руб. до 180 000 руб.
Полный день

Программист 1С
Москва
зарплата до 160 000 руб.
Полный день