Доработка 1с предприятие. Редактирование форм объектов, добавленных в рамках проекта

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

Доработка 1С - совокупность действий по настройке и модернизации программ 1С под нужды вашего предприятия.

Как мы осуществляем доработку программ 1С

Для достижения идеального результата, когда клиент получает именно то, что задумывал, при доработке программ 1С, мы предлагаем следующую схему работы:

  1. клиент сообщает данные об установленной ;
  2. клиент вводит нашего специалиста в основные принципы работы своей организации, сообщает суть проблемы, описывает, что именно он хотел бы доработать;
  3. за клиентом закрепляется программист 1С, который будет сотрудничать с клиентом на протяжении всего времени работы с нашей компанией и будет в курсе всех особенностей учета бизнеса клиента. Персональный программист 1С будет полностью отвечать за работоспособность внедренных им доработок;
  4. составляется ТЗ. На основании полученной информации наши программисты 1С сделают необходимые выводы, предложат варианты решения проблемы либо с помощью доработок, либо путем произведения настроек в 1С;
  5. согласуются временные и денежные затраты на доработку 1С;
  6. реализуются согласованные с клиентом работы;
  7. результаты работы тестируются и сдаются клиенту.

Наиболее распространённые доработки 1С

Ниже перечислим особо востребованные доработки в программах 1С:

  • Создание справочников, реквизитов . Создание дополнительных мест хранения информации таких как, например, номера автомобилей
  • Доработка или разработка новых печатных форм . Изменение внешнего вида счетов, счет-фактур и прочих печатных форм документов согласно запросам Вашей организации.
  • Создание новых или изменение существующих отчетов . Создание дополнительных или редактирование существующих отчетов для бухгалтеров, менеджеров или директоров компании.
  • Настройка прав доступа . Ограничение или расширение доступа пользователям к информации в базе данных.
  • Разработка обработок. Создание обработок для упрощения систем ввода информации, анализа деятельности предприятия, автоматически выполняемых функций, например, вывод на печать пакета документов или загрузка информации из файла Excel(*.xls).
  • Настройка обмена 1С. Импорт/экспорт данных из одной программы 1С в другую.
  • Консультирование пользователей 1С. Разъяснение или обучение пользователей работе с внедренными доработками.
  • Обновление изменённых конфигураций. Мы обновляем изменённые, как нашими, так и сторонними программистами 1С конфигурации.

Преимущества поручения доработок в 1С нам

Существует ряд причин, почему заказывать доработки в нашей компании выгодно:

  • Высокое качество. Наши программисты 1С являются высококвалифицированными специалистами, что подтверждается соответствующими сертификатами 1С.
  • Низкая стоимость. Наша компания небольшая, но стремительно развивающаяся, мы исключаем посредников между заказчиком и программистом, за счет этого нам удается удерживать стоимость услуг 1С на низком уровне, от 1000 руб. за час работы специалиста.
  • Быстрое выполнение работ . Нашей компании не выгодно затягивать время выполнения поставленной вами задачи. Поэтому Вы гарантированно получите результат работы не позже трех рабочих дней. Если задача небольшая, то вполне вероятно, что вы сможете получить нужную вам доработку в 1С в день обращения.
  • 100% гарантии на работоспособность доработки. Наша компания гарантирует работоспособность выполненной нашими сотрудниками доработки в Вашей программе. На протяжении года после внедрения ее вы можете сообщить нам, если обнаружите скрытые дефекты, и мы совершенно бесплатно исправим их в кратчайшие сроки.
  • Несмотря на то, что территориально мы находимся в Санкт-Петербурге , удаленно можем выполнить для Вас любую работу, в какой бы точке мира Вы не находились.

Компания 1С прочно закрепились в нише программ для автоматизации деятельности предприятий. «Бухгалтерия предприятия », «Управление торговлей », «Зарплата управление персоналом » и т.д. – стали визитными карточками компании и успешно применяются как в маленьких, так и больших предприятиях.

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

Почему так происходит? Проблема с профессионализмом сторонних разработчиков или несовершенство архитектуры решений типовых решений? На мой скромный взгляд, проблемы с обеих сторон: 1С не сильно попуализирует правильные подходы к доработке типовых решений, а многочисленные разработчики предпочитают работать по старинке, не тратя время на изучение новых возможностей и чтения «нудной» документации.

Проблема

Перед тем как начать говорить о решениях озвучим проблему. Типовые решения не могут выполнить все «хотелки» компании и единственный способ их реализовать – обратиться к сторонним/своим разработчикам. Если «хотелка» затрагивает типовые механизмы (объекты, формы, алгоритмы), то конфигурация становится непригодной для автоматического обновления.

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

Документирование, инструменты

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

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

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

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

Конфигурирование

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

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

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

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

Одну и ту же печатную форму можно сделать разными способами: воспользоваться механизмом, предоставляемым БСП (библиотека стандартных подсистем) или написать код напрямую в модуль формы/менеджера определенного объекта. Результат будет один и тот же – клиент получит желаемое, а вот поддержка решения усложнится.

Плохих примеров доработок много, вывод напрашивается один – изучайте рабочий инструмент максимально детально. Ищите обходные пути и влезайте в типовые механизмы в случаях, когда без этого действительно не обойтись.

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

Внешние печатные формы

Технология не является платформенной, а реализуется при помощи возможностей БСП (Библиотека стандартных подсистем). Поскольку все типовые решения строятся на базе БСП, никаких проблем с поддержкой возникнуть не должно.

Принцип работы подобных обработок прост. Разработчик создает обработку в соответствии с определенным шаблоном. Реализует в ней ряд экспортных методов, позволяющих зарегистрироваться в системе и активироваться из определенных объектов. В итоге обычная обработка становится частью типового решения и доступна для вызова из различных объектов.

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

Для создания внешней печатной формы требуется описать три служебных функции: «СведенияОВнешнейОбработке », «Печать », «ВыводИнформацииПоДокументу ». Они обязательно должны находиться в модуле обработки, т.к. к ним будут обращаться механизмы БСП.

Функция «СведенияОВнешнейОбработке » описывает структуру с базовой информацией по обработке. Перечисленные сведения необходимо для успешной регистрации в механизме внешних печатных форм. Непосредственная регистрация происходит через добавление элемента в справочник «Дополнительные отчеты и обработки» (см. рисунок 2).

Особое внимание стоит обратить на следующие свойства:

  • МассивНазначений. Содержит название объектов метаданных, для которых будет регистрировать печатная форма. Допускается несколько вариантов указания объектов: «Документ.ПриходныйКассовыйОрдер», «Документ.*». Последняя запись подразумевает все документы, доступные в системе.
  • Вид. Определяет вид внешней обработки. Обработки разных видов регистрируются по-разному. Для печатных форм указываем «ПечатнаяФорма», остальные доступные виды привел в комментариях.
  • Наименование. Название обработки в системе.
  • Идентификатор. Используется в нескольких местах, рекомендуется присваивать осмысленное имя. Чаще всего здесь указывает имя обработки, например: «РогаИКОпыта_ФормированиеМакетаКассовогоОрдера».
  • Модификатор. Если в качестве макета используется табличный документ, то указываем «ПечатьXML».

Процедура «Печать » выполняет служебную роль и вызывается встроенными механизмами системы. В большинстве случае ее содержимое остается неизменным за исключением параметров вызова «ВывестиТабличныйДокументВКоллекцию» (см. тело процедуры).

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

Следующая на очереди рассмотрения функция «СформироватьПечатнуюФорму». Может показаться, что именно в ней выполняется формирование печатной формы, но это только на первый взгляд. По факту это еще одна служебная функция, которая требует от разработчика:

  • Имя для сохранения параметров печати. Чаще пользуются шаблоном: «ПАРАМЕТРЫ_ПЕЧАТИ_ИмяПечатнойФормы».
  • Макет. В методе «ПолучитьМакет» требуется указать имя макета.

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

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

Обработки для заполнения

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

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

Начало процесса разработки обработки заполнения стандартное: создаем новую обработку и описываем в модуле служебную функцию – «СведенияОВнешнейОбработке» (см. листинг 1).

Листинг 1. Заготовка для обработки заполнения

ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.1.2.1"); ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиЗаполнениеОбъекта(); ПараметрыРегистрации.Назначение.Добавить("Документ.КонтСтраховойПолис"); ПараметрыРегистрации.Наименование = НСтр("ru= "Заполнение способов урегулирования убытков""); ПараметрыРегистрации.БезопасныйРежим = Ложь; ПараметрыРегистрации.Информация = "Демонстрирует механизм создания обработок заполнения"; ПараметрыРегистрации.Версия = "1.0.1"; НоваяКоманда = ПараметрыРегистрации.Команды.Добавить(); НоваяКоманда.Представление = НСтр("ru = "Заполнить способами урегулирования убытков""); НоваяКоманда.Идентификатор = "ЗаполнитьСпособыУрегулированияУбытков"; НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы(); Возврат ПараметрыРегистрации;

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

Рассмотренной функции достаточно для создания каркаса обработки-заполнения. Дальше все зависит от решаемой задачи. Если требуется создать форму обработки и наладить связь с объектом заполнения, вам потребуется описать в форме несколько параметров:

  • ОбъектыНазначения (Произвольный) – массив ссылок на объекты заполнения.
  • Идентификатор (Строка) – идентификатор команды.
  • ДополнительнаяОбработкаСсылка (СправочникСсылка.ДополнительныеОтчетыИОбработки).

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

Модернизация типовых форм

Рассмотрим одну из типичных задач, возникающих при доработке типовых решений. Представим, что для определенного документа нам пришлось добавить: табличную часть и несколько реквизитов. Данные сущности нам потребовались для решения задачи, которую невозможно, либо крайне проблематично выполнить с помощью функционала конфигурирования БСП.

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

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

Новые расширения создаются в конфигураторе с помощью менеджера расширений («Конфиугурация» -> «Расширения конфигурации»). В окне менеджера отображаются все установленные расширения (см. рисунок 3) и интерфейс для создания новых.

Для создания нового расширения нажимаем кнопку «Добавить» и в появившемся окне заполним поля (рисунок 4):

  • Имя. Стандартные правила именования объектов метаданных 1С.
  • Синоним.
  • Префикс. Дополнительное значение, которое будет автоматически добавляться для всех созданных сущностей в расширении.

Нажимаем “Ok” и перед вами отобразится дополнительное дерево конфигурации (рисунок 5).

