"Вы всё сломали!". Разбираемся, кто прав, кто виноват

20.09.19

Разработка - БСП (Библиотека стандартных подсистем)

О том, как "всё испортил" программист, а на самом деле виноват заказчик.

Друзья и уважаемые мэтры 1С!

Скажу сразу: не судите меня строго... я плохо знаю БСП. Мой двухлетний опыт работы программистом пока не дал полностью ознакомиться с этим зверем. Но активно им пользуюсь. Не может пройти ни одной задачи, где я не использую модуль ОбщегоНазначения. Процедура ЗначениеРеквизитаОбъекта() и подобные - самые частоиспользуемые в моей практике. За то, что познакомили меня с этой библиотекой большое спасибо программистам-сеньорам, с которыми я работаю.

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

Пришел как-то заказ сделать внешний отчет для УТ 11.4. Отчет не сложный: смотрит продажи, смотрит остатки, высчитывает среднее количество продаж за рабочий день, прогнозирует необходимое количество товара к заказу. Ну ок, сделал, в тест отдал. Через пару дней приходит письмо счастья: "Вы всё сломали!". На вопрос о том, что же сломалось, ответ меня, мягко говоря, удивил. Суть заключается в том, мой отчет сломал другой внешний отчет. Подключившись, я обнаружил картину Репина: нажимаю

 

 

А открывается:

 

 

То есть, схема компоновки - явно моего отчета, а вариант - от другого!

 

 

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

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

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

 

 

Очень любопытно... Пробую снять пометку удаления у неизвестного мне отчета "Ведомость по товарам" - нельзя. Элемент предопределенный.

Здесь я хочу объявить о новой рубрике: "Вопросы мэтрам". Итак, описываю ситуацию:

Хочу заставить принудительно снять пометку удаления. В настройках отладки ставлю остановку по ошибке. Останавливаюсь на команде ВызватьИсключение в обработчике ПередЗаписью. Ставлю точку останова на строке условия, из-за которого проваливаюсь в исключение. Дальше делаю так:

 

 

Теперь вопрос: можно ли так делать? То есть меня значения переменных прямо во время отладки. Штука-то удобная очень, в 8.2 такого нет.

Короче, получилось у меня снять пометку удаления, вышло следующее: появился третий вариант отчета) Только схема компоновки и настройки полностью совпадают с моим новым отчетом. А заголовок - от старого... Облом. Пробую зайти к проблеме с другого конца. Смотрим, что происходит при записи элемента справочника ДополнительныеОтчетыИОбработки. Отладкой проваливаемся в общий модуль ВариантыОтчетов, в процедуру ПриЗаписиДополнительногоОтчета. И вот оно! Тот самый запрос, который, показывает, где собака зарыта!

 

 

Справочник, Карл! В БСП есть справочник вариантов отчетов! Открываю форму список элементов через все функции (синоним этого справочника - "Отчеты"). После увиденного, все пазлы сошлись, но лучше от этого не стало. Вот она - форма списка справочника ВариантыОтчетов в пользовательском режиме:

 

 

Просветление!:) Только такой список никак не информативный... Ладно, пишу внешнюю обработку, вывожу на форму динамический список с колонками "Наименование" и "Отчет". Результат:

 

 

Нашел! Осталось всего-ничего - переопределить у вариантов отчетов "Ведомость по товарам" и "Ведомость по товарам и тому подобное" свойство Отчет на тот, которому эти варианты по факту принадлежат. Здесь мне пригодилась тестовая база заказчика, в которой всё было хорошо. Открыл свою обработку с динамическим списком, смотрим, что там есть:

 

 

Этот вариант принадлежал доп. отчету Ведомость по товарам. А теперь угадайте дальнейший расклад?:) Да, в тестовой базе отчет есть, а в рабочей - нету. Испарился чудесным образом (*сарказм*)! Оказалось, что заказчик случайно накатил на отчет Ведомость по товарам мой новый отчет. Отчет-то изменился, схема компоновки новая, а вот старые привязанные элементы справочника вариантов отчета пометились на удаление. Заказчик снял пометку удаления из варианта отчета, и это вылилось в то, что вы видели выше. В итоге осталось всего-ничего: Стащить из тестовой базы старый отчет, перезалить его в рабочую базу, переопределить пользовательский вариант отчета, удалить безвозвратно ненужный вариант. Всё это сделалось с помощью ещё одного реквизита формы и двух команд:

 

 

Код модуля формы:

 

&НаКлиенте
Процедура Переопределить(Команда)
	ВариантОтчета = Элементы.ВариантыОтчетов.ТекущаяСтрока;
	ПереопределитьНаСервере(ВариантОтчета, Отчет);
КонецПроцедуры

&НаСервереБезКонтекста
Процедура ПереопределитьНаСервере(ВариантОтчета, Отчет)
	УстановитьПривилегированныйРежим(Истина);
	ВариантОбъект = ВариантОтчета.ПолучитьОбъект();
	ВариантОбъект.Отчет = Отчет;
	ВариантОбъект.Записать();
	УстановитьПривилегированныйРежим(Ложь);
КонецПроцедуры

&НаКлиенте
Процедура УдалитьБезВозвратно(Команда)
	ВариантОтчета = Элементы.ВариантыОтчетов.ТекущаяСтрока;
	УдалитьБезВозвратноНаСервере(ВариантОтчета);
КонецПроцедуры

&НаСервереБезКонтекста
Процедура УдалитьБезВозвратноНаСервере(ВариантОтчета)
	УстановитьПривилегированныйРежим(Истина);
	ВариантОтчета.ПолучитьОбъект().Удалить();
	УстановитьПривилегированныйРежим(Ложь);
КонецПроцедуры

Готово. Вот так оказалось, что "сломал" я, а виноват заказчик. Вывод: не перезаливайте отчет другим отчетом! Можно перезалить только более свежую версию текущего. Можно, конечно, попробовать написать какую-нибудь защиту, чтобы не давать перезаливать отчет, в котором отличаются идентификаторы вариантов. В связи с этим у меня вопрос к вам, уважаемые мэтры: эта ситуация - баг или фича?

Эту статью я писал по памяти, так как случилось эта ситуация достаточно давно. И снова прошу: не судите меня строго. Да, я не знаток 1С, я только учусь:)

Практика анализ исправление баг фича БСП

См. также

БСП (Библиотека стандартных подсистем) Программист Платформа 1С v8.3 Бесплатно (free)

В статье описан алгоритм для включения документа или справочника в систему БСП. Будет полезно программистам 1С, начинающим работать с БСП.

24.10.2024    1088    PROSTO-1C    0    

12

БСП (Библиотека стандартных подсистем) Работа с интерфейсом Программист Платформа 1С v8.3 Бесплатно (free)

В материале описан универсальный механизм работы с добавленными элементами на общую форму «ФормаОтчета». Думаю, облегчит работу многим разработчикам.

08.10.2024    978    PROSTO-1C    4    

10

БСП (Библиотека стандартных подсистем) Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В статье рассмотрим пошаговую инструкцию создания дополнительного отчета с фоновым формированием результата.

04.10.2024    1830    MadRave    11    

24

БСП (Библиотека стандартных подсистем) Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Пример отслеживания прогресса фонового выполнения дополнительной обработки с использованием программного интерфейса длительных операций БСП.

10.09.2024    1819    MadRave    1    

17

БСП (Библиотека стандартных подсистем) Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

А что, если долгожданная реализация Паузы в 1С смутно напоминает старую, проверенную? А?!

06.09.2024    1254    n_mezentsev    10    

8

БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Добавим дополнительные свойства в новый документ средствами БСП

02.09.2024    4105    John_d    10    

52

БСП (Библиотека стандартных подсистем) Программист Платформа 1С v8.3 Бесплатно (free)

Всё больше организаций выбирает для серверов под 1С операционные системы Linux. Одним из отличий систем Windows и Linux является отсутствие COM объектов, которые зачастую использовались для формирования печатных форм офисных документов (Word). Конечно, можно выполнять печать и на клиенте, но есть риск импортозамещения. В работе у меня случались проблемы с зависанием процесса Word, поэтому я не люблю его использовать.

29.07.2024    5354    PROSTO-1C    12    

52
Вознаграждение за ответ
Показать полностью
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. alex-l19041 8 20.09.19 08:54 Сейчас в теме
Оказалось, что заказчик случайно накатил на отчет ...
- да уж, лучше не давать заказчику это делать самостоятельно...
2. RomanCrow13 111 20.09.19 08:57 Сейчас в теме +2 $m
3. Sintson 413 20.09.19 09:54 Сейчас в теме
Заказчик оплатил затраченное на разбор время?
4. RomanCrow13 111 20.09.19 10:05 Сейчас в теме
8. Sintson 413 20.09.19 10:46 Сейчас в теме
(4)
...И опыт, сын ошибок трудных,
И гений, парадоксов друг...
user811769; user958854; Tangram; AlenaR; RomanCrow13; +5 Ответить
25. mrd_84 25.09.19 17:52 Сейчас в теме
(4)

Не в деньгах счастье. Зато опыта нажил, нас научил)))
27. &rew 52 22.06.20 10:48 Сейчас в теме
(25)Я так гастрит заработал.
5. AlX0id 20.09.19 10:07 Сейчас в теме
А надо ли было вообще все это расследовать?
Если вопрос стоит как: "Вы все сломали!", то наверное стоило взять бэкап, когда все работало, самому накатить изменения - и сказать, что заказчик криворукий семичлен.
rovenko.n; Raskad; sergathome; +3 Ответить
6. RomanCrow13 111 20.09.19 10:14 Сейчас в теме
(5) Возможно. Вопрос только в том, оплатил бы он тогда работу. Что с меня было взять: фрилансер, не юр. лицо, без предоплаты. Работал за ролтон)
7. AlX0id 20.09.19 10:17 Сейчас в теме
(6)
Ну так работы-то было бы на порядок меньше.. Развернуть бэкап - делается силами заказчика, накатить обработку - 10 минут максимум.. Убедиться в различии результатов - 5 минут..

Я, конечно, понимаю, что знал бы где упасть - соломки бы постелил.. Но все же..
9. akim2040 47 20.09.19 10:54 Сейчас в теме
Я тоже часто наступал на грабли с внешними отчетами.

По поводу обнаруженного Вами справочника, можно было бы без всяких запросов. просто отобразить все поля формы. где сразу бы увидели и имена отчетов, и ключи вариантов
Прикрепленные файлы:
CratosX; A_Max; Raskad; +3 Ответить
10. RomanCrow13 111 20.09.19 10:57 Сейчас в теме
(9) Ну да, моя решение совсем не лаконичное)
11. MikhailDr 20.09.19 12:33 Сейчас в теме
Ну тут и косяк разработчика, что не сделал все сам до конца, а дал залить отчет заказчику.
12. RomanCrow13 111 20.09.19 12:37 Сейчас в теме
(11) Дак у них есть свой штатный программист! Причём это он выступал контактным лицом заказчика. Конечно, были подозрения, что что-то не ладно. Мол, почему бы сам не сделал. Но подумал, что у самого много работы. Кто ж подумал, что так выйдет...
FilimonVl; acanta; +2 Ответить
13. MikhailDr 20.09.19 12:49 Сейчас в теме
14. qwed557 30 20.09.19 13:56 Сейчас в теме
Надо самому до конца выполнять работу. А может сам залил в чужой отчет а тут написал что все сломал сам заказчик ))))
16. RomanCrow13 111 20.09.19 14:08 Сейчас в теме
(14) может быть)) но доказывать точно ничего не буду.
С тем, что нужно самому до конца доводить - согласен. Если работаешь с программистом, которого не знаешь, то доверять ему нельзя.
В любом случае, это был полезный опыт. И интересно было узнать фичу БСП)
17. Fox-trot 163 20.09.19 14:47 Сейчас в теме
(16) погляди еще на параметр запуска "ЗапуститьОбновлениеИнформационнойБазы""
15. _MavR_ 20.09.19 14:01 Сейчас в теме
Ну "штатному программисту" руки оторвать неплохо было бы, а потом пришить на более приличествующее им место :-)
Хотя конечно всякое в жизни бывает и не так еще можно накосячить по запарке.
RomanCrow13; +1 Ответить
18. bulpi 217 21.09.19 20:47 Сейчас в теме
Люди, которые работают с типовыми конфигурациями, с системой отчетов БСП и всем этим - глубоко несчастные люди. Даже если они этого не понимают.
19. severnyj 22.09.19 09:54 Сейчас в теме
(18)Типовые конфигурации придуманы для того чтобы в итоге перейти на нетиповые )
triviumfan; +1 Ответить
22. AlX0id 23.09.19 14:14 Сейчас в теме
(18)
Да - найти спонсора который будет оплачивать время, которое тратится на очередную нетленку - это определенно счастье в наше время.
RomanCrow13; acanta; +2 Ответить
23. bulpi 217 23.09.19 20:36 Сейчас в теме
20. qwinter 683 23.09.19 12:25 Сейчас в теме
Столько проблем, а всего то надо было нажать кнопочку отключить и загрузить заново.
r.zdorkin; +1 Ответить
21. CratosX 114 23.09.19 12:32 Сейчас в теме
Меня тоже как-то подвело неудачное наименование команд "Загрузить" и "Создать". Создать - создаёт новый внешний отчет/обработку, а вот Загрузить - загружает в уже существующий элемент, на котором стоит активность в списке. Как-то затёр предыдущий отчёт, хорошо что было откуда его восстановить :)

Вовсе не фича, а один из многочисленных багов
24. olbir 25.09.19 15:47 Сейчас в теме
Зато опыт приобрел ) Это ценно
26. Abyss17 26.09.19 17:34 Сейчас в теме
История стара как мир, программист виноват ВО ВСЕМ априори.

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

P.S. На всякий случай уточню, что вышеуказанная история про ПРОГРАММИСТОВ, а не про ...кодеров, которые в своей работе используют "древнеиндусский" метод перебора всех возможных вариантов, пока не будет достигнут более менее приемлемый.
Оставьте свое сообщение