как записать единицу измерения в справочник цены
Процедура Загрузить()
Перем СчетчикЦиклаКолонок, СТЦ, СписТЦ, КТЦ, ТЗн, КодНоменклатуры, СпрЦены, СпрТипЦены, ДатаАктуальностиЦен;
Ном = СоздатьОбъект("Справочник.ТМЦ");
БазоваяВалюта = Константа.БазоваяВалюта;
БазЕдиница = Константа.БазЕдиница;
СпрЦены = СоздатьОбъект("Справочник.Цены");
СпрТипЦены = СоздатьОбъект("Справочник.КатегорииЦен");
ДатаАктуальностиЦен = Таблица.Область(5,4).Текст;
Если ПустоеЗначение(ДатаАктуальностиЦен) = 1 Тогда
Предупреждение("Укажите дату актуальности цен!");
Возврат;
КонецЕсли;
жж = 6;
Пока Таблица.Область(жж,1).Текст <> "КонецОтчета" Цикл
Если ТипЗначенияСтр(Таблица.Область(жж,3).Расшифровка()) = "Справочник" Тогда // товар
Если Ном.НайтиЭлемент(Таблица.Область(жж,3).Расшифровка()) = 1 Тогда
Сообщить("Найдено: Номенклатура "+Ном.Наименование+" ОК!");
КонецЕсли;
уу = 6;
СпрЦены.ИспользоватьВладельца(Ном.ТекущийЭлемент());
Пока Таблица.Область(1,уу).Текст<>"Конец" Цикл
Если ПустоеЗначение(Таблица.Область(жж,уу).Текст) = 1 Тогда
уу = уу + 1;
Продолжить;
КонецЕсли;
Если СпрТипЦены.НайтиЭлемент(Таблица.Область(жж,уу).Расшифровка()) = 0 Тогда
уу = уу+ 1;
Продолжить;
КонецЕсли;
Если СпрЦены.НайтиПоРеквизиту("КатегорияЦены",СпрТипЦены.ТекущийЭлемент(),0) = 0 Тогда
СпрЦены.Новый();
СпрЦены.КатегорияЦены = СпрТипЦены.ТекущийЭлемент();
СпрЦены.Валюта = БазоваяВалюта;
СпрЦены.Записать();
СпрЦены.Цена.Установить(ДатаАктуальностиЦен,Таблица.Область(жж,уу).Текст);
СпрЦены.Владелец = Ном.ТекущийЭлемент();
СпрЦены.Единица.Установить(ДатаАктуальностиЦен,Ном.БазоваяЕдиница);
СпрЦены.Записать();
Иначе
СпрЦены.Цена.Установить(ДатаАктуальностиЦен,Таблица.Область(жж,уу).Текст);
СпрЦены.Владелец = Ном.ТекущийЭлемент();
СпрЦены.Единица.Установить(ДатаАктуальностиЦен,Ном.БазоваяЕдиница);
СпрЦены.Записать();
Сообщить("Единица измерения "+ Ном.БазоваяЕдиница);
КонецЕсли;
Сообщить("Обновлена цена номенклатуры "+Ном.ПолнНаименование+" Категория Цены "+СпрЦены.КатегорияЦены +" с "+ДатаАктуальностиЦен+" установлена цена "+глФрм(Таблица.Область(жж,уу).Текст,"",0));
уу = уу + 1;
КонецЦикла;
КонецЕсли;
жж = жж+1;
КонецЦикла;
КонецПроцедуры
ПоказатьПо теме из базы знаний
- СТАБИЛЬНАЯ Загрузка справочника номенклатуры в 1С:Управление торговлей 8 из прайс-листа в Excel (код открыт скачать можно бесплатно)
- АСТ: Обмен с ФГИС Меркурий из 1С
- Пример переноса справочников, документов и движений через Эксель и "Конвертацию данных 2" из оптовой учетной системы 1С 7.7 Комплексной 4.2 и розничной учетной системы Рарус Торговый комплекс -> в 1С 8.3 ЕРП 2.4 (расширение и дополнительные реквизиты)
- Тонкости и подводные камни работы типового модуля интеграции Битрикс24 и 1С (Часть 2)
- Как я писал ТЗ на внедрение 1С:ERP
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)
Ед. измерения это обычно справочник, а не константа. У каждого элемента справочника есть связь с номенклатурой по владельцу.
Т.е. для каждой номенклатуры необходимо искать именно ее единицу измерения, пусть даже она и называется для всех одинаково, например шт.
Функция:
НайтиПоНаименованию(<Наименование>, <ТочноеСоответствие>, <Родитель>, <Владелец>)
позволяет искать с отбором по владельцу - 4й параметр.
СпрЦены.Единица.Установить(ДатаАктуальностиЦен,Ном.БазоваяЕдиница);
Ед. измерения это обычно справочник, а не константа. У каждого элемента справочника есть связь с номенклатурой по владельцу.
Т.е. для каждой номенклатуры необходимо искать именно ее единицу измерения, пусть даже она и называется для всех одинаково, например шт.
Функция:
НайтиПоНаименованию(<Наименование>, <ТочноеСоответствие>, <Родитель>, <Владелец>)
позволяет искать с отбором по владельцу - 4й параметр.
вот в этом куске кода
как заставить записать?
СпрЦены.Цена.Установить(ДатаАктуальностиЦен,Таблица.Область(жж,уу).Текст);
СпрЦены.Владелец = Ном.ТекущийЭлемент();
СпрЦены.Единица.Установить(ДатаАктуальностиЦен,Ном.БазоваяЕдиница);
СпрЦены.Записать();
Сообщить("Единица измерения "+ Ном.БазоваяЕдиница);
как заставить записать?
Спр = СпрЦены.НайтиПоРеквизиту("КатегорияЦены",СпрТипЦены.ТекущийЭлемент(),0);
Если НЕ ЗначениеЗаполнено(Спр) Тогда
СпрЦены.Новый();
СпрЦены.КатегорияЦены = СпрТипЦены.ТекущийЭлемент();
СпрЦены.Валюта = БазоваяВалюта;
СпрЦены.Записать();
СпрЦены.Цена.Установить(ДатаАктуальностиЦен,Таблица.Область(жж,уу).Текст);
СпрЦены.Владелец = Ном.ТекущийЭлемент();
СпрЦены.Единица.Установить(ДатаАктуальностиЦен,Ном.БазоваяЕдиница);
СпрЦены.Записать();
Иначе
Объект = Спр.ПолучитьОбъект();
Объект.Цена.Установить(ДатаАктуальностиЦен,Таблица.Область(жж,уу).Текст);
Объект.Владелец = Ном.ТекущийЭлемент();
Объект.Единица.Установить(ДатаАктуальностиЦен,Ном.БазоваяЕдиница);
Объект.Записать();
Сообщить("Единица измерения "+ Ном.БазоваяЕдиница);
КонецЕсли;
ПоказатьКод не проверял, но смысл в том, что для изменения элемента справочника программно его сначала нужно получить как объект.
И про владельца не забывайте, это просто правка вашего фрагмента.
Спр = СпрЦены.НайтиПоРеквизиту("КатегорияЦены",СпрТипЦены.ТекущийЭлемент(),0);
Если НЕ ЗначениеЗаполнено(Спр) Тогда
.....
Иначе
Объект = Спр.ПолучитьОбъект();
Объект.Цена.Установить(ДатаАктуальностиЦен,Таблица.Область(жж,уу).Текст);
Объект.Владелец = Ном.ТекущийЭлемент();
Объект.Единица.Установить(ДатаАктуальностиЦен,Ном.БазоваяЕдиница);
Объект.Записать();
Сообщить("Единица измерения "+ Ном.БазоваяЕдиница);
КонецЕсли;
ПоказатьТак пробовали через Объект = Спр.ПолучитьОбъект();
(17)
Поле агрегатного объекта не обнаружено (ПолучитьОбъект)
Объект = Спр.ПолучитьОбъект();
Объект.Цена.Установить(ДатаАктуальностиЦен,Таблица.Область(жж,уу).Текст);
Объект.Владелец = Ном.ТекущийЭлемент();
Объект.Единица.Установить(ДатаАктуальностиЦен,Ном.БазоваяЕдиница);
Объект.Записать();
Сообщить("Единица измерения "+ Ном.БазоваяЕдиница);
Объект.Цена.Установить(ДатаАктуальностиЦен,Таблица.Область(жж,уу).Текст);
Объект.Владелец = Ном.ТекущийЭлемент();
Объект.Единица.Установить(ДатаАктуальностиЦен,Ном.БазоваяЕдиница);
Объект.Записать();
Сообщить("Единица измерения "+ Ном.БазоваяЕдиница);
Поле агрегатного объекта не обнаружено (ПолучитьОбъект)
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот