|
Помогите написать условие в документе | ☑ | ||
---|---|---|---|---|
0
yellowbox
13.07.23
✎
08:46
|
Имеется справочник договор; документы условия договора(прикреплен к договору) и поставка. В условии договора указывается склады на которые поставляются товары, надо при поставке(там указывается договор и склад, при выборе склада, чтобы ошибка выходила, если данный склад не указан в условии договора.
|
|||
1
Волшебник
13.07.23
✎
08:51
|
Задание на собеседовании?
|
|||
2
yellowbox
13.07.23
✎
09:14
|
(1) Нет, на работе, невнимательно работают,могут не то добавить,потом куча ошибок,надо чтобы ошибку выдавало(контролировало),если склад указывался бы в договоре,было бы проще,но склад в документе условия договора. Работать пришла после теха,не знаю как лучше написать.
есть вот такая фигня только // Получаем ссылку на договор из документа поставки СсылкаНаДоговор = Объект.Договор; // Получаем список складов из условий договора СправочникСкладов = СсылкаНаДоговор.УсловияДоговора.СписокСкладов; // Получаем склад, выбранный при поставке СсылкаНаСклад = ДокументОбъект.Склад; // Проверяем, что выбранный склад есть в списке складов условий договора ЕстьСклад = Ложь; Для Каждого Склад Из СправочникСкладов Цикл Если Склад = СсылкаНаСклад Тогда ЕстьСклад = Истина; КонецЕсли; КонецЦикла; // Если выбранный склад не указан в условиях договора, выводим сообщение об ошибке Если Не ЕстьСклад Тогда Сообщить("Выбранный склад не указан в условиях договора!"); Отказ = Истина; КонецЕсли; |
|||
3
Галахад
13.07.23
✎
09:20
|
(2) Эта "фигня" не работает? Или ищется более "правильное" решение?
|
|||
4
yellowbox
13.07.23
✎
09:24
|
(3) не работает
|
|||
5
Ногаминебить
13.07.23
✎
09:27
|
СсылкаНаДоговор.УсловияДоговора.СписокСкладов - тут какой тип значения?
|
|||
6
yellowbox
13.07.23
✎
09:28
|
Список складов является табличной частью документа условия договора, договор - справочник
|
|||
7
Ногаминебить
13.07.23
✎
09:31
|
(6) Тогда заменяем
"Если Склад = СсылкаНаСклад Тогда" на "Если Склад.КакТамНазываетсяРеквизитТабличнойЧастиГдеСклад = СсылкаНаСклад Тогда" Это чисто чтоб посмотреть что работает. Но потом все равно переписываем этот код к чертовой матери. :) |
|||
8
yellowbox
13.07.23
✎
09:47
|
(7) все равно проводит с любым складом
|
|||
9
Ногаминебить
13.07.23
✎
09:52
|
Под отладкой посмотреть. Попадает ли туда, что выполняется, какие значения в переменных?
Кусочек кода из какой процедуры кстати? |
|||
10
yellowbox
13.07.23
✎
09:55
|
Процедура ПередЗаписью (9)
|
|||
11
Галахад
13.07.23
✎
10:04
|
Вроде должно работать. Единственное, что такое ДокументОбъект?
СсылкаНаСклад = ДокументОбъект.Склад |
|||
12
uPstart_
13.07.23
✎
10:05
|
(2) Можно весь код переписать проще используя структуру поиска. Необходимо вставить весь код в конце процедуры ПередЗаписью.
|
|||
13
yellowbox
13.07.23
✎
10:42
|
(11) Ошибка,Изменила на объект
// Получаем ссылку на договор из документа поставки СсылкаНаДоговор = Объект.Договор; // Получаем список складов из условий договора СправочникСкладов = СсылкаНаДоговор.УсловияДоговора.Склады; // Получаем склад, выбранный при поставке СсылкаНаСклад = Объект.Склад; // Проверяем, что выбранный склад есть в списке складов условий договора ЕстьСклад = Ложь; Для Каждого Склад Из СправочникСкладов Цикл Если Склад = СсылкаНаСклад Тогда ЕстьСклад = Истина; КонецЕсли; КонецЦикла; // Если выбранный склад не указан в условиях договора, выводим сообщение об ошибке Если Не ЕстьСклад Тогда Сообщить("Выбранный склад не указан в условиях договора!"); Отказ = Истина; КонецЕсли; |
|||
14
Буковка
13.07.23
✎
10:46
|
(0) а где вы пишите код? может, по условию добавить в проверяемые реквизиты в модуле объекта?
|
|||
15
yellowbox
13.07.23
✎
10:48
|
форма документа, Процедура ПередЗаписью.
|
|||
16
yellowbox
13.07.23
✎
10:50
|
Ошибок никаких не выдает, при отладке все равно проводит со всеми складами.
|
|||
17
Буковка
13.07.23
✎
10:52
|
(16) посмотрите Процедуру ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) в модуде объекта документа и добавьте в проверяемые реквизиты по условию
|
|||
18
Галахад
13.07.23
✎
10:56
|
(15) Процедуру сами делали? Она привязана к событиям формы?
|
|||
19
Мультук
13.07.23
✎
11:13
|
(15)
Покажите код процедуры ПОЛНОСТЬЮ |
|||
20
yellowbox
13.07.23
✎
11:18
|
Процедура уже была, к событиям привязана
вот вся &НаКлиенте Процедура ПередЗаписью(Отказ, ПараметрыЗаписи) Если НЕ Питание_НаКлиенте.ПередЗаписьюФормыДокумента(ЭтаФорма, ПараметрыЗаписи.РежимЗаписи) Тогда Отказ = Истина; Возврат; КонецЕсли; Если ТипЗнч(ПараметрыЗаписи) = Тип("Структура") И ПараметрыЗаписи.Свойство("Принудительно") И ПараметрыЗаписи.Принудительно = Истина Тогда Возврат; КонецЕсли; Если Объект.СуммаДокумента <> Объект.Продукты.Итог("Всего") и ПараметрыЗаписи.РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда Отказ = Истина; МассивКнопок = Новый СписокЗначений; МассивКнопок.Добавить("Продолжить", "Установить и продолжить"); МассивКнопок.Добавить("Отмена", "Отмена"); ДополнительныеПараметры = Новый Структура("ПараметрыЗаписи", ПараметрыЗаписи); ОписаниеОповещения = Новый ОписаниеОповещения("ПередЗаписьюПриЗакрытииВопросСуммыЗавершение", ЭтотОбъект, ДополнительныеПараметры); Текст = "Сумма документа = %1, а сумма строк = %2"; Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Текст, Объект.СуммаДокумента, Объект.Продукты.Итог("Всего")); ПоказатьВопрос(ОписаниеОповещения, Текст, МассивКнопок); КонецЕсли; СсылкаНаДоговор = Объект.Договор; СписокСкладов = СсылкаНаДоговор.УсловияДоговора.Склады; СсылкаНаСклад = Объект.Склад; ЕстьСклад = Ложь; Для Каждого Склад Из СписокСкладов Цикл Если Склад = СсылкаНаСклад Тогда ЕстьСклад = Истина; КонецЕсли; КонецЦикла; Если Не ЕстьСклад Тогда Сообщить("Выбранный склад не указан в условиях договора!"); Отказ = Истина; КонецЕсли; КонецПроцедуры |
|||
21
Мультук
13.07.23
✎
11:18
|
(16)
При отладке вы попадете вообще в свой код ? Вы ставите на свой код точки остановка (красные) ? Вы жмете F10 ? Вы видите сообщение "Выбранный склад не указан в условиях договора!" ? Вы видите в табло что переменная Отказ была сначала ЛОЖЬ, а затем приняла значение Истина P.S. Коллеги (мальчики/девочки) на работе есть ? Или вы одна ? Вам после техникума нужно в коллектив, набираться уму-разуму |
|||
22
yellowbox
13.07.23
✎
11:21
|
Работаю одна, сижу в бухгалтерии, больше никого(в техе по коду вообще не учили, с методичек в лабы копировали коды,понять все достаточно сложно(
|
|||
23
Мультук
13.07.23
✎
11:21
|
(20)
>> Если НЕ Питание_НаКлиенте.ПередЗаписьюФормыДокумента(ЭтаФорма, ПараметрыЗаписи.РежимЗаписи) Тогда Ставим вот на эту строчку точку останова и жмем F10 и смотри "а что же происходит" ? Доходит ли выполнение до вашего кода вообще |
|||
24
Aleksandr N
13.07.23
✎
11:52
|
(20) Простите, а вы умеете пользоваться отладчиком?
|
|||
25
yellowbox
13.07.23
✎
13:40
|
Отладчик не работает, по шагам не проходит, шаги в меню отладки недоступны. Сообщение не высвечивается, что код есть, что нет, проводит все.
|
|||
26
Мультук
13.07.23
✎
14:01
|
(25)
1) Дописываем "ура". Сохраняем/проводим документ БЕЗ закрытия формы "Ура" появилось в сообещниях &НаКлиенте Процедура ПередЗаписью(Отказ, ПараметрыЗаписи) Сообщить("Ура!"); 2) Я не знаю чему вас учили в вашем кулинарном техникуме, но в процедуре на &НаКлиенте вот эта строка должна вызвать ошибку. Ибо так можно делать только в функциях/процедурах "&НаСервере" и "&НаСерверБезКонтекста" СписокСкладов = СсылкаНаДоговор.УсловияДоговора.Склады; 3) Как пользоваться отладчиком https://www.youtube.com/watch?v=jbJ1B1r_b80 https://www.youtube.com/watch?v=aYXnxQf7ies |
|||
27
yellowbox
17.07.23
✎
10:17
|
Дописала так, через отладчик ошибок нет. Теперь каждый раз выдает сообщение "Выбранный склад не указан в условиях договора!, даже если склад указан.
&НаКлиенте Процедура ПередЗаписью(Отказ, ПараметрыЗаписи) Если НЕ Питание_НаКлиенте.ПередЗаписьюФормыДокумента(ЭтаФорма, ПараметрыЗаписи.РежимЗаписи) Тогда Отказ = Истина; Возврат; КонецЕсли; Если ТипЗнч(ПараметрыЗаписи) = Тип("Структура") И ПараметрыЗаписи.Свойство("Принудительно") И ПараметрыЗаписи.Принудительно = Истина Тогда Возврат; КонецЕсли; Если Объект.СуммаДокумента <> Объект.Продукты.Итог("Всего") и ПараметрыЗаписи.РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда Отказ = Истина; МассивКнопок = Новый СписокЗначений; МассивКнопок.Добавить("Продолжить", "Установить и продолжить"); МассивКнопок.Добавить("Отмена", "Отмена"); ДополнительныеПараметры = Новый Структура("ПараметрыЗаписи", ПараметрыЗаписи); ОписаниеОповещения = Новый ОписаниеОповещения("ПередЗаписьюПриЗакрытииВопросСуммыЗавершение", ЭтотОбъект, ДополнительныеПараметры); Текст = "Сумма документа = %1, а сумма строк = %2"; Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Текст, Объект.СуммаДокумента, Объект.Продукты.Итог("Всего")); ПоказатьВопрос(ОписаниеОповещения, Текст, МассивКнопок); КонецЕсли; ККТ = Объект; Поставка (Отказ, ККТ); КонецПроцедуры &НаСервере Процедура Поставка (Отказ, Объект) // Получаем ссылку на договор из документа поставки СсылкаНаДоговор = Объект.УсловиеДоговора; // Получаем список складов из условий договора СправочникСкладов = СсылкаНаДоговор.Склады; // Получаем склад, выбранный при поставке СсылкаНаСклад = Объект.Склад; // Проверяем, что выбранный склад есть в списке складов условий договора ЕстьСклад = Ложь; Для Каждого Склад Из СправочникСкладов Цикл Если Склад = СсылкаНаСклад Тогда ЕстьСклад = Истина; КонецЕсли; КонецЦикла; // Если выбранный склад не указан в условиях договора, выводим сообщение об ошибке Если Не ЕстьСклад Тогда Сообщить("Выбранный склад не указан в условиях договора!"); Отказ = Истина; КонецЕсли КонецПроцедуры (26) |
|||
28
yellowbox
17.07.23
✎
10:19
|
На форму добавила поле ввода условия договора, т.к. склад указывается в нем и по договору может быть несколько условий.
|
|||
29
yellowbox
17.07.23
✎
10:39
|
Все решила, работает, всем спасибо. Если не сложно, посоветуйте какие источники лучше для изучения 1С.
За сообщения про отладчик отдельное спасибо))))) // Проверяем, что выбранный склад есть в списке складов условий договора ЕстьСклад = Ложь; Для Каждого Склад Из СправочникСкладов Цикл Если Склад.СКЛАД = СсылкаНаСклад Тогда ЕстьСклад = Истина; КонецЕсли; КонецЦикла; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |