Доработка проведения в ERP 2.5. (Регистры накопления, Регистры сведений)

10.01.21

Разработка - Механизмы типовых конфигураций

Покажу точки входа для доработки "типового" проведения документов в ERP для регистров оперативного учета. Рассмотрим три основные ситуации: нужно изменить имеющееся проведение документа; нужно сделать записи в существующие регистры; нужно с нуля описать алгоритм проведения в добавленный регистр. Пример реализован на 1С:ERP Управление предприятием 2 (2.5.4.120)

1. Необходимо изменить имеющееся проведение документа.

Рассмотрим на примере документа "Заказ клиента". Допустим в документе изменен алгоритм определения Назначения: в шапку документа добавлен дополнительный реквизит "допНазначение" с типом СправочникСсылка.Назначения. Если этот реквизит заполнен, то в движение регистра накопления "Обеспечение заказов" должно подставляться его значение, иначе должен выполняться типовой механизм документа.

Для начала следует отметить, что для всех документов в ERP сам алгоритм Обработки проведения вынесен в общий модуль "ПроведениеДокументов".

 
 Модуль объекта документа ЗаказКлиента

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

 
 Модуль менеджера документа ЗаказКлиента

В рамках нашей задачи, нас будут интересовать функция "ТекстЗапросаТаблицаОбеспечениеЗаказов" и процедура "ЗаполнитьПараметрыИнициализации".

Функция "ТекстЗапросаТаблицаОбеспечениеЗаказов" возвращает текст запроса, результат которого будет выгружен в таблицу движений по регистру накопления "Обеспечение заказов". Поэтому важно при внесении изменений в этот запрос не изменять синонимы полей, иначе они не попадут в движения.
Добавим условие в текст запроса:

 
 Модуль менеджера документа ЗаказКлиента

Чтобы минимизировать количество таблиц базы данных, к которым идет обращение в запросе, все необходимые реквизиты "шапки" документа получаются отдельным запросом и помещаются в параметры запроса в процедуре "ЗаполнитьПараметрыИнициализации".
Определим наш добавленный реквизит как параметр запроса:

 
 Модуль менеджера документа ЗаказКлиента

На этом доработка по первому пункту статьи окончена.

2. Необходимо сделать записи в существующие или новые регистры.

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

В "ERP Управление предприятием 2" учет драгоценных металлов реализован довольно скудно: их содержание в номенклатуре указывается непосредственно в табличной части самой номенклатуры. И, если с разными партиями нам приходит товар с разным содержанием драгметаллов, то отразить такую ситуацию в системе мы не сможем. Я буду показывать не полный бизнес процесс, а урезанный, которого должно хватить для демонстрации. Добавим в конфигурацию новый документ "ДвижениеДрагметаллов" с двумя табличными частями:

 
 Структура метаданных табличных частей

 И два регистра накопления:

 
 Структура метаданных регистров

Теперь рассмотрим цепочку проведения нового документа.

В ERP проведение начинается не с процедуры ОбработкаПроведения, а с процедур ПередЗаписью и ПриЗаписи.

 
 Модуль объекта документа ДвижениеДрагметаллов

В процедуре ПередЗаписью "ДополнительныеСвойства" документа заполняются служебными значениями

 
 Общий модуль ПроведениеДокументов

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

 
 Общий модуль ПроведениеДокументов

Давайте разберемся что такое Учетные механизмы и как их использовать.

Все регистры конфигурации (РС, РН, РР, РБ) сгруппированы в некие смысловые области - Учетные механизмы - в которых описывается по каким регистрам необходимо произвести движения, контроль движений, а также отложенные движения. Один учетный механизм может использоваться для нескольких документов. В функции "УчетныеМеханизмыКонфигурации" общего модуля "ПроведениеДокументов" хранятся все возможные механизмы конфигурации, а затем в модуле менеджера документа указывается его принадлежность к конкретным учетным механизмам.

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

 
 Общий модуль ПроведениеДокументов

Добавим новый общий модуль "УчетДрагметаллов"

 
 Общий модуль УчетДрагметаллов

В функции "ПараметрыДляПроведенияДокумента" вызывается функция-конструктор "ПараметрыУчетногоМеханизма", с помощью которой определяется взаимодействие данного механизма с регистрами конфигурации.

 
 Общий модуль ПроведениеДокументов

(КонтрольныеРегистрыЗаданий - это регистры, по которым необходимо произвести отложенные движения)

(Если возвести флаг параметра "Производный" в Истина, то в модуле механизма обязательно необходимо описать процедуры "ПередЗаписьюДвиженийДокумента" и "ПослеЗаписиДвиженийДокумента". Приведу пример из учетного механизма "ОперативныйУчетТоваровОрганизаций")

 
 Общий модуль ЗапасыСервер (ОперативныйУчетТоваровОрганизаций)

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

 
 Общий модуль ПроведениеДокументов

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

Для всех регистров, которые указаны в параметре "КонтрольныеРегистрыИзменений", в модуле набора записей регистра проверяется изменение движений ДО и ПОСЛЕ записи, чтобы не проводить "лишний" контроль.

 
 Модуль набора записей регистра накопления ОстаткиДрагметаллов

Если это первое проведение документа или данные для проведения изменились, то контроль осуществляется в модуле механизма в процедуре "ИнициализироватьДанныеКонтроляИзменений". А возведения флага отказа от проведения и сообщения пользователю описываются в модуле механизма в процедуре "СообщитьОРезультатахКонтроляИзменений".

Движение по независимым регистрам сведений рассмотрим на примере Реестра документов.

В конфигурации уже определен соответствующий Учетный механизм:

 
 Общий модуль ПроведениеДокументов
 
 Модуль менеджера регистра сведений РеестрДокументов

(Для отражения независимых регистров сведений используется экспортная процедура "ЗаписатьДанные", в отличии от зависимых регистров, где используется "ОтразитьДвижения")

Теперь, когда мы подготовили новый учетный механизм, необходимо описать его принадлежность к документу ДвижениеДрагметаллов. Дополнительно добавим движение нового документа в РС "РеестрДокументов".

 
 Модуль менеджера документа ДвижениеДрагметаллов

Также опишем получение данных для движений нового документа

 
 Модуль менеджера документа ДвижениеДрагметаллов

И наконец перейдем к процедуре "ПровестиДокумент" общего модуля "ПроведениеДокументов", из которой происходит весь процесс проведения, и разберем его подробнее:

Процедура ПровестиДокумент(Документ, Отказ, ДопПараметры)
	
    //++ Свойства мы определяли в модуле объекта документа в процедуре ПередЗаписью
    Свойства = СвойстваДокумента(Документ);

    МенеджерДокумента = Документы[Документ.Метаданные().Имя];
    ПроведениеДокументовЛокализация.ПереназначитьМодульПолученияДанныхДокумента(МенеджерДокумента);
	
    //++ Учетные механизмы документы определены в модуле менеджера в функции ЗарегистрироватьУчетныеМеханизмы
    МеханизмыДокумента    = УчетныеМеханизмыДокумента(МенеджерДокумента);

    //++ В учетных механизмах конфигурации мы добавили новый механизм "УчетДрагметаллов"
    МеханизмыКонфигурации = УчетныеМеханизмыКонфигурации();
	
    //++ Получение полного списка регистров из всех учетных механизмов документа
    РегистрыКРегистрации = Новый Массив;
    ДвижимыеРегистры     = Новый Структура;
    Механизмы            = Новый СписокЗначений;
    Для каждого Механизм Из МеханизмыДокумента Цикл
        МодульМеханизма = ОбщегоНазначения.ОбщийМодуль(МеханизмыКонфигурации[Механизм]);
		
        ПараметрыМеханизма = МодульМеханизма.ПараметрыДляПроведенияДокумента(Документ, Свойства); // см. ПроведениеДокументов.ПараметрыУчетногоМеханизма
        ПараметрыМеханизма.Вставить("МодульМеханизма", МодульМеханизма);
		
        Если Свойства.РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
            ОбщегоНазначенияКлиентСервер.ДополнитьМассив(РегистрыКРегистрации, ПараметрыМеханизма.ПодчиненныеРегистры);
			
            Для каждого Регистр Из ПараметрыМеханизма.ПодчиненныеРегистры Цикл
                ДвижимыеРегистры.Вставить(Регистр.Имя);
            КонецЦикла;
			
            Для каждого Регистр Из ПараметрыМеханизма.НезависимыеРегистры Цикл
                ДвижимыеРегистры.Вставить(Регистр.Имя);
            КонецЦикла;
        КонецЕсли;
		
        Механизмы.Добавить(ПараметрыМеханизма, Механизм);
    КонецЦикла;
    Механизмы.СортироватьПоПредставлению();
	
    //++ Очистка "старых" движений и возведение флагов "Записывать" движений документа в Истина
    ПодготовитьНаборыЗаписейКРегистрацииДвижений(Документ, Свойства, РегистрыКРегистрации);
	
    Если Свойства.РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
        //++ Получение таблиц движений из модуля менеджера документа
        ТаблицыДляДвижений = ТаблицыДляДвижений(Документ, МенеджерДокумента, ДвижимыеРегистры, ДопПараметры);
        //++ Запись полученных таблиц в Движения документа
        ОтразитьДвиженияПодчиненныхРегистров(Механизмы, Документ, ТаблицыДляДвижений, Отказ);
    КонецЕсли;
	
    //++ Добавление в ДополнительныеСвойства документа МВТ для контроля
    МенеджерВременныхТаблиц = МенеджерВременныхТаблицКонтроля(Документ);
    //++ Добавление служебных свойств наборам записей контрольных и отложенных регистров
    УстановитьДопСвойстваКонтрольныхРегистров(Механизмы, Документ, МенеджерВременныхТаблиц);
	
    //++ Обработка "Производных" механизмов до записи движений
    ОбработатьДокументПередЗаписьюДвижений(Механизмы, Документ, МенеджерВременныхТаблиц, Отказ);
	
    //++ Запись движений в базу данных
    Документ.Движения.Записать();
	
    //++ Обработка "Производных" механизмов после записи движений
    ОбработатьДокументПослеЗаписиДвижений(Механизмы, Документ, МенеджерВременныхТаблиц, Отказ);
	
    //++ Старт механизма контроля движений
    ВыполнитьКонтрольРезультатовПроведения(Механизмы, Документ, МенеджерВременныхТаблиц, Отказ);
	
    Если Свойства.РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
        //++ Запись независимых регистров сведений в базу данных
        ЗаписатьДвиженияНезависимыхРегистров(Механизмы, Документ, ТаблицыДляДвижений, Отказ);
    КонецЕсли;
	
    Если Не Отказ Тогда
        //++ Старт механизма отложенного движения
        СформироватьЗаданияНаОтложенныеДвижения(Документ, МенеджерВременныхТаблиц);
    КонецЕсли;
	
    МенеджерВременныхТаблиц.Закрыть();
	
КонецПроцедуры

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

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

Нужный нам регистр отражен в учетном механизме "ОсновныеСредства":

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

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

 
 Общий модуль ПроведениеДокументов
 
 Общий модуль ДокументыПоОССервер

Осталось добавить новый механизм для документа "ОтражениеЗарплатыВФинансовомУчете" и описать получение таблицы движений

 
 Модуль менеджера документа ОтражениеЗарплатыВФинансовомУчете

 

ERP ЕРП Проведение Движения Регистр накопления сведений

См. также

Связь настроек спецификации и настроек структуры заказа в ЕРП 2.5

Механизмы типовых конфигураций Платформа 1С v8.3 1С:ERP Управление предприятием 2 Бесплатно (free)

Проблемы при создании ресурсной спецификации. Связь настроек спецификации и настроек структуры заказа в ЕРП 2.5.

06.05.2024    406    It-digit    1    

2

Ценовая власть. Выносим из цикла схему СКД

Механизмы типовых конфигураций Ценообразование, анализ цен Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Россия Абонемент ($m)

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

1 стартмани

11.04.2024    621    tango    1    

3

Формула в реквизите. Приквелл к сериалу "Ценовая власть"

Механизмы типовых конфигураций Платформа 1С v8.3 1С:Управление торговлей 11 Россия Абонемент ($m)

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

10 стартмани

11.04.2024    485    tango    5    

4

Ценовая власть. Второй сезон

Механизмы типовых конфигураций Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Россия Бесплатно (free)

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

08.04.2024    851    tango    0    

2

Ценовая власть или Управление ценообразованием (УТ 11.5)

Ценообразование, анализ цен Механизмы типовых конфигураций Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 11 Россия Управленческий учет Абонемент ($m)

Ценовая власть - это способность (возможность) компании изменять в некоторых пределах отпускную цену своего товара (услуг, продукции). Чем в более широких пределах вы можете играть в цену продажи, тем больше этой власти у вас. Если вы не можете управлять отпускной ценой, то это или не ваш бизнес, или не бизнес вовсе. Здесь в рубрике "База знаний аналитика и руководителя проекта" слово проект не ограничено "проектом в 1С". Посмотрим, что для этого есть в УТ 11.5.

1 стартмани

05.04.2024    698    tango    12    

2

Расширяем возможности дополнительных обработок и настраиваем их отладку

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

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

07.02.2024    2875    YA_418728146    11    

49

Регистры накопления в 1С:КА2 и 1С:ERP для расчета НДФЛ, страховых взносов и взаиморасчетов с сотрудниками на январь 2024 года. Краткое описание

Зарплата Механизмы типовых конфигураций Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х Россия Бухгалтерский учет НДФЛ Абонемент ($m)

Для расчета зарплаты и соответствующих налогов в конфигурациях 1С:КА2 и 1С:ERP используется 22 регистра накопления, 7 регистров сведений, 1 регистр расчета и бухгалтерские проводки. В таблице приведены названия этих регистров, указаны основные регистраторы и виды движений приход/расход. В описании приводится краткое функциональное назначение регистров в основных зарплатных процессах. Описание регистров родилось из черновиков при написании различных отчетов и обработок при эксплуатации 1С-овских конфигураций и исправлении ошибок по НДФЛ, взаиморасчетов с сотрудниками и прочих. Информация не претендует на полноценное описание работы регистров, скорее это дискуссионный материал. Но, возможно, кому-то пригодится и сократит время при подготовке отчетности за непростой (в плане учета зарплаты) 2023 год. А возможно, кто-то поделится своим опытом.

