Обращение к общему модулю в функции обработки на сервере

1. user2056518 27.08.24 13:35 Сейчас в теме
Мне необходимо обратится к общему модулю в обработке импорта заказов, что бы штрих код который создаётся в общем модуле формировался в обработке и записывался.

&НаСервере
Функция ПолучитьНоменклатуру(Имя, _ПолноеНаименование, СписокНоменклатуры, Количество, Площадь, Эскиз, НаименованиеИТ)
	
	Наименование 	= Имя;
	ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоКоду("000000003"); //продукция 
	Родитель 		= Справочники.Номенклатура.НайтиПоКоду("00000001889"); //группа продукция 
	
	Статус = "Создаю номенклатурную единицу: " + Наименование;
	
	НоменклатурнаяГруппа = Справочники.НоменклатурныеГруппы.НайтиПоКоду("000000001"); //основная
	Если ЗаказПВХТипИзделия = Справочники.ТипыИзделий.Алюминий Тогда
		НоменклатурнаяГруппа = Справочники.НоменклатурныеГруппы.НайтиПоКоду("000000003");			
	КонецЕсли;
	
	Если Лев(НаименованиеИТ, 2) = "МП" Тогда
		Номен = Справочники.Номенклатура.НайтиПоНаименованию(НаименованиеИТ);
	Иначе 
		Номен = Справочники.Номенклатура.НайтиПоНаименованию(Наименование);
	КонецЕсли;
	Если Номен = Справочники.Номенклатура.ПустаяСсылка() Тогда
		Номен = Справочники.Номенклатура.СоздатьЭлемент();
		
		Если Лев(НаименованиеИТ, 2) = "МП" Тогда
			Номен.Наименование			   = НаименованиеИТ;
			Номен.НаименованиеПолное       = НаименованиеИТ;
		Иначе
			Если ЗаказПВХТипИзделия = Справочники.ТипыИзделий.Алюминий Тогда
				Номен.Наименование 				= Наименование;
				Номен.НаименованиеПолное 		= "Светопрозрачная конструкция из Алюм" + " №" + Номен.Наименование;
			ИначеЕсли ЗаказПВХТипИзделия = Справочники.ТипыИзделий.ОкнаПВХ Тогда
				Номен.Наименование				= Наименование;
				Номен.НаименованиеПолное 		= "Светопрозрачная конструкция из ПВХ" + " №" + Номен.Наименование;
			КонецЕсли;   
		КонецЕсли;
		//Номен.НаименованиеПолное 			= _ПолноеНаименование;
		Номен.НоменклатурнаяГруппа 			= НоменклатурнаяГруппа;
		Номен.НоменклатурнаяГруппаЗатрат 	= НоменклатурнаяГруппа;
		Номен.ВидНоменклатуры 				= ВидНоменклатуры; 
		Номен.ВестиУчетПоХарактеристикам 	= Истина;
		Номен.СтавкаНДС 					= Перечисления.СтавкиНДС.БезНДС;
		Номен.БазоваяЕдиницаИзмерения 		= Справочники.КлассификаторЕдиницИзмерения.НайтиПоКоду(796); //шт
		Номен.Родитель 						= Родитель;
		Номен.Изделие 						= Истина;
		Номен.Площадь 						= Площадь;
		Номен.НеПодбиратьЦвет 				= Истина;
		Номен.ИзделиеИзПВХ 					= Истина;
		Номен.НаименованиеИТ 				= НаименованиеИТ;
		Номен.НомерЗаказа					= Объект.НомерЗаказа;
		Номен.Записать();
	Иначе
		Номен = Номен.ПолучитьОбъект();
		Номен.Наименование					= Номен.Наименование;
		Номен.НаименованиеПолное            = Номен.НаименованиеПолное;
		Номен.НоменклатурнаяГруппа 			= НоменклатурнаяГруппа;
		Номен.НоменклатурнаяГруппаЗатрат 	= НоменклатурнаяГруппа;	
		Номен.НеПодбиратьЦвет 				= Истина;                               
		Номен.НаименованиеИТ 				= НаименованиеИТ;
		Номен.НомерЗаказа					= Объект.НомерЗаказа;
		Номен.Записать();
	КонецЕсли;
		ШтрихКод = РаботаСТорговымОборудованием.СформироватьШтрихКод();
		//Штрих = СтрЗаменить(Объект.НомерЗаказа, Символы.НПП ,"") + СтрЗаменить(Сред(Наименование, 9), Символы.НПП , "");
		СсылкаНаОбъект = Номен.Ссылка;
		Рег = РегистрыСведений.Штрихкоды.СоздатьМенеджерЗаписи();
		Рег.ТипШтрихкода = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN8;
		Рег.Владелец = СсылкаНаОбъект.Ссылка;
		Рег.Штрихкод = ШтрихКод;
		Рег.Качество = Справочники.Качество.Новый;
		Рег.ЕдиницаИзмерения = Справочники.ЕдиницыИзмерения.НайтиПоКоду("ШШ0084287");
		Рег.Записать();	

Показать


Функция СформироватьШтрихКод(Знач ПрефиксШтучногоТовара = Неопределено, Знач ПрефиксВнутреннегоШтрихкода = Неопределено) Экспорт



Но когда пытаюсь обратиться он мне выдаёт ошибку что переменная не определена.
Пробовал записывать по разному но каждый раз ошибка, может кто подсказать что я не правильно записываю ?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Sashares 35 27.08.24 13:38 Сейчас в теме
(1)
Но когда пытаюсь обратиться он мне выдаёт ошибку что переменная не определена.

Привести текст ошибки ничего не стоит.
Рассказать об ошибке своими словами - бесценно.
user2041697; +1 Ответить
4. user2033930 27.08.24 13:43 Сейчас в теме
(2) Да общий модуль у него не виден...
5. user2056518 27.08.24 13:46 Сейчас в теме
(2) Текст ошибки
{Обработка.ИмпортЗаказаИзИТ5Новый.Форма.Форма.Форма(513,14)}: Переменная не определена (РаботаСТорговымОборудованием)
		ШтрихКод = <<?>>РаботаСТорговымОборудованием.СформироватьШтрихКод();
3. SlavaKron 27.08.24 13:42 Сейчас в теме
(1)
РаботаСТорговымОборудованием
Сам модуль существует? Он серверный?
6. user2056518 27.08.24 13:48 Сейчас в теме
(3) Сам модуль существует, вот сама функция в этом модуле к которой необходимо обратиться

Дополнение к моему ответу: нет он не серверный.
Прикрепленные файлы:
7. user2033930 27.08.24 13:49 Сейчас в теме
(6) На второй вопрос Пушкин отвечать будет?
8. Sashares 35 27.08.24 13:59 Сейчас в теме
(6)
В свойствах модуля какие флаги стоят?
9. user2056518 27.08.24 14:01 Сейчас в теме
(8) Стоит только один флажок (Клиент обычное приложение).
Если выбирать любой другой или сразу несколько выдаёт ошибки
{ОбщийМодуль.РаботаСТорговымОборудованием.Модуль(858,18)}: Тип не определен (ДиалогВыбораФайла)
        Диалог = Новый <<?>>ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога);
{ОбщийМодуль.РаботаСТорговымОборудованием.Модуль(1083,17)}: Тип не определен (ДиалогВыбораФайла)
    Диалог = Новый <<?>>ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога);
Прикрепленные файлы:
10. SlavaKron 27.08.24 14:05 Сейчас в теме
Если режим Предприятия 1С – обычное приложение, уберите &НаСервере перед функцией.
11. user2056518 27.08.24 14:09 Сейчас в теме
(10) &НаСервере перед функцией убрал но ошибка осталась прежней
{Обработка.ИмпортЗаказаИзИТ5Новый.Форма.Форма.Форма(513,14)}: Переменная не определена (РаботаСТорговымОборудованием)
		ШтрихКод = <<?>>РаботаСТорговымОборудованием.СформироватьШтрихКод();
12. spacecraft 27.08.24 14:20 Сейчас в теме
(11) управляемая форма в обычном приложении?
Скопировать код к себе в форму не предлагать?
13. user2056518 27.08.24 14:23 Сейчас в теме
(12) В принципе мне пока что не особо важно как это будет работать главное что бы хотя бы заработало, что бы я мог проверить то ли я вообще делаю или это мне абсолютно не нужно и я страдаю ересью
18. Sashares 35 27.08.24 14:57 Сейчас в теме
(13) Варианта 2:
1) Создать форму обычную, реализовать функционал в ней, тогда сможете использовать функции и процедуры этого общего модуля.
2) Использовать управляемую форму, тогда перенести функцию из общего модуля на форму.

П.С.
Рег.Владелец = СсылкаНаОбъект.Ссылка;


Ссылку от ссылки не надо получать, это плохой код.
SlavaKron; +1 Ответить
14. LeeAreHim 27.08.24 14:27 Сейчас в теме
А что возвращает ваша
Функция ПолучитьНоменклатуру.....
?
откуда она вызывается(&На клиенте?, &НаСервере?)
Вы вызываете клиентский ОбщийМодуль.РаботаСТорговымОборудованием из функции
&НаСервере?
Если вызывается с клиента и возвращает ссылку на записанную Номен, то вызовите после возврата результата ШтрихКод = РаботаСТорговымОборудованием.СформироватьШтрихКод(), и сделайте отдельную процедуру по записи в регистр.
15. user2056518 27.08.24 14:36 Сейчас в теме
(14) Функция ПолучитьНоменклатуру создаёт в справочнике новую номенклатуру согласно импортируемому заказу. вызывается &НаСервере.
клиентский ОбщийМодуль.РаботаСТорговымОборудованием из функции не &На клиенте и не на &НаСервере, нет условия.
16. LeeAreHim 27.08.24 14:38 Сейчас в теме
(15) Там сам модуль клиентский. Стоит соответствующая галочка.
То что номенклатура создается - это я понял :). Функция возвращает что? Ссылку на новую Номенклатуру?
17. user2056518 27.08.24 14:48 Сейчас в теме
19. LeeAreHim 27.08.24 15:19 Сейчас в теме
Ох-Ох-ой. Как пример:
&НаКлиенте
Процедура СамаяВажная()
НоваяНоменклатура = ПолучитНоменклатуру(параметр1,параметр2, ... Параметр N);
ШтрихКод = РаботаСТорговымОборудованием.СформироватьШтрихКод();
ДанныеДляЗаписи = ПолучитьСтруктуруДляЗаписи();
ДанныеДляЗаписи.Владелец = НоваяНоменклатура;
ДанныеДляЗаписи.ШтрихКод = ШтрихКод;
ЗаписатьВРегистр(ДанныеДляЗаписи);

КонецПроцедуры

&НаСервере
Функция  ПолучитьСтруктуруДляЗаписи()
СтруктураДляЗаписи = Новый Структура;
СтруктураДляЗаписи.Добавить("ТипШтрихкода", ПланыВидовХарактеристик.ТипыШтрихкодов.EAN8);
        СтруктураДляЗаписи.Добавить("Владелец" , Неопределено);
       СтруктураДляЗаписи.Добавить("Штрихкод", Неопределено);
        СтруктураДляЗаписи.Добавить("Качество", Справочники.Качество.Новый);
        СтруктураДляЗаписи.Добавить("ЕдиницаИзмерения", Справочники.ЕдиницыИзмерения.НайтиПоКоду("ШШ0084287"));
Возврат СтруктураДляЗаписи;
КонецФункции

&НаСервере
Функция ПолучитНоменклатуру(параметр1,параметр2, ... Параметр N)
// здесь код по получению, созданию и записи новой номенклатуры
Возврат НоваяНоменклатура;
КонецФункции

&НаСервере
Прцедура ЗаписатьВРегистр(ДанныеДляЗаписи)

        Рег = РегистрыСведений.Штрихкоды.СоздатьМенеджерЗаписи();
ЗаполнитьЗначениеСвойств(ДанныедляЗаписи, Рег);

        Рег.Записать();
КонецПроцедуры
Показать

Что-то форматирование слетело :(
И еще не уверен в ЗаполнитьЗначениеСвойств. кто источник, кто приемник

PS: но может и не сработать код :)
20. spacecraft 27.08.24 15:21 Сейчас в теме
(19) а ничего что клиенты разные и ничего не знают друг про друга? И не совместимы.
21. LeeAreHim 27.08.24 15:23 Сейчас в теме
(20) Это толчок к (13)
Кстати, это Вы про что?
Оставьте свое сообщение

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