gifts2017

Как не надо изменять конфигурацию или Как облегчить жизнь при обновлении

Опубликовал Роман Анисимов (RomanBor) в раздел Программирование - Практика программирования

Чтобы жизнь была медом, и на обновление использовалось минимум времени...
Эта статья для вас.

 

Предыстория:

Как-то я устроился на новую работу, в помощь и поддержку бухгалтерии. Стояла на предприятии Бухгалтерия 3.0.18.5.

Контора перешла с 7.7 на самую новую, на 3.0 соответственно. В новую загружены остаточки на 2013, ну и доки за начало 2013. Ну что, нормальная практика.

Но как я глянул на конфу, немного офигел. В ней аж 3 Приходника,  3 Расходника, и 3 Авансового, ну и так еще пару-тройку документов, а сделано это потому, что у конторы имеются 3 подразделения. Собственно, одно основное и два обособленных, а, как известно, по законодательству для "обособок" нужно вести свою кассовую книгу (а почему бы не купить сразу «Корпоративную версию», она же из коробки поддерживает учет по обособленным).

И всю эту ... надо еще и обновлять.

История:

Анализ изменений, а изменений тут было до...

  1. В план счетов добавлена предопределенно еще пачка счетов, также 4-е субконто, притом на счетах расчетов с контрагентами зачем-то добавлена ставка НДС. НИКОГДА, слышите, НИКОГДА не добавляйте в конфигураторе счета в план счетов и вообще лезть к предопределенным элементам это кощунство. Если что-то нужно, добавьте в пользовательском режиме, остерегайтесь изменения структуры плана счетов, типа добавления еще одного субконто. Кстати, если удалить предопределенный элемент, в пользовательском режиме объект просто пометится на удаление.
  2. Все созданные объекты не привязаны к половине перегруженных событий, или привязано не до конца или не все. Вообще добавлять документы в конфу не стоит, старайтесь обойтись типовым функционалом. Если все-таки без этого не обойтись, постарайтесь не привязывать созданные объекты к типовому учету. Посмотрите на документ, на основе которого вы делаете свой, и учтите, что функционал документа описывается не только документом, там еще участвуют «перегрузка событий», «Функциональные опции», «общие команды», кое-какие «регистры сведений» типа «ПервичныеДокументы», и, конечно, есть ссылки в реквизитах документов типа «ДокументОснования».
  3. И т.д.

 

Решение (Выводы):

  1. Если вам посчастливилось выбирать продукт для перехода или вообще для запуска с нуля, подойдите к выбору очень внимательно. Например, если организация только оказывает услуги и работают там 3 калеки, зачем им брать УПП? С более крупной конфигурации сложнее перейти на более простую. В общем, семь раз отмерь - один отрежь. Не знаю, как скажут гуру, но мое мнение: управленческий учет желательно отделить от бухгалтерского. То есть бухгалтерский в отдельной базе, управленческий в отдельной, так же с зарплатой, и уже либо агрегированные данные передаешь в разные базы, либо документы. Свести к минимуму обмены. Где возможно отказаться от распределенной, использовать, например, RDP.
  2. Старайтесь избегать изменения типового механизма учета, например: делать желательно с помощью внешних обработок, заполнялок, и вообще изучите типовой функционал, возможно, то, что вы делаете, уже сделано, а как говорится, на фига нам велосипед.

Например, нужно сделать дополнительные данные в документе или в справочнике. Делаешь с помощью механизма «доп. реквизиты объекта» и внешнюю печатную форму или обработку заполнения с формой заполнения этих реквизитов.

Если все-таки приходится изменять стандартный механизм учета, то желательно весь код вынести в общий модуль, например: «РБ_Доб», и в модулях объектов использовать одну-две функции. И, самое главное, это КОММЕНТАРИИ, надо писать код не для себя, а для других, и вообще пишите красивый код:

Так кодить нельзя:

с=0;
пока с

Так кодить можно:

с = 0;
Пока с < 1000 Цикл
               с = с + 1;
КонецЦикла;

 

 

Все созданные объекты именовать по какому-то правилу, используйте префикс, например: Документ.РБ_ПутевойЛист, Справочник.РБ_Тарифы.

Пользуйтесь механизмом Подсистем, удобная штука.

 

Еще что вспомню, дополню.

ЗЫ: Коллеги, дополняйте, комментируйте...

См. также

Подписаться Добавить вознаграждение

Комментарии

1. John Smith (PiccaHut001) 04.12.14 14:46
2. Ivan Khorkov (vano-ekt) 04.12.14 14:48
в ларьках ПС может и неактуально менять, а на практике и счета добавляются, и аналитика меняется
3. Роман Анисимов (RomanBor) 04.12.14 15:02
(2) vano-ekt,
А кто мешает в пользовательском режиме добавить счета в ПС по крайней мере в бухгалтерии 3
это реализованно
4. Ivan Khorkov (vano-ekt) 04.12.14 15:09
5. Алексей Драчков (Bassgood) 04.12.14 17:14
(4) vano-ekt, Согласитесь лучше искать счет по коду, нежели потом мучаться с обновлением ПС (особенно если речь идет о субконто).
Или же есть другие надежные варианты:
1. Счет в явном виде указывается пользователем в какой-либо форме (например в форме документа, либо в форме карточки элемента справочника).
2. После создания счета в пользовательском режиме - получить его идентификатор и использовать его в алгоритмах.
Y_U_S; flyDrag; +2 Ответить
6. Ivan Khorkov (vano-ekt) 04.12.14 18:56
и получаем конфигурацию, зависимую от данных...
подключаются к работе 5 новых разработчиков, у них доступ только к хранилищу,...
и дико удивляются присутствию каких-то гуидов в коде :-)
eugeniezheludkov; +1 Ответить
7. Евгения Карук (ekaruk) 04.12.14 19:30
На самом деле не вижу особых проблем в добавлении предопределенных данных. Это ничем не хуже, чем обращения к элементам по кодам или схемы хранения ссылок на элементы в регистрах.
8. Петр (peterxx) 04.12.14 22:23
Не вижу ничего суперкриминального в добавлении счетов в план. Вот менять уже существующие нужно очень осторожно, да, можно нарваться на скандал, если они задействованы в функционале.
Изменять функционал существующих документов, тоже да, стараюсь избегать. Добавить новый документ (не ПКО или РКО, конечно), считаю допустимым, особенно в специализированных плагинах.
9. Александр Лыткин (TrinitronOTV) 05.12.14 06:05
спасибо за рекомендации
10. Валерий Иванов (distorshion) 05.12.14 09:30
Открыл америку через форточку..
11. Armando Armando (Armando) 05.12.14 23:44
12. Armando Armando (Armando) 05.12.14 23:48
Но как я глянул на конфу, немного офигел. В ней аж 3 Приходника, 3 Расходника, и 3 Авансового, ну и так еще пару-тройку документов, а сделано это потому, что у конторы имеются 3 подразделения.

Бывают еще особо умные бухгалтеры, которые настаивают на такой реализации. Во франчевую бытность встречал таких.
13. Константин Юрин (kostyaomsk) 07.12.14 19:56
Может быть, автор имеет в виду что возможно появление в будущем таких же стандартных предопределенных элементов (счетов, субконто) и тут точно будут всем известные проблемы.
Советы "как нужно хорошо делать" бесполезны. Всегда приходится разбираться с тем что есть и то как есть.
если организация только оказывает услуги и работают там 3 калеки, зачем им брать УПП?
ну есть у людей деньги им и продадут. А дальше опять юмор: продадут одни, внедряют другие, исправляют третьи.
Aero; ruslan88; cleaner_it; lesv; RomanBor; +5 Ответить 1
14. Sky XN (sky.xn) 07.12.14 21:14
В 1С Предприятие: 8.3.6 будет возможность использования расширений, ИМХО вот их и нужно использовать в подобных случаях. Подробнее можно прочитать вот здесь - http://v8.1c.ru/o7/201410ext/index.htm [Заметки из зазеркалья]
aleksey.kubovtsov; RomanBor; niko75; nixel; asdfr16; cleaner_it; +6 Ответить 2
15. Роман Анисимов (RomanBor) 08.12.14 23:02
(14) sky.xn, блин а прикольно если конечно работать механизм будет нормально

И Еще почему я до сих пор считаю что ПС предопределенный менять незя
1. Был случай когда в поставке поменялся предопределенный ПС и после обновления без модификаций проводки на части документов банально слетели, записи есть суммы и количество тоже а вот субконто ни одного.
2. Сравнивать предопределенные планы счетов рабочую и поставку геморойно.
ЗЫ: Если кто то скажет механизм как это сделать, без банального сравнения глазками и ручками буду премного благодарен.

16. Роман Анисимов (RomanBor) 08.12.14 23:05
(12) Armando, постараться доказать бухам что так делать не комильфо. Хотя это бывает сложнее чем ....
17. Sky XN (sky.xn) 09.12.14 06:43
(15) RomanBor, надеемся на лучшее, в одинэсине такого механизма с самого начала не хватало
18. Валера Лесь (lesv) 10.12.14 02:18
(13) kostyaomsk, Фактически вся работа программиста 1с - это изменение и доработка типовых конфигураций. В основном это не глобальные задания, а мелкие и связанные с управленческим учетом. Простые правила которые я усвоил для себя: а) создавать новые объекты и реквизиты с префиксом; б) можно не изменять модуль объекта, а использовать подписку на событие; в) создавать новые общие модули; г) и если приходиться менять формы документов - то лучше ее скопировать и назначить основной и вносить изменения в ней.
v777k; kostyaomsk; andrey_name_912; Diego_Iv; vano-ekt; avto1c; asdfr16; Ninnon; cleaner_it; +9 Ответить 3
19. Александр (Aleksandtmt) 10.12.14 06:23
(1) PiccaHut001, Пока актуальна. Работают на ней (на 77) и особенно с сильно измененным функционалом.
20. Maximilian Alekseevich (1cmax) 10.12.14 08:30
(2) vano-ekt, а вот и зря. план счетов лучше не менять, если и добавлять, то только забаланс. либо делать нечто на регистрах сведений.
21. Fish249 (fish249) 10.12.14 08:39
Не соглашусь с автором. Не вижу ничего плохого в добавлении предопределённых данных и своих документов.
22. iodine (iodine) 10.12.14 09:03
Так кодить можно:

с = 0;
Пока с < 1000 Цикл
с = с + 1;
КонецЦикла;


Так кодить можно, чтобы отличать собственный говнокод от кода 1с (для тех, кто не ставит комментарии очень помогает).
Посмотрите типовые, там вы такого кода не найдёте.
Вообще цикл "Пока" используется для какого-то хитрого инкремента (или условия), например, такого:

Позиция = 0;
Пока Позиция < 1000 Цикл
	Позиция = Позиция + 2;
КонецЦикла;
...Показать Скрыть


Для случая указанного в примере, конечно нужно использовать "Для". Например:

Для Индекс = 0 По 999 Цикл
		
	ПонятноеНазваниеПеременной = Индекс;
		
КонецЦикла;
...Показать Скрыть

eugeniezheludkov; +1 Ответить 2
23. Konstantin Iaremchuk (avto1c) 10.12.14 09:13
Свести к минимуму обмены и не вести вместе бух. и упр. учет - несколько противоречивые требования.
Однозначно не стоит вести отдельно упр. учет если основная база на УПП.
Про "так кодить нельзя" вообще не понял, что написано.

24. Вадим Титов (flyDrag) 10.12.14 09:33
Когда на крупном предприятии план счетов раздут еще на 50-70 счетов и субсчетов, выгоднее их добавить через пользовательский режим, иначе каждый раз при обновлении плана счетов можно нарваться на неприятности
25. Роман Анисимов (RomanBor) 10.12.14 09:44
(18) lesv, г) и если приходиться менять формы документов - то лучше ее скопировать и назначить основной и вносить изменения в ней.
ИМХО но в данном случае есть подводный камень, если долго не обновляешь конфу и нужно обновить через нное кол-во релизов ио как правило основная форма может поменяться разительно, вот тогда со скопированной формой приходится мудрить :(
26. Роман Анисимов (RomanBor) 10.12.14 09:46
(22) iodine, я имел ввиду просто разделители между операторами, переменными и функциями :)
27. mikhailovaew (mikhailovaew) 10.12.14 09:54
там еще участвуют «перегрузка событий»

что это такое? подписка на события?
28. mikhailovaew (mikhailovaew) 10.12.14 09:56
с=0;
пока с

чего это кусок, где даже КонецЦикла не прописан? или это у меня так отображается?
29. Роман Анисимов (RomanBor) 10.12.14 10:03
(21) fish249,
ИМХО Предопределенные данные можно в узком случае, например справочники, так как их проверить проще, а вот в ПС потом сравнивать где что изменилось целая эпопея там же еще есть субконто и много др. параметров

добавление документов можно когда они некоим боком не участвуют в стандартном механизме учета
30. Роман Анисимов (RomanBor) 10.12.14 10:04
(28) mikhailovaew,
это чет движок сайта глючит :(
31. Роман Анисимов (RomanBor) 10.12.14 10:05
(27) mikhailovaew,
да подписка на события... с C++ перемешались термины :)
32. Владимир Попов (Vo1C) 10.12.14 10:33
сделано это потому, что у конторы имеются 3 подразделения. Собственно, одно основное и два обособленных, а, как известно, по законодательству для "обособок" нужно вести свою кассовую книгу (а почему бы не купить сразу «Корпоративную версию», она же из коробки поддерживает учет по обособленным).

Все решается ГОРАЗДО проще. Есть такая константа - "Вести учет по подразделениям", в ПРОФ-версии ее невозможно сохранить в значении "Да" (в модуле вы найдете процедуру ПриЗаписи(), которая и сбрасывает ее в Ложь). Вот и первое, и последнее изменение в конфигурации - нужно заремарить эту процедуру. Потом процесс такой - нужно включить учет по подразделениям на нужных ПРЕДОПРЕДЕЛЕННЫХ счетах. Тут тоже все несложно:

1. Сначала "отвязываем" счета от предопределенных
&НаСервереБезКонтекста
Процедура ОтсоединитьНаСервере()
    НайденнаяСсылка = ПланыСчетов.Хозрасчетный.НайтиПоКоду("50");
    ОбъектДанных = НайденнаяСсылка.ПолучитьОбъект();
    ОбъектДанных.ИмяПредопределенныхДанных = "";
    ОбъектДанных.Записать();	

    НайденнаяСсылка = ПланыСчетов.Хозрасчетный.НайтиПоКоду("50.01");
    ОбъектДанных = НайденнаяСсылка.ПолучитьОбъект();
    ОбъектДанных.ИмяПредопределенныхДанных = "";
    ОбъектДанных.Записать();	

    НайденнаяСсылка = ПланыСчетов.Хозрасчетный.НайтиПоКоду("50.02");
    ОбъектДанных = НайденнаяСсылка.ПолучитьОбъект();
    ОбъектДанных.ИмяПредопределенныхДанных = "";
    ОбъектДанных.Записать();
...Показать Скрыть


2. "Привязываем" счета обратно только с галкой "Учет по подразделениям":
&НаСервереБезКонтекста
Процедура ПривязатьНаСервере()
    НайденнаяСсылка = ПланыСчетов.Хозрасчетный.НайтиПоКоду("50");
    ОбъектДанных = НайденнаяСсылка.ПолучитьОбъект();
    ОбъектДанных.УчетПоПодразделениям = Истина;	
    ОбъектДанных.ИмяПредопределенныхДанных = "Касса";
    ОбъектДанных.Записать();

    НайденнаяСсылка = ПланыСчетов.Хозрасчетный.НайтиПоКоду("50.01");
    ОбъектДанных = НайденнаяСсылка.ПолучитьОбъект();
    ОбъектДанных.УчетПоПодразделениям = Истина;	
    ОбъектДанных.ИмяПредопределенныхДанных = "КассаОрганизации";
    ОбъектДанных.Записать();

    НайденнаяСсылка = ПланыСчетов.Хозрасчетный.НайтиПоКоду("50.02");
    ОбъектДанных = НайденнаяСсылка.ПолучитьОбъект();
    ОбъектДанных.УчетПоПодразделениям = Истина;
    ОбъектДанных.ИмяПредопределенныхДанных = "ОперационнаяКасса";
    ОбъектДанных.Записать();
...Показать Скрыть

