Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
12 дек 2024, 16:51

Проведение документа

Автор newprog, 22 июн 2014, 07:06

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

newprog

Добрый день.
Задали такую задачку:
1. Есть Справочник.Реактивы
2. Документы.Анализы, в табличной части Реактивы и Количество (документ просто записывается, движения по остаткам не производит)
3. Документы.Расход, в табличной части - ДокументСсылка.Анализы и КолАнализы (производит движение по остаткам)

Сделал обработку проведения:

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

Для Каждого ТекСтрокаТабДок Из ТабДок Цикл
   
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Анализы.Реактивы.(
| Реактивы,
| Количество
| )
|ИЗ
| Документ.Анализы КАК Анализы";

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

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

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Движения.ОстаткиРеактивов.Записывать = Истина;
Движение = Движения.ОстаткиРеактивов.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Количество = ТекСтрокаТабДок.КолАнализы * Выборка.Количество;
Движение.Реактивы = Выборка.Реактивы;
КонецЦикла;
    КонецЦикла;

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


Документ "проводится", ошибок не выдает, но и движения по остаткам не происходит.
1с Предприятие 8.2

GRADUS

Что конкретно там делает ТабДок и запрос?

DmitriyF

Цитата: newprog от 22 июн 2014, 07:06
Добрый день.
Задали такую задачку:
1. Есть Справочник.Реактивы
2. Документы.Анализы, в табличной части Реактивы и Количество (документ просто записывается, движения по остаткам не производит)
3. Документы.Расход, в табличной части - ДокументСсылка.Анализы и КолАнализы (производит движение по остаткам)

Сделал обработку проведения:

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

Для Каждого ТекСтрокаТабДок Из ТабДок Цикл
   
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Анализы.Реактивы.(
| Реактивы,
| Количество
| )
|ИЗ
| Документ.Анализы КАК Анализы";

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

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

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Движения.ОстаткиРеактивов.Записывать = Истина;
Движение = Движения.ОстаткиРеактивов.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Количество = ТекСтрокаТабДок.КолАнализы * Выборка.Количество;
Движение.Реактивы = Выборка.Реактивы;
КонецЦикла;
    КонецЦикла;

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


Документ "проводится", ошибок не выдает, но и движения по остаткам не происходит.
1с Предприятие 8.2
Для чего запрос если и так уже таблицу по циклу обходите? И естественно ищем ошибку в запросе.

andryscha92

в цикле использовать запрос - плохое правило. Выберите все нужные данные запросом и загрузите в регистр ОстаткиРеактивов.

Snaky

Цитата: newprog от 22 июн 2014, 07:06
Добрый день.
Задали такую задачку:
1. Есть Справочник.Реактивы
2. Документы.Анализы, в табличной части Реактивы и Количество (документ просто записывается, движения по остаткам не производит)
3. Документы.Расход, в табличной части - ДокументСсылка.Анализы и КолАнализы (производит движение по остаткам)

Сделал обработку проведения:

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

Для Каждого ТекСтрокаТабДок Из ТабДок Цикл
   
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Анализы.Реактивы.(
| Реактивы,
| Количество
| )
|ИЗ
| Документ.Анализы КАК Анализы";

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

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

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Движения.ОстаткиРеактивов.Записывать = Истина;
Движение = Движения.ОстаткиРеактивов.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Количество = ТекСтрокаТабДок.КолАнализы * Выборка.Количество;
Движение.Реактивы = Выборка.Реактивы;
КонецЦикла;
    КонецЦикла;

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


Документ "проводится", ошибок не выдает, но и движения по остаткам не происходит.
1с Предприятие 8.2
Запрос возвращает то что Вам нужно???

wise

Цитата: Snaky от 23 июн 2014, 10:37ошибок не выдает
ВОТ ошибка: {Выборка.Количество}
ОТКУДА программа знает, что такое {"Выборка"} ??
Представьте себе, какая была бы тишина, если бы люди говорили только то, что знают

newprog

Все оказалось проще:
&НаСервере
Процедура ОбработкаПроведения(Отказ, Режим)

