|
Вопросы по курсу Чистова 8.3 | ☑ | ||
---|---|---|---|---|
0
Штурман
14.10.16
✎
06:55
|
У Чистова есть книжка по 8.3 на 750 страниц.
Возникли некоторые вопросы относительно кода и предложений в книге. 1. В книге часто пишется про поставить точку останова, но конкретно где ставить непонятно. Допустим, создали процедуру, в которой нету кода, где ставить точку останова, чтобы потом Вычислить выражение? 2. Есть справочник Номенклатура, в ней две подгруппы – Товары и Услуги, по книге сделали проверку, чтобы была проверка услуги в зависимости от установленной галки следующим кодом: Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) Если НЕ ЭтоГруппа и Услуга тогда ПроверяемыеРеквизиты.Удалить(ПроверяемыеРеквизиты.Найти("ЕдИзм")); конецесли; КонецПроцедуры Но если в группе Услуг у справочника поставить галку, вылазит ошибка: s017.radikal.ru/i435/1610/0c/512a64b92d68.jpg 3. При создании отчета почему-то невозможно вывести данные из-за неопределенной переменной: {Отчет.ПрайсЛист.Форма.ФормаОтчета.Форма(4,18)}: Переменная не определена (ТабДок) ЗаполнитьТабДок(<<?>>ТабДок); (Проверка: Тонкий клиент) Сам код - &НаКлиенте Процедура СформироватьПрайс(Команда) ЗаполнитьТабДок(ТабДок); КонецПроцедуры &НаСервереБезКонтекста Процедура ЗаполнитьТабДок(ТабДок) Макет = Отчеты.ПрайсЛист.ПолучитьМакет("Макет"); ОблШапка = Макет.ПолучитьОбласть("Шапка"); ОблЭлемент = Макет.ПолучитьОбласть("Элемент"); ОблШапка.Параметры.ДатаОтчета = ТекущаяДата(); ТабДок.Вывести(ОблШапка); Выборка = Справочники.Номенклатура.Выбрать(); Пока Выборка.Следующий() цикл ОблЭлемент.Параметры.Заполнить(Выборка); ТабДок.Вывести(ОблЭлемент); конеццикла; конецпроцедуры http://radikal.ru/lfp/s019.radikal.ru/i630/1610/b8/bfe8b6895a08t.jpg/htm |
|||
1
Штурман
14.10.16
✎
06:58
|
||||
2
mehfk
14.10.16
✎
07:06
|
ТабДок должен быть реквизитом формы, а не реквизитом объекта.
|
|||
3
Mankubus
14.10.16
✎
07:07
|
>>где ставить точку останова, чтобы потом Вычислить выражение?
на строке со словом КонецПроцедуры |
|||
4
Mankubus
14.10.16
✎
07:08
|
>>Но если в группе Услуг у справочника поставить галку, вылазит ошибка:
Нажми на кнопку Подробно чтобы был полный текст ошибки |
|||
5
Штурман
14.10.16
✎
07:12
|
(4)
Ошибка при выполнении обработчика - 'ОбработкаПроверкиЗаполнения' по причине: {Справочник.Номенклатура.МодульОбъекта(16)}: Ошибка при вызове метода контекста (Удалить) ПроверяемыеРеквизиты.Удалить(ПроверяемыеРеквизиты.Найти("ЕдИзм")); по причине: Несоответствие типов (параметр номер '1') |
|||
6
Штурман
14.10.16
✎
07:13
|
(4) ок, первый вопрос понятен :)
|
|||
7
Mankubus
14.10.16
✎
07:17
|
(5) в массиве ПроверяемыеРеквизиты нету значения "ЕдИзм"
В реквизите установлено значение Выдавать ошибку на проверке заполнения? |
|||
8
Штурман
14.10.16
✎
07:25
|
(7) сам весь код формы справчоника такой:
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка) Если ДанныеЗаполнения = Неопределено тогда Возврат конецесли; если ДанныеЗаполнения.Свойство("Родитель") тогда //Услуга = ДанныеЗаполнения.Родитель.Услуга; ДанныеЗаполнения.Вставить("Услуга", ДанныеЗаполнения.Родитель.Услуга); конецесли; КонецПроцедуры Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) Если НЕ ЭтоГруппа и Услуга тогда ПроверяемыеРеквизиты.Удалить(ПроверяемыеРеквизиты.Найти("ЕдИзм")); конецесли; КонецПроцедуры |
|||
9
Штурман
14.10.16
✎
07:27
|
Метод «Свойство» - получает значение элемента по указанному имени, а также проверяет
наличие свойства. Если ДанныеЗаполнения.Свойство("Родитель") Услуга = ДанныеЗаполнения.Родитель.Услуга; КонецЕсли; Но такая запись не очень хороша, т.к. признак «Услуга» - это реквизит справочника, а так как в нем свойство «Заполнять из данных заполнения = Истина», то если в «ДанныеЗаполнения» при отрабатывании процедуры будет найден ключ «Услуга», то система заполнит его автома- том, т.е. принудительно его устанавливать не надо. Если ДанныеЗаполнения.Свойство("Родитель") //Услуга = ДанныеЗаполнения.Родитель.Услуга; ДанныеЗаполнения.Вставить("Услуга", ДанныеЗаполнения.Родитель.Услуга) КонецЕсли; «Услуга» - название реквизита, который будет заполнен. «ДанныеЗаполнения.Родитель.Услуга» - значение, которым будет заполнен этот реквизит. Т.е. значение реквизита не устанавливается напрямую, а стандартному механизму передается инструкция заполнить значение реквизита «Услуга» при отрабатывании процедуры «Обра- боткаЗаполнения». Параметр «СтандартнаяОбратотка» - отвечает за работу стандартного механизма заполнения реквизитов. Если «СтандартнаяОбратотка = Ложь», то ничего автоматом не заполнится, но принудительное заполнение сработает: Услуга = ДанныеЗаполнения.Родитель.Услуга; Итого: Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка) Если ДанныеЗаполнения = Неопределено Тогда Возврат; КонецЕсли; Если ДанныеЗаполнения.Свойство("Родитель") //Услуга = ДанныеЗаполнения.Родитель.Услуга; ДанныеЗаполнения.Вставить("Услуга", ДанныеЗаполнения.Родитель. Услуга) КонецЕсли; //СтандартнаяОбработка = Ложь; КонецПроцедуры К элементу структуры можно обратиться по его ключу: ДанныеЗаполнения.Вставить("Услуга", ДанныеЗаполнения.Родитель. Услуга); Данные заполнения можно как прочитать: А = ДанныеЗаполнения.Услуга так и записать в них значение: ДанныеЗаполнения.Услуга = Ложь В примере у реквизита «Единица измерения» если элемент – товар, то надо проверять на за- полнение, а если элемент – услуга, то заполнение не обязательно. Проверку надо проводить независимо от формы (на стороне сервера), т.е. вообще форму надо загружать по минимуму, а все проверки выполнять на стороне сервера. Модуль объекта – процедура «ОбработкаПроверкиЗаполнения» ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) Отказ – признак успешности транзакции записи объекта в БД. Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) Если НЕ Услуга Тогда Если ЕдИзм.Пустая() Тогда Отказ = Истина; КонецЕсли; КонецЕсли; КонецПроцедуры Но данная процедура будет работать не только для элементов, но и для групп, что неправиль- но. Добавим код: Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) Если ЭтоГруппа Тогда Возврат; КонецЕсли; Если НЕ Услуга Тогда Если ЕдИзм.Пустая() Тогда Отказ = Истина; КонецЕсли; КонецЕсли; КонецПроцедуры Но при этом пользователь не будет проинформирован, почему ему не удалось записать эле- мент. Поэтому такой способ применяется для описания каких-либо сложных алгоритмов. Реализуем проверку при помощи стандартной обработки. Обратимся к коллекции «ПроверяемыеРеквизиты» - попытаемся записать услугу «Доставка» с незаполненной единицей измерения. При этом у реквизита «ЕдИзм» свойство: «Проверка заполнения – Выдавать ошибку». |
|||
10
Dyspho
14.10.16
✎
07:32
|
(0) чо за книга
|
|||
11
Dyspho
14.10.16
✎
07:38
|
дайте ссылку на книгу
|
|||
12
Штурман
14.10.16
✎
07:38
|
Чистов П. Полная методичка к курсу 1С: Предприятие 8.2. Программирование
|
|||
13
Dyspho
14.10.16
✎
07:40
|
(12) а говоришь 83
|
|||
14
Штурман
14.10.16
✎
07:44
|
(13) косяк да, короче книга по 8.2, но все делаю на платформе 8.3
но не думаю, что ошибки из-за этого, это ж самые основы |
|||
15
Mankubus
14.10.16
✎
07:47
|
(9) При этом у реквизита «ЕдИзм» свойство:
«Проверка заполнения – Выдавать ошибку». это сделал? |
|||
16
Штурман
14.10.16
✎
07:50
|
(15) конечно, это и есть:
Здесь содержится список реквизитов, значение которых проверяется на заполнение. В процедуре если элемент справочника не группа и услуга, то найдем нужный элемент мас- сива и удалим его из проверяемых реквизитов. Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) Если НЕ ЭтоГруппа И Услуга Тогда ПроверяемыеРеквизиты.Удалить(ПроверяемыеРеквизиты.Найти("ЕдИзм")); КонецЕсли; КонецПроцедуры |
|||
17
Штурман
14.10.16
✎
07:52
|
(15) в общем из-за этой процедуры нельзя поставить галочку Услуга в справочнике Номенклатра, если элемент справочника принадлежит группе Услуга
|
|||
18
Штурман
14.10.16
✎
07:54
|
(15) вот сам справочник:
http://savepic.ru/11797780.jpg в группе Товары галка Услуга ставится, а в группе Услуги галка услуга не ставится |
|||
19
Mankubus
14.10.16
✎
07:54
|
(16) не верю. покажи скриншот со свойствами реквизита ЕдИзм
|
|||
20
Штурман
14.10.16
✎
08:00
|
||||
21
Mankubus
14.10.16
✎
08:01
|
(20) а теперь перечитываем (15)
у реквизита «ЕдИзм» свойство: «Проверка заполнения – Выдавать ошибку». |
|||
22
Штурман
14.10.16
✎
08:10
|
(21) о, заработало, теперь спокойно можно галку ставить.
Вот только трабла в том, что при создании нового элемента в группе Услуги эта галка автоматически не проставляется, вот код: Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка) Если ДанныеЗаполнения = Неопределено тогда Возврат конецесли; если ДанныеЗаполнения.Свойство("Родитель") тогда //Услуга = ДанныеЗаполнения.Родитель.Услуга; ДанныеЗаполнения.Вставить("Услуга", ДанныеЗаполнения.Родитель.Услуга); конецесли; КонецПроцедуры |
|||
23
Dyspho
14.10.16
✎
08:23
|
||||
24
Штурман
14.10.16
✎
08:27
|
(23) по книжке быстрее, к тому же нет траффика, чтобы видео с ютуба смотреть )
|
|||
25
Dyspho
14.10.16
✎
08:28
|
(24) Я просто думал книжка новая
|
|||
26
Lexey_
14.10.16
✎
08:38
|
(22) "Заполнять из данных заполнения"
|
|||
27
Лефмихалыч
14.10.16
✎
08:59
|
(0) 1. на слове КонецПроцедуры
2. ты не включил "выдавать ошибку" в свойствах реквизита ЕдИзм 3. реквизита формы ТабДок не существует, вот оно и не работает |
|||
28
Штурман
14.10.16
✎
09:03
|
(27) 3. почему не существует?
вот же картинка: http://radikal.ru/lfp/s019.radikal.ru/i630/1610/b8/bfe8b6895a08t.jpg/htm реквизит есть |
|||
29
FIXXXL
14.10.16
✎
09:06
|
ПроверяемыеРеквизиты.Удалить(ПроверяемыеРеквизиты.Найти("ЕдИзм"));
не надо так писать в общем случае сначала Найти, потом проверка поиска, если найдено - удалить |
|||
30
Лефмихалыч
14.10.16
✎
09:07
|
(28) на картинке нет реквизита формы ТабДок. Там есть реквизит объекта, а это не одно и то же.
|
|||
31
Лефмихалыч
14.10.16
✎
09:08
|
(29) если бы проверка заполнения была "выдавать ошибку", то реквизит в массиве бы гарантированно был и код бы выполнился успешно. Но проверка заполнения у ЕдИзм просто не включена.
|
|||
32
Штурман
14.10.16
✎
09:18
|
(30) а как добавить реквизит формы ТабДок? куда?
|
|||
33
cons74
14.10.16
✎
09:35
|
(0) не поверишь, но можно задать вопросы на форуме Чистова: http://forum.chistov.pro
|
|||
34
GROOVY
14.10.16
✎
09:58
|
Как много нового я о себе узнаю...
|
|||
35
FIXXXL
14.10.16
✎
09:59
|
(31) дык про то и речь
я написал, падаван галку снял, пользователи ловят глюк |
|||
36
Лефмихалыч
14.10.16
✎
09:59
|
(32) на форму добавить в редакторе формы
|
|||
37
Elysee
14.10.16
✎
10:38
|
(34) Павел, как пишутся 750 страниц? Нужна команда машинисток или доверяя только себе, закрываешься на кухне на 2 месяца?
|
|||
38
GROOVY
14.10.16
✎
10:40
|
(37) Это скрибинг видеокурса. Делал слушатель. http://expert.chistov.pro/public/249785/
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |