Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
05 июл 2022, 09:40

Коды номенклатупы, нетривиальная ситуация

Автор evgen.olegovih, 31 дек 2017, 20:26

0 Пользователей и 1 гость просматривают эту тему.

evgen.olegovih

Уважаемые форумчане, помогите советом или примером.

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

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

Вот голову ломаю, потому что если у нас например пришел товар (не с сайта) то код 000001, и далее 000002.
Пришел товар с сайта и менеджер ввел в поле код номер кода с сайта: 627982, то по смыслу нумерация в 1С должна сбиться.

Тогда может имеет смысл вести для кодов с сайта свой регистр?

Подскажите, пожалуйста, и если можно, то поделитесь опытом

Геннадий на Оби


evgen.olegovih

Цитата: Геннадий ОбьГЭС от 01 янв 2018, 13:13
Установите "Префикс ИБ"
Это не совсем то? Префикс ИБ не решит проблему создания нового кода без сбивания нумерации.

AIFrame

Используйте подсистему Свойств и Категорий.
Т.е. добавьте свойство "Код товара на сайте" и туда его пишите.
Или свой реквизит для номенклатуры.

А код, который присваивает номенклатуре 1С, не трогайте, он должен быть уникальным, но если вы откуда-то грузите и номенклатура создается с ключом ОбменДанными.Загрузка = ИСТИНА; уникальность кода проверяться не будет.
Ну а для менеджера при изменении кода на форме проверка уникальности в большинстве случаев будет иметь место и повторяющийся код присвоить не даст.

Геннадий на Оби

Цитата: evgen.olegovih от 01 янв 2018, 14:22Это не совсем то? Префикс ИБ не решит проблему создания нового кода без сбивания нумерации.
сбивания нумерации после разовой установки префикса, а не после каждой загрузки с сайта

После установки префикса (кстати, надо будет перезапустить сессию 1С), можно вручную поправить код вручную следующим после префикса номером и автонумерация "продолжится"

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

evgen.olegovih

Цитата: Геннадий ОбьГЭС от 01 янв 2018, 18:28
Цитата: evgen.olegovih от 01 янв 2018, 14:22Это не совсем то? Префикс ИБ не решит проблему создания нового кода без сбивания нумерации.
сбивания нумерации после разовой установки префикса, а не после каждой загрузки с сайта

После установки префикса (кстати, надо будет перезапустить сессию 1С), можно вручную поправить код вручную следующим после префикса номером и автонумерация "продолжится"

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


Цитата: AIFrame от 01 янв 2018, 17:37
Используйте подсистему Свойств и Категорий.
Т.е. добавьте свойство "Код товара на сайте" и туда его пишите.
Или свой реквизит для номенклатуры.

А код, который присваивает номенклатуре 1С, не трогайте, он должен быть уникальным, но если вы откуда-то грузите и номенклатура создается с ключом ОбменДанными.Загрузка = ИСТИНА; уникальность кода проверяться не будет.
Ну а для менеджера при изменении кода на форме проверка уникальности в большинстве случаев будет иметь место и повторяющийся код присвоить не даст.

Было руководству предложено, но они это предложение отправили на отказ.

Геннадий на Оби

Цитата: evgen.olegovih от 01 янв 2018, 18:56Конфигурация УТ 10.3, Сейчас пытался найти где формируется префикс
Если не можете найти - где формируется, то Вам и не следует лезть туда

(общий модуль МеханизмНумерацииОбъектов)

Значение задается в (пользовательском режиме):
меню Сервис - Переключить интерфейс - Полный
меню Сервис - Настройки учета - Настройки параметров учета - (закладка) Обмен данными - (поле) Префикс ИБ (префикс кодов справочников и документов)

Там можно выставить префикс с максимальной длиной в 3 символа
Цитата: evgen.olegovih от 01 янв 2018, 18:56(у нас с каких то пор префикс появился ТЕСТ),
вручную исправили код, а он подхватился по заданному шаблону в последнем наибольшем коде
Это и не префикс, префикс имеет максимум 3 символа


Цитата: evgen.olegovih от 01 янв 2018, 18:56пошерудил подписку, модуль общегоназначения, модуль Номенклатуры, не нашел в итоге
а - зачем?
Выделяете реквизит Префикс справочника Номенклатура - ПКМ - Поиск ссылок на объект
Там единственный общий модуль будет в результатах


.
Но при заведении новой позиции, если редактирую Код на свой, то следующая позиция продолжает нумерацию, то есть она не сбивается..[/quote]
если он наибольший
Что ещё надо?

AIFrame

Цитата: evgen.olegovih от 01 янв 2018, 18:56Было руководству предложено, но они это предложение отправили на отказ.
И чем же отказ был мотивирован? Руководство явно не понимает, что код объекта справочника - это внутренняя, на уровне этой базы, нумерация объектов.
Код товара на сайте вашем - это внутренняя, на уровне этого сайта, нумерация товаров.
У номенклатуры есть достаточное количество полей строкового типа, чтобы насовать туда нужной информации. Артикул, например. Ничто не мешает для артикула в скобках указать, например (S:КодНаСайте).
Если бы вы рассказали, чего вы достигнуть хотите, было бы проще сказать, что вам надо сделать.
Цитата: Геннадий ОбьГЭС от 01 янв 2018, 21:19Выделяете реквизит Префикс справочника Номенклатура - ПКМ - Поиск ссылок на объект
Такого реквизита в УТ10.3 нет.
Цитата: Геннадий ОбьГЭС от 01 янв 2018, 21:19(поле) Префикс ИБ (префикс кодов справочников и документов)
Это задаст префикс для всех объектов, которые будут участвовать в обменах с другими базами. Собственно, он для того и придуман.

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

