|
Отладчик ругается! | ☑ | ||
---|---|---|---|---|
0
discant
13.06.12
✎
15:25
|
Вставляю в модуль формы Заказа на производство УПП следующий код
Процедура ПриЗаписи(Отказ) //Разузлование заказов на производство // В ДеревоЗаказов вставляем № документа, если это 1-й док-т дерева, //т.е. ОсновнойЗаказНаПроизводство - не заполнено. Если НЕ ЗначениеЗаполнено(Номер) Тогда УстановитьНовыйНомер(ОсновнойЗаказНаПроизводство.Организация.Префикс); КонецЕсли; Если НЕ ЗначениеЗаполнено(ДеревоЗаказов) Тогда цц = "0123456789"; ном = ""; длинаНомера = СтрДлина(Номер); ии = длинаНомера; Пока ии > 0 Цикл Если Найти(цц,Сред(Номер,ии,1)) > 0 Тогда ном = Сред(Номер,ии,1) + ном; Иначе Прервать; КонецЕсли; ии = ии - 1; КонецЦикла; ном = Строка(Формат(Число(ном),"ЧГ=0")); Если НЕ ЗначениеЗаполнено(ОсновнойЗаказНаПроизводство) Тогда //Вытаскиваем № ДеревоЗаказов = ном; Иначе Если ЗначениеЗаполнено(ОсновнойЗаказНаПроизводство.ДеревоЗаказов) Тогда ДеревоЗаказов = СокрЛП(ОсновнойЗаказНаПроизводство.ДеревоЗаказов) + "_" + ном; КонецЕсли; КонецЕсли; КонецЕсли; КонецПроцедуры При сохранении вылетает служебное сообщение "Ожидается ключевое слово КонецПроцедуры Как это может быть, если процедура в общем-то закрыта? |
|||
1
Галахад
гуру
13.06.12
✎
15:27
|
А другие процедуры закрыты?
|
|||
2
andrewks
13.06.12
✎
15:28
|
один КонецЕсли лишний
|
|||
3
mikecool
13.06.12
✎
15:28
|
кури
Если НЕ ЗначениеЗаполнено(ДеревоЗаказов) Тогда цц = "0123456789"; ном = ""; длинаНомера = СтрДлина(Номер); ии = длинаНомера; Пока ии > 0 Цикл |
|||
4
mikecool
13.06.12
✎
15:29
|
а самое главное, что ругается то не отладчик...
|
|||
5
hhhh
13.06.12
✎
15:30
|
(2) вроде на месте всё
|
|||
6
mikecool
13.06.12
✎
15:31
|
все упирается в (1)
|
|||
7
andrewks
13.06.12
✎
15:33
|
тогда (1)
|
|||
8
discant
13.06.12
✎
15:33
|
Т. е. этот код рабочий?
|
|||
9
hhhh
13.06.12
✎
15:36
|
(8) а точно одна эта ошибка выдается?
|
|||
10
mikecool
13.06.12
✎
15:40
|
(8) скопировав этот код в текстовый документ и сказав, что это код - я его смог отформатировать автоматом...
а вот насчет - рабочий или нет - тут я хз |
|||
11
spiteful41
13.06.12
✎
15:43
|
В (0) ошибки нет, проблема где-то в другом месте
|
|||
12
Aprobator
13.06.12
✎
15:44
|
(0) Убери КонецЕсли - последний.
|
|||
13
spiteful41
13.06.12
✎
15:45
|
(12) тогда ошибка будет
|
|||
14
Aprobator
13.06.12
✎
15:45
|
+(12) а нет - вру вроде. Нормально отформатировать нельзя что ли?
|
|||
15
spiteful41
13.06.12
✎
15:46
|
(0) Дальше посмотри по модулю, ошибка в другом месте
|
|||
16
sanja26
13.06.12
✎
15:49
|
Законы программизма.
17. Самые мистические проблемы, широко раздуваемые и афишируемые, в конце концов оказываются твоими глупейшими ошибками. 18. Следствие - если твоя программа выполняет мистические действия, значит, ты сделал что-то невероятно тупое. 19. Самое плохое ощущение для программиста - когда вокруг тебя стоят десять человек и все пытаются найти причину проблемы в твоей программе, а ты уже понял, в чём проблема, но боишься сказать, потому что это что-то вопиюще глупое... |
|||
17
Aprobator
13.06.12
✎
15:49
|
Вот это пять конечно.
а вообще пробеги циклы и условия. Заремь их поштучно, чтобы определить с какого момента ругаться программа начинает. |
|||
18
Aprobator
13.06.12
✎
15:53
|
(0) кстати, процедуру к событиям формы привязал?
|
|||
19
discant
13.06.12
✎
15:54
|
Ну закрываешь модуль, а он окно вываливает и снизу в служебных сообщениях выдает
{Документ.ЗаказНаПроизводство.Форма.ФормаДокумента.Форма(586,78)}: Ожидается ключевое слово 'Тогда' ('Then') Если ЗначениеЗаполнено(ОсновнойЗаказНаПроизводство.ДеревоЗаказов)<<?>> Тогда (Проверка: Толстый клиент (обычное приложение)) {Документ.ЗаказНаПроизводство.Форма.ФормаДокумента.Форма(590,5)}: Ожидается ключевое слово 'КонецПроцедуры' ('EndProcedure') <<?>>КонецЕсли; (Проверка: Толстый клиент (обычное приложение)) |
|||
20
sanja26
13.06.12
✎
15:56
|
пробела может не хватает
|
|||
21
discant
13.06.12
✎
15:58
|
Где?
|
|||
22
Шапокляк
13.06.12
✎
15:59
|
А про мутабельное значение не говорили? Это ДеревоЗаказов - какого типа?
|
|||
23
Buster007
13.06.12
✎
16:02
|
у меня не вылазит такой ошибки. ЧЯДНТ?
|
|||
24
discant
13.06.12
✎
16:02
|
Реквизит ДеревоЗаказов типа строка
|
|||
25
mikecool
13.06.12
✎
16:03
|
такого плана тема первая на мисте?
|
|||
26
Buster007
13.06.12
✎
16:03
|
а какой код до этого?
|
|||
27
discant
13.06.12
✎
16:04
|
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
// Установка кнопок заполнение ТЧ УстановитьКнопкиПодменюЗаполненияТЧ(); Отказ = Не УправлениеЗаказами.ИспользоватьЗаказыНаПроизводство(Истина); |
|||
28
Бледно Золотистый
13.06.12
✎
16:06
|
(27) и все?
|
|||
29
Buster007
13.06.12
✎
16:07
|
(27) полностью скидывай что там написано выше. Куски нам не нужны.
|
|||
30
Шапокляк
13.06.12
✎
16:07
|
Если ЗначениеЗаполнено(ОсновнойЗаказНаПроизводство.ДеревоЗаказов) Тогда
вот это "Тогда" и в модуле не красное? Значит там нерусские буквы, перебейте и другие ошибки вылезут |
|||
31
Buster007
13.06.12
✎
16:08
|
(30) я думаю он копировал код с формы ) а я отсюда его скопировал и вставил себе ) всё без ошибок.
|
|||
32
Бледно Золотистый
13.06.12
✎
16:09
|
(27) попробуй скопировать код из темы обратно себе.
|
|||
33
Шапокляк
13.06.12
✎
16:10
|
(31) Да ладно... а где для
Пока ии > 0 Цикл оператор КонецЦикла? |
|||
34
Buster007
13.06.12
✎
16:10
|
(32) его и копировал.
|
|||
35
Buster007
13.06.12
✎
16:11
|
(33) вот
ии = ии - 1; КонецЦикла; |
|||
36
Бледно Золотистый
13.06.12
✎
16:11
|
(34) Это я ТСу
|
|||
37
Buster007
13.06.12
✎
16:11
|
(36) а, ясн )
|
|||
38
Strogg
13.06.12
✎
16:19
|
ТС, посмотри вложенность циклов и условий. Сдается мне, что они у тебя пересекаются...
|
|||
39
KindLion
13.06.12
✎
16:24
|
(0) Что, еще не нашел?
Вот это вот "Если" не закрыто концом если: " Если НЕ ЗначениеЗаполнено(ДеревоЗаказов) Тогда" |
|||
40
undertaker
13.06.12
✎
16:38
|
(39) закрыто последним КонецЕсли
|
|||
41
Buster007
13.06.12
✎
16:39
|
а у ТС всё заработало уже и он свалил судя по всему )
|
|||
42
discant
13.06.12
✎
16:43
|
Нет. привожу кодПроцедура ПриЗаписи(Отказ)
//....Ваша обработка...... //....Ваша обработка... // В ДеревоЗаказов вставляем № документа, если это 1-й док-т дерева, //т.е. ОсновнойЗаказНаПроизводство - не заполнено. Если НЕ ЗначениеЗаполнено(Номер) Тогда УстановитьНовыйНомер(ОсновнойЗаказНаПроизводство.Организация.Префикс); КонецЕсли; Если НЕ ЗначениеЗаполнено(ДеревоЗаказов) Тогда цц = "0123456789"; ном = ""; длинаНомера = СтрДлина(Номер); ии = длинаНомера; Пока ии > 0 Цикл Если Найти(цц,Сред(Номер,ии,1)) > 0 Тогда ном = Сред(Номер,ии,1) + ном; Иначе Прервать; КонецЕсли; ии = ии - 1; КонецЦикла; ном = Строка(Формат(Число(ном),"ЧГ=0")); КонецЕсли; Если НЕ ЗначениеЗаполнено(ОсновнойЗаказНаПроизводство) Тогда //Вытаскиваем № ДеревоЗаказов = ном; Иначе Если ЗначениеЗаполнено(ОсновнойЗаказНаПроизводство.ДеревоЗаказов) Тогда ДеревоЗаказов = СокрЛП(ОсновнойЗаказНаПроизводство.ДеревоЗаказов) + "_" + ном; КонецЕсли; КонецЕсли; КонецЕсли; КонецПроцедуры |
|||
43
notebug
13.06.12
✎
16:46
|
перед "КонецПроцедуры" последний "КонецЕсли" убить нужно, вроде уже говорили, имхо)
|
|||
44
Buster007
13.06.12
✎
16:47
|
(42) автор, лучший отладчик это миста?)
|
|||
45
notebug
13.06.12
✎
16:49
|
(44) двачую :D
|
|||
46
Strogg
13.06.12
✎
16:51
|
//....Ваша обработка......
//....Ваша обработка... // В ДеревоЗаказов вставляем № документа, если это 1-й док-т дерева, //т.е. ОсновнойЗаказНаПроизводство - не заполнено. Процедура УстановитьНовыйНомер(Заказ) КонецПроцедуры Процедура стронг(Номер, ОсновнойЗаказНаПроизводство, ДеревоЗаказов) Экспорт Если НЕ ЗначениеЗаполнено(Номер) Тогда УстановитьНовыйНомер(ОсновнойЗаказНаПроизводство.Организация.Префикс); КонецЕсли; Если НЕ ЗначениеЗаполнено(ДеревоЗаказов) Тогда цц = "0123456789"; ном = ""; длинаНомера = СтрДлина(Номер); ии = длинаНомера; Пока ии > 0 Цикл Если Найти(цц,Сред(Номер,ии,1)) > 0 Тогда ном = Сред(Номер,ии,1) + ном; Иначе Прервать; КонецЕсли; ии = ии - 1; КонецЦикла; ном = Строка(Формат(Число(ном),"ЧГ=0")); КонецЕсли; Если НЕ ЗначениеЗаполнено(ОсновнойЗаказНаПроизводство) Тогда //Вытаскиваем № ДеревоЗаказов = ном; Иначе Если ЗначениеЗаполнено(ОсновнойЗаказНаПроизводство.ДеревоЗаказов) Тогда ДеревоЗаказов = СокрЛП(ОсновнойЗаказНаПроизводство.ДеревоЗаказов) + "_" + ном; КонецЕсли; КонецЕсли; КонецПроцедуры |
|||
47
Бледно Золотистый
13.06.12
✎
16:51
|
(42) Полностью текст модуля выкладывай, если большой, заливай на хостинг, сюда ссылку. По твоему куску кода больше никто ничего не скажет.
|
|||
48
Strogg
13.06.12
✎
16:52
|
(46)+ адрес говорить, куда ведро пельменей слать?
|
|||
49
discant
13.06.12
✎
17:10
|
Привожу модуль полностью
Перем мТекущаяДатаДокумента; // Хранит последнюю установленную дату документа - для проверки перехода документа в другой период Перем мКолонкиПродукция, мКолонкиМатериалы; Перем мФормаВводПараметровВыпуска, мТекущаяСтрокаПродукцияПараметры; Перем мЧас; Перем мМинута; // Хранит дерево кнопок подменю заполнение ТЧ Перем мКнопкиЗаполненияТЧ; Перем мИспользоватьТолькоСборочныеСпецификации Экспорт; Перем мПодразделение; //////////////////////////////////////////////////////////////////////////////// // ПРОЦЕДУРЫ И ФУНКЦИИ ОБЩЕГО НАЗНАЧЕНИЯ // Процедура устанавливает подменю "Заполнить" в командных панелях ТЧ документа при необходимости // Процедура УстановитьКнопкиПодменюЗаполненияТЧ(); мКнопкиЗаполненияТЧ = УниверсальныеМеханизмы.ПолучитьДеревоКнопокЗаполненияТабличныхЧастей(Ссылка,Новый Действие("НажатиеНаДополнительнуюКнопкуЗаполненияТЧ")); СоответствиеТЧ = Новый Соответствие; СоответствиеТЧ.Вставить(ЭлементыФормы.Продукция,ЭлементыФормы.КоманднаяПанельПродукция.Кнопки.ПодменюЗаполнить); СоответствиеТЧ.Вставить(ЭлементыФормы.Материалы,ЭлементыФормы.КоманднаяПанельМатериалы.Кнопки.ПодменюЗаполнить); УниверсальныеМеханизмы.СформироватьПодменюЗаполненияТЧПоДеревуКнопок(мКнопкиЗаполненияТЧ,СоответствиеТЧ); КонецПроцедуры // УстановитьКнопкиПодменюЗаполненияТЧ() // Процедура изменяет доступность элемента формы .ВремяНапоминания // Процедура ДоступностьНапоминаний() ЭлементыФормы.ВремяНапоминания.Доступность = НапомнитьОСобытии; КонецПроцедуры // ДоступностьНапоминаний() // Функция формирует список запросов для передачи в форму подбора. // // Параметры: // ТабличнаяЧасть - табличная часть, для подбора в которую формируется список запросов. // // Возвращаемое значение: // Список значений - список запросов. // Функция СформироватьСписокЗапросовДляПодбора(ТабличнаяЧасть) СписокЗапросов = Новый СписокЗначений(); СписокЗапросов.Добавить(,"По справочнику"); Если ТабличнаяЧасть = Материалы Тогда СписокЗапросов.Добавить("ОстаткиНоменклатуры", "По остаткам номенклатуры"); СписокЗапросов.Добавить("Спецификации", "По спецификациям"); КонецЕсли; Возврат СписокЗапросов; КонецФункции // СформироватьСписокЗапросовДляПодбора() // Процедура обновляет параметры в форме подбора, если она открыта. // // Параметры: // Реквизит - измененный реквизит. // Процедура ОбновитьФормуПодбора(Реквизит) РаботаСДиалогами.ОбновитьПараметрыИФормуПодбора(ЭтотОбъект, ЭтаФорма, Реквизит); КонецПроцедуры // ОбновитьФормуПодбора() // Процедура вызывает сервисный механизм для подбора номеклатуры в табличную часть. // // Параметры: // ТабличнаяЧасть - табличная часть, в которую осуществляется подбор. // Процедура ДействиеПодбор(ТабличнаяЧасть) Перем Команда, Валюта; ЕстьСерия = Ложь; ОтборУслугПоСправочнику = Ложь; ПодбиратьУслуги = Истина; Если ТабличнаяЧасть = Продукция Тогда Команда = "ПодборВТабличнуюЧастьПродукция"; ИмяТабличнойЧасти = "Продукция"; ИначеЕсли ТабличнаяЧасть = Материалы Тогда Команда = "ПодборВТабличнуюЧастьМатериалы"; ИмяТабличнойЧасти = "Материалы"; КонецЕсли; СписокВидовПодбора = СформироватьСписокЗапросовДляПодбора(ТабличнаяЧасть); ПредставлениеДок = Метаданные().Представление(); СтруктураПараметровПодбора = Новый Структура(); СтруктураПараметровПодбора.Вставить("Команда" , Команда); СтруктураПараметровПодбора.Вставить("СписокВидовПодбора" , СписокВидовПодбора); // Параметры запросов. ВременнаяДатаРасчетов = ?(НачалоДня(Дата) = НачалоДня(ТекущаяДата()), Неопределено, Дата); СтруктураПараметровПодбора.Вставить("ДатаРасчетов" , ВременнаяДатаРасчетов); СтруктураПараметровПодбора.Вставить("Склад" , Неопределено); СтруктураПараметровПодбора.Вставить("Организация" , Организация); СтруктураПараметровПодбора.Вставить("ЕстьЦена" , Ложь); СтруктураПараметровПодбора.Вставить("ЕстьСерия" , ЕстьСерия); СтруктураПараметровПодбора.Вставить("ВалютаДокумента" , мВалютаРегламентированногоУчета); СтруктураПараметровПодбора.Вставить("ПодбиратьУслуги" , ПодбиратьУслуги); СтруктураПараметровПодбора.Вставить("ОтборУслугПоСправочнику", ОтборУслугПоСправочнику); СтруктураПараметровПодбора.Вставить("Заголовок", "Подбор номенклатуры в документ " + ПредставлениеДок + " № " + Номер + " (" + ИмяТабличнойЧасти + ")"); РаботаСДиалогами.ОткрытьПодборНоменклатуры(ЭтаФорма, СтруктураПараметровПодбора, Метаданные()); КонецПроцедуры // ДействиеПодбор() // Производит заполнение документа переданными из формы подбора данными. // // Параметры: // ТабличнаяЧасть - табличная часть, в которую надо добавлять подобранную позицию номенклатуры; // ЗначениеВыбора - структура, содержащая параметры подбора. // Процедура ОбработкаПодбора(ТабличнаяЧасть, ЗначениеВыбора) Экспорт Перем СпособЗаполненияЦен, ВалютаЦены; Перем Номенклатура, ЕдиницаИзмерения, Количество, КоличествоМест, Цена, Характеристика, Серия; Перем Спецификация, текПродукция, ХарактеристикаПродукции, КоличествоПродукции, ВидВоспроизводства; // Получим параметры подбора из структуры подбора. ЗначениеВыбора.Свойство("СпособЗаполненияЦен", СпособЗаполненияЦен); ЗначениеВыбора.Свойство("ВалютаЦены" , ВалютаЦены); ЗначениеВыбора.Свойство("Номенклатура" , Номенклатура); ЗначениеВыбора.Свойство("ЕдиницаИзмерения", ЕдиницаИзмерения); ЗначениеВыбора.Свойство("Количество" , Количество); ЗначениеВыбора.Свойство("Цена" , Цена); ЗначениеВыбора.Свойство("Характеристика" , Характеристика); ЗначениеВыбора.Свойство("Спецификация" , Спецификация); ЗначениеВыбора.Свойство("Продукция" , текПродукция); ЗначениеВыбора.Свойство("ХарактеристикаПродукции" , ХарактеристикаПродукции); ЗначениеВыбора.Свойство("КоличествоПродукции" , КоличествоПродукции); ЗначениеВыбора.Свойство("ВидВоспроизводства" , ВидВоспроизводства); // Ищем выбранную позицию в таблице подобранной номенклатуры. // Если найдем - увеличим количество; не найдем - добавим новую строку. СтруктураОтбора = Новый Структура(); СтруктураОтбора.Вставить("ЕдиницаИзмерения", ЕдиницаИзмерения); СтруктураОтбора.Вставить("ХарактеристикаНоменклатуры", Характеристика); Если ТабличнаяЧасть = Материалы и ЗначениеЗаполнено(Спецификация) Тогда СтруктураОтбора.Вставить("ХарактеристикаПродукции", ХарактеристикаПродукции); СтруктураОтбора.Вставить("Продукция", Продукция); СтруктураОтбора.Вставить("Спецификация", Спецификация); СтруктураОтбора.Вставить("ВидВоспроизводства", ВидВоспроизводства); КонецЕсли; СтрокаТабличнойЧасти = ОбработкаТабличныхЧастей.НайтиСтрокуТабЧасти(ТабличнаяЧасть, СтруктураОтбора); Если СтрокаТабличнойЧасти <> Неопределено Тогда // Нашли, увеличиваем количество в первой найденной строке. СтрокаТабличнойЧасти.Количество = СтрокаТабличнойЧасти.Количество + Количество; // Рассчитать реквизиты табличной части. ОбработкаТабличныхЧастей.РассчитатьКоличествоМестТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект); Иначе // Не нашли - добавляем новую строку. СтрокаТабличнойЧасти = ТабличнаяЧасть.Добавить(); СтрокаТабличнойЧасти.Номенклатура = Номенклатура; СтрокаТабличнойЧасти.Количество = Количество; СтрокаТабличнойЧасти.ЕдиницаИзмерения = ЕдиницаИзмерения; СтрокаТабличнойЧасти.Коэффициент = СтрокаТабличнойЧасти.ЕдиницаИзмерения.Коэффициент; СтрокаТабличнойЧасти.ХарактеристикаНоменклатуры = Характеристика; // Рассчитываем реквизиты табличной части. ОбработкаТабличныхЧастей.ЗаполнитьЕдиницуМестТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект, Ложь); Если ТабличнаяЧасть = Продукция Тогда СтрокаТабличнойЧасти.Спецификация = УправлениеПроизводством.ОпределитьСпецификациюПоУмолчанию(СтрокаТабличнойЧасти.Номенклатура, СтрокаТабличнойЧасти.ХарактеристикаНоменклатуры, Дата, Подразделение); КонецЕсли; Если ТабличнаяЧасть = Материалы и ЗначениеЗаполнено(Спецификация) Тогда СтрокаТабличнойЧасти.Спецификация = Спецификация; СтрокаТабличнойЧасти.Продукция = текПродукция; СтрокаТабличнойЧасти.ХарактеристикаПродукции = ХарактеристикаПродукции; СтрокаТабличнойЧасти.ВидВоспроизводства = ВидВоспроизводства; //Если такой продукции нет в ТЧ Продукция - добавим СтруктураОтбораПродукция = новый Структура("Номенклатура, ХарактеристикаНоменклатуры, Спецификация",текПродукция,ХарактеристикаПродукции,Спецификация); Если Продукция.НайтиСтроки(СтруктураОтбораПродукция).Количество()=0 и ЗначениеЗаполнено(текПродукция) Тогда СтрокаТабЧастиПродукция = Продукция.Добавить(); СтрокаТабЧастиПродукция.Номенклатура = текПродукция; СтрокаТабЧастиПродукция.ХарактеристикаНоменклатуры = ХарактеристикаПродукции; СтрокаТабЧастиПродукция.Спецификация = Спецификация; СтрокаТабЧастиПродукция.Коэффициент = 1; СтрокаТабЧастиПродукция.ЕдиницаИзмерения = текПродукция.ЕдиницаХраненияОстатков; СтрокаТабЧастиПродукция.Количество = КоличествоПродукции; УстановитьВидВоспроизводстваПоУмолчанию(СтрокаТабЧастиПродукция, Продукция); КонецЕсли; КонецЕсли; Если не ЗначениеЗаполнено(СтрокаТабличнойЧасти.ВидВоспроизводства) Тогда УстановитьВидВоспроизводстваПоУмолчанию(СтрокаТабличнойЧасти, ТабличнаяЧасть); КонецЕсли; КонецЕсли; Если ТабличнаяЧасть = Продукция Тогда ИмяТабличнойЧасти = "Продукция"; ИначеЕсли ТабличнаяЧасть = Материалы Тогда ИмяТабличнойЧасти = "Материалы"; УстановитьДоступностьКнопкиЗаполнитьИПровести(); КонецЕсли; ЭлементыФормы[ИмяТабличнойЧасти].ТекущаяСтрока = СтрокаТабличнойЧасти; ЭлементыФормы[ИмяТабличнойЧасти].ТекущаяКолонка = ЭлементыФормы[ИмяТабличнойЧасти].Колонки["Количество"]; КонецПроцедуры // ОбработкаПодбора() // Производит заполнение и установку необходимых полей при изменении характеристики товара в табличной части. // Процедура ПриИзмененииХарактеристикиНоменклатурыТоваров(СтрокаТабличнойЧасти) // Заполняем реквизиты табличной части. ОбработкаТабличныхЧастей.ЗаполнитьЕдиницуТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект); КонецПроцедуры // ПриИзмененииХарактеристикиНоменклатурыТоваров() // Процедура - обработчик события "ОбработкаВыбора" поля Исполнитель // // Параметры: // Элемент - элемент формы, который отображает физическое лицо // Процедура ИсполнительОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; Если ТипЗнч(ВыбранноеЗначение) = Тип("СправочникСсылка.СотрудникиОрганизаций") Тогда Элемент.Значение = ВыбранноеЗначение.Физлицо; Иначе Элемент.Значение = ВыбранноеЗначение; КонецЕсли; КонецПроцедуры // Процедура - обработчик события "ПриИзменении" поля ввода Исполнитель // // Параметры: // Элемент - элемент формы, который отображает физическое лицо // Процедура ИсполнительНачалоВыбора(Элемент, СтандартнаяОбработка) // переопеределим выбор физлица на выбор из списка сотрудников ПроцедурыУправленияПерсоналомПереопределяемый.ОткрытьФормуВыбораСотрудника(Элемент, Ссылка, Истина, Дата, СтандартнаяОбработка, Элемент.Значение); КонецПроцедуры // Процедура - обработчик события "АвтоПодборТекста" поля ввода Исполнитель // переопеределим выбор физлица на выбор из списка регистра сведений // Процедура ИсполнительАвтоПодборТекста(Элемент, Текст, ТекстАвтоПодбора, СтандартнаяОбработка) ТекстАвтоПодбора = ПроцедурыУправленияПерсоналомДополнительный.ПодобратьФИОСотрудника(СтандартнаяОбработка, "Работники", Текст); КонецПроцедуры // Процедура - обработчик события "ОкончаниеВводаТекста" поля ввода Исполнитель // переопеределим выбор физлица на выбор из списка регистра сведений // Процедура ИсполнительОкончаниеВводаТекста(Элемент, Текст, Значение, СтандартнаяОбработка) Значение = ПроцедурыУправленияПерсоналомДополнительный.ПодобратьСписокСотрудников(СтандартнаяОбработка, "Работники", Текст, Элемент.Значение, , Истина); КонецПроцедуры // Заполняет переданную табличную часть по остаткам // // Параметры: // ТабличнаяЧасть - табличная часть документа. // ЗаказПокупателя - заказ по которому производится заполнение // Очистить - очистить предварительно ТЧ или добавить в конец // Процедура ЗаполнитьТабличнуюЧастьПоЗаказуПокупателю(ТабличнаяЧасть, ЗаказПокупателя = Неопределено, Очистить = Истина, ТипДокумента = Неопределено) Если НЕ ЗначениеЗаполнено(ЗаказПокупателя) Тогда ФормаЗаказы = Документы[ТипДокумента].ПолучитьФормуВыбора(); ФормаЗаказы.Заголовок = "Выберите заказ покупателя для заполнения заказа на производство"; ФормаЗаказы.РежимВыбора = Истина; ЗаказПокупателя = ФормаЗаказы.ОткрытьМодально(); КонецЕсли; Если НЕ ЗначениеЗаполнено(ЗаказПокупателя) Тогда Возврат; КонецЕсли; Если Очистить И ТабличнаяЧасть.Количество() > 0 Тогда ТекстВопроса = "Табличная часть ""Продукция"" уже содержит строки." + Символы.ПС + "При заполнении они будут удалены! Продолжить?"; Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет, 60, КодВозвратаДиалога.Да,); Если Ответ <> КодВозвратаДиалога.Да Тогда Возврат; КонецЕсли; ТабличнаяЧасть.Очистить(); КонецЕсли; ЗаполнитьПродукциюПоЗаказуПокупателю(ЗаказПокупателя); КонецПроцедуры // ЗаполнитьТабличнуюЧастьПоЗаказуПокупателю() // Заполняет переданную табличную часть по остаткам // // Параметры: // ТабличнаяЧасть - табличная часть документа. // ЗаказПокупателя - заказ по которому производится заполнение // Очистить - очистить предварительно ТЧ или добавить в конец // Процедура ЗаполнитьТабличнуюЧастьПоВнутреннемуЗаказу(ТабличнаяЧасть, ВнутреннийЗаказ = Неопределено, Очистить = Истина, ТипДокумента = Неопределено) Если НЕ ЗначениеЗаполнено(ВнутреннийЗаказ) Тогда ФормаЗаказы = Документы[ТипДокумента].ПолучитьФормуВыбора(); ФормаЗаказы.Заголовок = "Выберите внутренний заказ для заполнения заказа на производство"; ФормаЗаказы.РежимВыбора = Истина; ВнутреннийЗаказ = ФормаЗаказы.ОткрытьМодально(); КонецЕсли; Если НЕ ЗначениеЗаполнено(ВнутреннийЗаказ) Тогда Возврат; КонецЕсли; Если Очистить И ТабличнаяЧасть.Количество() > 0 Тогда ТекстВопроса = "Табличная часть ""Продукция"" уже содержит строки." + Символы.ПС + "При заполнении они будут удалены! Продолжить?"; Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет, 60, КодВозвратаДиалога.Да,); Если Ответ <> КодВозвратаДиалога.Да Тогда Возврат; КонецЕсли; ТабличнаяЧасть.Очистить(); КонецЕсли; ЗаполнитьТабличнуюЧастьПоОстаткамВнутреннийЗаказ(ТабличнаяЧасть, ВнутреннийЗаказ); КонецПроцедуры // ЗаполнитьТабличнуюЧастьПоЗаказуПокупателю() // Заполняет переданную табличную часть по остаткам // // Параметры: // ТабличнаяЧасть - табличная часть документа. // ЗаказНаПроизводство - заказ по которому производится заполнение // Очистить - очистить предварительно ТЧ или добавить в конец // Процедура ЗаполнитьТабличнуюЧастьПоЗаказуНаПроизводство(ТабличнаяЧасть, ЗаказНаПроизводство = Неопределено, Очистить = Истина, ТипДокумента = Неопределено) Если НЕ ЗначениеЗаполнено(ЗаказНаПроизводство) Тогда ФормаЗаказы = Документы[ТипДокумента].ПолучитьФормуВыбора(); ФормаЗаказы.Заголовок = "Выберите заказ на производство для заполнения заказа на производство"; ФормаЗаказы.РежимВыбора = Истина; ЗаказНаПроизводство = ФормаЗаказы.ОткрытьМодально(); КонецЕсли; Если НЕ ЗначениеЗаполнено(ЗаказНаПроизводство) Тогда Возврат; КонецЕсли; Если Очистить И ТабличнаяЧасть.Количество() > 0 Тогда ТекстВопроса = "Табличная часть ""Продукция"" уже содержит строки." + Символы.ПС + "При заполнении они будут удалены! Продолжить?"; Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет, 60, КодВозвратаДиалога.Да,); Если Ответ <> КодВозвратаДиалога.Да Тогда Возврат; КонецЕсли; ТабличнаяЧасть.Очистить(); КонецЕсли; ЗаполнитьПродукциюПоЗаказуНаПроизводство(ЗаказНаПроизводство); КонецПроцедуры // ЗаполнитьТабличнуюЧастьПоЗаказуПокупателю() Процедура УстановитьВидВоспроизводстваПоУмолчанию(СтрокаТабличнойЧасти, ТабличнаяЧасть) Если ТабличнаяЧасть = Продукция Тогда СтрокаТабличнойЧасти.ВидВоспроизводства = Перечисления.ВидыВоспроизводстваНоменклатуры.Производство; Иначе СтрокаТабличнойЧасти.ВидВоспроизводства = СтрокаТабличнойЧасти.Номенклатура.ВидВоспроизводства; КонецЕсли; КонецПроцедуры // Производит заполнение документа переданными из формы подбора данными. // // Параметры: // ТабличнаяЧасть - табличная часть, в которую надо добавлять подобранную позицию номенклатуры; // ЗначениеВыбора - структура, содержащая параметры подбора. // Процедура ОбработкаПодбораПоСпецификации(ТабличнаяЧасть, ЗначениеВыбора) Перем Спецификация, Количество; ЗначениеВыбора.Свойство("Спецификация", Спецификация); ЗначениеВыбора.Свойство("Количество", Количество); Если ТипЗнч(Спецификация) <> Тип("СправочникСсылка.СпецификацииНоменклатуры") Тогда Возврат; КонецЕсли; Отбор = Новый Структура(); ИсходныеКомплектующие = УправлениеПроизводством.ПолучитьМатериалыПоСпецификации(Спецификация, Количество, Отбор, Дата, мИспользоватьТолькоСборочныеСпецификации); Если ИсходныеКомплектующие = Неопределено Тогда Возврат; КонецЕсли; Для Каждого Строка Из ИсходныеКомплектующие Цикл СтруктураПодбора = Новый Структура(); СтруктураПодбора.Вставить("Номенклатура", Строка.Номенклатура); СтруктураПодбора.Вставить("ЕдиницаИзмерения", Строка.ЕдиницаИзмерения); СтруктураПодбора.Вставить("Характеристика", Строка.ХарактеристикаНоменклатуры); СтруктураПодбора.Вставить("Серия", Справочники.СерииНоменклатуры.ПустаяСсылка()); СтруктураПодбора.Вставить("Количество", Строка.Количество); СтруктураПодбора.Вставить("СтатьяЗатрат", Строка.СтатьяЗатрат); СтруктураПодбора.Вставить("ВидВоспроизводства", Строка.ВидВоспроизводства); СтруктураПодбора.Вставить("Спецификация", Спецификация); СтруктураПодбора.Вставить("КоличествоПродукции", Количество); Если ЗначениеЗаполнено(Спецификация) И Спецификация.ВидСпецификации = Перечисления.ВидыСпецификаций.Сборочная Тогда СтруктураПодбора.Вставить("Продукция", Спецификация.ВыходныеИзделия[0].Номенклатура); СтруктураПодбора.Вставить("ХарактеристикаПродукции", Спецификация.ВыходныеИзделия[0].ХарактеристикаНоменклатуры); КонецЕсли; ОбработкаПодбора(ТабличнаяЧасть, СтруктураПодбора); КонецЦикла; КонецПроцедуры // ОбработкаПодбораПоСпецификации() // Процедура очищает колонку "Размещение" табличной части. // Процедура ОчиститьРазмещениеВТабличнойЧасти() Материалы.Свернуть( // Поля (исключаем Размещение) "ВидВоспроизводства, |ЕдиницаИзмерения, |ЕдиницаИзмеренияМест, |Заказ, |Коэффициент, |Номенклатура, |НомерПередела, |Подразделение, |Продукция, |Спецификация, |ХарактеристикаНоменклатуры, |ХарактеристикаПродукции", // Количество "Количество, |КоличествоМест"); КонецПроцедуры Процедура ДействияФормыРедактироватьНомер(Кнопка) МеханизмНумерацииОбъектов.ИзменениеВозможностиРедактированияНомера(ЭтотОбъект.Метаданные(), ЭтаФорма, ЭлементыФормы.ДействияФормы.Кнопки.Подменю, ЭлементыФормы.Номер); КонецПроцедуры // Процедура - обработчик события "Файлы". // Процедура ДействияФормыФайлы(Кнопка) Если Ссылка.Пустая() Тогда Предупреждение("Сначала запишите документ."); Возврат; КонецЕсли; ФормаФайлов = Справочники.ХранилищеДополнительнойИнформации.ПолучитьФорму("ФормаСпискаФайловИИзображений", ЭтаФорма); ФормаФайлов.Изображения.Отбор.Объект.Использование = Истина; ФормаФайлов.Изображения.Отбор.Объект.Значение = Ссылка; ФормаФайлов.ЭлементыФормы.Изображения.НастройкаОтбора.Объект.Доступность = Ложь; ФормаФайлов.ЭлементыФормы.Изображения.Колонки.Объект.Видимость = Ложь; ФормаФайлов.ДополнительныеФайлы.Отбор.Объект.Использование = Истина; ФормаФайлов.ДополнительныеФайлы.Отбор.Объект.Значение = Ссылка; ФормаФайлов.ЭлементыФормы.ДополнительныеФайлы.НастройкаОтбора.Объект.Доступность = Ложь; ФормаФайлов.ЭлементыФормы.ДополнительныеФайлы.Колонки.Объект.Видимость = Ложь; ОбязательныеОтборы = Новый Структура; ОбязательныеОтборы.Вставить("Объект",Ссылка); ФормаФайлов.ОбязательныеОтборы = ОбязательныеОтборы; ФормаФайлов.Открыть(); КонецПроцедуры Процедура ПодразделениеНачалоВыбора(Элемент, СтандартнаяОбработка) НастроитьОтборПодразделений(Элемент, СтандартнаяОбработка) КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // ПРОЦЕДУРЫ И ФУНКЦИИ ДЛЯ УПРАВЛЕНИЯ ВНЕШНИМ ВИДОМ ФОРМЫ // Процедура устанавливает видимость для тех колонок в табличной части // "Товары", видимость которых определяется реквизитами документа. // // Параметры: // Нет. // Процедура УстановитьВидимость() Колонки = ЭлементыФормы.Продукция.Колонки; КолонкиМатериалы = ЭлементыФормы.Материалы.Колонки; УстановитьДоступностьКнопкиЗаполнитьИПровести(); // Управление доступностью элементов формы в зависимости от вида операции КнопкиКоманднойПанели = ЭлементыФормы.ДействияФормы.Кнопки; КнопкиКоманднойПанели.ДействиеАнализ.Доступность = Истина; КолонкиМатериалы.Размещение.ИзменятьВидимость = Истина; ЭлементыФормы.Материалы.Колонки.Продукция .Видимость = мИспользоватьПотребностиЗаказовНаПроизводство; ЭлементыФормы.Материалы.Колонки.ХарактеристикаПродукции.Видимость = мИспользоватьПотребностиЗаказовНаПроизводство; КонецПроцедуры // УстановитьВидимость() // Процедура устанавливает доступность кнопки "Заполнить и провести". Кнопка доступна, // если документ - внешний заказ, его дата совпадает с текущей. // Процедура УстановитьДоступностьКнопкиЗаполнитьИПровести() ЭлементыФормы.ДействияФормы.Кнопки.ДействиеЗаполнитьИПровести.Доступность = НачалоДня(Дата) = НачалоДня(ТекущаяДата()) И Материалы.Количество() > 0; КонецПроцедуры // УстановитьДоступностьКнопкиЗаполнитьИПровести //////////////////////////////////////////////////////////////////////////////// // ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ // Процедура - обработчик события "ПередОткрытием" формы // Процедура ПередОткрытием(Отказ, СтандартнаяОбработка) // Установка кнопок заполнение ТЧ УстановитьКнопкиПодменюЗаполненияТЧ(); Отказ = Не УправлениеЗаказами.ИспользоватьЗаказыНаПроизводство(Истина); КонецПроцедуры // ПередОткрытием() // Процедура - обработчик события "ПриОткрытии" формы // Процедура ПриОткрытии() Если НЕ ЭтоНовый() Тогда НастройкаПравДоступа.ОпределитьДоступностьВозможностьИзмененияДокументаПоДатеЗапрета(ДокументОбъект, ЭтаФорма); КонецЕсли; ДоступностьНапоминаний(); Если ЭтоНовый() Тогда // проверить объект на то, что он еще не внесен в ИБ // Заполнить реквизиты значениями по умолчанию. ЗаполнениеДокументов.ЗаполнитьШапкуДокумента(ЭтотОбъект, , ПараметрОбъектКопирования); Если ПараметрОбъектКопирования<>неопределено Тогда ДатаЗапуска = РабочаяДата; ДатаИсполнения = РабочаяДата; Иначе Если НЕ ЗначениеЗаполнено(ДатаИсполнения) Тогда ДатаИсполнения = РабочаяДата; КонецЕсли; Если НЕ ЗначениеЗаполнено(ДатаЗапуска) Тогда ДатаЗапуска = РабочаяДата; КонецЕсли; КонецЕсли; КонецЕсли; СтруктураКолонок = Новый Структура(); // Установить колонки, видимостью которых пользователь управлять не может. СтруктураКолонок.Вставить("ЕдиницаХранения"); ОбработкаТабличныхЧастей.УстановитьИзменятьВидимостьКолонокТабЧасти(ЭлементыФормы.Продукция.Колонки, СтруктураКолонок); ОбработкаТабличныхЧастей.УстановитьИзменятьВидимостьКолонокТабЧасти(ЭлементыФормы.Материалы.Колонки, СтруктураКолонок); // Вывести в заголовке формы вид операции. РаботаСДиалогами.УстановитьЗаголовокФормыДокумента("", ЭтотОбъект, ЭтаФорма); // Запомнить текущие значения реквизитов формы. мТекущаяДатаДокумента = Дата; // Установить видимость колонок "ХарактеристикаНоменклатуры" РаботаСДиалогами.УстановитьВидимостьХарактеристикиНоменклатуры(мКолонкиПродукция); РаботаСДиалогами.УстановитьВидимостьХарактеристикиНоменклатуры(мКолонкиМатериалы); // Установить видимость реквизитов и заголовков колонок. УстановитьВидимость(); УстановитьДоступностьКнопкиЗаполнитьИПровести(); // Установить активный реквизит. РаботаСДиалогами.АктивизироватьРеквизитВФорме(ЭтотОбъект, ЭтаФорма,новый Структура("Дата,Организация,Подразделение,ДатаЗапуска,ДатаИсполнения")); МеханизмНумерацииОбъектов.ДобавитьВМенюДействияКнопкуРедактированияНомера(ЭлементыФормы.ДействияФормы.Кнопки.Подменю); МеханизмНумерацииОбъектов.УстановитьДоступностьПоляВводаНомера(Метаданные(), ЭтаФорма, ЭлементыФормы.ДействияФормы.Кнопки.Подменю,ЭлементыФормы.Номер); // Создать кнопки печати ФормированиеПечатныхФорм.СоздатьКнопкиПечати(ЭтотОбъект, ЭтаФорма); КонецПроцедуры // ПриОткрытии() // Процедура - обработчик события "ОбновлениеОтображения" формы. // Процедура ОбновлениеОтображения() // Подсчитаем количество строк в табличных частях. СтраницыПанели = ЭлементыФормы.ОсновнаяПанель.Страницы; СтраницыПанели.Продукция.Заголовок = "Продукция и услуги (" + ДокументОбъект.Продукция .Количество() + " поз.)"; СтраницыПанели.Материалы.Заголовок = "Материалы (" + ДокументОбъект.Материалы.Количество() + " поз.)"; КонецПроцедуры // ОбновлениеОтображения() // Процедура - обработчик события "ОбработкаВыбора" формы. // Процедура ОбработкаВыбора(ЗначениеВыбора, Источник) Перем Команда, Спецификация; Если ТипЗнч(ЗначениеВыбора) = Тип("Структура") Тогда ЗначениеВыбора.Свойство("Команда", Команда); Если Команда = "ПодборВТабличнуюЧастьПродукция" Тогда ОбработкаПодбора(Продукция, ЗначениеВыбора); ИначеЕсли Команда = "ПодборВТабличнуюЧастьМатериалы" Тогда ЗначениеВыбора.Свойство("Спецификация", Спецификация); Если Спецификация <> Неопределено Тогда ОбработкаПодбораПоСпецификации(Материалы, ЗначениеВыбора); Иначе ОбработкаПодбора(Материалы, ЗначениеВыбора); КонецЕсли; КонецЕсли; КонецЕсли; КонецПроцедуры // ОбработкаВыбора() Процедура ПриЗаписи(Отказ) //....Ваша обработка...... //....Ваша обработка... // В ДеревоЗаказов вставляем № документа, если это 1-й док-т дерева, //т.е. ОсновнойЗаказНаПроизводство - не заполнено. Если НЕ ЗначениеЗаполнено(Номер) Тогда УстановитьНовыйНомер(ОсновнойЗаказНаПроизводство.Организация.Префикс); КонецЕсли; Если НЕ ЗначениеЗаполнено(ДеревоЗаказов) Тогда цц = "0123456789"; ном = ""; длинаНомера = СтрДлина(Номер); ии = длинаНомера; Пока ии > 0 Цикл Если Найти(цц,Сред(Номер,ии,1)) > 0 Тогда ном = Сред(Номер,ии,1) + ном; Иначе Прервать; КонецЕсли; ии = ии - 1; КонецЦикла; ном = Строка(Формат(Число(ном),"ЧГ=0")); Если НЕ ЗначениеЗаполнено(ОсновнойЗаказНаПроизводство) Тогда //Вытаскиваем № ДеревоЗаказов = ном; Иначе Если ЗначениеЗаполнено(ОсновнойЗаказНаПроизводство.ДеревоЗаказов) Тогда ДеревоЗаказов = СокрЛП(ОсновнойЗаказНаПроизводство.ДеревоЗаказов) + "_" + ном; КонецЕсли; КонецЕсли; КонецЕсли; КонецПроцедуры // Процедура - обработчик события "ПослеЗаписи" формы. // Процедура ПослеЗаписи() // Вывести в заголовке формы вид операции. РаботаСДиалогами.УстановитьЗаголовокФормыДокумента("", ЭтотОбъект, ЭтаФорма); МеханизмНумерацииОбъектов.ОбновитьПодсказкуКодНомерОбъекта(ЭтотОбъект.Метаданные(), ЭлементыФормы.ДействияФормы.Кнопки.Подменю, ЭлементыФормы.Номер); Если мПодразделение<>Подразделение Тогда //изменилось значение подразделения - надо поменять подразделение в корректировках ИзменитьПодразделениеВКорректировкахЗаказаНаПроизводство(); КонецЕсли; КонецПроцедуры // ПослеЗаписи() Процедура ИзменитьПодразделениеВКорректировкахЗаказаНаПроизводство() Запрос = новый Запрос; Запрос.Текст = "ВЫБРАТЬ Ссылка, |Проведен |ИЗ Документ.КорректировкаЗаказаНаПроизводство |ГДЕ ЗаказНаПроизводство=&Заказ И Подразделение<>&Подразделение"; Запрос.УстановитьПараметр("Заказ", Ссылка); Запрос.УстановитьПараметр("Подразделение", Подразделение); Результат = Запрос.Выполнить(); Если Результат.Пустой() Тогда Возврат; КонецЕсли; Выборка = Результат.Выбрать(); Пока Выборка.Следующий() цикл ДокОбъект = Выборка.ссылка.ПолучитьОбъект(); Попытка ДокОбъект.Заблокировать(); ДокОбъект.Подразделение = Подразделение; ДокОбъект.Записать(?(Выборка.Проведен,РежимЗаписиДокумента.Проведение,РежимЗаписиДокумента.Запись)); Исключение ОбщегоНазначения.Сообщение("Не удалось автоматически изменить подразделение в документе "+Выборка.Ссылка, |
|||
50
undertaker
13.06.12
✎
17:11
|
(49) походу не получилось полностью
|
|||
51
Aprobator
13.06.12
✎
17:11
|
вот какая ... модуль полностью попросила??? Спасибо, конфу не выложил.
А вообще, есть у меня предположение, что где то вместо ";" - ":" затесалось. |
|||
52
Aprobator
13.06.12
✎
17:14
|
а на Тогда ругается - попробуй перенабрать. Мало ли агличкий символ затесался.
|
|||
53
undertaker
13.06.12
✎
17:22
|
если убрать процедуру ПриЗаписи - без ошибок будет? Если да, то добавляй поблочно и после каждого добавления проверяй. Блоки - конструкции Если и циклы, если блоки вложенные, то сначала блок верхнего уровня, потом вложенный.
|
|||
54
Buster007
13.06.12
✎
17:23
|
вставил весь модуль ) такой ошибки не наблюдаю)
|
|||
55
discant
13.06.12
✎
17:42
|
А у меня есть... Перенабирать Тогда пробовал, процедура ПриЗаписи(Отказ) меняю на Проц1() та же песня
|
|||
56
Aprobator
13.06.12
✎
17:45
|
мистика какая то.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |