как записать единицу измерения в справочник цены

1. byshchenko 5 02.09.21 15:49 Сейчас в теме
	Процедура Загрузить()
				Перем СчетчикЦиклаКолонок, СТЦ, СписТЦ, КТЦ, ТЗн, КодНоменклатуры, СпрЦены, СпрТипЦены, ДатаАктуальностиЦен;  			
				Ном = СоздатьОбъект("Справочник.ТМЦ");
				БазоваяВалюта = Константа.БазоваяВалюта;
				БазЕдиница = Константа.БазЕдиница;
				СпрЦены = СоздатьОбъект("Справочник.Цены");
				СпрТипЦены = СоздатьОбъект("Справочник.КатегорииЦен");
				ДатаАктуальностиЦен = Таблица.Область(5,4).Текст;
				Если ПустоеЗначение(ДатаАктуальностиЦен) = 1 Тогда
					Предупреждение("Укажите дату актуальности цен!");
					Возврат;
				КонецЕсли;
				
				жж = 6;
				Пока Таблица.Область(жж,1).Текст <> "КонецОтчета" Цикл
					Если ТипЗначенияСтр(Таблица.Область(жж,3).Расшифровка()) = "Справочник" Тогда  // товар
						Если Ном.НайтиЭлемент(Таблица.Область(жж,3).Расшифровка()) = 1 Тогда
							Сообщить("Найдено:  Номенклатура "+Ном.Наименование+" ОК!");
						КонецЕсли;
						уу = 6;
						СпрЦены.ИспользоватьВладельца(Ном.ТекущийЭлемент());
						Пока Таблица.Область(1,уу).Текст<>"Конец" Цикл
							Если ПустоеЗначение(Таблица.Область(жж,уу).Текст) = 1 Тогда
								уу = уу + 1;
								Продолжить;
							КонецЕсли;
							Если СпрТипЦены.НайтиЭлемент(Таблица.Область(жж,уу).Расшифровка()) = 0 Тогда
								уу = уу+ 1;
								Продолжить;
							КонецЕсли;
							Если СпрЦены.НайтиПоРеквизиту("КатегорияЦены",СпрТипЦены.ТекущийЭлемент(),0) = 0 Тогда
								СпрЦены.Новый();
								СпрЦены.КатегорияЦены = СпрТипЦены.ТекущийЭлемент(); 
								СпрЦены.Валюта = БазоваяВалюта;
								СпрЦены.Записать();
							
								СпрЦены.Цена.Установить(ДатаАктуальностиЦен,Таблица.Область(жж,уу).Текст);
								СпрЦены.Владелец = Ном.ТекущийЭлемент();
								СпрЦены.Единица.Установить(ДатаАктуальностиЦен,Ном.БазоваяЕдиница);
								СпрЦены.Записать();
							Иначе
								СпрЦены.Цена.Установить(ДатаАктуальностиЦен,Таблица.Область(жж,уу).Текст);
								СпрЦены.Владелец = Ном.ТекущийЭлемент();
								СпрЦены.Единица.Установить(ДатаАктуальностиЦен,Ном.БазоваяЕдиница);
								СпрЦены.Записать(); 
								Сообщить("Единица измерения "+ Ном.БазоваяЕдиница);
							КонецЕсли;
							Сообщить("Обновлена цена номенклатуры "+Ном.ПолнНаименование+" Категория Цены "+СпрЦены.КатегорияЦены +" с "+ДатаАктуальностиЦен+" установлена цена "+глФрм(Таблица.Область(жж,уу).Текст,"",0));	
							уу = уу + 1;
						КонецЦикла;
					КонецЕсли;
					жж = жж+1;
				КонецЦикла;
				
			КонецПроцедуры
			
Показать
По теме из базы знаний
Найденные решения
19. byshchenko 5 03.09.21 00:31 Сейчас в теме
СпрЦены.Цена.Установить(ДатаАктуальностиЦен,Таблица.Область(жж,уу).Текст);
                                СпрЦены.Владелец = Ном.ТекущийЭлемент();
                                СпрЦены.Единица.Установить(ДатаАктуальностиЦен,Ном.ЕдиницаПоУмолчанию);
                                СпрЦены.Записать(); 
                                Сообщить("Единица измерения "+ Ном.ЕдиницаПоУмолчанию);

Так записывает
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. kznsky 02.09.21 18:51 Сейчас в теме
(1)
СпрЦены.Единица.Установить(ДатаАктуальностиЦен,Ном.БазоваяЕдиница);


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

Функция:
НайтиПоНаименованию(<Наименование>, <ТочноеСоответствие>, <Родитель>, <Владелец>)

позволяет искать с отбором по владельцу - 4й параметр.
2. byshchenko 5 02.09.21 15:50 Сейчас в теме
есть такая процедура загрузить,проблема в том что не могу никак записать единицу измерения ,поле пустое,помогите советом,как ее можно записать?
3. byshchenko 5 02.09.21 15:55 Сейчас в теме
вот в этом куске кода
 СпрЦены.Цена.Установить(ДатаАктуальностиЦен,Таблица.Область(жж,уу).Текст);
                                СпрЦены.Владелец = Ном.ТекущийЭлемент();
                                СпрЦены.Единица.Установить(ДатаАктуальностиЦен,Ном.БазоваяЕдиница);
                                СпрЦены.Записать(); 
                                Сообщить("Единица измерения "+ Ном.БазоваяЕдиница);

как заставить записать?
5. kznsky 02.09.21 18:55 Сейчас в теме
(1)
т.е. вместо этого:

СпрЦены.Единица.Установить(ДатаАктуальностиЦен,Ном.БазоваяЕдиница); 


Как то так:

ЕдИзм = НайтиПоНаименованию(Ном.БазоваяЕдиница.Наименование, Истина,  ,Ном.ТекущийЭлемент());
СпрЦены.Единица.Установить(ДатаАктуальностиЦен, ЕдИзм); 
6. byshchenko 5 02.09.21 20:27 Сейчас в теме
(5)
ЕдИзм = НайтиПоНаименованию(Ном.БазоваяЕдиница.Наименование, Истина, ,Ном.ТекущийЭлемент());
СпрЦены.Единица.Установить(ДатаАктуальностиЦен, ЕдИзм);


Перед найти надо ж где искать будем?
7. kznsky 02.09.21 20:41 Сейчас в теме
(6) Да, конечно. Вырвал из контекста. Главное не потерять связь по владельцу, а то потом так неадекватно будут себя документы вести... Наступил как то на эти грабли.
8. byshchenko 5 02.09.21 21:03 Сейчас в теме
9. byshchenko 5 02.09.21 21:04 Сейчас в теме
ЕдИзм = СпрЦены.НайтиПоНаименованию(Ном.БазоваяЕдиница.Наименование, Истина, ,Ном.ТекущийЭлемент());
СпрЦены.Единица.Установить(ДатаАктуальностиЦен, ЕдИзм);
попробывал так,пишет не выбран элемент
10. kznsky 02.09.21 21:09 Сейчас в теме
(9) А где в коде вы получаете объект Справочника цены для изменения. Новый я так понимаю нормально создается?
11. kznsky 02.09.21 21:15 Сейчас в теме
Спр = СпрЦены.НайтиПоРеквизиту("КатегорияЦены",СпрТипЦены.ТекущийЭлемент(),0);
Если  НЕ ЗначениеЗаполнено(Спр) Тогда
	СпрЦены.Новый();
	СпрЦены.КатегорияЦены = СпрТипЦены.ТекущийЭлемент(); 
	СпрЦены.Валюта = БазоваяВалюта;
	СпрЦены.Записать();

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

Код не проверял, но смысл в том, что для изменения элемента справочника программно его сначала нужно получить как объект.
И про владельца не забывайте, это просто правка вашего фрагмента.
12. byshchenko 5 02.09.21 21:38 Сейчас в теме
самое главное что Ном.БазоваяЕдиница получаю, только после записи пустое место,значение не записывается
13. byshchenko 5 02.09.21 21:38 Сейчас в теме
Сообщить("Единица измерения "+ Ном.БазоваяЕдиница); показывает как раз то что надо
14. byshchenko 5 02.09.21 21:39 Сейчас в теме
почему пусто не пойму
15. kznsky 02.09.21 22:32 Сейчас в теме
(14) Когда новый элемент создается единица записывается?
16. byshchenko 5 02.09.21 22:34 Сейчас в теме
17. kznsky 02.09.21 22:42 Сейчас в теме
Спр = СпрЦены.НайтиПоРеквизиту("КатегорияЦены",СпрТипЦены.ТекущийЭлемент(),0);
Если  НЕ ЗначениеЗаполнено(Спр) Тогда
.....
Иначе
    Объект = Спр.ПолучитьОбъект();
    Объект.Цена.Установить(ДатаАктуальностиЦен,Таблица.Область(жж,уу).Текст);
    Объект.Владелец = Ном.ТекущийЭлемент();
    Объект.Единица.Установить(ДатаАктуальностиЦен,Ном.БазоваяЕдиница);
    Объект.Записать(); 
    Сообщить("Единица измерения "+ Ном.БазоваяЕдиница);
КонецЕсли;
Показать


Так пробовали через Объект = Спр.ПолучитьОбъект();
18. byshchenko 5 03.09.21 00:28 Сейчас в теме
(17)
Объект = Спр.ПолучитьОбъект();
Объект.Цена.Установить(ДатаАктуальностиЦен,Таблица.Область(жж,уу).Текст);
Объект.Владелец = Ном.ТекущийЭлемент();
Объект.Единица.Установить(ДатаАктуальностиЦен,Ном.БазоваяЕдиница);
Объект.Записать();
Сообщить("Единица измерения "+ Ном.БазоваяЕдиница);


Поле агрегатного объекта не обнаружено (ПолучитьОбъект)
19. byshchenko 5 03.09.21 00:31 Сейчас в теме
СпрЦены.Цена.Установить(ДатаАктуальностиЦен,Таблица.Область(жж,уу).Текст);
                                СпрЦены.Владелец = Ном.ТекущийЭлемент();
                                СпрЦены.Единица.Установить(ДатаАктуальностиЦен,Ном.ЕдиницаПоУмолчанию);
                                СпрЦены.Записать(); 
                                Сообщить("Единица измерения "+ Ном.ЕдиницаПоУмолчанию);

Так записывает
Оставьте свое сообщение

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