1с обработчик Ут 11.4 для измения вида номенклатуры

1. user1160890 22.06.21 13:20 Сейчас в теме
Добрый день, делаю обработчик, что бы поменять вид номенклатуры у номенклатур на общий, в базе у каждого свой вид. стр. Номенклатуру беру из excel файла
&НаСервере
Процедура ИзменитьНоменклатуру(ТЧ)
МассивНом = Новый Массив;
Для Каждого стр Из ТЧ Цикл

ТекНоменклатура = Справочники.Номенклатура.НайтиПоРеквизиту("НаименованиеПолное", стр.Номенклатура);
Если ТекНоменклатура.Наименование = стр.Номенклатура ТОГда
НовыйАртикул = ТекНоменклатура.ПолучитьОбъект();
//НовыйАртикул.Артикул = стр.Артикул;
//НовыйАртикул.Записать();
НовыйВид = НовыйАртикул.ВидНоменклатуры.ПолучитьОбъект();
НовыйВид.Наименование = "ДД8";
НовыйВид.Записать();
НовыйАртикул.ВидНоменклатуры = НовыйВид.Ссылка;
Иначе
ТекНоменклатура.Пустая();
//
//СправочСсылка = Справочники.Номенклатура(
//ФормаЭ = СправочСсылка.ПолучитьОбъект();
//ФормаОбъекта = ФормаЭ.ПолучитьФорму();.
//Для Каждого Элемент Из ФормаОбъекта.ЭлементыФормы Цикл
КонецЕсли;

КонецЦикла;


КонецПроцедуры
Показать

Не понимаю, где ошибка. Он под каждую номенклатуру делает свой вид ДД8.


Типовой вариант измения. Не работает.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
9. FatPanzer 22.06.21 13:44 Сейчас в теме
(1)
Не понимаю, где ошибка. Он под каждую номенклатуру делает свой вид ДД8.
Потому что именно так и написано. И вообще ваш код не меняет вид номенклатуры у самой номенклатуры от слова СОВСЕМ,

НовыйВид = НовыйАртикул.ВидНоменклатуры.ПолучитьОбъект();
НовыйАртикул.ВидНоменклатуры = НовыйВид.Ссылка;
Например, что вы этим хотели сказать?

НовыйВид = НовыйАртикул.ВидНоменклатуры.ПолучитьОбъект();
НовыйВид.Наименование = "ДД8";
НовыйВид.Записать();
А вот этим в просто переписываете наименование у ВСЕХ видов номенклатуры.
10. user1160890 22.06.21 13:46 Сейчас в теме
(9)Ну вообще он делает новый вид и присваевает его к номенклатуре и так каждой номенклатуре. А как правильно, сделать, что бы он именно у существущего вида в номенклатуре, заменил на другой, который тоже есть.
11. FatPanzer 22.06.21 13:47 Сейчас в теме
(10)
он делает новый вид
Покажите мне эту строчку. И сразу же идите учить азы.
17. RocKeR_13 1338 22.06.21 14:29 Сейчас в теме
(1)
НовыйВид = НовыйАртикул.ВидНоменклатуры.ПолучитьОбъект();

Вот этой строкой вы не создаете новый вид номенклатуры, а получаете тот вид номенклатуры, который назначен текущей номенклатуре. Ну а потом и вовсе этому виду присваиваете наименование "ДД8". В итоге, как писали уже, у вас все виды номенклатуры переименовываются в "ДД8". Вам бы сначала Радченко почитать, по книжке создать конфигурацию, а потом уже писать код. Вы пишите с абсолютным непониманием того, что будет происходить при выполнении вашего кода
19. user1160890 22.06.21 15:45 Сейчас в теме
(17) так это строку я понимаю. Для этого я его и писал. Мне нужно понять. Каким методом. Заменить этот вид номенклатуры, на другой вид номенклатуры, который есть в том же справочнике
23. RocKeR_13 1338 23.06.21 10:10 Сейчас в теме
(19) Ну например так
ВидДляПодстановки = Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Наименование вида");
Если ЗначениеЗаполнено(ВидДляПодстановки) Тогда
      НовыйАртикул.ВидНоменклатуры = ВидДляПодстановки;
КонецЕсли;

Если заменяете у всех на один вид, то лучше его вынести на форму обработки и подставлять его. Но, как ранее вам писали, необходимо следить за тем, какие параметры у текущего и нового видов номенклатуры: если у нового, например, ведется учет по характеристикам, а у текущего - нет, то с остатками у вас будет "беда". Аналогично может получиться с учетом по сериям и т.д.
20. x_under 13 23.06.21 08:38 Сейчас в теме
(1) Дичь какая-то. А что не работает при изменении вида номенклатуры типовым методом?
21. user1160890 23.06.21 10:01 Сейчас в теме
(20) да он блокирует, что так нельзя. Сработало только, если я обработчиком всё поменяю и потом типовом.
Вообще код у меня рабочий.
Проблема в том, если у товаров разные виды, то он делает такую хрень. А если у товаров одинаковые виды. Он все делает как надо, он создаёт или берёт существующий вид и записывает, на те товары, которые я назначил
22. FatPanzer 23.06.21 10:07 Сейчас в теме
(21)
Вообще код у меня рабочий. Проблема в том, ... он делает такую хрень.
- Я умею печатать со скоростью 500 знаков в секунду. Правда, такая хня получается!!!
24. XAKEP 23.06.21 11:58 Сейчас в теме
(22)
ну 500 загнул ( в секунду )
25. XAKEP 23.06.21 12:06 Сейчас в теме
(21)
я же вам сообщал, что нужно комментировать
чтобы стандартные обработки работали
Прикрепленные файлы:
30. x_under 13 28.06.21 15:13 Сейчас в теме
(21) вы можете привести конкретный текст ошибки? "он блокирует" не дает никакого понимания
2. XAKEP 22.06.21 13:25 Сейчас в теме
изменять вид номенклатуры в рабочей базе - печалька всем...

лучше вносить в новую базу путем переноса.
3. user1160890 22.06.21 13:28 Сейчас в теме
4. XAKEP 22.06.21 13:30 Сейчас в теме
(3)
узнаете, когда будет первый вопрос :)

на складе А недостаточно номенклатуры Б,
которой вагон в складе
5. user1160890 22.06.21 13:31 Сейчас в теме
(4) Ну очень странно, что это так должно сильно влиять. О том, что можно только 1 раз вид сделать. Потом нельзя его трогать, а то может сломаться.
6. XAKEP 22.06.21 13:36 Сейчас в теме
(5)
можно,
если товара в базе ноль

есть копия - попробуйте

чтобы стандартная обработка могла работать для изменения вида номенклатуры
нужно комментировать строчку в модуле справочника
12. user1160890 22.06.21 13:48 Сейчас в теме
(6)Ну она сработала, когда я всем присвоил новый вид.
Значит если номенклатура была задействова в документах, но на складе больше не числиться, можно менять вид?. А если нет, то списать, поменять и поставить остаток.
26. XAKEP 23.06.21 12:15 Сейчас в теме
(5)
понимаете, есть таблица товар
есть таблица клиент

если они сами по себе, то - удаляйте, добавляйте, изменяйте - все, что только вздумается

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

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

ничего не имею против, поскольку это ваше желание
но не говорите потом, что вы не знали......

вот и весь совет :)

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

и да , в базе данных они очень прочные :)
7. DenisVol 2 22.06.21 13:37 Сейчас в теме
в пункте (4) вам сказали правильно. Вы изменяете вид номенклатуры, у товара который уже лежит на складе, а потом попытаетесь его списать и не получится. в некоторых конфигурациях, при вводе номенклатуры, вид выбирается один раз, а потом этот реквизит становится не активен
8. user1160890 22.06.21 13:43 Сейчас в теме
(7)Какой же бред. Если компания большая решится сменить политику учёта номенклатуры и разбить, либо объеденить виды, они что должно просто сноить и делать новую базу
13. FatPanzer 22.06.21 13:50 Сейчас в теме
(8) Вы путаете виды номенклатуры и номенклатурные группы. Идите учите матчасть - нельзя перенести номенклатуру из вида с характеристиками в вид без характеристик. А там еще и упаковки, и правила учета серий по видам номенклатуры...
Научитесь для начала программно создавать новый объект в базе, прежде чем спорить со спецами.
14. user1160890 22.06.21 13:54 Сейчас в теме
(13)Понял вас, как всегда, много критики и учений. Мало помощи.
15. Азбука Морзе 105 22.06.21 14:02 Сейчас в теме
(14) Вам же все подробно разжевали, какой помощи вы ещё ждете?
16. user1160890 22.06.21 14:05 Сейчас в теме
(15) весь код у тебя не правильно работает, иди читай книжки. Очень познавательный ответ
18. FatPanzer 22.06.21 14:46 Сейчас в теме
(16) Именно так, потому что - читай последнее предложение в (17)
27. starjevschik 23.06.21 12:31 Сейчас в теме
тут много конечно можно сказать по поводу приведенного кода.
Но. Попробуй для начала принять простое правило: название переменной содержит информацию о ее природе.
НайтиПоРеквизиту("НаименованиеПолное", стр.Номенклатура

здесь в стр не номенклатура, а наименование, значит, должно быть так
НайтиПоРеквизиту("НаименованиеПолное", стр.НаименованиеНоменклатуры



НовыйАртикул = ТекНоменклатура.ПолучитьОбъект();

здесь никакой не артикул и не новый, а существующий объект номенклатуры, значит, надо вот так
ОбъектНоменклатура = ТекНоменклатура.ПолучитьОбъект();


и так далее. Часть ошибок станет видно сразу.
28. user1160890 23.06.21 13:14 Сейчас в теме
(27) Спасибо конечно, но это не ответ на мой вопрос. Это не как не решает, проблему
29. starjevschik 23.06.21 15:28 Сейчас в теме
(28) там весь код проблема, оттого он и не работает.
Ну если не решает, значит, не решает. Наймите программиста, сделают вам недорого.
FatPanzer; +1 Ответить
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот