Найти ссылки на документ

1. user1239802 07.11.19 10:59 Сейчас в теме
Помогите начинающему разработчику. Нужно запретить изменение организации в договоре контрагента если по нему уже было движение.
Хочу с помощью запроса проверить имеет ли договор ссылки, и потом уже поставить запрет на изменение.
По теме из базы знаний
Найденные решения
37. user1239802 07.11.19 13:53 Сейчас в теме
(35)Нашел оказывается в модуле объекта УТ10 это стандартная проверка.Но у меня кто то ее за комментировал и проверки не проводились

// Проверим можно ли изменять реквизиты договора.
	// Проверка осуществляется только если записывается уже существующий договор
	Если НЕ ОбменДанными.Загрузка И НЕ ЭтоНовый() Тогда

		Если ЭтоГруппа Тогда

			// Для группы владельца менять нельзя
			Если Владелец <> Ссылка.Владелец Тогда

				Сообщить("Нельзя изменять контрагента для группы договоров.", СтатусСообщения.Важное);
				//Отказ = Истина;

			КонецЕсли; 

		Иначе

			// Проверим возможность смены владельца для договора
			Если Владелец <> Ссылка.Владелец Тогда

				Запрос = Новый Запрос;
				Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1
				|	ДокументыПоДоговоруКонтрагента.Ссылка
				|ИЗ
				|	КритерийОтбора.ДокументыПоДоговоруКонтрагента(&Договор) КАК ДокументыПоДоговоруКонтрагента";
				
				Запрос.УстановитьПараметр("Договор", Ссылка);
				
				Результат = Запрос.Выполнить();
				ЕстьДокументыПоДоговору = НЕ Результат.Пустой();
				
				Если ЕстьДокументыПоДоговору Тогда
					Сообщить("Существуют документы, оформленные по договору """ + Наименование + """.
							 |Контрагент договора не может быть изменен, элемент не записан.", 
							 СтатусСообщения.Важное);
					//Отказ = Истина;
				КонецЕсли; 

			КонецЕсли; 

			// Проверим возможность смены способа ведения взаиморасчетов и валюты взаиморасчетов
			Если ВедениеВзаиморасчетов <> Ссылка.ВедениеВзаиморасчетов
			 ИЛИ ВалютаВзаиморасчетов <> Ссылка.ВалютаВзаиморасчетов 
			 ИЛИ ВидДоговора <> Ссылка.ВидДоговора
			 ИЛИ Организация <> Ссылка.Организация
			 ИЛИ РасчетыВУсловныхЕдиницах <> Ссылка.РасчетыВУсловныхЕдиницах
			 ИЛИ ВидУсловийДоговора <> Ссылка.ВидУсловийДоговора 
			 ИЛИ ВестиПоДокументамРасчетовСКонтрагентом <> Ссылка.ВестиПоДокументамРасчетовСКонтрагентом Тогда

				Если ЭтотОбъект.СуществуютСсылки() Тогда

					Сообщить("Существуют документы, проведенные по договору """ + Наименование + """.
							 |Реквизиты ""Организация"", ""Ведение взаиморасчетов"", ""Валюта взаиморасчетов"", ""Вид договора"", 
							 |""Вести по документам расчетов с контрагентом"", ""Расчеты в условных единицах"" и ""Условия выполнения договора"" не могут быть изменены, элемент не записан.", 
							 СтатусСообщения.Важное);
					//Отказ = Истина;

				КонецЕсли;

			КонецЕсли;
            Если  ОбособленныйУчетТоваровПоЗаказамПокупателей<>Ссылка.ОбособленныйУчетТоваровПоЗаказамПокупателей Тогда
				Если ПолныеПрава.ПроверитьНаличиеСсылокНаДоговорКонтрагентаВЗаказахПокупателе­й(Ссылка) Тогда
					Сообщить("Существуют заказы покупателей, проведенные по договору """ + Наименование + """.
					|Реквизит ""Обособленный учет товаров по заказам покупателей"" не может быть изменен, элемент не записан.", 
					СтатусСообщения.Важное);
					//Отказ = Истина;

				КонецЕсли;
				
			КонецЕсли;
			
			// Если изменился порядок регистрации счетов-фактур на аванс, нужно сообщить
			Если ПорядокРегистрацииСчетовФактурНаАвансПоДоговору <> Ссылка.ПорядокРегистрацииСчетовФактурНаАвансПоДоговору Тогда
				Если ЭтотОбъект.СуществуютСсылки() Тогда
					Сообщить("Изменился порядок регистрации счетов-фактур на аванс по договору. 
							|При регистрации счетов-фактур на аванс за прошлые периоды возможны изменения в ранее зарегистрированных документах.", СтатусСообщения.Важное);
				КонецЕсли;
			КонецЕсли;

		КонецЕсли;

	КонецЕсли;
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. ZergKRSK 129 07.11.19 11:10 Сейчас в теме
(1) пробежаться по ключевым регистрам и проверить засветился там этот договор или нет.
Пример из УПП, подставьте туда свои регистры.
Функция ПроверитьНаличиеСсылокНаДоговорКонтрагента(ДоговорКонтрагента) Экспорт
	
	Запрос = Новый Запрос();
	Запрос.УстановитьПараметр("ДоговорКонтрагента", ДоговорКонтрагента);

	Запрос.Текст = "
	|ВЫБРАТЬ ПЕРВЫЕ 1
	|	РегистрСведений.УсловияПоставокПоДоговорамКонтрагентовОбщие.ДоговорКонтрагента
	|ГДЕ
	|	ДоговорКонтрагента = &ДоговорКонтрагента
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ ПЕРВЫЕ 1
	|	РегистрСведений.УсловияПоставокПоДоговорамКонтрагентовПоНоменклатуре.ДоговорКонтрагента
	|ГДЕ
	|	ДоговорКонтрагента = &ДоговорКонтрагента
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ ПЕРВЫЕ 1
	|	РегистрНакопления.РасчетыСКонтрагентами.ДоговорКонтрагента
	|ГДЕ
	|	ДоговорКонтрагента = &ДоговорКонтрагента
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ ПЕРВЫЕ 1
	|	РегистрНакопления.ВзаиморасчетыСКонтрагентами.ДоговорКонтрагента
	|ГДЕ
	|	ДоговорКонтрагента = &ДоговорКонтрагента
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ ПЕРВЫЕ 1
	|	РегистрНакопления.ЗаказыПокупателей.ДоговорКонтрагента
	|ГДЕ
	|	ДоговорКонтрагента = &ДоговорКонтрагента
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ ПЕРВЫЕ 1
	|	РегистрНакопления.ЗаказыПоставщикам.ДоговорКонтрагента
	|ГДЕ
	|	ДоговорКонтрагента = &ДоговорКонтрагента
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ ПЕРВЫЕ 1
	|	РегистрНакопления.ПартииТоваровПереданные.ДоговорКонтрагента
	|ГДЕ
	|	ДоговорКонтрагента = &ДоговорКонтрагента
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ ПЕРВЫЕ 1
	|	РегистрНакопления.ТоварыПереданные.ДоговорКонтрагента
	|ГДЕ
	|	ДоговорКонтрагента = &ДоговорКонтрагента
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ ПЕРВЫЕ 1
	|	РегистрНакопления.ТоварыПолученные.ДоговорКонтрагента
	|ГДЕ
	|	ДоговорКонтрагента = &ДоговорКонтрагента
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ ПЕРВЫЕ 1
	|	РегистрНакопления.Продажи.ДоговорКонтрагента
	|ГДЕ
	|	ДоговорКонтрагента = &ДоговорКонтрагента
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ ПЕРВЫЕ 1
	|	РегистрНакопления.ПланируемыеПоступленияДенежныхСредств.ДоговорКонтрагента
	|ГДЕ
	|	ДоговорКонтрагента = &ДоговорКонтрагента
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ ПЕРВЫЕ 1
	|	РегистрНакопления.ЗаявкиНаРасходованиеСредств.ДоговорКонтрагента
	|ГДЕ
	|	ДоговорКонтрагента = &ДоговорКонтрагента
	|";

	Возврат НЕ Запрос.Выполнить().Пустой();
	
КонецФункции
Показать
5. user1239802 07.11.19 11:20 Сейчас в теме
(4) Думал пройтись по всем справочникам, но по регистрам мне большее идея привлекает. Не такой трудоемкий получается запрос
7. ZergKRSK 129 07.11.19 11:35 Сейчас в теме
(5) у вас условие звучит "если по нему уже было движение". Пройтись по справочникам ничего не даст, справочник не делает движений.
9. YannikAlx 43 07.11.19 11:38 Сейчас в теме
(5) Думы пройтись по справочникам мягко сказать неверные! Что по вашему и в каких справочниках вы бы искали в ключе своих задач?
Пройтись по регистрам - тоже неверный подход!
А что если вы пропустите какой-то ?
10. ZergKRSK 129 07.11.19 11:46 Сейчас в теме
(9) а что если вы ошибку в коде допустите? Вот тоже самое и будет. При грамотном запросе он будет выполнятся намного быстрее чем искать ссылки во всех объектах системы.
18. wau8824ru 22 07.11.19 12:35 Сейчас в теме
(1)
запроса проверить имеет ли договор ссылки, и потом уже поставить запрет на изменение.

При открытии в конце процедуры
ЭлементыФормы.Организация.ТолькоПросмотр = Не СправочникОбъект.ЭтоНовый();
Если договор записан то редактирование организации запрещено, новый редактирование разрешено!
И при этом ненужно нагружать программу лишним запросом.
20. YannikAlx 43 07.11.19 12:40 Сейчас в теме
(18) Это не совсем верное предложение, ибо по условию требуется редактирование запретить не у нового договора, а только у того у которого есть уже документы
21. wau8824ru 22 07.11.19 12:41 Сейчас в теме
(20)Ну тогда в УТ 10 есть модуль
Если ПолныеПрава.Номенклатура_СуществуютСсылки(Владелец, Неопределено) Тогда
там можно посмотреть, кусок из ЕдиницыИзмерения.Модуль.ПередЗаписью
23. user1239802 07.11.19 12:47 Сейчас в теме
(21)В синтаксис помощнике искать этот модуль?
25. wau8824ru 22 07.11.19 12:48 Сейчас в теме
Это общий модуль ПолныеПрава
24. wau8824ru 22 07.11.19 12:47 Сейчас в теме
(21)ПолныеПрава.ПроверитьНаличиеСсылокНаДоговорКонтрагента(ДоговорКонтрагента)

Функция ПроверитьНаличиеСсылокНаДоговорКонтрагента(ДоговорКонтрагента) Экспорт
	
	Запрос = Новый Запрос();
	Запрос.УстановитьПараметр("ДоговорКонтрагента", ДоговорКонтрагента);

	Запрос.Текст = "
	|ВЫБРАТЬ ПЕРВЫЕ 1
	|	РегистрСведений.УсловияПоставокПоДоговорамКонтрагентовОбщие.ДоговорКонтрагента
	|ГДЕ
	|	ДоговорКонтрагента = &ДоговорКонтрагента
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ ПЕРВЫЕ 1
	|	РегистрСведений.УсловияПоставокПоДоговорамКонтрагентовПоНоменклатуре.ДоговорКонтрагента
	|ГДЕ
	|	ДоговорКонтрагента = &ДоговорКонтрагента
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ ПЕРВЫЕ 1
	|	РегистрНакопления.РасчетыСКонтрагентами.ДоговорКонтрагента
	|ГДЕ
	|	ДоговорКонтрагента = &ДоговорКонтрагента
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ ПЕРВЫЕ 1
	|	РегистрНакопления.ВзаиморасчетыСКонтрагентами.ДоговорКонтрагента
	|ГДЕ
	|	ДоговорКонтрагента = &ДоговорКонтрагента
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ ПЕРВЫЕ 1
	|	РегистрНакопления.ЗаказыПокупателей.ДоговорКонтрагента
	|ГДЕ
	|	ДоговорКонтрагента = &ДоговорКонтрагента
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ ПЕРВЫЕ 1
	|	РегистрНакопления.ЗаказыПоставщикам.ДоговорКонтрагента
	|ГДЕ
	|	ДоговорКонтрагента = &ДоговорКонтрагента
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ ПЕРВЫЕ 1
	|	РегистрНакопления.ПартииТоваровПереданные.ДоговорКонтрагента
	|ГДЕ
	|	ДоговорКонтрагента = &ДоговорКонтрагента
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ ПЕРВЫЕ 1
	|	РегистрНакопления.ТоварыПереданные.ДоговорКонтрагента
	|ГДЕ
	|	ДоговорКонтрагента = &ДоговорКонтрагента
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ ПЕРВЫЕ 1
	|	РегистрНакопления.ТоварыПолученные.ДоговорКонтрагента
	|ГДЕ
	|	ДоговорКонтрагента = &ДоговорКонтрагента
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ ПЕРВЫЕ 1
	|	РегистрНакопления.Продажи.ДоговорКонтрагента
	|ГДЕ
	|	ДоговорКонтрагента = &ДоговорКонтрагента
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ ПЕРВЫЕ 1
	|	РегистрНакопления.ПланируемыеПоступленияДенежныхСредств.ДоговорКонтрагента
	|ГДЕ
	|	ДоговорКонтрагента = &ДоговорКонтрагента
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ ПЕРВЫЕ 1
	|	РегистрНакопления.ЗаявкиНаРасходованиеСредств.ДоговорКонтрагента
	|ГДЕ
	|	ДоговорКонтрагента = &ДоговорКонтрагента
	|";

	Возврат НЕ Запрос.Выполнить().Пустой();
	
КонецФункции
Показать
user1239802; YannikAlx; +2 Ответить
27. YannikAlx 43 07.11.19 12:53 Сейчас в теме
(24) Вот это уже реально хороший ход! ;-)
Только уточню , что стоит использовать Привегилированный режим для запуска этой процедуры...
30. user1239802 07.11.19 12:57 Сейчас в теме
(27) Что значит использовать привелигированный режим для запуска процедуры?
36. YannikAlx 43 07.11.19 13:10 Сейчас в теме
(30) При запуске какой-либо процедуры, у которой права на запуск только с полными правами, может возникнуть отказ в случае отсутствия полных прав у текущего пользователя. В этом случае при необходимости есть возможность перед запуском включить , а после выполнения выключить привелигированный режим, который позволит выполнить все от имени простого смертного, а не от Админа...
31. wau8824ru 22 07.11.19 12:58 Сейчас в теме
(27)
Только уточню , что стоит использовать Привегилированный режим для запуска этой процедуры...

функция находится в привилегированном модуле, вызов привилегированного режима не потребуется. наверное ;-), надо пробовать.
22. user1239802 07.11.19 12:46 Сейчас в теме
(20) ну да верно. Требуется запретить редактирование договора по которому были движения
26. wau8824ru 22 07.11.19 12:51 Сейчас в теме
(22) так как запрос идет к регистрам накопления, то проверяются только проведенные документы, могут быть не проведённые, счет на оплату например. лучше запрещать после записи. Так вернее.
28. user1239802 07.11.19 12:54 Сейчас в теме
(26)Вообще я хотел реализовать в процедуре перед записью
29. wau8824ru 22 07.11.19 12:56 Сейчас в теме
(28)
Их две, одна в модуле формы, другая в модуле объекта. лучше в модуле объекта!
32. user1239802 07.11.19 12:58 Сейчас в теме
(29) Почему лучше аргументируйте? я всегда делал на модуле формы
33. wau8824ru 22 07.11.19 13:01 Сейчас в теме
(32)
Записать из модуля формы выполняется только из формы, а из модуля объекта будет выполнятся при любой попытки Записать()... как то так
34. user1239802 07.11.19 13:05 Сейчас в теме
(33)ну по идее мне так и нужно чтобы после открытия это выполнялось, и при попытке перезаписать
35. wau8824ru 22 07.11.19 13:08 Сейчас в теме
(34)
по идее мне так и нужно чтобы после открытия это выполнялось, и при попытке перезаписать

При попытки программной перезаписи модуль объекта выполнится, а модуль формы нет. По обстоятельствам...
37. user1239802 07.11.19 13:53 Сейчас в теме
(35)Нашел оказывается в модуле объекта УТ10 это стандартная проверка.Но у меня кто то ее за комментировал и проверки не проводились

// Проверим можно ли изменять реквизиты договора.
	// Проверка осуществляется только если записывается уже существующий договор
	Если НЕ ОбменДанными.Загрузка И НЕ ЭтоНовый() Тогда

		Если ЭтоГруппа Тогда

			// Для группы владельца менять нельзя
			Если Владелец <> Ссылка.Владелец Тогда

				Сообщить("Нельзя изменять контрагента для группы договоров.", СтатусСообщения.Важное);
				//Отказ = Истина;

			КонецЕсли; 

		Иначе

			// Проверим возможность смены владельца для договора
			Если Владелец <> Ссылка.Владелец Тогда

				Запрос = Новый Запрос;
				Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1
				|	ДокументыПоДоговоруКонтрагента.Ссылка
				|ИЗ
				|	КритерийОтбора.ДокументыПоДоговоруКонтрагента(&Договор) КАК ДокументыПоДоговоруКонтрагента";
				
				Запрос.УстановитьПараметр("Договор", Ссылка);
				
				Результат = Запрос.Выполнить();
				ЕстьДокументыПоДоговору = НЕ Результат.Пустой();
				
				Если ЕстьДокументыПоДоговору Тогда
					Сообщить("Существуют документы, оформленные по договору """ + Наименование + """.
							 |Контрагент договора не может быть изменен, элемент не записан.", 
							 СтатусСообщения.Важное);
					//Отказ = Истина;
				КонецЕсли; 

			КонецЕсли; 

			// Проверим возможность смены способа ведения взаиморасчетов и валюты взаиморасчетов
			Если ВедениеВзаиморасчетов <> Ссылка.ВедениеВзаиморасчетов
			 ИЛИ ВалютаВзаиморасчетов <> Ссылка.ВалютаВзаиморасчетов 
			 ИЛИ ВидДоговора <> Ссылка.ВидДоговора
			 ИЛИ Организация <> Ссылка.Организация
			 ИЛИ РасчетыВУсловныхЕдиницах <> Ссылка.РасчетыВУсловныхЕдиницах
			 ИЛИ ВидУсловийДоговора <> Ссылка.ВидУсловийДоговора 
			 ИЛИ ВестиПоДокументамРасчетовСКонтрагентом <> Ссылка.ВестиПоДокументамРасчетовСКонтрагентом Тогда

				Если ЭтотОбъект.СуществуютСсылки() Тогда

					Сообщить("Существуют документы, проведенные по договору """ + Наименование + """.
							 |Реквизиты ""Организация"", ""Ведение взаиморасчетов"", ""Валюта взаиморасчетов"", ""Вид договора"", 
							 |""Вести по документам расчетов с контрагентом"", ""Расчеты в условных единицах"" и ""Условия выполнения договора"" не могут быть изменены, элемент не записан.", 
							 СтатусСообщения.Важное);
					//Отказ = Истина;

				КонецЕсли;

			КонецЕсли;
            Если  ОбособленныйУчетТоваровПоЗаказамПокупателей<>Ссылка.ОбособленныйУчетТоваровПоЗаказамПокупателей Тогда
				Если ПолныеПрава.ПроверитьНаличиеСсылокНаДоговорКонтрагентаВЗаказахПокупателе­й(Ссылка) Тогда
					Сообщить("Существуют заказы покупателей, проведенные по договору """ + Наименование + """.
					|Реквизит ""Обособленный учет товаров по заказам покупателей"" не может быть изменен, элемент не записан.", 
					СтатусСообщения.Важное);
					//Отказ = Истина;

				КонецЕсли;
				
			КонецЕсли;
			
			// Если изменился порядок регистрации счетов-фактур на аванс, нужно сообщить
			Если ПорядокРегистрацииСчетовФактурНаАвансПоДоговору <> Ссылка.ПорядокРегистрацииСчетовФактурНаАвансПоДоговору Тогда
				Если ЭтотОбъект.СуществуютСсылки() Тогда
					Сообщить("Изменился порядок регистрации счетов-фактур на аванс по договору. 
							|При регистрации счетов-фактур на аванс за прошлые периоды возможны изменения в ранее зарегистрированных документах.", СтатусСообщения.Важное);
				КонецЕсли;
			КонецЕсли;

		КонецЕсли;

	КонецЕсли;
Показать
38. wau8824ru 22 11.02.24 19:46 Сейчас в теме
По аналогии с единицей измерения код должен быть примерно такой
в модуле ЕдиницыИзмерения
// Обработчик события ПередЗаписью .
//
Процедура ПередЗаписью(Отказ)

	Если НЕ ОбменДанными.Загрузка
	   И ТипЗнч(Владелец) = Тип("СправочникСсылка.Номенклатура") Тогда
		Если Владелец.ЕдиницаХраненияОстатков = Ссылка Тогда

			Запрос = Новый Запрос;
			Запрос.УстановитьПараметр("ТекущийЭлемент", ЭтотОбъект.Ссылка);

			Запрос.Текст =
			"ВЫБРАТЬ
			|	ЕдиницыИзмерения.Ссылка КАК Элемент,
			|	ЕдиницыИзмерения.Коэффициент КАК Коэффициент
			|ИЗ
			|	Справочник.ЕдиницыИзмерения КАК ЕдиницыИзмерения
			|
			|ГДЕ
			|	ЕдиницыИзмерения.Ссылка = &ТекущийЭлемент";

			Выборка = Запрос.Выполнить().Выбрать();

			Если Выборка.Следующий() Тогда
				Если Выборка.Коэффициент <> Коэффициент Тогда
					Если ПолныеПрава.Номенклатура_СуществуютСсылки(Владелец, Неопределено) Тогда
						ОбщегоНазначения.СообщитьОбОшибке("Единица """ + СокрЛП(Наименование) + """ является единицей хранения остатков для """ + 
						                 СокрЛП(Владелец) + """ и уже участвует в товародвижении. Изменить коэффициент уже нельзя!", Отказ);
					КонецЕсли;
				КонецЕсли;
			КонецЕсли;

		//88( Администратор 06.05.2020 10:53:03
			Если Не Отказ И ЭтотОбъект.Коэффициент <> 1 Тогда
				ОбщегоНазначения.СообщитьОбОшибке(".единица «"+СокрЛП(ЭтотОбъект.Наименование)+"» является единицей хранения остатков для «"+СокрЛП(ЭтотОбъект.Владелец)+"», коэффициент не может отличатся от 1!");
				ЭтотОбъект.Коэффициент = 1;
			КонецЕсли;
		Иначе// дополнительная единица измерения
			Если Не РольДоступна("ПравоАдминистрирования") Тогда// Администратору коэффициент изменить можно, даже при существующих ссылках в документах
				Если ЭтотОбъект.Коэффициент <> ЭтотОбъект.Ссылка.Коэффициент Тогда// коэффициент был изменён
					Если ПолныеПрава.ЕдиницыИзмерения_СуществуютСсылки(ЭтотОбъект.Ссылка, Неопределено) Тогда
						ОбщегоНазначения.СообщитьОбОшибке(".единица измерения «"+СокрЛП(ЭтотОбъект.Наименование)+"» участвует в документах. Изменить коэффициент уже нельзя, обратитесь к Администратору!");
						ЭтотОбъект.Коэффициент = ЭтотОбъект.Ссылка.Коэффициент;
					КонецЕсли;
				КонецЕсли;
			КонецЕсли;
		//)88 Администратор 06.05.2020 10:53:06
		КонецЕсли;
	КонецЕсли;

	Если Не ОбменДанными.Загрузка
	   И Не Отказ
	   И Коэффициент = 0 Тогда
		ОбщегоНазначения.СообщитьОбОшибке("Для "+СокрЛП(Владелец)+" у единицы измерения "+СокрЛП(Ссылка)+" не задан коэффициент! Он будет установлен равным 1.");
		Коэффициент = 1;
	КонецЕсли;

КонецПроцедуры // ПередЗаписью()

// Функция проверяет, существуют ли ссылки на единицу измерения в документах.
// Если есть - нельзя менять коэффицент
//
// Параметры:
//  СуществуютСсылки - булево, переменная, в которой сохраняется результат работы функции, чтобы
//                     при последующих вызовах заново не считать функцию.
//
// Возвращаемое значение:
//  Истина - если есть ссылки в документах, Ложь - если нет.
//
Функция ЕдиницыИзмерения_СуществуютСсылки(Ссылка, СуществуютСсылки) Экспорт
	
	Если НЕ ЗначениеЗаполнено(Ссылка) Тогда
		Возврат Ложь;
	ИначеЕсли СуществуютСсылки <> Неопределено Тогда
		Возврат СуществуютСсылки; // уже было рассчитано
	КонецЕсли;
	
	Запрос = Новый Запрос();
	
	Запрос.УстановитьПараметр("ТекущаяЕдиницаИзмерения", Ссылка);
	
	ТипЕдиницаИзмерения = Тип("СправочникСсылка.ЕдиницыИзмерения");
	
	Запрос.Текст = "";
	
	Для Каждого Документ Из Метаданные.Документы Цикл
		Для Каждого ТабличнаяЧасть Из Документ.ТабличныеЧасти Цикл
			Для Каждого РеквизитТабличнаяЧасть Из ТабличнаяЧасть.Реквизиты Цикл
				Если РеквизитТабличнаяЧасть.Тип.СодержитТип(ТипЕдиницаИзмерения) Тогда
					Если Запрос.Текст <> "" Тогда
						Запрос.Текст = Запрос.Текст+"
							|ОБЪЕДИНИТЬ ВСЕ
							|";
					КонецЕсли;
					Запрос.Текст = Запрос.Текст+"
						|ВЫБРАТЬ ПЕРВЫЕ 1
						|	1 КАК Результат
						|ИЗ
						|	Документ."+Документ.Имя+"."+ТабличнаяЧасть.Имя+" КАК Док
						|ГДЕ
						|	Док."+РеквизитТабличнаяЧасть.Имя+" = &ТекущаяЕдиницаИзмерения
						|";
				КонецЕсли;
			КонецЦикла;
		КонецЦикла;
	КонецЦикла;
	
	Возврат Не Запрос.Выполнить().Пустой();
	
КонецФункции
Показать
2. alex-l19041 8 07.11.19 11:05 Сейчас в теме
начните с консоли запросов
3. GeraltSnow 172 07.11.19 11:08 Сейчас в теме
Есть такая функция НайтиПоСсылкам(), попробуй её
YannikAlx; AnryMc; +2 Ответить
6. user1239802 07.11.19 11:22 Сейчас в теме
(3)
Ссылки = НайтиСсылкиНаОбъект();
   	ТабСсылок = НайтиПоСсылкам (Ссылки);
    Для Каждого Ссылка из ТабСсылок Цикл
    Сообщить (" " + Сокр(Ссылка[0]) + " " + Сокр(Ссылка[1]));
       КонецЦикла;
С этим пробовал тоже уже. Но что не удалось с ним подружится
8. GeraltSnow 172 07.11.19 11:36 Сейчас в теме
(6)
Вот так попробуй.
        
Договор = Справочники.ДоговорыКонтрагентов.НайтиПоРеквизиту("Номер","ДОГ45658\12");
МассивСсылок = Новый Массив;
МассивСсылок.Добавить(Договор);

ТабСсылок = НайтиПоСсылкам(МассивСсылок);

Для Каждого Строка из ТабСсылок Цикл
Сообщить(Строка.Данные);
КонецЦикла
Показать
11. YannikAlx 43 07.11.19 11:53 Сейчас в теме
Ошибку в коде допустить гораздо труднее. Практически невозможно, ибо синтаксис ясно проверяет платформа, а логика проверяется автоматом на одном договоре с документом, если его находит код , значит 100% рабочий...

А вот пропустить регистр из-за не знания списка регистров , где в принципе нужно искать - да с полпинка!
И никакая проверка не прокатит, нужно именно знание всех необходимых регистров...

И вообще у вас что конкретные претензии к методу НайтиПоСсылкам ??
12. ZergKRSK 129 07.11.19 12:01 Сейчас в теме
(11) если нет знаний регистров, то и не надо рисовать запрос. Я лишь предложил оптимальный на мой взгляд вариант.
Претензии к методу я описал выше. При достаточно крупной БД метод не блещет скоростью выполнения.
13. YannikAlx 43 07.11.19 12:05 Сейчас в теме
Вы бы проанализировали тогда уж все исходные данные перед тем как давать рекомендации...
Зачем сначала давать совет писать запрос по регистрам, а потом сказать - если ты не знаешь регистры , то не пользуйся!
Вы даете свой совет НАЧИНАЮЩЕМУ! задумайтесь и сами оцените свои ответы...
14. ZergKRSK 129 07.11.19 12:27 Сейчас в теме
(13) нет никакого желания с вами общаться, всего вам наилучшего.
15. YannikAlx 43 07.11.19 12:31 Сейчас в теме
(14) Кооонечно! Вам же только с единственно умным собеседником есть желания общаться - пообщайтесь с ним... ;-)
17. ZergKRSK 129 07.11.19 12:33 Сейчас в теме
(15) вы просто неадекват, мне жаль.
19. YannikAlx 43 07.11.19 12:37 Сейчас в теме
(17) Ваш стиль - только себя видеть всегда правым?
Вы в принципе способны вести дисскусию, приводя хоть какие-либо аргументы?
Или следующий шаг будет перечисление моих физических уродств?
Хотя возможно вы даже не понимаете как низко пали...
16. user1239802 07.11.19 12:32 Сейчас в теме
Тоже склоняюсь больше к запросу. Потому что УТ сильно переписана и всех регистров я не знаю. Я с ними долго разбиратся
Оставьте свое сообщение

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