Ошибка при вызове метода контекста выполнить поле не найдено

Ошибка при вызове метода контекста (Выполнить) — Поле не найдено

Ошибка возникает в момент исполнения отчета на СКД (системе компоновки данных)

  • говорит об отсутствии этого поля в исходных данных
  • наличии выбранного поля в выбранных полях, в отборах, в условном оформлении
  • проявляется и в 8.2, и в 8.3

Скриншот

Поле не найдено СКДПолный текст ошибки

Ошибка при вызове метода контекста (Выполнить)
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройка, ДанныеРасшифровки);
по причине:
Ошибка компоновки макета
по причине:

Поле не найдено "Проведен"

 Исправление ошибки

Открыть схему компоновки данных и проверить все вкладки.

Ошибочное поле в диалоге выбора отображается с красным крестом (как удаленное)

Поле не найдено 1Выбрать другое поле (возможно переименовано, либо добавить в исходную таблицу новое с таким именем).

Перевыбрать в последнем случае все равно придется, поскольку система их определяет по внутреннему скрытому идентификатору.

Мода имеет такое же отношение к оригинальности, как любая другая реклама к товару.

Ошибка в запросе. Поле не найдено.

Я
   Rodya95

13.09.17 — 18:25

Здравствуйте! Дали задание, а ошибку все не могу найти, второй день все переделываю и перепроверяю, а ошибка все вылезает.

Ошибка следующая:

Ошибка при выполнении обработчика — ‘ОбработкаПроведения’

по причине:

{Документ.РасходнаяНакладная.МодульОбъекта(68)}: Ошибка при вызове метода контекста (Выполнить)

            РезультатЗапроса = Запрос2.Выполнить();

по причине:

{(15, 28)}: Поле не найдено «НоменклатураДокумента.Номенклатура»

ПО НоменклатураДокумента.<<?>>Номенклатура = СтоимостьТоваровОстатки.Товар

Запрос2 = Новый Запрос;

    Запрос2.МенеджерВременныхТаблиц = МенеджерВТ;

    Запрос2.Текст = «ВЫБРАТЬ

                    |    НоменклатураДокумента.Номенклатура,

                    |    НоменклатураДокумента.ВидНоменклатуры,

                    |    НоменклатураДокумента.КоличествоВДокументе,

                    |    НоменклатураДокумента.СуммаВДокументе,

                    |    ЕСТЬNULL(СтоимостьТоваровОстатки.СтоимостьОстаток, 0) КАК Стоимость,

                    |    ЕСТЬNULL(ОстаткиТоваровОстатки.КоличествоОстаток, 0) КАК Количество                    

                    |ИЗ

                    |    НоменклатураДокумента КАК НоменклатураДокумента

                    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СтоимостьТоваров.Остатки(,Товар В(

                    |ВЫБРАТЬ

                    |                        НоменклатураДокумента.Номенклатура

                    |                    ИЗ

                    |                        НоменклатураДокумента)) КАК СтоимостьТоваровОстатки

                    |        ПО НоменклатураДокумента.Номенклатура = СтоимостьТоваровОстатки.Товар

                    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки(,Наименование В(

                    |ВЫБРАТЬ

                    |                        НоменклатураДокумента.Номенклатура

                    |                    ИЗ

                    |                        НоменклатураДокумента)) КАК ОстаткиТоваровОстатки

                    |        ПО НоменклатураДокумента.Номенклатура = ОстаткиТоваровОстатки.Наименование»;

                    
            Движения.СтоимостьТоваров.БлокироватьДляИзменения = Истина;

            Движения.ОстаткиТоваров.БлокироватьДляИзменения = Истина;

                    
            //Запишем пустые наборы записей, чтобы читать остатки без учета данных в документе

            Движения.СтоимостьТоваров.Записать();

            Движения.ОстаткиТоваров.Записать();

                    
            РезультатЗапроса = Запрос2.Выполнить();

            ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

   Базис

1 — 13.09.17 — 18:27

Копируй текст запроса, вставь его в консоль запросов, проверь синтаксис кнопкой внизу справа.

   Tatitutu

2 — 13.09.17 — 18:32

Товар В(ВЫБРАТЬ                     НоменклатураДокумента.Номенклатура

                    ИЗ

                        НоменклатураДокумента)

   AlvlSpb

3 — 13.09.17 — 19:04

(0) А где сама временная таблица НоменклатураДокумента формируется? Покажите как делаете

   DrShad

4 — 13.09.17 — 19:12

Сама таблица то есть, а вот поля такого в ней нет

   AlvlSpb

5 — 13.09.17 — 19:23

(4) вот и похоже на то, поэтому и спрашиваю показать ее

   Rodya95

6 — 14.09.17 — 11:26

(4) вот временная таблица

МенеджерВТ = Новый МенеджерВременныхТаблиц;

    
    Запрос = Новый Запрос;

    
    Запрос.МенеджерВременныхТаблиц = МенеджерВТ;

    
    Запрос.Текст =

        «ВЫБРАТЬ

        |    РасходнаяНакладнаяПереченьНоменклатуры.Наименование,

        |    РасходнаяНакладнаяПереченьНоменклатуры.Наименование.ВидНоменклатуры КАК ВидНоменклатуры,

        |    СУММА(РасходнаяНакладнаяПереченьНоменклатуры.Количество) КАК КоличествоВДокументе,

        |    СУММА(РасходнаяНакладнаяПереченьНоменклатуры.Сумма) КАК СуммаВДокументе

        |ПОМЕСТИТЬ НоменклатураДокумента

        |ИЗ

        |    Документ.РасходнаяНакладная.ПереченьНоменклатуры КАК РасходнаяНакладнаяПереченьНоменклатуры

        |ГДЕ

        |    РасходнаяНакладнаяПереченьНоменклатуры.Ссылка = &Ссылка

        |

        |СГРУППИРОВАТЬ ПО

        |    РасходнаяНакладнаяПереченьНоменклатуры.Наименование,

        |    РасходнаяНакладнаяПереченьНоменклатуры.Наименование.ВидНоменклатуры»;

    
    Запрос.УстановитьПараметр(«Ссылка», Ссылка);

    
    РезультатЗапроса = Запрос.Выполнить();

   Мыш

7 — 14.09.17 — 11:28

(6)      «ВЫБРАТЬ

        |    РасходнаяНакладнаяПереченьНоменклатуры.Номенклатура КАК Номенклатура,

   catena

8 — 14.09.17 — 11:32

(7)Я думаю, что все-так «.Наименование как Номенклатура»

   _Дайвер_

9 — 14.09.17 — 11:34

(8) +

   Ненавижу 1С

10 — 14.09.17 — 11:36

(0) ЧТО ЭТО?

ОстаткиТоваровОстатки.Наименование

   Ёпрст

11 — 14.09.17 — 11:50

(8) еще подумай, в регистре то, Товар не строка, а ссылка

   Rodya95

12 — 14.09.17 — 11:50

(7) Да, верно, уже нашел и исправил. Теперь появилась такая ошибка:

Ошибка при выполнении обработчика — ‘ОбработкаПроведения’

по причине:

{Документ.РасходнаяНакладная.МодульОбъекта(119)}: Ошибка при вызове метода контекста (Выполнить)

                РезультатЗапроса = Запрос3.Выполнить();

по причине:

{(9, 15)}: Не задано значение параметра «Склад»

И Склад = <<?>>&Склад) КАК ОстаткиТоваровОстатки

Текст программы:

Запрос3 = Новый Запрос;

    Запрос3.МенеджерВременныхТаблиц = МенеджерВТ;

    Запрос3.Текст = «ВЫБРАТЬ

                    |    ОстаткиТоваровОстатки.Наименование,

                    |    ОстаткиТоваровОстатки.КоличествоОстаток

                    |ИЗ

                    |    РегистрНакопления.ОстаткиТоваров.Остатки(,Наименование В(ВЫБРАТЬ

                    |                        НоменклатураДокумента.Наименование

                    |                    ИЗ

                    |                        НоменклатураДокумента)

                    |                И Склад = &Склад) КАК ОстаткиТоваровОстатки

                    |ГДЕ

                    |    ОстаткиТоваровОстатки.КоличествоОстаток»;

                    
                Запрос3.УстановитьПараметр(Склад,»Склад»);

                РезультатЗапроса = Запрос3.Выполнить();

                ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

                Пока ВыборкаДетальныеЗаписи.Следующий()Цикл

                    Сообщение = Новый СообщениеПользователю();

                    Сообщение.Текст = «Не хватает» + Строка (-ВыборкаДетальныеЗаписи.КоличествоОстаток)+»единиц товара»»»+ВыборкаДетальныеЗаписи.Товар+»»»»»»;

                    Сообщение.Сообщить();

                    Отказ = Истина;

                КонецЦикла;

   Ёпрст

13 — 14.09.17 — 11:52

ну и вот тут, аутору тоже надо переделать:

//ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки(,Наименование В(

ЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки(,Номенклатура В(

Врят ли есть там измерение Наименование в регистре.

   Rodya95

14 — 14.09.17 — 11:52

(7) а, нет, все таки ошибка была не там. Я исправил во втором запросе НоменклатураДокумента.Номенклатура на НоменклатураДокумента.Наименование

   Rodya95

15 — 14.09.17 — 11:53

(13) там все верно)

   Ёпрст

16 — 14.09.17 — 11:53

(12)

Запрос3.УстановитьПараметр(«Склад»,Склад);

   Ёпрст

17 — 14.09.17 — 11:54

(15) чего верно ? У тя в регистре ОстаткиТоваров есть измерение Наименование ?

И какого оно типа у тебя, и кто его туда добавил и зачем ?

   Rodya95

18 — 14.09.17 — 11:57

(17) Да, тип СправочникСсылка.Номенклатура. Я туда добавил. Все эти запросы строились при помощи конструктора запросов

   Rodya95

19 — 14.09.17 — 11:58

(16) Спасибо, помогло. теперь такая ошибка :D

Ошибка при выполнении обработчика — ‘ОбработкаПроведения’

по причине:

{Документ.РасходнаяНакладная.МодульОбъекта(119)}: Ошибка при вызове метода контекста (Выполнить)

                РезультатЗапроса = Запрос3.Выполнить();

по причине:

{(11, 2)}: Операция не разрешена в предложении «ГДЕ»

<<?>>ОстаткиТоваровОстатки.КоличествоОстаток

   Ёпрст

20 — 14.09.17 — 11:58

(18) а до того как, какие измерения там были ?

Ну так, на поржать

   h-sp

21 — 14.09.17 — 11:59

(18) ну то есть лично занимался дебилизмом? Называл поля «наименование»? А почему ты не назвал поле Номенклатуры, например «Сотрудник»? Или «Склад»?

   Ёпрст

22 — 14.09.17 — 11:59

(19)

//   |ГДЕ

//                    |    ОстаткиТоваровОстатки.КоличествоОстаток»;

   h-sp

23 — 14.09.17 — 12:00

(19) опана! у тебя еще и Количество типа Булево? Круто.

   catena

24 — 14.09.17 — 12:01

(11)Меня на это навело строка «РасходнаяНакладнаяПереченьНоменклатуры.Наименование.ВидНоменклатуры» из (6)

   Rodya95

25 — 14.09.17 — 12:02

(22) там есть точка с запятой, просто не скопировал

   Ёпрст

26 — 14.09.17 — 12:03

(25) Этот бред просто выкини из текста запроса.

   catena

27 — 14.09.17 — 12:04

(25)Это ГДЕ какой смысл несет лично в вашей вселенной?

   Rodya95

28 — 14.09.17 — 12:06

(23) я первый раз в 1с программирую) просто работу ищу и вот сказали сделать задание по результатам которого решат нанимать или нет)

   Ёпрст

29 — 14.09.17 — 12:08

(28) В задании, было сказано, спроектировать простой мини-учет ?

Тогда переписывай структуру регистров, ибо с тем, что в (0) — не возьмут.

   Ёпрст

30 — 14.09.17 — 12:09

Для начала, посмотри, как в любой типовой сделано.

   Rodya95

31 — 14.09.17 — 12:09

(26) Всё, спасибо большое, заработало)

Только я не понимаю почему не выходило, если конструктор запроса сам написал запрос, а все поля и таблицы были верно заполнены.

Делал я по учебнику Радченко и Хрусталева «1С Предприятие 8.3 Практическое пособие разработчика»

   1dvd

32 — 14.09.17 — 12:13

(28) ты им насвистел что опытный программист, типа?

  

Rodya95

33 — 14.09.17 — 12:14

(32) нет, им нужен начинающий программист со знанием основ на уровне университетской программы) при приеме сами будут обучать всему

Здравствуйте! Дали задание, а ошибку все не могу найти, второй день все переделываю и перепроверяю, а ошибка все вылезает. Ошибка следующая: Ошибка при выполнении обработчика — ‘ОбработкаПроведения’ по причине: {Документ.РасходнаяНакладная.МодульОбъекта}: Ошибка при вызове метода контекста (Выполнить)             РезультатЗапроса = Запрос2.Выполнить; по причине: {(15, 28)}: Поле не найдено «НоменклатураДокумента.Номенклатура»

Копируй текст запроса, вставь его в консоль запросов, проверь синтаксис кнопкой внизу справа.

Товар В(ВЫБРАТЬ                     НоменклатураДокумента.Номенклатура                     ИЗ                         НоменклатураДокумента)

А где сама временная таблица НоменклатураДокумента формируется? Покажите как делаете

Сама таблица то есть, а вот поля такого в ней нет

вот и похоже на то, поэтому и спрашиваю показать ее

вот временная таблица МенеджерВТ = Новый МенеджерВременныхТаблиц;

Я думаю, что все-так «.Наименование как Номенклатура»

ЧТО ЭТО? ОстаткиТоваровОстатки.Наименование

еще подумай, в регистре то, Товар не строка, а ссылка

Да, верно, уже нашел и исправил. Теперь появилась такая ошибка: Ошибка при выполнении обработчика — ‘ОбработкаПроведения’ по причине: {Документ.РасходнаяНакладная.МодульОбъекта}: Ошибка при вызове метода контекста (Выполнить)                 РезультатЗапроса = Запрос3.Выполнить; по причине: {(9, 15)}: Не задано значение параметра «Склад» И Склад = <<?>>&Склад) КАК ОстаткиТоваровОстатки Текст программы:

ну и вот тут, аутору тоже надо переделать: ЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки(,Номенклатура В( Врят ли есть там измерение Наименование в регистре.

а, нет, все таки ошибка была не там. Я исправил во втором запросе НоменклатураДокумента.Номенклатура на НоменклатураДокумента.Наименование

Запрос3.УстановитьПараметр(«Склад»,Склад);

чего верно ? У тя в регистре ОстаткиТоваров есть измерение Наименование ? И какого оно типа у тебя, и кто его туда добавил и зачем ?

Да, тип СправочникСсылка.Номенклатура. Я туда добавил. Все эти запросы строились при помощи конструктора запросов

Спасибо, помогло. теперь такая ошибка :D Ошибка при выполнении обработчика — ‘ОбработкаПроведения’ по причине: {Документ.РасходнаяНакладная.МодульОбъекта}: Ошибка при вызове метода контекста (Выполнить)                 РезультатЗапроса = Запрос3.Выполнить; по причине: {(11, 2)}: Операция не разрешена в предложении «ГДЕ» <<?>>ОстаткиТоваровОстатки.КоличествоОстаток

а до того как, какие измерения там были ? Ну так, на поржать

ну то есть лично занимался дебилизмом? Называл поля «наименование»? А почему ты не назвал поле Номенклатуры, например «Сотрудник»? Или «Склад»?

опана! у тебя еще и Количество типа Булево? Круто.

Меня на это навело строка «РасходнаяНакладнаяПереченьНоменклатуры.Наименование.ВидНоменклатуры» из

там есть точка с запятой, просто не скопировал

Этот бред просто выкини из текста запроса.

Это ГДЕ какой смысл несет лично в вашей вселенной?

я первый раз в 1с программирую) просто работу ищу и вот сказали сделать задание по результатам которого решат нанимать или нет)

В задании, было сказано, спроектировать простой мини-учет ? Тогда переписывай структуру регистров, ибо с тем, что в — не возьмут.

Для начала, посмотри, как в любой типовой сделано.

Всё, спасибо большое, заработало) Только я не понимаю почему не выходило, если конструктор запроса сам написал запрос, а все поля и таблицы были верно заполнены. Делал я по учебнику Радченко и Хрусталева «1С Предприятие 8.3 Практическое пособие разработчика»

ты им насвистел что опытный программист, типа?

нет, им нужен начинающий программист со знанием основ на уровне университетской программы) при приеме сами будут обучать всему

Тэги: 1С 8

Комментарии доступны только авторизированным пользователям

Расскажу как я правил расчетный листок в 8-ке в ЗУП-е для бюджетников. В одной организации есть такие доплаты, процент которых меняется перед каждым новым расчетом зарплаты и им понадобилось выводить проценты доплат в расчетных листках.

В процедуре НастроитьПостроительЗапросов() в большом запросе который там есть делаем поправки. К таблице ОсновныеНачисленияРаботниковОрганизации делаем ЛЕВОЕ СОЕДИНЕНИЕ такого вот вложенного запроса:

Добавляем в объединенный запрос поле «ХА_Процент»

И в последнем из пакетов запросов добавляем наше поле:

Если бы мы добавляли чего-либо в уже существующие поля данного запроса(как, например, я добавлял дополнительно отработнанные часы из показателя схем мотивации), то на этом можно было бы и завершить изменения. Но у нас новое поле и надо, естественно, править таблицу с выходной формой расчетного листка. Кроме того нужно подправить таблицу НачисленияУдержания в СКД. В данную таблицу прописываем наше новое поле «ХА_Процент».

Если попробуем запустить такой отчет на выполнение, то получим ошибку: «Отчет не сформирован! Не найдено поле замены ХА_Процент». Это потому, что в СКД мы новое поле описали, а в источнике данных такого поля нет. Источник данных — это талблица значений НачисленияУдержания, которая описывается в конце модуля отчета.
Там надо добавить:

И последний шаг. Нужно еще внести небольшие поправки в процедуру
ЗаполнитьВнешнийИсточникДанных(). Примерно вот здесь:

Ошибка при вызове метода контекста (Выполнить) — Поле не найдено

Поле не найдено СКДПолный текст ошибки

Исправление ошибки

Открыть схему компоновки данных и проверить все вкладки.

Ошибочное поле в диалоге выбора отображается с красным крестом (как удаленное)

Поле не найдено 1

Выбрать другое поле (возможно переименовано, либо добавить в исходную таблицу новое с таким именем).

Перевыбрать в последнем случае все равно придется, поскольку система их определяет по внутреннему скрытому идентификатору.

Реклама — узаконенная ложь.

— Герберт Уэллс

Почему не сохранялись настройки СКД с новым полем

Как я уже писал ранее, сделал клиенту в УТ отчет, где подменил схему компоновки данных. Все работало хорошо, но не сохранялись настройки в варианте.

Проявлялось это так — если в настройках добавить поле «Остаток», то отчет формировался. Если сохранить вариант, потом переключиться на другой, потом вернуться на сохраненный, поле тоже показывалось.

Но если закрыть отчет и открыть сохраненный вариант, поля не было.

Я предполагал, что разбирательства будут долгими, так оно и оказалось. Работы были гарантийными, но мне было интересно, в чем проблема. Так можно было просто подменить макет через расширение макета, но хотелось докопаться до истины.

Вообще, был интересен вопрос — вариант сохраняется криво, без моего поля или же при восстановлении варианта происходит сбой.

Сейчас я понимаю, что надо было просто проверить, есть ли поле в настройках компоновщика при компоновке отчета из сохраненного варианта.

Но я пошел другим путем, не самым быстрым.

Я сделал замер производительности при сохранении варианта и нашел, где создается схема компоновки данных:

И вот тут я увидел, что в тексте запроса компоновки нет поля «Остаток», который я добавил (смотрите табло внизу):

Я отладил и нашел, где создается объект отчета:

В итоге я решил добавить событие, чтобы при создании отчета обновлялась компоновка данных.

В модуле ВариантыОтчетов:

В модуле отчета ВыручкаИСебестоимостьПродаж:

После этого в компоновке появилось мое поле остаток:

Дальше я решил проверить, как загружаются настройки при открытии отчета, нашел вот эту функцию, где опять же создавался объект отчета, похоже со стандартной схемой компоновки (не измененной):

По стеку сложно было привязаться к каким либо событиям:

Поэтому я решил привязаться к событию ЗагрузитьНастройкиВКомпоновщик:

Код выглядел примерно так:

Однако почему-то ЗначениеВРеквизитФормы выдавало ошибку, ругаясь на второй параметр. В общем, отладка показала, что ничего в запросе схемы компоновки не меняется, он остается без поля остаток.

Но тут я все же отладил загрузку варианта. Чтобы отлаживать не в фоновом режиме, я использовал запуск 1С с параметром РежимОтладки.

Я обнаружил, что настройка варианта загружается нормально, т.е. в списке полей настройки есть поле Остаток. Т.е. все предыдущие доработки были зря, потому что и без них вариант сохранялся и загружался нормально.

Настройки пропадают где-то при формировании отчета в коде самого отчета:

Дальнейшая проверка показала, где пропадает настройка:

Вот в этом коде настройки корректные:

А вот в этом коде поля Остаток уже нет:

Я добавил строчку для подмены настроек и отчет сформировался корректно:

Но мне не нравилось, что приходится менять код отчета. Поэтому я немножко поэкспериментировал и обнаружил, как можно привести настройки в адекватное состояние.

По сути, проблема сохранения варианта решается одной дополнительной строчкой кода в расширении, вот она:

Почему сбоят настройки, т.е. почему ПолучитьНастройки и Настройки одного и того же объекта выдают разные значения, я так и не понял. Я пробовал и метод ВосстановитьНастройки и добавлял инициализацию настроек в компоновщике настроек после подмены схемы компоновки, ничего не помогло. Видимо, это фича 1С.

Ошибкой было еще предположение, что где-то схема используется не измененная, поэтому настройки не сохраняются. Нужно было проверить настройки при компоновке отчета, тогда бы я увидел, что они уже там правильные, но сбрасываются из-за этой фичи.

Дело в том, что 1С всегда вызывает событие перед загрузкой настроек отчета, а там уже моё изменение схемы есть. Поэтому я по сути большую часть времени потратил на поиски фантомной ошибки, которой на самом деле не было.

UPD 2021-08-15: Обратились пользователи, решение не работало — поле остаток сохранялось, но нельзя было поменять период отчета.

Разборки показали, что проблема в пользовательских настройках, именно они при старте отчета не содержат поля остаток.

Я попробовал так, но не помогло:

Поле ДоступныеНастройки.ПользовательскиеНастройки.Элементы[3].Элементы не содержит поле Остаток:

Похоже, что пользовательские настройки отчета были модифицированы ранее.

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

Поэтому нужно при создании формы отчета подменить схему компоновки.

Вот так заработало:

Но так не годится — это вмешательство в код.

Поэтому переношу код в расширение, таким образом, в расширении формы отчета достаточно такого кода (достаточно вызвать только при создании):

Ну и в расширении модуля отчета по валовой прибыли необходимый код такой:

Перед загрузкой настроек в компоновщик тоже надо обрабатывать, иначе не срабатывает.

Время факт: 3 час. Среда: УТ 11.4.13.46

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Ошибка при выполнении обработчика — ‘ОбработкаПроведения’
по причине:
{Документ.РасходнаяНакладная.МодульОбъекта(68)}: Ошибка при вызове метода контекста (Выполнить)
РезультатЗапроса = Запрос2.Выполнить();
по причине:
{(17, 28)}: Поле не найдено «НоменклатураДокумента.Номенклатура»
ПО НоменклатураДокумента.<<?>>Номенклатура = СтоимостьТоваровОстатки.Номенклатура

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

Движения.ОстаткиТоваров.Записывать = Истина;
Движения.СтоимостьТоваров.Записывать = Истина;
Движения.Продажи.Записывать = Истина;

//Менеджер временных таблиц
МенеджерВТ = Новый МенеджерВременныхТаблиц;

Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
Запрос.Текст =
«ВЫБРАТЬ
| РасходнаяНакладнаяТовары.Товар,
| РасходнаяНакладнаяТовары.Товар.ВидНоменклатуры КАК ВидНоменклатуры,
| СУММА(РасходнаяНакладнаяТовары.Количество) КАК КоличествоВДокументе,
| СУММА(РасходнаяНакладнаяТовары.Сумма) КАК СуммаВДокументе
|ПОМЕСТИТЬ НоменклатураДокумента
|ИЗ
| Документ.РасходнаяНакладная.Товары КАК РасходнаяНакладнаяТовары
|ГДЕ
| РасходнаяНакладнаяТовары.Ссылка = &Ссылка
|
|СГРУППИРОВАТЬ ПО
| РасходнаяНакладнаяТовары.Товар,
| РасходнаяНакладнаяТовары.Товар.ВидНоменклатуры»;

Запрос.УстановитьПараметр(«Ссылка», Ссылка);
РезультатЗапроса = Запрос.Выполнить();

Запрос2 = Новый Запрос;
Запрос2.МенеджерВременныхТаблиц = МенеджерВТ;
Запрос2.Текст =
«ВЫБРАТЬ
| НоменклатураДокумента.Номенклатура,
| НоменклатураДокумента.ВидНоменклатуры,
| НоменклатураДокумента.КоличествоВДокументе,
| НоменклатураДокумента.СуммаВДокументе,
| ЕСТЬNULL(СтоимостьТоваровОстатки.СтоимостьОстаток, 0) КАК Стоимость,
| ЕСТЬNULL(ОстаткиТоваровОстатки.КоличествоОстаток, 0) КАК Количество
|ИЗ
| НоменклатураДокумента КАК НоменклатураДокумента
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СтоимостьТоваров.Остатки(
| ,
| Номенклатура В
| (ВЫБРАТЬ
| НоменклатураДокумента.Номенклатура
| ИЗ
| НоменклатураДокумента)) КАК СтоимостьТоваровОстатки
| ПО НоменклатураДокумента.Номенклатура = СтоимостьТоваровОстатки.Номенклатура
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки(
| ,
| Номенклатура В
| (ВЫБРАТЬ
| НоменклатураДокумента.Номенклатура
| ИЗ
| НоменклатураДокумента)) КАК ОстаткиТоваровОстатки
| ПО НоменклатураДокумента.Номенклатура = ОстаткиТоваровОстатки.Номенклатура»;

Движения.СтоимостьТоваров.Записать();
Движения.ОстаткиТоваров.Записать();

РезультатЗапроса = Запрос2.Выполнить();

//ТЗ = РезультатЗапроса.Выгрузить();

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл

Если ВыборкаДетальныеЗаписи.Количество = 0 Тогда
СтоимостьТоваров = 0;
Иначе
СтоимостьТоваров = ВыборкаДетальныеЗаписи.Стоимость / ВыборкаДетальныеЗаписи.Количество;

КонецЕсли;

Если ВыборкаДетальныеЗаписи.ВидНоменклатуры = Перечисления.ВидНоменклатуры.Товар Тогда

Движение = Движения.ОстаткиТоваров.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;
Движение.Склад = Склад;
Движение.Количество = ВыборкаДетальныеЗаписи.Количество;

Движение = Движения.СтоимостьТоваров.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;
Движение.Стоимость = ВыборкаДетальныеЗаписи.СтоимостьТовара * ВыборкаДетальныеЗаписи.Количество;

КонецЕсли;

// Регистр Продажи
Движение = Движения.Продажи.Добавить();
Движение.Период = Дата;
Движение.Номенклатура = ВыборкаДетальныеЗаписи.Товар;
Движение.Количество = ВыборкаДетальныеЗаписи.КоличествоВДокументе;
Движение.Сумма = ВыборкаДетальныеЗаписи.СуммаВДокументе;
Движение.Стоимость = ВыборкаДетальныеЗаписи.СтоимостьТовара * ВыборкаДетальныеЗаписи.КоличествоВДокументе;

КонецЦикла;

Движения.Записать();

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

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

Запрос3.УстановитьПараметр(«Склад», Склад);

РезультатЗапроса = Запрос3.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Сообщение = Новый СообщениеПользователю();
Сообщение.Текст = «Не хватает » + Строка(- ВыборкаДетальныеЗаписи.КоличествоОстаток) + » единиц товара «»» + ВыборкаДетальныеЗаписи.Номенклатура + «»»»;
Сообщение.Сообщить();

Отказ = Истина;

КонецЦикла;

КонецЕсли;

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

Понравилась статья? Поделить с друзьями:
  • Ошибка при вызове метода контекста выполнить пакет
  • Ошибка при вызове метода контекста вставить область
  • Ошибка при вызове метода контекста выполнить ошибка выполнения запроса
  • Ошибка при вызове метода контекста вставить недопустимое значение параметров
  • Ошибка при вызове метода контекста выполнить ожидается выражение выбрать