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

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 171 07.11.19 11:08 Сейчас в теме
Есть такая функция НайтиПоСсылкам(), попробуй её
YannikAlx; AnryMc; +2 Ответить
6. user1239802 07.11.19 11:22 Сейчас в теме
(3)
Ссылки = НайтиСсылкиНаОбъект();
   	ТабСсылок = НайтиПоСсылкам (Ссылки);
    Для Каждого Ссылка из ТабСсылок Цикл
    Сообщить (" " + Сокр(Ссылка[0]) + " " + Сокр(Ссылка[1]));
       КонецЦикла;
С этим пробовал тоже уже. Но что не удалось с ним подружится
8. GeraltSnow 171 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 Сейчас в теме
Тоже склоняюсь больше к запросу. Потому что УТ сильно переписана и всех регистров я не знаю. Я с ними долго разбиратся
Оставьте свое сообщение
Вакансии
Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)

Программист 1С
Москва
зарплата от 250 000 руб.
Полный день

Программист 1C
Волгоград
зарплата от 200 000 руб.
Полный день

Аналитик
Санкт-Петербург
зарплата от 200 000 руб. до 250 000 руб.
Полный день