Простое Условие Чтобы Не Редактировать Поля Уже Существующей Записи

  • Автор темы Guest
  • Дата начала
G

Guest

#1
Доброго времени суток всем. Сразу извиняюсь за, возможно, ламерские вопросы, знакомство с 1С у меня только началось.
Необходимо загрузить номенклотуру в справочник 1С. Первичную загрузку я сделаю, это не проблема. Не совсем устраивает этот способ, если необходимо обновить эти данные. Вот, скажем, расширили поставщики свой номенклотурный список. Действуя средствами, рекомендованными здесь: http://www.online-ufa.ru/content/art..._excel_part_2/ я буду каждый раз редактировать уже существующие данные и добавлять новые. Но мне не нужно редактирование. Мне нужно только добавление записей, по которым не найден существующий артикул. Я хочу иметь возможность изменять вручную, например, Наименование товара и сохранить эти изменения в дальнейшем при очередном обновлении справочника номенклотуры. Насколько я понял, необходимо в обработчике -> вкладка "Настройка" в столбце "Выражение" ввести код, который запретит редактирование данного поля если артикул найден. Короче мне нужен этот код.
 

Darlock

Well-known member
04.01.2008
560
1
#2
Допишите в код загрузки, что перед тем как добавить новую номенклатуру сначала попытаться ее найти по коду. Нашлась, пропустить, не нашлась тогда добавить.
 
G

Guest

#3
Спасибо что ответили, но код мне нужен. Я в синтаксисе языка ни бум-бум.
 
W

WildAnther

#4
Ну Вы бы хоть для приличия какие то попытки предприняли.=) А вообще все туманно как в далеком космосе.
А вообще насколько я понял, надо добавить где то в тело цикла проверку на имеющиеся номера. =) Синтакс-Помощник или Справка=)
 
G

Guest

#5
Так:) Я предупреждал.
У меня прайс, который необходимо загрузить в 1С.
Лишнее из прайса удалено, остались поля Артикул, Полное наименование и Родитель. С помощью стандартного загрузчика "ЗагрузкаДанныхИзТабличногоДокумента" я загружаю эту номенклотуру в свою базу.
Далее заполняю поля «Единица для отчетов» и «Единица хранения остатков». Код для этого взят из приведенной в моем первом сообщении ссылки. Вот он:

СсылкаНоменклатуры = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул", ТекущиеДанные["Артикул"]);

БазоваяЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.НайтиПоКоду(796);

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

Если ТекСпр.Пустая() Тогда
НайденнаяЕдиницаОбъект = Справочники.ЕдиницыИзмерения.СоздатьЭлемент();

НайденнаяЕдиницаОбъект.Наименование = СокрЛП(БазоваяЕдиницаИзмерения);

НайденнаяЕдиницаОбъект.ЕдиницаПоКлассификатору = БазоваяЕдиницаИзмерения;

НайденнаяЕдиницаОбъект.Коэффициент = 1;

НайденнаяЕдиницаОбъект.Владелец = СсылкаНоменклатуры;

Попытка
НайденнаяЕдиницаОбъект.Записать();

Результат = НайденнаяЕдиницаОбъект.Ссылка;

Исключение Сообщить("Не удалось записать");

КонецПопытки;
Иначе
Результат =ТекСпр.Ссылка;
КонецЕсли;


Смысл его мне понятен не совсем, но в целом он означает, что мы получаем БазоваяЕдиницаИзмерения из Справочники.КлассификаторЕдиницИзмерения. Она там идет под кодом 796. Поля «Единица для отчетов» и «Единица хранения остатков» какие-то не текстовые, поэтому просто поставить там "шт" не получится. Надо заполнять их полностью, со всякими данными, которые мы формируем из екселевского документа и справочников 1С.
Код этот навел меня на мысль, что можно как-то просто отменить изменения в "Полном наименовании" при обновлении номенклотуры. Расписываю зачем мне это надо: Мы продаем запчасти, у которых довольно значительные списки совместимостей с разными моделями устройств. Этот список совместимости мы постоянно редактируем и дополняем. Данные такого редактирования мне хотелось бы сохранить, но если не запретить редактирование существующего "Полного наименования" при автоматической загрузке номенклотуры, то изменения будут утеряны. Вот этот код мне и нужен.
 

Darlock

Well-known member
04.01.2008
560
1
#7
Алексей1975, Дайнеко прав. Мы при всем желании вам не сможем объяснить как правильно сделать. Даже если очень постараемся, можем получить совершенно обратный эффект. Вы разочаруетесь и решите, что тут собрались одни чайники и ничего не умеют.
 
G

Guest

#8
Я в 10-летнем прошлом программист. Будущая работа будет тесно связана с 1С. Думаю чтобы задавать сложные вопросы и разобраться со сложными ответами этого достаточно.
Ребят, ну скажите же код. Ну не рационально мне изучать язык программирования чтобы 3 строчки написать.

А насчет данного сообщения:
"Алексей1975, Дайнеко прав. Мы при всем желании вам не сможем объяснить как правильно сделать. Даже если очень постараемся, можем получить совершенно обратный эффект. Вы разочаруетесь и решите, что тут собрались одни чайники и ничего не умеют."
Я буду благодарен за любую помощь. И я не разочаруюсь.

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

unknown181538

НеГуру
28.12.2008
1 417
0
#11
Там надо отказаться от загрузки строки. Т.е. тут еще зависит от того, как обработка сделана.
Можно попробовать оператор "Продолжить".

Спр= Справочники.Номенклатура.НайтиПоРеквизиту("Артикул",Артикул);
Если Спр.Пустая() Тогда
Продолжить;
КонецЕсли;