Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
29 сен 2021, 03:49

Ошибка в процедуре(начало начал)

Автор Zorro, 19 фев 2019, 14:34

0 Пользователей и 1 гость просматривают эту тему.

Zorro

Здравствуйте уважаемые,возник вопрос по ошибке в процедуре,изучаю программирование по книге Радченко "Практическое пособие разработчика.Примеры и типовые приемы" и делал все по примеру как написано в книге и тут бац,в коде пока не разбираюсь достаточно чтобы понять причину ошибки сам.Текст ошибки и сама процедура ниже,помогите пожалуйста понять причину ошибок.
{Документ.ОказаниеУслуги.МодульОбъекта(30,3)}: Ожидается ключевое слово 'КонецПроцедуры' ('EndProcedure')
      <<?>>|   ОказаниеУслугиПереченьНоменклатуры.НаборСвойств"; (Проверка: Сервер)
{Документ.ОказаниеУслуги.МодульОбъекта(34,38)}: Ошибка в выражении
   РезультатЗапроса = Запрос.Выполнить(<<?>>); (Проверка: Сервер)
{Документ.ОказаниеУслуги.МодульОбъекта(151,1)}: Неопознанный оператор
<<?>>" из набора свойств """ + ВыборкаДетальныеЗаписи.НаборСвойств + """"; (Проверка: Сервер)
{Документ.ОказаниеУслуги.МодульОбъекта(154,1)}: Ожидается ключевое слово 'КонецЕсли' ('EndIf')
<<?>>КонецЦикла; (Проверка: Сервер)
{Документ.ОказаниеУслуги.МодульОбъекта(154,12)}: Обнаружено логическое завершение исходного текста модуля
КонецЦикла;<<?>> (Проверка: Сервер)



Процедура ОбработкаПроведения(Отказ, Режим)
   
   Движения.ОстаткиМатериалов.Записывать = Истина;
   Движения.СтоимостьМатериалов.Записывать = Истина;
   Движения.Продажи.Записывать = Истина;   
   
     // Создать менеджер временных таблиц
     МенеджерВТ = Новый МенеджерВременныхТаблиц;
   #Область НоменклатураДокумента
   Запрос = Новый Запрос;
   // Укажем, какой менеджер временных таблиц использует этот запрос
    Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
   Запрос.Текст =
      "ВЫБРАТЬ
      |   ОказаниеУслугиПереченьНоменклатуры.Номенклатура,
      |   ОказаниеУслугиПереченьНоменклатуры.Номенклатура.ВидНоменклатуры КАК ВидНоменклатуры,
      |   ОказаниеУслугиПереченьНоменклатуры.НаборСвойств,
      |   СУММА(ОказаниеУслугиПереченьНоменклатуры.Количество) КАК КоличествоВДокументе,
      |   СУММА(ОказаниеУслугиПереченьНоменклатуры.Сумма) КАК СуммаВДокументе
      |ПОМЕСТИТЬ НоменклатураДокумента
      |ИЗ
      |   Документ.ОказаниеУслуги.ПереченьНоменклатуры КАК ОказаниеУслугиПереченьНоменклатуры
      |ГДЕ
      |   ОказаниеУслугиПереченьНоменклатуры.Ссылка = &Ссылка
      |
      |СГРУППИРОВАТЬ ПО
      |   ОказаниеУслугиПереченьНоменклатуры.Номенклатура,
      |   ОказаниеУслугиПереченьНоменклатуры.Номенклатура.ВидНоменклатуры";
      |   ОказаниеУслугиПереченьНоменклатуры.НаборСвойств";
   
   Запрос.УстановитьПараметр("Ссылка", Ссылка);
   
   РезультатЗапроса = Запрос.Выполнить();
  #КонецОбласти
 
  #Область ДвиженияДокумента
     Запрос2 = Новый Запрос;
     Запрос2.МенеджерВременныхТаблиц = МенеджерВТ;
     Запрос2.Текст = "ВЫБРАТЬ
                     |   НоменклатураДокумента.Номенклатура,
                     |   НоменклатураДокумента.ВидНоменклатуры,
                 | НоменклатураДокумента.НаборСвойств,
                     |   НоменклатураДокумента.КоличествоВДокументе,
                     |   НоменклатураДокумента.СуммаВДокументе,
                     |   ЕСТЬNULL(СтоимостьМатериаловОстатки.СтоимостьОстаток, 0) КАК Стоимость,
                     |   ЕСТЬNULL(ОстаткиМатериаловОстатки.КоличествоОстаток, 0) КАК Количество
                     |ИЗ
                     |   НоменклатураДокумента КАК НоменклатураДокумента
                     |      ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СтоимостьМатериалов.Остатки(
                     |            ,
                     |            Материал В
                     |               (ВЫБРАТЬ
                     |                  НоменклатураДокумента.Номенклатура
                     |               ИЗ
                     |                  НоменклатураДокумента)) КАК СтоимостьМатериаловОстатки
                     |      ПО НоменклатураДокумента.Номенклатура = СтоимостьМатериаловОстатки.Материал
                     |      ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиМатериалов.Остатки(
                     |            ,
                     |            Материал В
                     |               (ВЫБРАТЬ
                     |                  НоменклатураДокумента.Номенклатура
                     |               ИЗ
                     |                  НоменклатураДокумента)) КАК ОстаткиМатериаловОстатки
                     |      ПО НоменклатураДокумента.Номенклатура = ОстаткиМатериаловОстатки.Материал";
                
   // Установим необходимость блокировки данных в регистрах СтоимостьМатериалов
   // и ОстаткиМатериалов
      Движения.СтоимостьМатериалов.БлокироватьДляИзменения = Истина;
      Движения.ОстаткиМатериалов.БлокироватьДляИзменения = Истина;
                
   // Запишем пустые наборы записей, чтобы читать остатки без учета данных в документе
      Движения.СтоимостьМатериалов.Записать();
      Движения.ОстаткиМатериалов.Записать();
      
   РезультатЗапроса = Запрос2.Выполнить();
   
   
   ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
   
   Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Если ВыборкаДетальныеЗаписи.Количество = 0 Тогда
СтоимостьМатериала = 0;
Иначе
СтоимостьМатериала =
ВыборкаДетальныеЗаписи.Стоимость / ВыборкаДетальныеЗаписи.Количество;
КонецЕсли;
   Если ВыборкаДетальныеЗаписи.ВидНоменклатуры =
Перечисления.ВидыНоменклатуры.Материал Тогда
   // Регистр ОстаткиМатериалов Расход
      Движение = Движения.ОстаткиМатериалов.Добавить();
      Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
      Движение.Период = Дата;
      Движение.Материал = ВыборкаДетальныеЗаписи.Номенклатура;
      Движение.НаборСвойств = ВыборкаДетальныеЗаписи.НаборСвойств;
      Движение.Склад = Склад;
      Движение.Количество = ВыборкаДетальныеЗаписи.КоличествоВДокументе;
   // регистр СтоимостьМатериалов Расход
      Движение = Движения.СтоимостьМатериалов.Добавить();
      Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
      Движение.Период = Дата;
      Движение.Материал = ВыборкаДетальныеЗаписи.Номенклатура;
      Движение.Стоимость = ВыборкаДетальныеЗаписи.КоличествоВДокументе *
      СтоимостьМатериала;   
КонецЕсли;
// Регистр Продажи
Движение = Движения.Продажи.Добавить();
Движение.Период = Дата;
Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;
Движение.Клиент = Клиент;
Движение.Мастер = Мастер;
Движение.Количество = ВыборкаДетальныеЗаписи.КоличествоВДокументе;
Движение.Выручка = ВыборкаДетальныеЗаписи.СуммаВДокументе;
Движение.Стоимость = СтоимостьМатериала *
ВыборкаДетальныеЗаписи.КоличествоВДокументе;

      КонецЦикла;
Движения.Записать();
#КонецОбласти

#Область КонтрольОстатков
Если Режим = РежимПроведенияДокумента.Оперативный Тогда
// Проверить отрицательные остатки

Запрос3 = Новый Запрос;
Запрос3.МенеджерВременныхТаблиц = МенеджерВТ;
Запрос3.Текст = "ВЫБРАТЬ
                |   ОстаткиМатериаловОстатки.Материал,
            |   ОстаткиМатериаловОстатки.НаборСвойств,
                |   ОстаткиМатериаловОстатки.КоличествоОстаток
                |ИЗ
                |   РегистрНакопления.ОстаткиМатериалов.Остатки(
                |         ,(Материал, НаборСвойств)
                |          В
                |               (ВЫБРАТЬ
                |                  НоменклатураДокумента.Номенклатура,
            |                       НоменклатураДокумента.НаборСвойств
                |               ИЗ
                |                  НоменклатураДокумента)
                |            И Склад = &Склад) КАК ОстаткиМатериаловОстатки
                |ГДЕ
                |   ОстаткиМатериаловОстатки.КоличествоОстаток < 0";
            
Запрос3.УстановитьПараметр("Склад", Склад);
РезультатЗапроса = Запрос3.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Сообщение = Новый СообщениеПользователю();
Сообщение.Текст = "Не хватает " + Строка(- ВыборкаДетальныеЗаписи.КоличествоОстаток) +
" единиц материала """ + ВыборкаДетальныеЗаписи.Материал + """";
" из набора свойств """ + ВыборкаДетальныеЗаписи.НаборСвойств + """";
Сообщение.Сообщить();
Отказ = Истина;
КонецЦикла;

КонецЕсли;
#КонецОбласти

КонецПроцедуры

LexaK

ели до конца дочитал, ну нельзя же столько гкодить, что нибудь о функциональном программировании знаете? (ну да ладно, это все лирика)
ваша ошибка из-за того что вы напутали с кавычками (".."""""), вот здесь
Цитировать
Сообщение.Текст = "Не хватает " + Строка(- ВыборкаДетальныеЗаписи.КоличествоОстаток) +
" единиц материала """ + ВыборкаДетальныеЗаписи.Материал + """";
" из набора свойств """ + ВыборкаДетальныеЗаписи.НаборСвойств + """";
ответ Понравился? (в смысле пригодился?)

bsn-chita

Цитата: LexaK от 19 фев 2019, 21:06ну нельзя же столько гкодить
Тоже засомневался что такое в книжке написано, но нет все так и есть.


Zorro

Цитата: LexaK от 19 фев 2019, 21:06ну нельзя же столько гкодить,[/quote
слово кодить пока не применимо ко мне,споткнулся при первой ошибке,что вы имели ввиду по поводу кавычек,их должно быть больше? Попробовал уменьшить и увеличить их количество не помогло,но я пропустил оказывается знак + и нашел несколько ошибок в виде запятых и точки с запятой. Так что вы помогли обратить внимание на что я не замечал ранее,а вот как научиться понимать код я еще не понял.

LexaK

:D :D
Цитироватьвы имели ввиду по поводу кавычек,их должно быть больше?
Кавычек, должно быть, ровно столько, сколько их нужно (как и других плюсиков, минусиков и т.д.) ! :befhbt:
одной больше или меньше и будет ошибка.
ответ Понравился? (в смысле пригодился?)

Zorro

Цитата: LexaK от 21 фев 2019, 16:34сколько их нужно
извиняюсь пока не дошел до этого,а сколько :lol::xfbnsdfb:?и можете раскрыть секрет вот например как вы начали изучение программирование в 1 С?


alex0402

Цитата: Zorro от 21 фев 2019, 19:57можете раскрыть секрет вот например как вы начали изучение программирование в 1 С?

с простых отчетов.
Спасибо за Сказать спасибо

Теги:

Похожие темы (5)

Рейтинг@Mail.ru Rambler's Top100

Поиск