ЦитироватьСправочникОбъект.<Имя справочника> (CatalogObject.<Имя справочника>)
ПриУстановкеНовогоКода (OnSetNewCode)
Синтаксис:

ПриУстановкеНовогоКода(<СтандартнаяОбработка>, <Префикс>)
Параметры:

<СтандартнаяОбработка>

Тип: Булево.
В данный параметр передается признак выполнения стандартной (системной) обработки события. Если в теле процедуры-обработчика установить данному параметру значение Ложь, стандартная генерация нового кода производиться не будет.
Значение по умолчанию: Истина.
<Префикс>

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

Возникает в момент, когда выполняется установка нового кода элемента справочника.
Примечание:

Параметр <Префикс> может быть указан, если код имеет тип Строка.
Замечание:

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

Создаете у номенклатуры реквизит, назовем его  "ТоварССайта", тип булево.
Добавляем в процедуру:
Процедура ПриУстановкеНовогоКода(СтандартнаяОбработка, Префикс)
    Если ТоварССайта Тогда
        Префикс = "СТ";
    Иначе
        Префикс = "УТ";   
    КонецЕсли;
КонецПроцедуры


В итоге получаем такую картинку.

evgen.olegovih

Цитата: AIFrame от 02 янв 2018, 07:59


Цитата: Геннадий ОбьГЭС от 01 янв 2018, 21:19(поле) Префикс ИБ (префикс кодов справочников и документов)
Это задаст префикс для всех объектов, которые будут участвовать в обменах с другими базами. Собственно, он для того и придуман.

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

ЦитироватьСправочникОбъект.<Имя справочника> (CatalogObject.<Имя справочника>)
ПриУстановкеНовогоКода (OnSetNewCode)
Синтаксис:

ПриУстановкеНовогоКода(<СтандартнаяОбработка>, <Префикс>)
Параметры:

<СтандартнаяОбработка>

Тип: Булево.
В данный параметр передается признак выполнения стандартной (системной) обработки события. Если в теле процедуры-обработчика установить данному параметру значение Ложь, стандартная генерация нового кода производиться не будет.
Значение по умолчанию: Истина.
<Префикс>

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

Возникает в момент, когда выполняется установка нового кода элемента справочника.
Примечание:

Параметр <Префикс> может быть указан, если код имеет тип Строка.
Замечание:

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

Создаете у номенклатуры реквизит, назовем его  "ТоварССайта", тип булево.
Добавляем в процедуру:
Процедура ПриУстановкеНовогоКода(СтандартнаяОбработка, Префикс)
    Если ТоварССайта Тогда
        Префикс = "СТ";
    Иначе
        Префикс = "УТ";   
    КонецЕсли;
КонецПроцедуры


В итоге получаем такую картинку.


Код у нас сейчас имеет вид (строка, 11 символов) 00000123456 (в новую базу загрузили номенклатуру) и ТЕСТ0123456 (это после того, как стали заводить новые позициции). Решил обработкой убрать первые 5 символов и сделать код 6-значным, соответственно делал обрезку кода только для номенклатурных позиций, не трогая папки.

Все получилось, но при создании новой позиции, нумератор видно подхватил номер папки, который имеет код Г0001, с сделал элемент с номером Г00002. Нумератор видит каталоги как элементы значит?

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

Если мы в подписку ПриУстановкеНовогоКода в модуле ОбщегоЗначения вставим прибавление префикса, то он прибавлять будет ведь к каждому документу, к которому сделана подписка.
Значит делать свою отдельную подписку и модуль?

AIFrame

Цитата: evgen.olegovih от 02 янв 2018, 15:23Если мы в подписку ПриУстановкеНовогоКода в модуле ОбщегоЗначения вставим

В модуле МеханизмаНумерацииОбъектов есть логика небольшая. Префикс организации ставится если у Объекта метаданных есть реквизит "Организация". Тащемта, расширить там эту логику по аналогии до ваших хотелок не проблема. Увидите, короче.

Если нужно применять вашу логику на конкретные справочник\документ, то лучше воспользоваться ПриУстановкеНовогоКода в модуле каждого нужного объекта. Тем более, что в этой процедуре ничто не мешает вызвать свою процедуру из своего общего модуля (ну чтобы не писать одно и то же по сто раз).
Т.е. тупо
Процедура ПриУстановкеНовогоКода(СтандартнаяОбработка, Префикс)
    ИмяОбъекта = ЭтотОбъект.Метаданные().Имя;
    СтандартнаяОбработка = НашМеханизмНумерации.ПрименятьСтандартнуюОбработку(ИмяОбъекта);
    Если НЕ СтандартнаяОбработка Тогда
        НашМеханизмНумерации.УстановитьКодПринудительно(ЭтотОбъект, ИмяОбъекта);
    Иначе
        Префикс = НашМеханизмНумерации.УстановитьТолькоПрефикс(ЭтотОбъект, ИмяОбъекта);
    КонецЕсли;   
КонецПроцедуры


Добавлено: 02 янв 2018, 20:51


Цитата: evgen.olegovih от 02 янв 2018, 15:23Нумератор видит каталоги как элементы значит?
Каталоги в любом иерархическом справочнике - суть те же элементы, только у них есть признак ЭтоГруппа = Истина.
По этому признаку к каталогам применяются или не применяются реквизиты. Т.е. Артикул для групп не применяется, но можно поставить для реквизита Артикул применение ДляГруппИЭлементов, и у каталогов тоже появится реквизит Артикул. Можно поставить ДляГрупп, и реквизит будет только у каталогов.
Так что нумератору при штатной работе пофигу, группа это или нет. Код, как и Наименование и другие "стандартные реквизиты" применяются ко всем объектам справочника. Поэтому нумератор одинаково присваивает коды и тем, и другим.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru Rambler's Top100

Поиск