1 стартмани

10.01.2024    1382    8    2ncom    6    

8

Шаблоны новых объектов 1С для 1С:Бухгалтерии предприятия

Инструментарий разработчика БСП (Библиотека стандартных подсистем) Механизмы типовых конфигураций Платформа 1С v8.3 1С:Бухгалтерия 3.0 Бесплатно (free)

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

28.12.2023    5239    mrXoxot    11    

104
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Shmell 538 10.01.21 12:59 Сейчас в теме
Алексей, для какой версии ERP данный гайд подходит? т.к. от версии к версии (вернее к редакции) - механизмы меняются слегка...
rpgshnik; +1 Ответить
2. BuriyLesha 583 11.01.21 04:49 Сейчас в теме
(1)да, соглашусь. конкретный пример реализован на версии 1С:ERP Управление предприятием 2 (2.5.4.120). Но механизм работает и на 2.4.*
Дмитрий74Чел; Shmell; +2 Ответить
3. user705698_bursev 11.01.21 09:27 Сейчас в теме
(2) В версии 2.4.11.88 общего модуля ПроведениеДокументов просто нет. Видимо, Ваш гайд все же больше касается новых версий.
4. BuriyLesha 583 11.01.21 12:00 Сейчас в теме
(3)да, на версии 2.4.11.* проведение реализовано еще "по старому"
5. sm.artem 15 12.01.21 05:32 Сейчас в теме
Спасибо за статью! Полезный материал. Да, один в один механизм подходит для версий 2.5, в 2.4 - несколько отличается, но в целом этапы подготовки к проведению похожи
6. Hatson 529 14.01.21 10:32 Сейчас в теме
По сути дела нет смысла разбираться во всём этом, т.к. в следующем релизе всё снова переделают. Необходимо применять обычный говнокод.
user1767032; user1485340; vad7; payta; triviumfan; d4rkmesa; +6 6 Ответить
7. BuriyLesha 583 14.01.21 10:59 Сейчас в теме
(6) предыдущий механизм проведения продержался несколько лет :) так что, думаю потребность у людей возникать будет еще долго.

Необходимо применять обычный говнокод.

не понял, к чему эта фраза относится?
8. user1515313 21.02.21 19:08 Сейчас в теме
(7) Для полноты статьи не хватает описания такого варианта: Необходимо дополнить проведение имеющееся документа ещё по одному регистру.
Общий модуль
krlexa; Дмитрий74Чел; rpgshnik; Donat; +4 Ответить
9. BuriyLesha 583 25.02.21 10:39 Сейчас в теме
(8)думаю это частный случай второй части статьи: там я добавил как новый документ, так и новые регистры.
Но спасибо Вам за предоставленный код, он может кому-нибудь пригодиться ;)
10. skv_79 363 12.08.21 12:46 Сейчас в теме
Раньше была похожая статья, но ее писал на базе ERP 2.4 https://infostart.ru/1c/articles/1097936/
11. Hatson 529 18.05.22 14:20 Сейчас в теме
12. user728106 02.06.22 11:06 Сейчас в теме
Подскажите, как лучше сделать, если по условию нужно не делать движения по части регистров?
13. BuriyLesha 583 02.06.22 12:41 Сейчас в теме
(12)данные для движений получаются запросами. поэтому вы можете в самих запросах эти условия и прописать.
14. user1485340 03.08.22 10:32 Сейчас в теме
Спасибо большое за статью! хотелось бы посмотреть саму базу, на которой создавали новый документ
15. BuriyLesha 583 03.08.22 11:36 Сейчас в теме
(14) база уже давно удалена :)
все внесенные изменения описаны в "спойлерах" в примере кода.
возможно интересует что-то конкретное?
16. user1485340 03.08.22 11:51 Сейчас в теме
(15) Для удаления записей при отмене проведения для независимых регистров надо что-то отдельно писать?
17. BuriyLesha 583 03.08.22 16:25 Сейчас в теме
(16) да, независимые регистры на то и независимые :)
user1485340; +1 Ответить
18. user1485340 03.08.22 16:32 Сейчас в теме
19. G13ma 18.10.22 17:20 Сейчас в теме
Спасибо за примеры, нужно было добавить в 2.5. новый документ с регистром, благодаря вашей статье все получилось сделать.
20. LomayaZakat 04.04.24 16:09 Сейчас в теме
Отличная статья. Очень помогла.
21. BuriyLesha 583 05.04.24 12:09 Сейчас в теме
(20)приятно, что даже спустя столько лет, статья все еще приносит пользу :)
Оставьте свое сообщение