Универсальный запрос по табличным частям разных документов для их проверки

1. avi-murom 23.09.20 13:19 Сейчас в теме
Здравствуйте.
Помогите написать выборку.
Не могу в запросе указать название колонки в зависимости от типа документа.
Изначально написал конкретно для проверки табличной части ТОВАРЫ документа "Реализация товаров и услуг".
На нем все полностью отработал.
Затем данную функцию понадобилось использовать для проверки заполняемости табличной части ТОВАРЫ в других документах.
Столкнулся с проблемой - если в табличной части ТОВАРЫ документа реализации заказы покупателей размещены в колонке с названием "ЗаказыПокупателей", то, например, в документе Перемещения данная колонка называется "ДокументРезерва.
Как (лучше в самом запросе) взависимости от типа документа указать или "ТаблицаТовары.ДокументРезерва" или "ТаблицаТовары.ЗаказПокупателя".
В начале функции - это эксперименты.
ДатаДок - на какую дату.
СкладОтправитель - откуда отгрузка или перемещение
СсылкаНаДокумент - табличная часть документа (ДокументТабличнаяЧасть.ПеремещениеТоваров.Товары или ДокументТабличнаяЧасть.РеализацияТоваровИУслуг.Товары

Функция ПроверкаТоваровВРезервеИСвободныхОстатках(ДатаДок, СкладОтправитель, СсылкаНаДокумент, Отказ) Экспорт
	
	Если ТипЗнч(СсылкаНаДокумент) = Тип("ДокументТабличнаяЧасть.ПеремещениеТоваров.Товары") Тогда
		ЗначениеЗаказа = "ДокументРезерва";
	Иначе
		ЗначениеЗаказа = "ЗаказПокупателя";
	КонецЕсли;
	
	Запрос = Новый Запрос;
	Запрос.Текст =
	    "ВЫБРАТЬ
	    |	ТаблицаТовары.Номенклатура,
	    |	ТаблицаТовары.ХарактеристикаНоменклатуры,
	    |	ТаблицаТовары.СерияНоменклатуры,
	    |	ТаблицаТовары.Количество,
	    |	ТаблицаТовары.ЕдиницаИзмеренияМест,
		|	ВЫБОР
		|		КОГДА ТИПЗНАЧЕНИЯ(&ТаблицаТовары) = ТИП(Документ.Перемещение)
		|		ТОГДА
		|		ТаблицаТовары.ДокументРезерва
		|		ИНАЧЕ
		|       ТаблицаТовары.ЗаказПокупателя
		|   КОНЕЦ
		|	КАК ДокументРезерва
		//|	&ЗначениеЗаказа КАК ДокументРезерва
	    |ПОМЕСТИТЬ ВТ
	    |ИЗ
	    |	&ТаблицаТовары КАК ТаблицаТовары
	    |;
	    |
	    |////////////////////////////////////////////////////////////­////////////////////
	    |ВЫБРАТЬ
	    |	ВТ.Номенклатура КАК Номенклатура,
	    |	ВТ.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
	    |	ВТ.СерияНоменклатуры КАК СерияНоменклатуры,
	    |	ВТ.ДокументРезерва КАК ЗаказВДокументе,
	    |	ВТ.ЕдиницаИзмеренияМест КАК ЕдМест,
	    |	ОстатокТовара.ДокументРезерва КАК ЗаказВБазе,
	    |	ОстатокТовараВЯщиках.ДокументРезерва КАК ЗаказВБазеВЯщиках,
	    |	ВТ.Количество КАК КоличествоВДокументе,
	    |	ОстатокТовара.КоличествоОстаток КАК ОстатокВРезерве,
	    |	ОстатокТовараВЯщиках.КоличествоОстаток КАК ОстатокВРезервеВЯщиках,
	    |	СвободныйОстаткок.КоличествоСУчетомСерииОстаток КАК СвободныйОстаток,
	    |	СвободныйостатокВЯщиках.КоличествоОстаток КАК СвободныйостатокВЯщиках
		//|	ВТ.СпособСписания
	    |ИЗ
	    |	ВТ КАК ВТ
	    |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(&НаДату, Склад = &Склад) КАК ОстатокТовара
	    |		ПО (ОстатокТовара.Номенклатура = ВТ.Номенклатура)
	    |			И (ОстатокТовара.ХарактеристикаНоменклатуры = ВТ.ХарактеристикаНоменклатуры)
	    |			И (ОстатокТовара.СерияНоменклатуры = ВТ.СерияНоменклатуры)
	    |			И (ОстатокТовара.ДокументРезерва = ВТ.ДокументРезерва)
	    |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.МУР_ТоварыВРезервеНаСкладахВЯщиках.Остатки(&НаДату, Склад = &Склад) КАК ОстатокТовараВЯщиках
	    |		ПО (ОстатокТовараВЯщиках.Номенклатура = ВТ.Номенклатура)
	    |			И (ОстатокТовараВЯщиках.СерияНоменклатуры = ВТ.СерияНоменклатуры)
	    |			И (ОстатокТовараВЯщиках.ХарактеристикаНоменклатуры = ВТ.ХарактеристикаНоменклатуры)
	    |			И (ОстатокТовараВЯщиках.ДокументРезерва = ВТ.ДокументРезерва)
	    |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СвободныеОстатки.Остатки(&НаДату, Склад = &Склад) КАК СвободныйОстаткок
	    |		ПО (СвободныйОстаткок.Номенклатура = ВТ.Номенклатура)
	    |			И (СвободныйОстаткок.ХарактеристикаНоменклатуры = ВТ.ХарактеристикаНоменклатуры)
	    |			И (СвободныйОстаткок.СерияНоменклатуры = ВТ.СерияНоменклатуры)
	    |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.МУР_ТоварыНаСкладахЯщики.Остатки(&НаДату, Склад = &Склад) КАК СвободныйостатокВЯщиках
	    |		ПО (СвободныйостатокВЯщиках.Номенклатура = ВТ.Номенклатура)
	    |			И (СвободныйостатокВЯщиках.ХарактеристикаНоменклатуры = ВТ.ХарактеристикаНоменклатуры)
	    |			И (СвободныйостатокВЯщиках.СерияНоменклатуры = ВТ.СерияНоменклатуры)";
	
	Запрос.УстановитьПараметр("ТаблицаТовары", СсылкаНаДокумент.Выгрузить());
	Запрос.УстановитьПараметр("НаДату", ДатаДок);
	Запрос.УстановитьПараметр("Склад", СкладОтправитель);
	Запрос.УстановитьПараметр("ВидДокумента", СсылкаНаДокумент);
	ВыборкаЗапроса = Запрос.Выполнить();
	РезультатЗапроса = ВыборкаЗапроса.Выбрать();
Показать

Дальше идет проверка выбранного.......
По теме из базы знаний
Найденные решения
3. FatPanzer 23.09.20 13:37 Сейчас в теме
А в чем собственно проблема? Колонка у вас называется "ДокументРезерва".
Запрос.Текст = СтрЗаменить(Запрос.Текст, "ДокументРезерва", "МояЛюбимаяКолонка");
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. nomad_irk 72 23.09.20 13:26 Сейчас в теме
(1)В запросе - уже никак. Вам необходимо динамически формировать сам текст запроса в зависимости от типа документа.
oleg-x; alex-l19041; +2 Ответить
3. FatPanzer 23.09.20 13:37 Сейчас в теме
А в чем собственно проблема? Колонка у вас называется "ДокументРезерва".
Запрос.Текст = СтрЗаменить(Запрос.Текст, "ДокументРезерва", "МояЛюбимаяКолонка");
4. avi-murom 24.09.20 08:40 Сейчас в теме
Колонка у меня называется, в зависимости от типа документа, или ЗаказПокупателя или ДокументРезерва.
5. FatPanzer 24.09.20 09:14 Сейчас в теме
(4) Это колонка в выбираемой табличной части у вас зависит от типа документа. А имя колонки в результате запроса - всегда "Документ резерва". Именно её я и предлагаю изменить, если я вас правильно услышал.
29. avi-murom 24.09.20 12:57 Сейчас в теме
(5)Нет не правильно. Интересует именно колонка в выбираемой части.
Ну в общем вопрос решен полностью.
6. avi-murom 24.09.20 09:48 Сейчас в теме
Не знаю правильно я сделал или нет, но работает:

Запрос = Новый Запрос;
	Запрос.Текст =
	    "ВЫБРАТЬ
	    |	ТаблицаТовары.Номенклатура,
	    |	ТаблицаТовары.ХарактеристикаНоменклатуры,
	    |	ТаблицаТовары.СерияНоменклатуры,
	    |	ТаблицаТовары.Количество,
	    |	ТаблицаТовары.ЕдиницаИзмеренияМест,
		|	ТаблицаТовары.ЗаказПокупателя КАК ДокументРезерва
	    |ПОМЕСТИТЬ ВТ
	    |ИЗ
	    |	&ТаблицаТовары КАК ТаблицаТовары
	    |;
	    |
	    |////////////////////////////////////////////////////////////­////////////////////
	    |ВЫБРАТЬ
...............................................
	Запрос.УстановитьПараметр("ТаблицаТовары", СсылкаНаДокумент.Выгрузить());
	Запрос.УстановитьПараметр("НаДату", ДатаДок);
	Запрос.УстановитьПараметр("Склад", СкладОтправитель);
	Если ТипЗнч(СсылкаНаДокумент) = Тип("ДокументТабличнаяЧасть.ПеремещениеТоваров.Товары") Тогда
		Запрос.Текст = СтрЗаменить(Запрос.Текст, "ТаблицаТовары.ЗаказПокупателя КАК ДокументРезерва", "ТаблицаТовары.ДокументРезерва КАК ДокументРезерва");
	Иначе
	КонецЕсли;
	ВыборкаЗапроса = Запрос.Выполнить();
	РезультатЗапроса = ВыборкаЗапроса.Выбрать();
Показать
8. FatPanzer 24.09.20 10:36 Сейчас в теме
(6)
Если ТипЗнч(СсылкаНаДокумент) = Тип("ДокументТабличнаяЧасть.ПеремещениеТоваров.Товары") Тогда
Ух ты, как интересно!!!
22. avi-murom 24.09.20 11:40 Сейчас в теме
(8)Что тут не так? В запрос передается только табличная часть "Товары" документов. остальное проверять не нужно.
23. FatPanzer 24.09.20 11:42 Сейчас в теме
(22) Да нет, дело ваше, все нормально.

..обзывать товарную табличную часть именем "СсылкаНаДокумент" - это прям шпионский детектив какой-то и "Операция "Ы"... ну...
24. nomad_irk 72 24.09.20 11:45 Сейчас в теме
(23)Через месяц понадобится доработать, откроет модуль и будет удивляться "ну кто так пишет?!" :)
7. avi-murom 24.09.20 10:23 Сейчас в теме
В общем работает, НО появилась одна непонятка.
Теперь при закрытии не измененного документа (перемещение или реализация) постоянно спрашивает "данные были изменены сохранить изменения" или если нажать в документе с начало провести, а затем его закрыть - "данные были изменены сохранить изменения".
Убираю замену строки для подбора - все работает нормально, ни чего не спрашивает.
Ставлю назад и опять начинается.
Я что то связи этого сообщения со строкой запроса понимаю.

Работаем в УПП. В базе используется и тонкий и толстый клиент.
Запрос проявляет себя только в толстом клиенте.
9. FatPanzer 24.09.20 10:40 Сейчас в теме
(7) А это смотря где ты его размещаешь и что выполняешь по результату запроса...
10. avi-murom 24.09.20 10:44 Сейчас в теме
ОбработкаПроведения() в обоих документах.
После
Если мУдалятьДвижения Тогда
ОбщегоНазначения.УдалитьДвиженияРегистратора(ЭтотОбъект, Отказ, Истина, РежимПроведения);
КонецЕсли;
14. FatPanzer 24.09.20 10:53 Сейчас в теме
(10) И где здесь твой запрос?
11. avi-murom 24.09.20 10:45 Сейчас в теме
Мне нужно, чтоб документ можно было записать, но нельзя было провести.
12. FatPanzer 24.09.20 10:49 Сейчас в теме
(11) Чувак, извини, вопрос не по теме - ты точно 9 лет на форуме?
15. FatPanzer 24.09.20 10:53 Сейчас в теме
13. avi-murom 24.09.20 10:51 Сейчас в теме
Девять лет я только читал его. Пишу первый раз. Нужда заставила.
16. avi-murom 24.09.20 10:56 Сейчас в теме
Так, понял. Видимо полный текст нужен.

Процедура ОбработкаПроведения(Отказ, РежимПроведения)

// Дерево значений, содержащее имена необходимых полей в запросе по шапке.
Перем ДеревоПолейЗапросаПоШапке;

Если мУдалятьДвижения Тогда
ОбщегоНазначения.УдалитьДвиженияРегистратора(ЭтотОбъект, Отказ, Истина, РежимПроведения);
КонецЕсли;

// +МУР Контроль остатков
Если Отказ = Ложь Тогда
ТоварыСписком = ЭтотОбъект.Товары;
СкладОтправитель = ЭтотОбъект.СкладОтправитель;
Отказ = МУР_ОбщегоНазначенияВызовСервера.ПроверкаТоваровВРезервеИСвободныхОстатках(ДатаДок, СкладОтправитель, ТоварыСписком, Отказ);
КонецЕсли;
// -МУР
..........................................
18. FatPanzer 24.09.20 11:02 Сейчас в теме
(16) Нет. Как я уже сказал - необходимо понять что ты делаешь с результатом запроса.
17. avi-murom 24.09.20 11:00 Сейчас в теме
Ошибся:
Процедура ОбработкаПроведения(Отказ, РежимПроведения)

	// Дерево значений, содержащее имена необходимых полей в запросе по шапке.
	Перем ДеревоПолейЗапросаПоШапке;
	
	Если мУдалятьДвижения Тогда
		ОбщегоНазначения.УдалитьДвиженияРегистратора(ЭтотОбъект, Отказ, Истина, РежимПроведения);
	КонецЕсли;
	
	//	+МУР Контроль остатков
	Если Отказ = Ложь Тогда
		ДатаДок = ЭтотОбъект.Дата;
		ТоварыСписком = ЭтотОбъект.Товары;
		СкладОтправитель = ЭтотОбъект.СкладОтправитель;
		Отказ = МУР_ОбщегоНазначенияВызовСервера.ПроверкаТоваровВРезервеИСвободныхОстатках(ДатаДок, СкладОтправитель, ТоварыСписком, Отказ);
	КонецЕсли;
	//	-МУР
............................
Показать

Далее стандартная процедура проведения.
19. avi-murom 24.09.20 11:02 Сейчас в теме
Вот и я не понимаю - ПРИЧЕМ тут запрос?
Но я написал, то что вижу на экране при работе.
20. FatPanzer 24.09.20 11:04 Сейчас в теме
(19) Ну ок. Не хочешь рассказывать про то, что ты делаешь с результатом запроса - не понимай дальше сам.
21. avi-murom 24.09.20 11:06 Сейчас в теме
Вся функция.
Функция ПроверкаТоваровВРезервеИСвободныхОстатках(ДатаДок, СкладОтправитель, СсылкаНаДокумент, Отказ) Экспорт
	
	Запрос = Новый Запрос;
	Запрос.Текст =
	    "ВЫБРАТЬ
	    |	ТаблицаТовары.Номенклатура,
	    |	ТаблицаТовары.ХарактеристикаНоменклатуры,
	    |	ТаблицаТовары.СерияНоменклатуры,
	    |	ТаблицаТовары.Количество,
	    |	ТаблицаТовары.ЕдиницаИзмеренияМест,
		|	ТаблицаТовары.ЗаказПокупателя КАК ДокументРезерва
	    |ПОМЕСТИТЬ ВТ
	    |ИЗ
	    |	&ТаблицаТовары КАК ТаблицаТовары
	    |;
	    |
	    |////////////////////////////////////////////////////////////­////////////////////
	    |ВЫБРАТЬ
	    |	ВТ.Номенклатура КАК Номенклатура,
	    |	ВТ.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
	    |	ВТ.СерияНоменклатуры КАК СерияНоменклатуры,
	    |	ВТ.ДокументРезерва КАК ЗаказВДокументе,
	    |	ВТ.ЕдиницаИзмеренияМест КАК ЕдМест,
	    |	ОстатокТовара.ДокументРезерва КАК ЗаказВБазе,
	    |	ОстатокТовараВЯщиках.ДокументРезерва КАК ЗаказВБазеВЯщиках,
	    |	ВТ.Количество КАК КоличествоВДокументе,
	    |	ОстатокТовара.КоличествоОстаток КАК ОстатокВРезерве,
	    |	ОстатокТовараВЯщиках.КоличествоОстаток КАК ОстатокВРезервеВЯщиках,
	    |	СвободныйОстаткок.КоличествоСУчетомСерииОстаток КАК СвободныйОстаток,
	    |	СвободныйостатокВЯщиках.КоличествоОстаток КАК СвободныйостатокВЯщиках
	    |ИЗ
	    |	ВТ КАК ВТ
	    |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(&НаДату, Склад = &Склад) КАК ОстатокТовара
	    |		ПО (ОстатокТовара.Номенклатура = ВТ.Номенклатура)
	    |			И (ОстатокТовара.ХарактеристикаНоменклатуры = ВТ.ХарактеристикаНоменклатуры)
	    |			И (ОстатокТовара.СерияНоменклатуры = ВТ.СерияНоменклатуры)
	    |			И (ОстатокТовара.ДокументРезерва = ВТ.ДокументРезерва)
	    |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.МУР_ТоварыВРезервеНаСкладахВЯщиках.Остатки(&НаДату, Склад = &Склад) КАК ОстатокТовараВЯщиках
	    |		ПО (ОстатокТовараВЯщиках.Номенклатура = ВТ.Номенклатура)
	    |			И (ОстатокТовараВЯщиках.СерияНоменклатуры = ВТ.СерияНоменклатуры)
	    |			И (ОстатокТовараВЯщиках.ХарактеристикаНоменклатуры = ВТ.ХарактеристикаНоменклатуры)
	    |			И (ОстатокТовараВЯщиках.ДокументРезерва = ВТ.ДокументРезерва)
	    |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СвободныеОстатки.Остатки(&НаДату, Склад = &Склад) КАК СвободныйОстаткок
	    |		ПО (СвободныйОстаткок.Номенклатура = ВТ.Номенклатура)
	    |			И (СвободныйОстаткок.ХарактеристикаНоменклатуры = ВТ.ХарактеристикаНоменклатуры)
	    |			И (СвободныйОстаткок.СерияНоменклатуры = ВТ.СерияНоменклатуры)
	    |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.МУР_ТоварыНаСкладахЯщики.Остатки(&НаДату, Склад = &Склад) КАК СвободныйостатокВЯщиках
	    |		ПО (СвободныйостатокВЯщиках.Номенклатура = ВТ.Номенклатура)
	    |			И (СвободныйостатокВЯщиках.ХарактеристикаНоменклатуры = ВТ.ХарактеристикаНоменклатуры)
	    |			И (СвободныйостатокВЯщиках.СерияНоменклатуры = ВТ.СерияНоменклатуры)";
	
	Запрос.УстановитьПараметр("ТаблицаТовары", СсылкаНаДокумент.Выгрузить());
	Запрос.УстановитьПараметр("НаДату", ДатаДок);
	Запрос.УстановитьПараметр("Склад", СкладОтправитель);
	Если ТипЗнч(СсылкаНаДокумент) = Тип("ДокументТабличнаяЧасть.ПеремещениеТоваров.Товары") Тогда
		Запрос.Текст = СтрЗаменить(Запрос.Текст, "ТаблицаТовары.ЗаказПокупателя КАК ДокументРезерва", "ТаблицаТовары.ДокументРезерва КАК ДокументРезерва");
	Иначе
	КонецЕсли;
	ВыборкаЗапроса = Запрос.Выполнить();
	РезультатЗапроса = ВыборкаЗапроса.Выбрать();
	
	//Отказ = Ложь;
	
	Если НЕ ВыборкаЗапроса.Пустой() Тогда
		Пока РезультатЗапроса.Следующий() Цикл
			Если РезультатЗапроса.ОстатокВРезерве <> РезультатЗапроса.ОстатокВРезервеВЯщиках
				И ЗначениеЗаполнено(РезультатЗапроса.ЗаказВДокументе) Тогда
				Сообщить("Товар " + РезультатЗапроса.Номенклатура + " " + РезультатЗапроса.ХарактеристикаНоменклатуры + " " + РезультатЗапроса.СерияНоменклатуры);
				Сообщить("Расфасованное количество в документе не соответствует расфасованному количеству в резерве.");
				Отказ = Истина;
			ИначеЕсли (РезультатЗапроса.ЗаказВДокументе <> РезультатЗапроса.ЗаказВБазе
				ИЛИ РезультатЗапроса.ЗаказВДокументе <> РезультатЗапроса.ЗаказВБазеВЯщиках)
				И ЗначениеЗаполнено(РезультатЗапроса.ЗаказВДокументе) Тогда
				Сообщить("Товар " + РезультатЗапроса.Номенклатура + " " + РезультатЗапроса.ХарактеристикаНоменклатуры + " " + РезультатЗапроса.СерияНоменклатуры);
				Сообщить("Не верно указан заказ в документе или нет такого количества этой позиции под заказ " + РезультатЗапроса.ЗаказВДокументе + ".");
				Отказ = Истина;
			ИначеЕсли НЕ ЗначениеЗаполнено(РезультатЗапроса.СвободныйОстаток) И НЕ ЗначениеЗаполнено(РезультатЗапроса.СвободныйостатокВЯщиках + ".")
				И НЕ ЗначениеЗаполнено(РезультатЗапроса.ЗаказВДокументе)
				И НЕ ЗначениеЗаполнено(РезультатЗапроса.ЕдМест) Тогда
				Сообщить("Товар " + РезультатЗапроса.Номенклатура + " " + РезультатЗапроса.ХарактеристикаНоменклатуры + " " + РезультатЗапроса.СерияНоменклатуры);
				Сообщить("Нет свободных остатков в ящиках или без них для проведения документа.");
				Отказ = Истина;
			ИначеЕсли (ЗначениеЗаполнено(РезультатЗапроса.ОстатокВРезервеВЯщиках) ИЛИ ЗначениеЗаполнено(РезультатЗапроса.СвободныйостатокВЯщиках))
				И НЕ ЗначениеЗаполнено(РезультатЗапроса.ЕдМест) Тогда
				Сообщить("Товар " + РезультатЗапроса.Номенклатура + " " + РезультатЗапроса.ХарактеристикаНоменклатуры + " " + РезультатЗапроса.СерияНоменклатуры);
				Сообщить("Продукция расфасована. Укажите расфасовку в документе.");
				Отказ = Истина;
			ИначеЕсли РезультатЗапроса.СвободныйОстаток <> РезультатЗапроса.СвободныйостатокВЯщиках
				И НЕ ЗначениеЗаполнено(РезультатЗапроса.ЗаказВДокументе)
				И ЗначениеЗаполнено(РезультатЗапроса.ЕдМест) Тогда
				Сообщить("Товар " + РезультатЗапроса.Номенклатура + " " + РезультатЗапроса.ХарактеристикаНоменклатуры + " " + РезультатЗапроса.СерияНоменклатуры);
				Сообщить("Свободный остаток не совпадает со свободным остатком в ящиках.");
				Отказ = Истина;
			ИначеЕсли (ЗначениеЗаполнено(РезультатЗапроса.ОстатокВРезерве) ИЛИ ЗначениеЗаполнено(РезультатЗапроса.ОстатокВРезервеВЯщиках))
				И НЕ ЗначениеЗаполнено(РезультатЗапроса.ЗаказВДокументе) Тогда
				Сообщить("Товар " + РезультатЗапроса.Номенклатура + " " + РезультатЗапроса.ХарактеристикаНоменклатуры + " " + РезультатЗапроса.СерияНоменклатуры);
				Сообщить("Товар находится в резерве. Укажите заказ.");
				Отказ = Истина;
			ИначеЕсли (ЗначениеЗаполнено(РезультатЗапроса.ОстатокВРезервеВЯщиках) ИЛИ ЗначениеЗаполнено(РезультатЗапроса.СвободныйостатокВЯщиках))
				И НЕ ЗначениеЗаполнено(РезультатЗапроса.ЕдМест) Тогда
				Сообщить("Товар " + РезультатЗапроса.Номенклатура + " " + РезультатЗапроса.ХарактеристикаНоменклатуры + " " + РезультатЗапроса.СерияНоменклатуры);
				Сообщить("Товар расфасован. В документе не указана расфасовка.");
				Отказ = Истина;
			Иначе
				Отказ = Ложь;
			КонецЕсли;
		КонецЦикла;
	ИначеЕсли СсылкаНаДокумент.Количество() = 0 Тогда
		Отказ = Отказ;
	Иначе		
		Сообщить("На складах нет остатков товаров указанных в документе");
		Отказ = Истина;
	КонецЕсли;

	Возврат Отказ;
	
КонецФункции
Показать
25. FatPanzer 24.09.20 11:51 Сейчас в теме
(21) Вот это все - в обработчик ПередЗаписью(), а не в ОбработкаПроведения(). Вернее, вызов проверки переставь.
И сделай это процедурой, а не функцией (Отказ возвращать не надо, это сквозной входной/выходной параметр).
26. avi-murom 24.09.20 12:02 Сейчас в теме
ПередЗаписью() находится в модуле формы, а не в общем модуле.
Хотелось бы сделать один вызов.

У нас документы имеют как обычные формы так и управляемые.
И оба вида форм одного и того же документа используются.
Для примера: бухгалтера работают в толстом клиенте, а сбыт и кладовщики только в тонком.

Так сделано из-за сильного ограничения в ресурсах единственного сервера.
На нем реализовано ВСЁ.
Говорить, что так нельзя мне не нужно - это все к моему начальству.
27. FatPanzer 24.09.20 12:03 Сейчас в теме
(26)
ПередЗаписью() находится в модуле формы, а не в общем модуле.
ШТОА???
Прикрепленные файлы:
28. avi-murom 24.09.20 12:55 Сейчас в теме
Сделал. Работает.
Спасибо.
Давно я так не тупил.
Оставьте свое сообщение

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