Выгрузка характеристик номенклатуры в бухгалтерию

Публикация № 730593

Обмен - Перенос данных из 1C8 в 1C8

Обмен с бухгалтерией Характеристики номенклатуры Выгрузка характеристик Номенклатура переход на учет по характеристикам использование перейти к учету создание характеристиками замена

6
Эта статья может быть полезна тем, кто хочет избежать «свёртки» номенклатуры с характеристиками при выгрузке в базу бухгалтерии. В «1С Бухгалтерия» версий 2.0 и 3.0 нет понятия «характеристика номенклатуры», поэтому при выгрузке, например, из УНФ в базу бухгалтерии номенклатура с характеристиками сворачивается в одну позицию без характеристик. В статье на примере конфигураций «УНФ 1.6» и «БП 3.0» описана доработка правил обмена, которая позволяет выгружать каждую комбинацию «Номенклатура + Характеристика» в виде независимой номенклатуры в базу бухгалтерии.

СОДЕРЖАНИЕ

I ВВЕДЕНИЕ

II ТЕРМИНОЛОГИЯ И ОБЩИЕ ЗАМЕЧАНИЯ

III ОБЩЕЕ ОПИСАНИЕ НЕОБХОДИМЫХ ДОРАБОТОК

IV РЕАЛИЗАЦИЯ

1. ИЗМЕНЕНИЯ В КОНФИГУРАЦИИ. ДОБАВЛЕНИЕ ВСПОМОГАТЕЛЬНЫХ ОБЪЕКТОВ В КОНФИГУРАЦИЮ

2 ИЗМЕНЕНИЯ В ПРАВИЛАХ ОБМЕНА. ВЫГРУЗКА ЭЛЕМЕНТОВ СПРАВОЧНИКА «НОМЕНКЛАТУРА»

2.1 ЧТО НУЖНО СДЕЛАТЬ

2.2 КУДА ВНОСИТЬ ИЗМЕНЕНИЯ

2.3 КАКИЕ ИЗМЕНЕНИЯ ВНОСИТЬ

2.4 СОСТАВ ИЗМЕНЕНИЙ

3 ИЗМЕНЕНИЯ В ПРАВИЛАХ ОБМЕНА. ВЫГРУЗКА ПОЛЕЙ ТИПА «НОМЕНКЛАТУРА»

3.1 ЧТО НУЖНО СДЕЛАТЬ

3.2 КУДА ВНОСИТЬ ИЗМЕНЕНИЯ

3.3 СОСТАВ ИЗМЕНЕНИЙ

4 ДОПОЛНИТЕЛЬНЫЕ ИЗМЕНЕНИЯ В ПРАВИЛАХ ОБМЕНА

 

 

I ВВЕДЕНИЕ

Ниже рассматривается выгрузка номенклатуры с использованием "Конвертации данных 2". Вариант для "Конвертации данных 3" предложен другим автором: //infostart.ru/public/1012589/

 

При переводе базы УНФ 1.6 на учёт номенклатуры по характеристикам для одного из клиентов (с помощью обработок infostart.ru/public/556773/) мы столкнулись с тем, что клиент не хочет менять структуру номенклатуры в связанной базе бухгалтерии БП 3.0.

 

Проблема сводилась к следующему:

Допустим, в базе УНФ ведётся учёт по характеристикам и присутствует номенклатура «Бетолюкс аква краска для полов» с шестью характеристиками «A 0.9 л»; «A 2.7 л»; «A 9 л»; «C 0.9 л»; «C 2.7 л»; «C 9 л».

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

Допустим, мы хотим, чтобы каждая комбинация «Номенклатура + Характеристика» была выгружена в базу бухгалтерии в виде независимой позиции номенклатуры без характеристик, то есть чтобы в бухгалтерии нашей номенклатуре с шестью характеристиками из УНФ соответствовали шесть позиций номенклатуры без характеристик:

1) «Бетолюкс аква краска для полов A 0.9 л»

2) «Бетолюкс аква краска для полов A 2.7 л»

3) «Бетолюкс аква краска для полов A 9 л»

4) «Бетолюкс аква краска для полов C 0.9 л»

5) «Бетолюкс аква краска для полов C 2.7 л»

6) «Бетолюкс аква краска для полов C 9 л»

 

Далее в статье предлагается способ решения описанной задачи.

 

Сразу оговоримся, что:

1. Решение тестировалось только на конфигурациях «УНФ 1.6.10.38» и «Бухгалтерия 3.0.52.39». Всё же постараемся описать решение в виде общего алгоритма, не привязанного к конкретным конфигурациям.

2. Решение затрагивает только односторонний обмен УНФ -> Бухгалтерия.

3. Предполагается, что синхронизация номенклатуры выполняется по реквизиту «Код».

4. Предполагается, что используются индивидуальные характеристики номенклатуры (не рассматривается вариант характеристик, общих для вида номенклатуры).

5. Решение предполагает добавление в конфигурацию одной константы и одного регистра сведений

6. Решение предполагает изменение правил обмена (а это значит, что при обновлении правил обмена необходимо будет переносить изменения в новые правила обмена).

 

II ТЕРМИНОЛОГИЯ И ОБЩИЕ ЗАМЕЧАНИЯ

Далее в статье под «виртуальной» номенклатурой понимается номенклатура, выгружаемая в бухгалтерию для каждой комбинации «Номенклатура + Характеристика» (выше в примере это, например, номенклатура «Бетолюкс аква краска для полов A 0.9 л»).

Идентификаторы объектов и переменных, которые будут встречаться далее, могут включать префикс «ГИ_». Этот префикс мы добавляем к собственным объектам при редактировании типовых конфигураций.

 

III ОБЩЕЕ ОПИСАНИЕ НЕОБХОДИМЫХ ДОРАБОТОК

 

Обмен с бухгалтерией в контексте выгрузки номенклатуры состоит из двух этапов:

Этап 1. Выгрузка элементов справочника «Номенклатура»

Этап 2. Выгрузка полей типа «Номенклатура» (например, реквизитов «Номенклатура» в табличных частях документов)

 

Рассмотрим подробнее, каким образом нам необходимо модифицировать выгрузку на каждом из этапов.

 

Этап 1. Выгрузка элементов справочника «Номенклатура»

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

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

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

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

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

Для каждой виртуальной номенклатуры необходимо будет генерировать своё наименование.

 

Этап 2. Выгрузка полей типа «Номенклатура»

На этом этапе выгружается код, соответствующий полю «Номенклатура».

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

Если для номенклатуры ведётся учёт по характеристикам, то при выгрузке поля типа «Номенклатура» нужно подменять код этой номенклатуры на код виртуальной номенклатуры.

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

Например, при выгрузке поля «Номенклатура» из табличной части документа «РасходнаяНакладная» мы в этой же табличной части можем найти реквизит «Характеристика».

Код виртуальной номенклатуры мы будем находить по комбинации полей «Номенклатура» + «Характеристика» в регистре сведений, в который этот код был записан на этапе 1.

 

IV РЕАЛИЗАЦИЯ АЛГОРИТМА

 

1. ИЗМЕНЕНИЯ В КОНФИГУРАЦИИ. ДОБАВЛЕНИЕ ВСПОМОГАТЕЛЬНЫХ ОБЪЕКТОВ В КОНФИГУРАЦИЮ

Изменения в конфигурации будут состоять только в добавлении двух объектов для генерации и сохранения кодов виртуальной номенклатуры:

1. Константа «ГИ_ПоследнийКодНоменклатурыНаВыгрузкуВБухгалтерию», которая будет хранить максимальный на данный момент код виртуальной номенклатуры

2. Регистр сведений для кодов виртуальной номенклатуры:

Имя: ГИ_КодыНоменклатурыНаВыгрузкуВБухгалтерию

Периодичность: Непериодический

Режим записи: Независимый

Измерения:

