gifts2017

Обновление доработанной Бухгалтерии предприятия. Как проверить и убедиться, что все сделано хорошо?

Опубликовал С К (kraynev-navi) в раздел Программирование - Практика программирования

На тему обновления нетиповых конфигураций написано немало. Но в основном все это касается самого процесса обновления, его технической стороны. Что нажимать, на что не нажимать в том или ином случае. В данной статье хотелось бы обратить внимание на действия, которые требуются для последующего анализа обновленной конфигурации.

В эфире шоу «Утро после обновления». Сегодня мы принимаем звонки от пользователей 1С и узнаём много нового. А именно:

  • Какие формы перестали открываться
  • Какие отчеты не печатаются, а обработки не открываются
  • К каким объектам пользователи потеряли доступ
  • И ГВОЗДЬ ПРОГРАММЫ! Интервью с главным бухгалтером про «очень странные проводки»

Обновились. Что и как можно проверить.

Ошибки, которые появились в конфигурации можно разделить на явные и скрытые. Т.е., если форма какого-то документа не открывается или не открывается под определенной ролью – это явная ошибка. Невозможность открыть отчет или записать документ – тоже явная. А вот неправильное формирование движений по регистру уже скрытая.

С первыми ошибками можно относительно успешно бороться:

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

А вот как бороться со скрытыми ошибками?

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

Если вы покрывали тестами собственные доработки, то запустив их мы сразу увидим проблемы. Хотя, судя по топику многие не делают автоматизированных тестов и проверяют все вручную. Уверен, что при каждом обновлении никто вручную это все не проверяет.

Впрочем, тесты не помогут, когда отличия в движениях вызваны сменой алгоритма проведения нетронутых нами механизмов. Изменилось законодательство, разработчик подправил алгоритм, движения формируются другие. По сути, это нормальное развитие программы. Но неплохо бы предупредить об этом бухгалтера. Возможно, у него есть свое видение этой проблемы. Вдруг в коде не учтены нюансы применения новых положений и сразу требуется исправление нового алгоритма своими силами.

Еще, как вариант, можно ориентироваться на информацию к обновлению 1С. Но это, как показывает практика, лишь малая толика всего что «потрогали» разработчики.

Оборотно-сальдовая ведомость и регистры накопления «до» и «после» обновления

Очевидно, чтобы найти расхождение можно сформировать ОСВ и сравнить цифры обновленной и эталонной базы. Т.е. до и после обновления. Ожидаем, что эти два отчета будут идентичными. Для этой проверки можно использовать следующую методику:

  • На двух тестовых базах (БазаДО, БазаПОСЛЕ) разворачивается один и тот же dt-файл (или SQL бекап)
  • На БазаПОСЛЕ проводим обновление, доводим до состояния «готово к накатыванию на рабочую»
  • Перепроводим последний закрытый квартал в БазаДО и БазаПОСЛЕ (не забываем передвинуть Дату запрета)
  • После операции группового перепроведения количество обработанных документов должно быть одинаковым и ошибок быть не должно. Если ошибки в БазаПОСЛЕ, разбираемся и устраняем их. Опять перепроводим базу и так до просветления.

Почему именно последний закрытый квартал? Потому что все ошибки бухгалтеры уже исправили, цифры выверили, все в памяти свежо. Если в ОСВ после обновления найдено расхождение и определен проблемный документ, то бухгалтер быстрее примет решение. Если брать год, то перепроведение, конечно, охватит максимальное количество существующих в базе случаев, но будет очень долгим, если месяц – часть важных документов останется за бортом, поскольку формируется, например, только в конце квартала.

После перепроведения формируем и сравниваем ОСВ:

  • Формируем ОСВ в обеих базах. Сохраняем как MXL-документ и сравниваем стандартной обработкой Сравнить файлы (Файл ->Сравнить файлы).
  • Если цифры разнятся, углубляемся в детали, формируем карточки проблемных счетов, сохраняем в MXL.
  • Сравниваем карточки счетов и доходим до уровня документов, проведение которых уже можно смотреть в отладчике.
  • Принимаем какие-то решения по коду, консультируемся с бухгалтером.

Рисунок. Различие ОСВ «до» и «после» обновления

Рисунок. Различие карточек счета «до» и «после» обновления

Таким образом, пройдя все счета и выявив все проблемные места, бухгалтерский регистр протестирован.

Аналогичную работу проводим с регистрами накопления:

  • По очереди выгружаем движения за период из обеих баз (через Вывести список) и сохраняем в MXL.
  • Сравниваем через уже рассмотренную Сравнить файлы, в различающихся строках анализируем документы-регистраторы.
  • Исследуем движения, решаем по коду.