Для Каждого ТекСтрокаТабДок Из ТабДок Цикл

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| АнализыРеактивы.Реактивы КАК Реактивы,
| АнализыРеактивы.Количество КАК Количество
|ИЗ
| Справочник.Анализы.ТабДок КАК АнализыРеактивы
            |ГДЕ ссылка = &Спр";                                   
Запрос.УстановитьПараметр("Спр", ТекСтрокаТабДок.Анализы);
Результат = Запрос.Выполнить();

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

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Движение = Движения.ОстаткиРеактивов.ДобавитьРасход();
Движение.Период = Дата;
Движение.Количество = ТекСтрокаТабДок.КолАнализы * ВыборкаДетальныеЗаписи.Количество;
Движение.Реактивы = ВыборкаДетальныеЗаписи.Реактивы;

КонецЦикла;

КонецЦикла;
   
КонецПроцедуры



Анализы сделал в виде справочника.

GRADUS

Цитата: newprog от 06 июл 2014, 03:48
Все оказалось проще:
&НаСервере
Процедура ОбработкаПроведения(Отказ, Режим)

Для Каждого ТекСтрокаТабДок Из ТабДок Цикл

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| АнализыРеактивы.Реактивы КАК Реактивы,
| АнализыРеактивы.Количество КАК Количество
|ИЗ
| Справочник.Анализы.ТабДок КАК АнализыРеактивы
            |ГДЕ ссылка = &Спр";                                   
Запрос.УстановитьПараметр("Спр", ТекСтрокаТабДок.Анализы);
Результат = Запрос.Выполнить();

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

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Движение = Движения.ОстаткиРеактивов.ДобавитьРасход();
Движение.Период = Дата;
Движение.Количество = ТекСтрокаТабДок.КолАнализы * ВыборкаДетальныеЗаписи.Количество;
Движение.Реактивы = ВыборкаДетальныеЗаписи.Реактивы;

КонецЦикла;

КонецЦикла;
   
КонецПроцедуры



Анализы сделал в виде справочника.

Еще раз, для чего тебе запрос, что конкретно ты от него хочешь?
П.С. Запросы в циклах делать запрещено.
Добавлено: 06 июл 2014, 05:39


Короче, нет времени объяснять, пиши так:

&НаСервере
Процедура ОбработкаПроведения(Отказ, Режим)
           
    Для Каждого ТекСтрокаТабДок Из ТабДок Цикл
            Движение = Движения.ОстаткиРеактивов.ДобавитьРасход();
            Движение.Период = Дата;
            ЗаполнитьЗначениеСвойств(Движение,ТекСтрокаТабДок.Анализы);
    КонецЦикла;
       
КонецПроцедуры


Есть разница?
Добавлено: 06 июл 2014, 05:41


И откуда там взялась директива &НаСервере ???

newprog

Цитата: GRADUS от 06 июл 2014, 05:36
Короче, нет времени объяснять, пиши так:
&НаСервере
Процедура ОбработкаПроведения(Отказ, Режим)
           
    Для Каждого ТекСтрокаТабДок Из ТабДок Цикл
            Движение = Движения.ОстаткиРеактивов.ДобавитьРасход();
            Движение.Период = Дата;
            ЗаполнитьЗначениеСвойств(Движение,ТекСтрокаТабДок.Анализы);
    КонецЦикла;
       
КонецПроцедуры


Есть разница?
Есть, движение по остаткам реактивов не происходит.

Цитата: GRADUS от 06 июл 2014, 05:36
И откуда там взялась директива &НаСервере ???
А вот без этого тоже работает )

1С только начал изучать, поэтому многое делаю конструкторами и не до конца понимаю некоторые части кода.

П.С. запрос перебирает табличную часть Справочник.Анализы, которые указаны в Документы.Расход.

GRADUS

Цитата: newprog от 06 июл 2014, 07:50
Есть, движение по остаткам реактивов не происходит.

Ахринеть как сложно "Количество" добавить ....

Теги:

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

Рейтинг@Mail.ru

Поиск