Имя Тип Индексировать
Код Строка; Длина: 11; Допустимая длина: Переменная Да
Номенклатура СправочникСсылка.Номенклатура Да
Характеристика СправочникСсылка.ХарактеристикаНоменклатуры Да

 

 

 

 

 

 

2 ИЗМЕНЕНИЯ В ПРАВИЛАХ ОБМЕНА. ВЫГРУЗКА ЭЛЕМЕНТОВ СПРАВОЧНИКА «НОМЕНКЛАТУРА»

2.1 ЧТО НУЖНО СДЕЛАТЬ

Необходимо исправить правила обмена, чтобы:

- группы номенклатуры выгружались типовым способом

- номенклатура без характеристик выгружалась типовым способом

- номенклатура с характеристиками разворачивалась в нужное количество позиций виртуальной номенклатуры

- для виртуальной номенклатуры генерировался и сохранялся код в регистре сведений

- максимальный код виртуальной номенклатуры сохранялся в константе (для генерации новых кодов виртуальной номенклатуры)

- для виртуальной номенклатуры генерировалось наименование

 

2.2 КУДА ВНОСИТЬ ИЗМЕНЕНИЯ

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

 

2.3 КАКИЕ ИЗМЕНЕНИЯ ВНОСИТЬ

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

- заблокировать типовую выгрузку этой номенклатуры (иначе она выгрузится в свёрнутом виде)

- добавить на выгрузку позиции виртуальной номенклатуры

 

Чтобы понять, каким образом мы будем модифицировать выгрузку, опишем в общих чертах алгоритм выгрузки по правилам обмена, реализованный в УНФ (см. процедуру ВыполнитьВыгрузкуЗарегистрированныхДанных обработки КонвертацияОбъектовИнформационныхБаз):

ТИПОВОЙ ЦИКЛ ВЫГРУЗКИ:

ВыборкаИзменений = ВыбратьИзменения(…);

Пока ВыборкаИзменений.Следующий() Цикл

	Данные = ВыборкаИзменений.Получить();

	Выполнить(ПравилоВыгрузкиДанных.ПередОбработкой);

	ВыгрузкаОбъектаВыборки(Данные, …);

КонецЦикла;

 

Мы будем «вклиниваться» в этот алгоритм в точке Выполнить(ПравилоВыгрузкиДанных.ПередОбработкой);, определив собственный алгоритм выгрузки в обработчике «ПередОбработкой» правил обмена для справочника «Номенклатура».

 

Наша задача состоит в том, чтобы с помощью обработчика «ПередОбработкой» модифицировать алгоритм выгрузки таким образом:

ВыборкаИзменений = ВыбратьИзменения(…);

Пока ВыборкаИзменений.Следующий() Цикл

	// Данные выгрузки мы будем подготавливать ниже самостоятельно,
	// поэтому следующая строчка сработает вхолостую для элементов выборки типа «Номенклатура»:
	Данные = ВыборкаИзменений.Получить();

	// Далее отработает код, определённый нами в обработчике ПравилоВыгрузкиДанных.ПередОбработкой:
	ВыгрузитьВсюНеобходимуюНоменклатуру();
	ПозиционироватьВыборкуИзмененийНаПоследнемЭлементеТипаНоменклатура();
	Данные = ПолучитьНоменклатуруДляВыгрузкиНаПоследнейИтерации();
               
	// Далее отработает типовой код и выгрузит последнюю позицию номенклатуры,
	// подготовленную выше в переменной Данные:
	ВыгрузкаОбъектаВыборки(Данные, …);

КонецЦикла;

 

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

 

Для этого:

- на итерации цикла, относящейся к первой выгружаемой номенклатуре из выборки ВыборкаИзменений, мы выгружаем сразу все позиции номенклатуры

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

 

2.4 СОСТАВ ИЗМЕНЕНИЙ

 

Правило выгрузки данных «ПередОбработкой» для справочника «Номенклатура»

Код правила вынесен в алгоритм «ГИ_ПВД_Номенклатура_ПередОбработкойПравила»:

Выполнить(Алгоритмы.ГИ_ПВД_Номенклатура_ПередОбработкойПравила);

 

Алгоритм 1 «ГИ_ПВД_Номенклатура_ПередОбработкойПравила»

Код алгоритма состоит из последовательного вызова алгоритмов:

 

 

Алгоритм 2 «ГИ_ИнициализироватьВТНоменклатурыНаВыгрузку»

Помещаем во временную таблицу «ВТ_НоменклатураНаВыгрузку» менеджера временных таблиц ГИ_МенеджерВТ выгружаемую номенклатуру и её характеристики:

- номенклатуру, для которой зарегистрированы изменения (из типовой выборки ВыборкаИзменений)

- всю номенклатуру с характеристиками, для которой ещё нет записей в регистре «ГИ_КодыНоменклатурыНаВыгрузкуВБухгалтерию». Так как при создании новой характеристики для существующей номенклатуры эта номенклатура не регистрируется как изменённая, то ВыборкаИзменений не будет содержать эту номенклатуру. Поэтому мы принудительно добавляем на выгрузку такую номенклатуру, ориентируясь на содержимое регистра «ГИ_КодыНоменклатурыНаВыгрузкуВБухгалтерию».

 

 

Алгоритм 3 «ГИ_ПолучитьПоследнююНоменклатуруВВыборкеИзменений»

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

 

 

Алгоритм 4 «ГИ_ПолучитьНоменклатуруДляПоследнейИтерации»

Записываем в переменную ГИ_НоменклатураДляВыгрузкиНаПоследнейИтерации номенклатуру, которую мы можем выгрузить типовым образом – то есть номенклатуру, которая будет обработана в строчке ВыгрузкаОбъектаВыборки(Данные, …) типового цикла выгрузки. Эту строчку типового цикла мы не можем пропустить (т.к. не меняем конфигурацию), поэтому должны «скормить» ей какую-то подходящую номенклатуру.

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

 

 

Алгоритм 5 «ГИ_ВыгрузитьНоменклатуру»

Основной алгоритм выгрузки. Обходим в цикле выгружаемую номенклатуру из временной таблицы «ВТ_НоменклатураНаВыгрузку», подготовленной выше.

Если это номенклатура с характеристиками, то получаем данные виртуальной номенклатуры с помощью алгоритма «ГИ_ПолучитьДанныеНоменклатурыИзРегистраКодов».

Данные номенклатуры присваиваем переменной Данные и запускаем кусок кода выгрузки из типового цикла, вынесенный в алгоритм «ГИ_ВыполнитьТиповойКодВыгрузкиНоменклатуры».

 

 

Алгоритм 5.1 «ГИ_ПолучитьДанныеНоменклатурыИзРегистраКодов»

Получаем код виртуальной номенклатуры из регистра «ГИ_КодыНоменклатурыНаВыгрузкуВБухгалтерию» по комбинации «Номенклатура + Характеристика».

Если такой записи в регистре нет (если эта комбинация выгружается впервые), то с помощь алгоритма «ГИ_ПолучитьНовыйКодНоменклатурыДляВыгрузки» генерируем новый код виртуальной номенклатуры и записываем его в регистр.

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

 

 

Алгоритм 5.1.1 «ГИ_ПолучитьНовыйКодНоменклатурыДляВыгрузки»

Получаем код новой виртуальной номенклатуры, увеличивая на единицу значение константы «ГИ_ПоследнийКодНоменклатурыНаВыгрузкуВБухгалтерию».

Записываем новое значение последнего кода в константу.

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

 

 

Алгоритм 5.2 «ГИ_ВыполнитьТиповойКодВыгрузкиНоменклатуры»

Алгоритм содержит часть кода типового цикла процедуры ВыполнитьВыгрузкуЗарегистрированныхДанных модуля объекта обработки КонвертацияОбъектовИнформационныхБаз. Изменения в типовом коде помечены текстом "ИЗМЕНЕНО".