Все это, понятное дело, не в конфигурации, а во внешней обработке (которую нужно выполнить один раз в жизни)
Можно работать с документами (ПКО, РКО). Не забудьте включить "обособленность" у подразделений.
33. Алекс Ю (AlexO) 10.12.14 11:10
(7) ekaruk,
На самом деле не вижу особых проблем в добавлении предопределенных данных.

Зря.
1. Меняется конфа.
2. Могут быть конфликты (особенно актуально при подобном изменении Плана счетов - счета-то мы все обзываем одинаково, а 1С возьми и тоже введи этот счет в предопределенные).
схемы хранения ссылок на элементы в регистрах.

Самый надежный и верный вариант - хранение ссылок на объекты в справочнике (своем или подходящем типовом). Вот там - делай предопределенные какие хочешь.
34. Алекс Ю (AlexO) 10.12.14 11:11
(8) peterxx,
Не вижу ничего суперкриминального в добавлении счетов в план.

Предопределенных?
35. Алекс Ю (AlexO) 10.12.14 11:13
(14) sky.xn,
8.3.6 будет возможность использования расширений

Вот когда сделают, тогджа и посмотрим - насколько это будет работоспособно.
А пока все эти заметки - отражение самих себя.
36. Алекс Ю (AlexO) 10.12.14 11:19
(18) lesv,
можно не изменять модуль объекта, а использовать подписку на событие

У вас есть подписки на каждое событие? Открытие формы, пожалуйста.
(22) iodine,
Вообще цикл "Пока" используется для какого-то хитрого инкремента (или условия), например, такого

В ненормальной реализации 1С "Пока ... Цикл" можно безбоязненно использовать только в одном случае:
Пока Истина/Ложь Цикл
...
КонецЦикла
с проверкой внутри от зацикливания (внутри цикла размещаем счетчик итераций и принудительное прерывание, если более 1000...1 млн итераций).
37. Галина ГГГ (gigagr) 10.12.14 11:40
Абсолютно согласна с lesv, практика именно это и подтверждает.
38. Роман Анисимов (RomanBor) 10.12.14 12:10
(32) Vo1C,
сделать из проф версии, корп или включить ведение по обособленным можно было , но я устроился в эту контору в конце 13 а они за весь 13 год уже так вели учет, поэтому разбираться в данном случае с нормальной реализацией обособок решил нет смылсла, а вот в переход с 14-15 год хочу обновить ее, обрезать базу и наконец то засунуть все документы в нормальный учет.
и еще очень им нужны Авизо а в проф их нет :(
39. DAnry (DAnry) 10.12.14 13:47
Прочитал статью, а в голове фраза из анегдота: "А шо делать?" Работа наша такая: поправлять код типовых конфигураций, адаптировать их к конкретному пользователю (фирме). Конечно, если есть возможность зделать это при помощи внешних обработок/отчетов, характеристик, свойств, доп. реквизитов то безусловно надо использовать возможности "типовых". (При обновлениях позже не раз скажеш "Какой я молодец!") Но, к сожалению, чаще возможностей "типовых" недостаточно и приходится писать-дописывать-переделывать. И не всё так страшно. К счастью механизм обновления достаточно развит и советую пользоваться им в полную. Про максимальное использование коментариев поддерживаю на все 100 - затраченые лишних 5 мин позже сэкономит уйму времени.
kostyaomsk; flyDrag; +2 Ответить 1
40. Константин Юрин (kostyaomsk) 10.12.14 18:50
(18) lesv, совершенно согласен с Вами насчет простых правил
а) создавать новые объекты и реквизиты с префиксом; б) можно не изменять модуль объекта, а использовать подписку на событие; в) создавать новые общие модули; г) и если приходиться менять формы документов - то лучше ее скопировать и назначить основной и вносить изменения в ней

Но это если нужно менять типовую конфу которую не трогали. А на деле, как правило, с криками "помогите" или с воплями "мне щас надо" конфигурация-франкенштейн. Ну учились люди. Пока сам пару-тройку не изгадишь в процессе "обучения" на программиста 1С не научишься.
Главный плюс от метода "г" - берем и копируем стандартный документ со всеми формами-макетами (или уже накройняк форму) мы сохраняем весь функционал старого документа со всеми его обработчиками и точно не вредим конфигурации 1С. Ее проще обновлять. Потом только нужно добавить в журналы (можно и журнал скопировать), интерфейсы, если БП то в субконто, планы видов характеристик, отдельно придется в новых общих модулях прописать подписку на события и если нужно сделать вставки (увы) в регламентные процедуры и процедуры общих модулей. Например если это анализ взаиморасчетов. Вот тут и будут каждый раз проблемы и программист должен об этом знать и никому не говорить :) а то без работы останется :)
41. Владимир Попов (Vo1C) 10.12.14 21:02
(38) RomanBor, Авизо придется "сдернуть" из Корпа. Со всеми вытекающими ссылками... А насчет регулярного обновления "нетиповых" конфигураций - это в "ИжТиСи"
42. Роман Анисимов (RomanBor) 10.12.14 21:10
(40) kostyaomsk, Вот как раз на такого франкенштейна и нарвался :)
(41) Vo1C, а мне денег на ИЖ некто не даст, я работаю на конечного работодателя не франч :(.
и все таки мне кажется проще обновить проф на комп и доплатить там 10-15 тр за конфу, для конторы которая в штате имеет программиста не такие и большие денежки
43. Алекс Ю (AlexO) 11.12.14 11:37
(37) gigagr,
Абсолютно согласна с lesv

кто это? И с чем вы согласны?
44. Алекс Ю (AlexO) 11.12.14 11:47
(38) RomanBor,
обрезать базу

Надеюсь, вы понимаете, о чем говорите. Именно о термине "обрезать".
(39) DAnry,
К счастью механизм обновления достаточно развит

Да что вы говорите? Хоть раз пробовали дважды измененные обновить? Или изменения на формах?
(40) kostyaomsk,
Главный плюс от метода "г"

Впечатление, что никто тут особо не обновлял ничего.
Давайте любой свой пункт.
Есть масса и плюсов, и минусов, и у каждого момента и способа, но в общем и в целом - с обновлением/внесением изменений в 1С хреново.
45. Алекс Ю (AlexO) 11.12.14 11:54
(41) Vo1C,
А насчет регулярного обновления "нетиповых" конфигураций - это в "ИжТиСи"

Вы сами-то пользовались? Отличия представляете надстройки ИЖТС от типового обновления?
(32) (38) (42) до вас никак не дойдет еще, что запрет вести обособленные подразделения (да и вообще - все программные запреты в типовых конфах 1С) сделаны не просто так? Что заремарить/подписать вы можете что угодно - но все остальные механизмы конфы ориентированы на определенный учет и конкретные данные?
(32) Vo1C, как думаете, что будет - когда ожидается в переменной один объект, а "приплывет" - десяток? И ошибка с криками alarm случится - это еще в лучшем случае?
46. Валерий Елисеев (THXO) 11.12.14 12:24
тс озвучил банальные истины, которые любой спец соблюдает и чтит.

истины далеко не все.

Главное правило всех этих истин - не позволять открывать конфигуратор профану.
47. Роман Анисимов (RomanBor) 11.12.14 15:09
(46) THXO, Не спорю, но натыкаюсь не на одну уже конфу такого плана где-то меньше накосячено(возможно не по незнанию, а из за требований бухов или лени форсмажора и пр.) , где-то больше, но если даже одни начинающий 1С программист прочитает и что-то в мозгах отложится считаю что статься не зря, ее конечно еще бы дополнить хотя бы ссылками по оптимизации запросов, оптимизации кода и пр...
48. Владимир Попов (Vo1C) 11.12.14 22:03
(45) AlexO, не приплывает, люди пользуются. Вопрос топика не теоретический, а чисто прикладной - как сделать учет денег в обособленных подразделениях. Я рассказал. Работает. Проводки, формы, отчеты - все людей устраивает. Сделал так, как описал. Обновляю сравнением - снимаю галку у одной константы, и все. Не надо КОРП, не надо ИТС КОРП.
По поводу ИжТиСи - сам не сталкивался, но их предложение, вебинары и методику изучил. В чем Ваши трудности - я не понял, а понты не интересны.
49. vx_gas vx_gas (vx_gas) 12.12.14 08:23
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа