(23) d0dger, Необходимо присвоить реквизиту Единица Изм. по классификатору = Значение в новом элементе Спр.Ед.ИЗМ(Сократил), кто пишет и отлаживает код - поймет
По написанному выше смог из excel файла закинуть в базу номеклатуру, чтобы заполнялись поля ЕдиницаХраненияОстатков и ЕдиницаДляОтчетов. Но теперь возникла новая потребность:требуется для каждого нового элнемта вносить данные по его объему и весу. Эти данные есть в excel файле. Можно ли это каким-то образом сделать?
Заранее спасибо за ответы, Игорь.
Процедура КнопкаВыполнитьНажатие(Кнопка)
Запрос = Новый Запрос("ВЫБРАТЬ
| Номенклатура.Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.ЭтоГруппа = ЛОЖЬ");
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
объект = Выборка.Ссылка.ПолучитьОбъект();
объект.ОбменДанными.Загрузка = Истина;
объект.ЕдиницаХраненияОстатков = Справочники.ЕдиницыИзмерения.НайтиПоКоду("032064");
Попытка
объект.Записать();
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
ОбработкаПрерыванияПользователя();
КонецЦикла;
КонецПроцедуры
А как этой обработкой пользоваться? Я чайник еще полный в 1С, второй день только с ней сижу...
ЗЫ Желательно по пунктам, что и куда вводить...
ЗЫЫ Попробовал ввести этот код в События-При записи объекта, выдалась ошибка
Ошибка компиляции при вычислении выражения или выполнении фрагмента кода: {(1,1)}: Ожидается последовательность операторов
Объект не загружен. Элемент справочника: Кольцо 32 мм.
Создал файл в блокноте, туда скинул Ваш код, сохранил с расширением epf, 1С выдала ошибку
Ошибка при выполнении файловой операции 'C:\Users\delvin\Desktop\обраб.epf'
по причине:
Неверный формат хранилища данных 'file://C:/Users/delvin/Desktop/обраб.epf'
Вам нужно было просто привязать этот код к кнопке, т. е. указать в качестве действия для кнопки имя этой процедуры либо скопировать в свою процедуру содержимое данной процедуры.
Данный код устанавливает для всех номенклатур одну единицу хранения остатков например "шт.", это значение присваивается из справочника строкой - объект.ЕдиницаХраненияОстатков = Справочники.ЕдиницыИзмерения.НайтиПоКоду("032064"). Если нужно для всех номеклатур установить разные единицы хранения остатков, то тогда нужно добавлять условие в цикле какой номенклатуре нужно присвоить ту или иную ед. хран. остатков.
Вам нужно было просто привязать этот код к кнопке, т. е. указать в качестве действия для кнопки имя этой процедуры либо скопировать в свою процедуру содержимое данной процедуры.
и как конкректно мне это сделать? Я именю ввиду повесить код на кнопку? В конфигураторе нашел создание новой внешней обработки, но что-то у меня не поулчилось ее создать...
ЗЫ Наверно много глупых вопросов, но действительно только 2-ой день юзаю 1С-ку...
В конфигураторе в меню "файл"->"Новый"->Выбрать "Внешняя обработка"->Создать форму обаботки(по умолчанию)->Перейти на вкладку диалог формы->Правой кнопкой мыши щёлкнуть по кнопке "Выполнить"->Выбрать в контекстном меню пункт "КнопкаВыполнитьНажатие"(при этом создаться обработчик этой кнопки)->Скопировать содержимое процедуры в обработчик кнопки->Указать в строке кода: НайтиПоКоду("032064") нужный код единицы хран. ост. ->Сохранить где нить. Запуск производится в 1С:предприятие(не конфигуратор) в меню "файл"->"открыть"->указать обработку.
Учтите данная обработка проставит одну ед. хран. ост. для всех номенклатур.
Сделал, но это не. Еще раз, чтобы было понятнее. Открываем любой элемент номеклатуры, переходим на вкладку "Единицы", там видим, к примеру, такие строки:штуки, коробки, упаковки. У каждого из этих элементов есть количество, объем и масса. Так вот, используя внешнюю обработку "ЗагрузкаДанныхИзТабличногоДокумента" (она стандартная, идет на диске с 1Ской)+код от Fishci
у меня получилось в эти самые "Единицы" загнать "штуки". А сейчас мне требуется загнать не только штуки, но и коробки и упаковки+ забить поля количества, массы и объема. Так понятней?
Для тех, у кого будут такие же вопросы...
Я проблему решил таким образом: Во внешнем обработчике просто выбрал другой вид справочника (мне требовался "Единицы измерения"), выставил, чтобы он искал все кроме кода и единиц и закинул excel файл, в котром было точное название элемента номенклатуры (владельца), наименование (у меня это были штуки, упаковки и коробки) и соответствующий им вес и объем.
Процедура КнопкаВыполнитьНажатие(Кнопка)
Запрос = Новый Запрос("ВЫБРАТЬ
| Номенклатура.Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.ЭтоГруппа = ЛОЖЬ");
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
объект = Выборка.Ссылка.ПолучитьОбъект();
объект.ОбменДанными.Загрузка = Истина;
объект.ЕдиницаХраненияОстатков = Справочники.ЕдиницыИзмерения.НайтиПоКоду("032064");
Попытка
объект.Записать();
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
ОбработкаПрерыванияПользователя();
КонецЦикла;
КонецПроцедуры
Для тех, у кого будут такие же вопросы...
Я проблему решил таким образом: Во внешнем обработчике просто выбрал другой вид справочника (мне требовался "Единицы измерения"), выставил, чтобы он искал все кроме кода и единиц и закинул excel файл, в котром было точное название элемента номенклатуры (владельца), наименование (у меня это были штуки, упаковки и коробки) и соответствующий им вес и объем.
Пожалуйста, киньте мне на мыло внешнюю обработку для решения
Ошибка при вызове метода контекста (Записать): Операция не выполнена!
Объект не изменен. Элемент справочника: Номенклатура1.
У единицы хранения остатков номенклатуры "Номенклатура1" неверно указан владелец!
У единицы для отчетов номенклатуры "Номенклатура1" неверно указан владелец!
В Модуль обработки "ЗагрузкаДанныхИзТабличногоДокумента.epf надо вставить процедуру
Процедура УстановитьЕдиницуХраненияОстатков(Ссылка) экспорт
Если Ссылка.Пустая()=1 тогда
Сообщить("Не удалось идентифицировать Номенклатуру!",СтатусСообщения.Важное);
Возврат;
КонецЕсли;
Если ЗначениеЗаполнено(Ссылка.ЕдиницаХраненияОстатков) Тогда
Возврат;
КонецЕсли;
ВыборкаЕдиниц = Справочники.ЕдиницыИзмерения.Выбрать(, Ссылка);
Если ВыборкаЕдиниц.Следующий() Тогда
НайденнаяЕдиница = ВыборкаЕдиниц.Ссылка;
Иначе
НайденнаяЕдиницаОбъект = Справочники.ЕдиницыИзмерения.СоздатьЭлемент();
НайденнаяЕдиницаОбъект.Наименование = СокрЛП(Ссылка.БазоваяЕдиницаИзмерения);
НайденнаяЕдиницаОбъект.ЕдиницаПоКлассификатору = Ссылка.БазоваяЕдиницаИзмерения;
НайденнаяЕдиницаОбъект.Коэффициент = 1;
НайденнаяЕдиницаОбъект.Владелец = Ссылка;
Попытка
НайденнаяЕдиницаОбъект.Записать();
Исключение
Сообщить("Не удалось записать единицу хранения остатков: " + ОписаниеОшибки(), СтатусСообщения.Важное);
Возврат;
КонецПопытки;
НайденнаяЕдиница = НайденнаяЕдиницаОбъект.Ссылка;
КонецЕсли;
ОбъектСправочник=Ссылка.ПолучитьОбъект();
ОбъектСправочник.ЕдиницаХраненияОстатков = НайденнаяЕдиница;
Попытка
ОбъектСправочник.Записать();
Исключение
Сообщить("Не удалось записать Номенклатуру");
КонецПопытки;
КонецПроцедуры // УстановитьЕдиницуХраненияОстатков()
Показать
Затем в режиме исполнения обработки Нужно:
При режиме "Загрузка в табличную часть" в поле "единица измерения" поставить режим загрузки "Вычислять", в поле "Выражение" записать следующее:
Если использовать код предложенный ув. (12) fishca, то в карточке номенклатуры не проставляется Единица по классификатору.Из-за этого в печатных формах не проставляется этот код. Поэтому нужно дописать в код "НовыйОбъект.ЕдиницаПоКлассификатору = Объект.БазоваяЕдиницаИзмерения;"
При помощи "ЗагрузкаДанныхИзТабличногоДокумента.epf" смог импортировать Название Номенклатуры, НДС, и др. св-ва, а вот как установить для всех номенклатур "Единицу хранения остатков" - шт, не знаю. В том же обработчике есть возможность и этот параметр установить, но я не знаю как сделать, 1ска постоянно ругается на меня:
Ошибка при вызове метода контекста (Записать): Операция не выполнена!
Объект не изменен. Элемент справочника: Номенклатура1.
У единицы хранения остатков номенклатуры "Номенклатура1" неверно указан владелец!
У единицы для отчетов номенклатуры "Номенклатура1" неверно указан владелец!
Может кто знает, как сделать, не обязательно с этим обработчиком может какой другой есть способ?
СправочникОбъект.<Имя справочника> (CatalogObject.<Имя справочника>)
ОбменДанными (DataExchange)
Использование:
Только чтение.
Описание:
Тип: ПараметрыОбменаДанными. Используется для управления обменом данных.
С помощью данного свойства настраивается состав узлов-получателей, для которых будут регистрироваться изменения данных, узел-отправитель, из которого получена записываемая информация, а также устанавливается режим Загрузка, указывающий, что выполняется перенос информации.
ПараметрыОбменаДанными (DataExchangeParameters)
Загрузка (Load)
Использование:
Чтение и запись.
Описание:
Тип: Булево. Если значение данного свойства Истина, то при выполнении записи или удаления данных будет производиться минимум проверок, так как при этом делается предположение, что производится запись данных, полученных через механизмы обмена данными, и эти данные корректны.
Номенклатура.ОбменДанными.Загрузка = Истина - если ты так напишешь, то тебе 1С разрешит записать без единицы измерени
(4) Напишите простенькую обработочку которая выберет номенклатуру и создаст ЕХО. Можно например вот эту использовать http://www.infostart.ru/projects/2795/... 5 мин делов...
(7)
ЗагрузкаДанныхИзТабличногоДокумента.epf - найти место где записывается номенклатура, вот там и написать надо.
Или вы с программированием под восьмерку не очень дружите?
fishca, прям в точку :), я тут с бубном и плясками вокруг 1С уже неделю прыгаю :), все что хотел сделать уже почти сделал, но вот на этом вопросе споткнулся и не туда и не сюда. Мне нужно загрузить розничные цены, на это обработчик нашел, но так же необходимо подставить "Единицу хранения остатков" иначе, придется делать все в ручную :(
Единица хранения остатков подчиненный справочник справочнику Номенклатура. Сначала создается номенклатура и ссылка на этот элемент номенклатуры должна быть указана при создании справочника Единица Измерения.
примерно так: ЕдиницаИзмерения.Владелец = СсылкаНоменклатура.
Тогда будет все хорошо.
(13) fishca, прошу прощения, что так долго не отвечал, только сейчас добрался до компа, еще раз благодарю за помощь, но видно, я опять, что-то не так делаю:
Изменен элемент справочника: Номенклатура1
Ошибка при вызове метода контекста (Записать): Код не уникален!
Объект не изменен. Элемент справочника: Номенклатура2.
Ошибка при вызове метода контекста (Записать): Код не уникален!
Объект не изменен. Элемент справочника: Номенклатура3.