Этот код выгружает данные номенклатуры, которые предварительно сохранены в переменной Данные.

 

 

Алгоритм 6 «ГИ_ИнициализироватьПоследнююИтерацию»

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

Переменной Данные присваивается значение, означенное в алгоритме «ГИ_ПолучитьНоменклатуруДляПоследнейИтерации», чтобы успешно отработал код ВыгрузкаОбъектаВыборки(Данные, …) в текущей итерации типового цикла.

 

 

 

3 ИЗМЕНЕНИЯ В ПРАВИЛАХ ОБМЕНА. ВЫГРУЗКА ПОЛЕЙ ТИПА «НОМЕНКЛАТУРА»

3.1 ЧТО НУЖНО СДЕЛАТЬ

При выгрузке реквизита типа «Номенклатура» необходимо, чтобы:

- номенклатура без характеристик выгружалась типовым способом

- вместо номенклатуры с характеристиками выгружался код виртуальной номенклатуры

 

3.2 КУДА ВНОСИТЬ ИЗМЕНЕНИЯ

Необходимо внести изменения в обработчик «ПриВыгрузке» правила конвертации свойств. Например, в правило конвертации свойств поля «Номенклатура» табличной части «Товары» документа «ПоступлениеТоваровУслуг».

Изменения необходимо вносить для полей «Номенклатура» правил конвертации свойств всех объектов, выгружаемых в бухгалтерию.

 

3.3 СОСТАВ ИЗМЕНЕНИЙ

Код правила вынесен в алгоритм «ГИ_ПКС_Номенклатура_ПриВыгрузкеСвойства».

Выполнить(Алгоритмы.ГИ_ПКС_Номенклатура_ПриВыгрузкеСвойства);

Алгоритм 7 «ГИ_ПКС_Номенклатура_ПриВыгрузкеСвойства»

Если в поле типа «Номенклатура» содержится номенклатура с характеристиками, то необходимо выгрузить код соответствующей виртуальной номенклатуры, полученный алгоритмом «ГИ_ПолучитьДанныеНоменклатурыИзРегистраКодов».

 

 

 

4 ДОПОЛНИТЕЛЬНЫЕ ИЗМЕНЕНИЯ В ПРАВИЛАХ ОБМЕНА

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

Например, в правилах обмена УНФ-Бухгалтерия изменён обработчик события «ПередВыгрузкой» правила конвертации объекта «КорректировкаРеализации».

Код обработчика состоит из запроса, результат которого не включает поле «Характеристика». Необходимо добавить в секцию «ВЫБРАТЬ» запроса нужное поле:

6

См. также

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. par_62 22.01.18 21:19 Сейчас в теме
Все гораздо проще: со стороны УНФ характеристика ,со сороны Бухгалтерии - номенклатура. Поиск по идентификатору.
3. maxim_1c 88 23.01.18 08:46 Сейчас в теме
(1)

Добрый день, можете поподробнее рассказать, о чём речь?

Вы о том, что можно обойтись без регистра кодов, а вместо генерации кодов сделать синхронизацию по идентификаторам: будет выгружаться идентификатор ссылки характеристики, а в бухгалтерии будет создаваться номенклатура с этим идентификатором?
2. maxim_1c 88 23.01.18 08:41 Сейчас в теме
4. artfa 38 25.01.18 01:06 Сейчас в теме
в УНФ и БП давно уже обмен через Универсальный формат
5. thecatlove 30.05.18 17:48 Сейчас в теме
Интересует вопрос, как это сделать через Универсальный формат.
6. maxim_1c 88 30.05.18 20:08 Сейчас в теме
(5)

Добрый день, обмен через универсальный формат мы не делали, так что подсказать не сможем.
13. dexxxqqq 31.01.19 12:47 Сейчас в теме
Здравствуйте. Как это сделать через универсальный формат?
14. maxim_1c 88 31.01.19 13:51 Сейчас в теме
(13)

Добрый день, обмен через универсальный формат мы не делали
Оставьте свое сообщение