Принцип работы с деревом конфигурации расширения мало чем отличается от работы со стандартным деревом конфигурации информационной базы. Отличие заключается в ограничениях (http://its.1c.ru/db/v839doc#bookmark:dev:TI000001513).

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

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

Следуя выше сказанному, делаем вывод: новые сущности для хранения данных создаем как обычно, а вот модификацию и интеграцию с остальными частями выполняем в расширении.

Попробуйте поместить в созданную заготовку любой объект метаданных. Свои эксперименты я провожу на конфигурации «Бухгалтерия некредитной финансовой организации КОРП», но все сказанное будет актуально для большинства решений, построенных на базе БСП.

Я расширил документ «КонтСтраховойПолис » (добавил табличную часть и новые реквизиты), а затем добавил основную форму документа в созданное расширение (контекстное меню «Добавить в расширение»).

Вместе с формой будут перенесены связанные реквизиты, а также ряд других объектов (рисунок 6).

Форму расширения можно дорабатывать по своему усмотрению: добавлять новые элементы управления, создавать реквизиты, дописывать логику и т.д. Нельзя (не рекомендуется) разве что удалять существующие элементы управления. На них может быть завязана логика работы формы, поэтому ненужные элементы лучше скрывать.

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

Идеи для расширений

Не стоит думать о расширениях, как о своеобразных костылях для модификации объектов. Это полноценная система плагинов с большим потенциалом на развитие. Уже сегодня расширения позволяют создавать: подсистемы, общие модули, роли, общие формы, обработки, отчеты, HTTP-сервисы, WS-ссылки, XDTO-пакеты. Перечисленных объектов хватит для решения многих реальных задач.

Например, в нашей компании с помощью расширений удалось решить цикл задач, связанных с интеграцией CRM и корпоративным порталом. Механизмы обмена перенесены в расширения и для интеграции требуется несколько кликов мышкой. Все необходимые объекты метаданных поставляются в виде расширения (HTTP-сервисы, обработки и т.д.).

Аналогичным образом обстоят дела с интеграцией КИС и CMS. Стандартные механизмы обменов в виде громоздкого CommerceML – не самый удобный и быстрый способ выгружать номенклатуру на сайт. Расширения от разработчиков CMS могут запросто решить эту проблему и не создать пользователю типовых решений проблем с последующим обновлением.

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

На что еще способны расширения

О механизме расширений конфигурации можно говорить долго и написать отдельную статью. Технология постоянно развивается и пополняется новыми возможностями. Наиболее интересные новинки произошли с релизом платформы 8.3.9. Свет увидела первая концепция перехвата/подмена функций в модулях (расширение модулей).

Суть идеи: предоставить прикладному разработчику возможность менять логику работы модулей без непосредственного внесения изменений. Например, есть модуль «СуперМодуль» в типовой конфигурации, содержащий множество расчетных функций. Разработчику необходимо изменить логику работы нескольких функций из этого модуля и расширение модулей идеально подходит для этой задачи.

С помощью новых возможностей расширения, подобные задачи мы можем решить путем перехвата вызовов. Механизм расширений предоставляет дополнительные инструкции для препроцессора (аннотации), позволяющие выполнять перехват типовых методов.

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

&Перед, &Вместо, &После. Например: &Вместо ("РассчетСтраховойПремии") Функция РассчетСтраховойПремииСДополнительнымиРисками(Параметр) // Какой-то код КонецФункции

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

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

Подписки на события

Расширения приносят в настоящую магию, но есть масса конфигурацией, работающих на более старых платформах, до которых новые технологии еще не добрались. Как быть в таких случаях? Что если требуется добавлять свои движения в дополнительные регистры при проведении типового документа?

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

Программная доработка форм

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

Модифицировать обычные формы предложенным способом проблематично (сказывается по пиксельное позиционирование элементов), а вот с управляемыми, наоборот, никаких трудностей. Если по каким-то причинам нет возможности применять расширения, то программная доработка форм – единственный правильный и менее сложный в поддержки способ модификации типовых форм.

Модификация ролей

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

В идеальном варианте – старайтесь максимально дробить роли. Выделяйте роли на чтение и запись документов/справочников, не соединяйте права в одну роль. Конечно, не стоит это делать для каждого документа/справочника конфигурации, но делать нужно хотя бы для групп объектов. Рассмотрим пример – «Кассовые документы». К ним относятся как минимум «ПКО» и «РКО». Таким образом легко формировать гибкие профили безопасности (БСП).

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

Не ленитесь

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

Важно не сидеть, а следить за развитием отрасли и начинать применять новые механизмы при решении повседневных задач. Популяризируйте применение новых паттернов, доводите информацию до коллег, которые немного «застряли» в прошлом. Чем больше разработчиков будет подхватывать новинки, тем быстрей будут обнаруживаться недочеты и есть все шансы, что компания «1С» будет продолжать активно работать над улучшениями.

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

Учет дополнительных расходов при поступлении товара

Сначала на примере программы «1С:Бухгалтерия 8» (ред. 3.0) рассмотрим, каким образом можно отразить поступление уже доработанного товара.

Пример 1

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

Поступление товара (футболок) от поставщика регистрируется в информационной системе с помощью документа Поступление товаров и услуг (раздел Покупки ) с видом операции Товары .

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

В результате проведения документа Поступление товаров и услуг

Дебет 41.01 Кредит 60 - на сумму приобретенного товара; Дебет 19.03 Кредит 60 – на сумму НДС.

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

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

Дополнительные расходы, связанные с приобретением товаров, могут распределяться на каждую единицу товара одним из двух способов:

  • По сумме;
  • По ко личеству.

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

Сумма дополнительных расходов указывается в соответствии с данными, отраженными в акте выполненных работ от поставщика (рис. 1).

После проведения документа Поступление доп. расходов формируются следующие бухгалтерские проводки:

Дебет 41.01 Кредит 60 – на сумму дополнительных расходов; Дебет 19.04 Кредит 60 – на сумму НДС с дополнительных расходов.

Таким образом, стоимость футболок будет увеличена на стоимость работ по нанесению логотипа. Об использовании документа Поступление доп. расходов см. видеоролик на сайте .

ИС ИТС

Подробнее об учете дополнительных расходов, связанных с поступлением товаров, см. в «Справочнике хозяйственных операций. 1С:Бухгалтерия 8» в разделе «Бухгалтерский и налоговый учет» ИС 1С:ИТС.

Доработка товара на давальческой основе

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

Пример

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

Партия футболок была передана в переработку другой организации на давальческой основе.

В табличной части документа Поступление товаров и услуг (с видом операции Товары ) необходимо указать наименование, количество, цену и общую сумму товара в соответствии с накладной от поставщика. Допустим, в графе Номенклатура будет указано наименование товара: Футболка красная х/б . Далее, товар необходимо передать переработчику.

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

Заполняя документ Передача товаров (Передача сырья в переработку) , необходимо на закладке Товары (рис. 2) заполнить в качестве обязательных реквизитов: наименование организации-переработчика и договора с ним; наименование, количество и счета учета товаров (материалов), переданных в переработку.



Обращаем внимание , что независимо от того, как учитывались передаваемые ценности (в качестве товаров или в качестве материалов), при передаче в переработку в поле Счет передачи по умолчанию устанавливается субсчет счета 10.07 - Материалы, переданные в переработку на сторону .

Таким образом, нет необходимости предварительно использовать документ Перемещение товаров для перевода товаров в материалы.

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

Факт получения футболок с логотипом от переработчика нужно зарегистрировать документом Поступление из переработки .

Для отражения выпуска продукции, полуфабрикатов, материалов или товаров (ТМЦ), произведенных силами сторонней организации, нужно заполнить закладку Продукция (рис. 3).


На этой закладке указывается:

  • Номенклатура - наименование выпущенных ТМЦ (в нашем примере - Футболка с логотипом тип 2 );
  • Количество, Цена плановая и Сумма плановая - количество и плановая себестоимость выпущенных ТМЦ;
  • Счет учета - счета учета выпущенных ТМЦ;
  • Спецификация - список нормативов расходов, необходимых для выпущенных товарно-материальных ценностей (значение поля Спецификация будет использоваться при заполнении закладок Использованные материалы и Возвращенные материалы ).

В качестве счета учета выпущенных футболок с логотипом можно указать как счет 43 (Готовая продукция ), так и счет 41.01 (Товары ) - в любом случае программа выполнит закрытие счетов затрат корректно.

Для организаций, уплачивающих налог на прибыль, суммовая оценка прямых расходов, приходящихся на выпуск, отражается так же, как в бухгалтерском учете - в плановых ценах. При закрытии месяца при выполнении регламентной операции Закрытие счета 20, 23, 25, 26 ее величина корректируется до фактической суммы расходов.

Для признания расходов по оказанию услуг сторонней организацией по производству продукции нужно заполнить закладку Услуги (рис. 4).


На этой закладке указывается:

  • Номенклатура - наименование оказанных услуг;
  • Количество, Цена и Сумма - стоимость услуг переработки (на основании этих данных прямые расходы производственного подразделения организации распределяются по видам оказанных услуг при выполнении регламентной операции Закрытие счета 20, 23, 25, 26);
  • Статья затрат - статья учета расходов по оказанию услуг переработки.

На закладке Счет затрат обязательно нужно указать следующие реквизиты:

  • Счет затрат - счет учета расходов по производству продукции силами сторонней организации (в нашем примере это субсчет 20.01 - Основное производство);
  • Подразделение затрат - производственное подразделение организации, передавшее материалы в переработку;
  • Номенклатурная группа - вид продукции, выпущенной силами сторонней организации.

Для отражения списания материалов на расходы производства нужно заполнить закладку Использованные материалы .

На этой закладке указывается наименование (Футболка красная х/б ) и количество использованных материалов, счет учета (10.07), статья учета затрат расходов по списанию материалов (Материальные расходы ). Табличную часть закладки Использованные материалы Спецификация на закладке Продукция

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

В соответствии с учетной политикой фактическая себестоимость готовой продукции формируется без использования счета 40 – Выпуск продукции (работ, услуг) .

После проведения документа Поступление из переработки формируются следующие бухгалтерские проводки:

Дебет 43 Кредит 20.01 – на сумму продукции в плановых ценах; Дебет 20.01 Кредит 60.01– на сумму услуг по переработке; Дебет 20.01 Кредит 10.07 – на себестоимость использованных материалов; Дебет 19.04 Кредит 60.01 – на сумму НДС с услуг по переработке.

Футболка с логотипом тип 2 ) будет скорректирована с учетом фактически произведенных затрат по переработке.

ИС ИТС

Подробнее о переработке материалов на стороне см. в видеозаписи лекции от 25 сентября 2014 года «Отражение операций переработки давальческого сырья в «1С:Бухгалтерии 8» (ред. 3.0)» на сайте 1С:ИТС.

Доработка товара собственными силами

Допустим, организация располагает всеми необходимыми ресурсами для того, чтобы улучшить характеристики приобретенного товара. Как отразить передачу товара в собственное производство в «1С:Бухгалтерия 8» (ред. 3.0)?

Пример

ООО «Андромеда» получила от поставщика и оприходовала на склад партию футболок, которые планируется продавать оптом.

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

В этой ситуации возникает вопрос: поскольку мы будем использовать собственный процесс производства, как правильно приходовать футболки от поставщика, в качестве товаров или в качестве материалов?

Руководствуясь Инструкцией по применению Плана счетов бухгалтерского учета финансово-хозяйственной деятельности организаций, утв. приказом Минфина России от 31.10.2000 № 94н, можно закрепить в учетной политике следующий порядок действий:

  • если при принятии к учету невозможно определить, будет ли доработан в дальнейшем данный вид товаров, следует оприходовать товар на счете 41, а в случае принятия решения о его доработке - оформить перевод товара в материалы проводкой: Дебет 10.01 Кредит 41.01;
  • если у организации при принятии ТМЦ на учет была цель доработать данный вид ТМЦ до его продажи, то правильнее отражать принятие к учету ТМЦ, используя счет 10 Материалы.