После того как все перепроверено, оттестировано, сверено и отшлифовано с БазаПОСЛЕ можно выгрузить результирующий CF-файл. И уже при помощи него (конечно же после штатного обновления через Конфигурация->Поддержка->Обновить конфигурацию) мы завершаем обновление на рабочей базе (Конфигурация->Сравнить, объединить с конфигурацией из файла).

Автоматизация проверки регистров

Вроде все просто, но… Уже после первого проблемного счета руки опускаются. Если расхождения только в одном документе, это находится быстро. Но если таких документов много, то различия обнаруживаются в каждой строчке сразу после первого различия за счет колонки «Текущее сальдо». Приходится удалять эту колонку и снова сравнивать. При этом сравнивать документы с тысячей движений все равно неудобно. В итоге времени потрачено пропасть, а сделано чуть. Как ускорить рутинные операции по проверке ОСВ?

Существуют специализированные продукты, которые как раз и позволяют решать задачу анализа движений. Ниже есть ссылки, если знаете еще какие-то программы – сообщайте, буду дополнять. Сказать что-то хорошее/плохое про них не могу, на момент написания этих строк в моих руках пока их не было. Все что перечислено, платные программы, а, значит, начальство может сказать (нужное подчеркнуть): денег нет/потом/давайте сами/есть задачи поважнее.

В свое время на инфостарте были обнаружены и бесплатные обработки, но они по тем или иным причинам не подошли (в частности, обычные формы). Поэтому мы сделали свою обработку, в которой автоматизировали вышеописанную методику по максимуму:

  • Выгрузка хозрасчетного регистра и регистров накопления. По сути, несколько кликов.
  • Автоматическое сравнение файлов. При этом сравнение оптимизировано: из тысяч движений надо сравнить лишь те, которые отличаются. А таковых может быть всего несколько.
  • Прочие полезности в виде выгрузки результатов запроса или собственного кода.

Более подробно про функционал расписано на странице обработки.

Что это дает?

Можно ли спать спокойно проделав все операции по сверке и исправив найденные ошибки? Совпадение ОСВ и движений по регистрам, конечно, не абсолютная гарантия. Однако, опыт использования этой методики с начала 2016 года и последующая беспроблемная эксплуатация информационной системы вселяют уверенность, что и в будущем после подобных сверок все будет хорошо.

Ссылки

Обновление конфигурации

Другие статьи про тестирование:

Проверки форм, доступность объектов:

Сверка движений, ОСВ

Прочие полезности

  • Рекомендую обратить внимание на ссылки в комментариях.

См. также

Вознаграждение за ответ
Сумма: 1 $m
Добавили:
Валерий К (klinval) (1.00 $m)
Подписаться Добавить вознаграждение
Комментарии
1. Константин Жигалло (zhyhallo) 07.09.16 11:42
Спасибо автору. Хорошая статья. Отлично подобраны ссылки по этой теме.
artbear; klinval; white-mount; +3 Ответить
2. Al Polos75 (polos75) 07.09.16 12:41
Обновить, а потом смотреть, что поменялось - мягко говоря, рискованный метод.

Сначала в копии базы сравниваю конфигурацию базы с конфигурацией поставщика.
При обновлении определяю, какие галочки можно снять, если объект не был исправлен.
Если галочку снять нельзя, то обновляю с замещением, а потом вставляю нужные участки кода из копии, корректируя их при необходимости.
После этого обычно нет странных проводок и неоткрывающихся форм.
3. С К (kraynev-navi) 07.09.16 13:41
(2) Обновление происходит на копии, риска нет. Надо бы добавить абзац, что только потом все изменения на рабочую перетекают после всех проверок. Сделаю чуть позже.
4. Валерий К (klinval) 07.09.16 15:12
(2) polos75, Статья не о том как обновлять нетиповую базу (какие галочки ставить при обновлении, как анализировать код до и после и т.д.), а о способе проверки, что после обновления ничего "не поехало". Причём "поехать" могло не только из-за своих доработок, но и из-за ошибок в типовой конфе.

У нас был случай: обновляли переписанную БП 3.0. Тогда ещё не было этого автоматизированного средства проверки, поэтому перепроводили квартал в базе ДО и ПОСЛЕ и смотрели ОСВ. Оборотка "поехала". Стал выяснять и оказалось, что программист фирмы 1С в условии вида:
Если <Какое-то условие> Тогда А = А*(-1)
Сделал изменение вида:
Если НЕ <Какое-то условие> Тогда А = А*(-1)
Благодаря этому проводки получались обратные (относительно тех которые должны были получится).
В техподдержке проблему признали. Как скоро они исправили я не помню, но мы ошибку фактически "засекли" ещё до внесения в рабочую базу.

Получается как ни документируй свой код, какими тестами его не покрывай: от такого вида ошибок не застрахуешься... Фактически данным методом проверки мы находим не только ошибки связанные с нашими доработками, но и ошибки фирмы 1С в типовой конфигурации. После внесения исправлений (если обнаружены ошибки) в рабочую базу идёт уже код, который в движениях по регистрам даёт такой-же результат как и код до обновления.
Winstoncuk; +1 Ответить
5. Артур Аюханов (artbear) 07.09.16 15:19
Спасибо за статью и за упоминание xUnitFor1C.
Только секрет открытия проверки открытия/закрытия всех форм конфигурации так и остался не раскрытым :)

Посмотрите небольшую статью про эту фичу xUnitFor1C (элемент т.н. "дымовых" тестов)
6. Артур Аюханов (artbear) 07.09.16 15:30
(0) Да, подобную методику вполне успешно юзал в свое время, хотя довольно тяжеловато и долговато :(
В свое время так и не автоматизировал подобный тест :( часть операций делал руками.
7. Валерий К (klinval) 07.09.16 15:52
(6) artbear,
Да, подобную методику вполне успешно юзал в свое время, хотя довольно тяжеловато и долговато :(

То что это долго - согласен. Но благодаря автоматизации уже не "тяжеловато" - нажал кнопку и занимайся своими делами (или вообще на ночь оставь выгружаться/проводится).

Тяжело уже потом дебажить, т.е. выяснять почему движения не идентичные. Но это всё-равно когда-нибудь пришлось бы искать/исправлять. И лучше это сделать до обновления, а не в самый завальный период (в закрытии квартала или года). Плюс особенно "весело", если ошибку обнаруживают когда год закрыт и отчеты все сданы...
8. С К (kraynev-navi) 07.09.16 16:07
(5) Артур, статья-то не про дымовые тесты :) Но сказать надо было.
Очень жду в xUnitFor1C доработку ПослеЗапускаСценария, которую обсуждали в привате.
9. Александр Алехин (jerry_maguire) 07.09.16 16:42
Без ссылки на vanessa-behavior и в целом на продукты семейства vanessa-stack статья не полная.
sashocq; lustin; Pr-Mex; +3 1 Ответить 3
10. Алексей Лустин (lustin) 07.09.16 17:04
(9) jerry_maguire, автор я так понимаю сознательно не использует vanessa stack, используя функционал сценариев xUnit как видно в (8). Но отсутствие упоминания про скажем http://infostart.ru/public/534673/ действительно удручает.
belovo3000; Evil Beaver; jerry_maguire; +3 Ответить 1
11. С К (kraynev-navi) 07.09.16 17:24
Накинулись-то.
(9) Александр, я пока еще даже не "финалист" )) . Изначально обработка писалась без всяких TDD, BDD. Поэтому VB ПОКА не использовал.
(10) То, что не используется vanessa stack, так это от недостатка информации по нему.
Есть несколько видео, есть платный курс, который записал Александр. Статьи очень общие. Направленность их все-таки агитационная, не в практической плоскости.
Описание наработок, которые скопились в библиотеках тоже нету. Можно сидеть-шерстить самостоятельно ибо опен-соурс. Но времени не так много.
И да, жду продолжения по ссылке, которую прислали.
На мой взгляд, в связи с вышеописанным, xUnitFor1C более открыт и прост для понимания и применения. ИМХО. Хотя курс бы тоже не помешал. И видео по змейке скрыли, увы.
(10) Вопрос вам, как разработчикам vanessa, моих знаний не хватает. Как решить вышеописанную задачу средствами vanessa stack?
klinval; bforce; CSiER; artbear; +4 Ответить 4
12. Леонид Паутов (Pr-Mex) 07.09.16 17:35
13. С К (kraynev-navi) 07.09.16 17:36
14. Александр Алехин (jerry_maguire) 07.09.16 17:43
(11) kraynev-navi,

Как решить вышеописанную задачу средствами vanessa stack?


Добро пожаловать в gitter.

На мой взгляд, в связи с вышеописанным, xUnitFor1C более открыт и прост для понимания и применения.


В корне не согласен, могу даже на примере объяснить почему. Команда silverbulleters в gittere активно помогает тем кто использует наши продукты, а если кто-то уже использует и хочет под себя доработать - тут совсем зеленый цвет, и поможем и расскажем, к слову двое участников курса уже сделали pull request и они приняты. А вот с pull request в xUnitFor1C проблема. Я использовал этот инструмент лишь один раз, нашел проблему и сделал pull request. Pull request не принят до сих пор, хоть Артур и счел его интересным. И дело не в том что желание контрибьютить было отбито напрочь, а в том что интересного так и нет в xUnitFor1C.
15. Алексей Лустин (lustin) 07.09.16 17:43
(11) kraynev-navi, я отрефлексировал на указание топика от 2012 года в котором я же и участвовал. Что касается не упоминания Behavior - я понимаю, что вы сознательно используете xUnit и это нормально. Как говорит Женя - слава богу что хоть что-то начали. еще 2 года назад было вот так http://www.forum.mista.ru/topic.php?id=730184&page=1
16. С К (kraynev-navi) 07.09.16 18:15
Вы как-то принимаете все на свой счет, как критику и т.д.. Не надо. Никого не хочу выделить или опустить. Я использую в меру своего понимания и знаний и VB и xUnit , если понимаю как это сделать и какие преимущества мне это сулит.
Исторически сложилось, что изучение начал с xUnit. Коллега его, например, не очень понял.
Очень хорошо, что есть и то и другое и что это все развивается. Вообще, спасибо всем разработчикам, что это в опенсоурс! (респектуха!)
Про задачу, озвученную в статье. Я не вижу как ее решать ни средствами VB, не средствами xUnit. Решал по-старинке.
(15) про рефлексию не понял, если честно.
(9) про гиттер да, оперативно.

p.s. Ссылку на статью размещу в разделе "Другие статьи про тестирование". Там будет справедливо, да.
17. Александр Алехин (jerry_maguire) 07.09.16 18:35
(16) kraynev-navi, конструктивный подход)
18. Евгений Мартыненков (JohnyDeath) 07.09.16 22:32
(14) Саш, ты как-то в штыки все воспринимаешь. Зачем вот так сразу скатываться до взаимоупреков?
Это ж не враждующие продукты, а взаимодополняющие.

По поводу понимания VB vs xUnitFor1C. Согласен с автором, мне, как и ему, пока проще освоить xUnitFor1C, потому как с него начинал. Хотя зачем я их опять сравниваю? )
bforce; kuntashov; artbear; kraynev-navi; +4 Ответить 1
19. Александр Алехин (jerry_maguire) 07.09.16 23:38
(18) JohnyDeath, осознал) если спозиционировался как разработчик, то в комментарии и обсуждения не лезть, это менеджерское дело.
20. Артур Аюханов (artbear) 08.09.16 11:17
ОФФ: (14) Опять какие-то странные наезды и сравнения/противопоставления вкупе с навязчивой рекламой :(
вылечись уже наконец от этого.
21. Леонид Паутов (Pr-Mex) 08.09.16 11:32
(20) artbear, пул реквесты и правда в xUnitFor1C висят по пол года и больше. С этим надо что-то делать.
22. Артур Аюханов (artbear) 08.09.16 11:44
(21) Спасибо за напоминание! Есть такое дело.
Давайте уточним, сколько же зависло?
всего 9 незакрытых пулл-реквестов из 106 (общего количества PR продукта)
Из них 4 свежих (созданы с июня 2016 по текущий момент) и 5 старых (созданы в 2015 году)

А теперь посмотрим на количество принятых пулл-реквестов за это же время (2016 и 2015)
17 PR принято в 2016
И более 20 принято в 2015 (честно говоря, дошел до 20 и дальше не стал считать :) )

Как видно, отличия принятых и непринятых в разы отличается.

Если далее посмотреть на открытые от 2015 года, то увидим, что эти PR предлагают кое-что новое и не очень совместимое с продуктом.
Пока мы не нашли способ встроить указанные PR в продукт.

Пока не вижу слишком большой проблемы в непринятии PR.
Хотя свежие PR (c июня), конечно, нужно рассмотреть оперативнее :)

ЗЫ еще добавлю, что в связи с работой за последние 1-1,5 года пришлось очень мало времени уделять развитию опенсорс-продуктов :(
23. Александр Алехин (jerry_maguire) 08.09.16 16:43
(20) artbear, что-то не хочу лечиться от того что говорю/пишу прямо и открыто. Может это вы как-то не так реагируете если кто-то политкорректные формулировки не подбирает? Я вообще без эмоций все комментарии к этой статье писал... и сейчас спокоен. Опять же прямо и открыто: если Леонид занимается vanessa-behavior, то как минимум раз в месяц "пробежится" по issues и если по какому-либо issue нет движения он спросит что-как и если вещь полезная, а ответа нет - двинет ее сам. С pull request то же самое. Если ты счел pull request интересным - перемести элемент управления наверх и забудь, много времени не займет. Понадобилось одному, понадобиться - ещё многим.
24. Александр Моргунов (Bellerofont) 06.10.16 22:55
Спасибо за статью! Очень познавательно!
25. Александр Кузин (sashocq) 20.10.16 14:48
(11) kraynev-navi,
Есть несколько видео, есть платный курс, который записал Александр

Что за курс? Где найти?
26. С К (kraynev-navi) 21.10.16 09:55
(25) Не вижу сейчас ссылки на ИС. А вообще, можно спросить у ведущих https://plus.google.com/+SilverbulletersOrgSocial/posts/etMaB73uVwF , если они сами тут не ответят.
Вот еще в свободном доступе кое-что:
http://infostart.ru/webinars/521983/
http://infostart.ru/webinars/537546/