Из условий Примера 3 следует, что решение о доработке товаров было принято позднее, поэтому в табличной части документа Поступление товаров и услуг (с видом операции Товары ) в графе Счет учета указывается счет 41.01. Также необходимо указать наименование, количество, цену и общую сумму товара в соответствии с накладной от поставщика. Допустим, в графе Номенклатура будет указано наименование товара как: Футболка синяя х/б .

После того как было принято решение о доработке товара, необходимо перевести товары в материалы с помощью документа Перемещение товаров (раздел Склад ). Отметим, что программа позволяет сразу списать в производство ТМЦ, числящиеся на счете 41, без перевода их в материалы, поэтому организация может закрепить в своей учетной политике и такой способ учета.

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

  • Счет затрат - счет учета расходов производства (20.01);
  • Подразделение затрат - производственное подразделение организации, выпустившее продукцию (оказавшее услуги).

Для отражения выпуска продукции нужно заполнить закладку Продукция . На этой закладке указывается (рис. 5):

  • Продукция - наименование выпущенной продукции (в нашем примере - Футболка с логотипом тип 3 );
  • Номенклатурная группа - вид выпущенной продукции;
  • Сумма плановая - плановая себестоимость выпущенной продукции (на основании данных этого поля прямые расходы производственного подразделения распределяются по видам и наименованиям выпущенной им продукции при выполнении регламентной операции Закрытие счетов 20, 23, 25, 26 );
  • Спецификация - список нормативов расходов, необходимых для выпуска ТМЦ (значение этого поля будет использоваться при заполнении закладки Материалы ).


Для отражения списания материалов на расходы производства нужно заполнить закладку Материалы, на которой указывается:

  • Номенклатура - наименование списанных материалов (Футболка синяя х/б);
  • Количество - количество списанных материалов;
  • Счет учета - счет учета материалов (10.01);
  • Статья затрат - статья учета расходов по списанию материалов (Материальные расходы);
  • Номенклатурная группа - вид выпущенной продукции, на которую относится стоимость материалов выпуска.

Закладка Материалы может быть заполнена автоматически по спецификации (кнопка Заполнить ).

После проведения документа Отчет производства за смену сформируются соответствующие бухгалтерские проводки:

Дебет 43 Кредит 20.01 - на стоимость продукции в плановых ценах; Дебет 20.01 Кредит 10.01 – на себестоимость использованных материалов.

В процессе производства и в соответствии с первичными документами на счете 20.01 (в разрезе соответствующего производственного подразделения и номенклатурной группы) аккумулируются и остальные затраты по нанесению логотипов:

  • затраты на оплату труда работников, занятых доработкой футболок;
  • затраты на амортизацию использующегося оборудования;
  • расходные материалы и т. д.

После выполнения регламентных операций по закрытию месяца стоимость продукции (Футболка с логотипом тип 3 ) будет скорректирована с учетом фактически произведенных затрат.

ИС ИТС

Подробнее о выпуске готовой продукции см. в «Справочнике хозяйственных операций. 1С:Бухгалтерия 8» в разделе «Бухгалтерский и налоговый учет» ИС 1С:ИТС.

Комплектация товара

Теперь рассмотрим ситуацию, которая часто встречается на практике: есть несколько наименований товаров, которые надо собрать в комплект.

Пример 4

Компания ООО «Андромеда» получила от оптового покупателя заказ на партию комплектов сувенирной продукции. Комплект должен состоять из футболки, бейсболки и подарочной коробки. У компании ООО «Андромеда» необходимые товары на складе имеются, но не скомплектованы.

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

  • Склад - склад, на котором осуществляется комплектация (разукомплектация);
  • Номенклатура (в нашем примере Комплект сувенирной продукции «Спорт» );
  • Количество и Счет учета комплекта (41.01).

В табличной части указываются комплектующие, их количество и счета учета (рис. 6).


Данные в таблице комплектующих можно заполнить автоматически, указав спецификацию комплекта.

После проведения документа сформируются проводки по списанию комплектующих номенклатурных позиций с Кредита 41.01 в Дебет 41.01 счета учета готового комплекта.

Поскольку на 41 счете поддерживается количественный учет, то программа автоматически рассчитает количество создаваемых комплектов в каждой проводке (в нашем примере из трехсот единиц товара получается сто комплектов).

Такой способ надо прописать в учетной политике, и в ней же утвердить документы, которыми компания будет оформлять комплектацию.

Документ Комплектация номенклатуры (с видом операции Разукомплектация ) используется в обратной ситуации, когда комплект надо разобрать на отдельные предметы).

ИС ИТС

Подробнее об операции по комплектации номенклатуры см. в «Справочнике хозяйственных операций. 1С:Бухгалтерия 8» в разделе «Бухгалтерский и налоговый учет» ИС 1С:ИТС.

Любые типовые решения «1С» представляют собой полностью готовые продукты для использования в той или иной сфере. Однако все они открыты для редактирования.

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

Для этого существует услуга по доработке функционала.

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

Доработка функционала «1С» представляет собой автоматизацию неких индивидуальных потребностей предприятия путем изменения решения программным способом.

Примеры возможных изменений в программе 1С:

  • 1. Внесение изменений в настройки пользовательских прав и значений, установленных по умолчанию.

Возможность гибкой настройки прав является необыкновенно важным пунктом, так как права пользователей и сами пользователи являются неотъемлемой частью, без которой работы в многопользовательской системе становится невозможной.

  • 2. Внесение изменений и разработка новых различных печатных форм.

Под печатной формой подразумевается аналог документа 1С, выполненный в бумажном виде. Можно доработать существующие документы, а также добавить вновь созданные. Редактировать печатные формы можно без внесения изменений в непосредственную конфигурацию.

  • 3. Создания новой и изменений существующей отчетной документации.

Отчет является конечным продуктом каждой аналитической информационной системы, включая и продукт «1С: Предприятие». Дорабатывать и модифицировать отчетную документацию можно без внесения изменений в конфигурацию.

  • 4. Возможность написания технических зданий.

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

  • 5. Возможность добавления нового функционала в конфигурацию.

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

  • 6. Возможность оптимизации продуктивности 1С.

По показателю быстродействия, система «1С: Предприятие» занимает лидирующее место в своем сегменте. Но достижение максимально быстрой работы системы возможно лишь после внесения ряда изменений, настраиваемых под индивидуальную ИТ-структуру каждого клиента.

Ну а всем остальным, добро пожаловать под кат.

Правила и приемы доработки типовых конфигураций 1С для облегчения их дальнейшей поддержки и обновления

Итак, когда мы делаем некоторый проект (под словом «Мы» я понимаю всех людей, которые заняты в автоматизации бизнес-процессов), то надеемся, что потом он плавно перетечет в поддержку. Как правило, если все выполнено хорошо и заказчик доволен, так и происходит.

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

  • Если соблюдать некоторые правила разработки, то, потратив совсем незначительные трудозатраты на этапе проекта, в будущем можно будет сэкономить на поддержке и обновлении конфигураций.
  • И наоборот, если на этапе проекта были какие-то ошибки, поспешность, неправильное оформление кода, то потом это может вылиться в настоящий ад поддержки и обновления.

Приходилось ли кому-нибудь обновлять конфигурацию, переписанную без всяких опознавательных знаков? Понимаете ли вы, какая это боль - сравнивать старую конфигурацию поставщика с новой конфигурацией, вручную разобрать каждый случай «дважды измененных» при сравнении с текущей конфигурацией и т.д. Это все довольно проблематично.

9 простых правил оформления модификаций в типовых конфигурациях

1. Концепция минимизации «разрушений» типовой конфигурации

Первое - это даже не правило, это некая концепция минимизации «разрушений» типовой конфигурации.

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

2. Комментирование изменений кода

Второе правило заключается в том, что любое изменение кода обязательно должно быть прокомментировано .

У нас в компании мы используем следующую схему:

  • В начале изменения находится открывающий комментарий (начинается со знаков //++ )
  • В конце - закрывающий комментарий (начинается со знаков //-- )
  • А те изменения, который выполнил разработчик, находятся в середине .

Это - обязательное правило для любых изменений.

У открывающего и закрывающего комментария указывается метка изменения . Она содержит в себе следующие составляющие :

  • Префикс проекта - по умолчанию мы используем ФТО
  • Доменное имя разработчика . Оно формируется очень удобно: компания большая, распределенная, и если ты разработчика не знаешь, но его надо о нем что-то спросить, можно взять его ник из этой метки, поставить справа @fto.com.ru и отправить ему письмо, чтобы таким образом с ним связаться.
  • Дальше идет дата изменений . Когда изменения идут в рамках нескольких задач, эти связки комментариев могут быть вложенными одна в другую, и не всегда понятно, к какому открывающему блоку относится этот закрывающий комментарий, поэтому мы ориентируемся на дату. Кроме этого, по дате сразу видно, когда была сделана модификация: три года назад, полгода назад или вчера.
  • Затем идет номер задачи , который ставится только в открывающем комментарии . Почему только там? Чтобы при глобальном поиске по номеру задачи в выборку попадало только начало изменений кода, от которого дальше уже можно вниз смотреть, иначе будет двоиться. Например, при передаче задачи на code-review очень удобно искать именно по метке.

Примеры

Вот так выглядит вставка кода:

Вот так выглядит удаление кода - мы не удаляем код полностью, мы комментируем код. За счет этого всегда видно, что было закомментировано, и в случае чего можно быстро вернуться назад.

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

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

Здесь на картинке видно, что используя «попроцедурное сравнение» можно просто выделить эту процедуру при объединении , и она вся полностью (вместе с метками) перенесется. Или наоборот, можно снять напротив нее галочку, чтобы не переносить.

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

3. Добавление объектов верхнего уровня

Следующее правило - это добавление в конфигурацию объектов верхнего уровня (справочников, документов, регистров и т.д.).

Это правило заключается в том, что имена объектов обязательно должны начинаться с префикса. Для чего?

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

Синонимы объектов должны начинаться с префикса в круглых скобках . Это позволяет выделить наш добавленный объект в интерфейсе.

Конечно же, это очень спорное правило, и его применение нужно согласовывать с заказчиком . Наших клиентов такая схема устроила, поэтому она у нас прижилась и попала в правила. Но тут решать только вам и клиенту - надо так делать или не надо.

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

Итак, подытожим:

  • Имена задаются с префиксом,
  • Синонимы - с префиксом в круглых скобках
  • И комментарий обязательно должен содержать специальную метку.

4. Добавление подчиненных объектов

Под добавлением подчиненных объектов я подразумеваю добавление реквизитов, макетов, форм и т.д. в объекты конфигурации.

Здесь нужно сразу выделить две ситуации, куда мы добавляем подчиненный объект:

  • В типовой объект конфигурации
  • Или в какой-то объект, который был добавлен ранее в рамках проекта.

Рассмотрим каждую из этих ситуаций отдельно.

Для добавления подчиненных объектов в типовые объекты конфигурации действуют следующие правила.

  • Имена должны начинаться точно так же с префикса . За счет этого мы добиваемся уникальности имени и визуально тоже всегда понятно, что это - наш объект.

  • Синоним заполняется без префикса , потому что здесь уже нет необходимости выделять наши объекты, наши реквизиты.

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

Итак, давайте подытожим, как происходит добавление подчиненных объектов в типовые объекты конфигурации:

  • Имена задаются с префиксом,
  • Синонимы по общим правилам
  • И комментарии содержат специальную метку.

А если мы добавляем подчиненные объекты в те объекты, которые были ранее добавлены в рамках проекта и уже содержат в своем имени префикс, то:

  • Их имена не должны содержать префикса , потому что и так понятно, что объект уже уникален, и как-то еще специально его выделять нет необходимости.

  • Синонимы таких подчиненных объектов также задаются без префикса , потому что никакого специального выделения не надо.

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

А теперь подытожим, как добавляются подчиненные объекты в объекты, добавленные в рамках проекта:

  • Имена без префикса.
  • Синонимы без префикса.
  • И комментарии должны содержать специальную метку только тогда, когда они добавлены в рамках другой задачи.

Если это правило объединить для обоих случаев и «разложить по полочкам», то получится следующая табличка:

  • Новые объекты:
    • Имя начинается с префикса.
    • Синонимы - с префиксом в круглых скобках.
    • Комментарий содержит метку.
  • Подчиненные объекты, которые мы добавляем в типовые объекты:
    • Имена начинаются с префикса,
    • Синоним по общим правилам
    • В комментарий ставим метку.
  • А если мы добавляем подчиненные объекты в объекты, добавленные в рамках проекта, то
    • Для них никаких специальных правил не действует,
    • Но если задача другая, то в комментарий точно так же ставим метку.

5. Добавление предопределенных элементов

Следующее правило - добавление предопределенных элементов.

Здесь точно так же можно выделить две ситуации:

  • Когда мы добавляем предопределенный элемент в типовой объект конфигурации (в справочник, в план видов характеристик)
  • И когда мы добавляем предопределенный элемент в объект, добавленный в рамках проекта.

Если мы добавляем предопределенный элемент в типовой объект конфигурации ,

  • Его имя точно так же должно начинаться с префикса . Тем самым мы гарантируем уникальность его имени и сможем сразу визуально определить наш добавленный элемент.
  • Код и наименование будут формироваться по общим правилам ,
  • Но метку тут, к сожалению, поставить некуда . Поэтому найти этот добавленный предопределенный элемент глобальным поиском по задаче не получится.

А если мы добавляем предопределенные элементы в объекты, добавленные в рамках проекта , то

  • Его имя не будет содержать префикса , так как нет необходимости его как-то выделять.

Итак, если провести аналогию с предыдущей таблицей, то:

  • Предопределенные элементы для типовых объектов добавляются с префиксом,
  • А все остальные - по общим правилам, никаких специальных добавлять префиксов не надо.

6. Использование общих модулей и их строгая структура

Следующее правило касается использования общих модулей и организации для них строгой структуры.

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

Во-вторых, обратите внимание, что общие модули добавляются по правилам добавления объектов верхнего уровня (имя и синоним с префиксом, метка в комментарии и т.д.)

В-третьих, имена модулей должны быть аналогичны соответствующим типовым модулям .

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

  • ФТО_ОбщегоНазначенияКлиент,
  • ФТО_ОбщегоНазначенияСервер,
  • ФТО_ОбщегоНазначениеГлобальный,
  • ФТО_РегламентныеЗаданияСервер
  • И т.д.

А какие-то большие отдельные задачи можно (и, наверное, нужно) выносить в отдельные общие модули .


7. Использование подписок и их строгая структура

Следующее правило - это использование подписок и их строгая структура. В чем его суть?

Подписки следует использовать для обработки различных событий, связанных с типовыми объектами , таких как:

  • Перед записью
  • При записи
  • И т.д.

  • Можно конечно взять и отредактировать модуль типового объекта, вставив свой код в соответствующую процедуру. Но это - плохой способ .
  • Лучше вместо этого добавить подписку на обработку этого события .

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

  1. Для всех однотипных событий в системе добавляется только одна подписка . Например, если мне нужно для различных справочников в событии «Перед записью справочника» задействовать свой алгоритм, то для всех этих справочников я использую только одну добавленную подписку «Перед записью справочника».
  2. В источнике выделяются все объекты в рамках этого класса (например, все справочники)
  3. Для добавленной подписки создается отдельный модуль, который называется точно так же (просто для удобства).
  4. В основном обработчике события определяется условие, анализирующее вид объекта (вид справочника).
  5. И уже в зависимости от вида объекта выполняются те или иные действия .

Могу показать на примере. Предположим, есть такая задача: при проведении документа «Авансовый отчет» делать записи в добавленный ранее регистр накопления.

Сначала мы добавляем общий модуль ФТО_ДокументыОбработкаПроведения по всем правилам.

  • В качестве источника указываем ДокументОбъект (все документы);
  • В качестве обработчика - наш добавленный выше модуль.

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

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

В результате, порядок действий для создания подписки такой:

  • Одна подписка,
  • Один общий модуль
  • И ничего другого уже не надо: модуль документа остается неизменным - в «дважды измененных» он уже не покажется.


8. Редактирование форм

Следующее правило - редактирование форм.

Здесь точно так же выделим два момента, две ситуации:

  • Когда мы редактируем типовые формы;
  • И когда мы редактируем формы, добавленные в рамках проекта.

Первая ситуация - это редактировани е типовых форм, форм типовых объектов . Это самый спорный пункт правил. В свое время, еще во времена обычных форм, когда проекты в основном делались на УПП, у нас было много дискуссий по поводу того, что делать с формами. Какие были варианты?

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

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

В конфигурациях на базе БСП 2 (таких, как ERP, Бухгалтерия и т.д.) добавился обработчик СобытияФорм.ПриСозданииНаСервере() , который среди прочего, заходит еще и в переопределяемый модуль .

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

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

Кроме того, в конфигурациях на базе БСП 2 переопределены еще и другие обработчики форм - такие как ПриЧтенииНаСервере(), ПередЗаписьюНаСервере() и т.д. И в этих обработчиках также можно активно использовать переопределение вызываемых процедур. Тем более что поставщиком переопределяемый модуль теоретически не меняется, и там можно без боязни конфликтов писать свой код.

Если мы редактируем форму, добавленную в рамках проекта, то тут ничего специально делать не надо, мы редактируем ее обычным способом, руками .

9. Принципы работы с ролями

И последнее правило - это принципы работы с ролями.

Принципы работы с ролями заключаются в следующем:

  1. Если возможно, то типовые роли следует всегда оставлять неименными . Нужно хорошо подумать, действительно ли необходимо изменить именно типовую роль или можно поступить как-то по-другому.
  2. Права на добавленные объекты конфигурации мы назначаем в новых, специально созданных ролях. Поэтому когда я добавляю в конфигурацию отчет, и для него нет подходящей заранее добавленной нами роли, я создаю отдельную роль. И потом уже эта роль добавляется в нужные профили. А типовые роли не меняются.
  3. И если есть изменения в RLS, то они оформляются по правилам редактирования модулей .

Например, если мне нужно поменять RLS, то я ставлю открывающий комментарий, комментирую старый код, потом дописываю свой и ставлю закрывающий комментарий. Всегда понятно: кто, зачем (в рамках какой задачи) и когда я менял.

Итак, я перечислил все девять простых правил оформления модификаций.

Дополнительные объекты и приемы, облегчающие жизнь

В заключение я расскажу о некоторых объектах и приемах, которые могут облегчить жизнь разработчику.

1. Самоидентификация тестовых баз

Первый прием - это самоидентификация тестовых баз.

Суть в том, что:

  • есть некоторая константа, в которой хранится адрес рабочей продуктивной базы .
  • При старте системы происходит проверка этого адреса : соответствует он адресу рабочей базы или не соответствует.
  • И если не соответствует (база не рабочая), то происходит замена заголовка системы .

На скриншоте показано, как это выглядит. Это особенно полезно тогда, когда у разработчиков (или у консультантов) открыто много баз (рабочая, тестовая, разработческая и т. д.) и они могут нечаянно ошибиться и поменять данные в рабочей базе. А если заголовок изменен, то уже «на автомате» - глаза в левый верхний угол, смотришь, что это за база - ага, тестовая, можно менять.

Таким образом, мы делаем изменение данных в информационных базах более безопасным.

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

  • обмены данными,
  • уведомления пользователей,
  • какие-то рассылки,
  • тяжелые регламентные задания.
  • И т.д.

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

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

2. Обработка инициализации

Следующий прием - обработка инициализации.

  • Это добавляемая в конфигурацию обработка, которая в своем коде содержит свою текущую версию.
  • Одновременно с этим в конфигурацию также добавляется некоторая константа, которая хранит текущую версию обработки инициализации.
  • При старте системы производится проверка,
  • И, если версия поменялась, выполняются необходимые обработчики и происходит установка нового значения константы.

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

  • Увеличить версию обработки инициализации;
  • Описать в коде порядок программного заполнения данных ;
  • И после этого новая версия обработки автоматически через хранилище попадет во все нужные базы, запустится там и выполнит все необходимые действия .

На схеме этот порядок работы показан так:

  • Старт системы
  • Сравнение версии константы с версией обработки .
  • Если не совпадает , выполняются последовательно все необходимые обработчики ,
  • Устанавливается новое значение константы .

В результате везде, во всех базах данные обновлены.

3. Справочник предопределенных значений

Следующий прием - это справочник предопределенных значений.

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

Какие тут есть варианты реализации?

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

Этот справочник содержит в себе только один реквизит с типом СправочникСсылка (ссылка на все справочники).

Если мне в рамках задачи нужно обратиться к какому-то элементу, я в этот справочник добавляю предопределенный элемент (например, Контрагент_Агроимпульс)

И потом уже в коде обработки инициализации либо руками я заполняю значение этого справочника нужным мне контрагентом.

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

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

4. Просмотр временных таблиц в отладчике

Ну и последний прием - это просмотр временных таблиц в отладчике.

  • При отладке сложных запросов с временными таблицами нужна возможность просматривать содержимое этих временных таблиц .
  • Для этих целей можно использовать специальную функцию для просмотра временных таблиц.
  • Эту функцию удобно расположить в глобальном модуле .

  • И назвать как-нибудь коротко, например ВТ()

В этом случае:

  • Я ставлю точку останова в месте, где у меня есть запрос.
  • В окне «Вычислить выражение» пишу ВТ(Запрос) ;
  • Нажимаю «Рассчитать» и получаю структуру временных таблиц запроса , чтобы просмотреть, что там за данные.

Это очень удобная функция, мы ее постоянно используем. Особенно при расчете себестоимости, или в таких конфигурациях, как ЗУП. Я если честно, не понимаю, как другие без нее живут.

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

Заключение

Всем спасибо. У меня есть небольшой сайт, на этом сайте в подробном изложении выложены все эти правила и не только они - заходите, читайте, пишите мне на почту или в скайп.

Мне эта тема интересна, я готов по ней общаться. Мне правда важно, чтобы у вас тоже все получилось.