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

Остатки на 41 счете

Автор Chuchi, 23 апр 2011, 14:36

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

Chuchi

Продолжаю мучать обработку на форме которой существуют поля
Организация 1
Организация 2
Контрагент
и табличное поле с реквизитами
Номенклатура
Количество
Необходимо получить остатки из регистраБухгалтерии.Хозяйственный по счету 41

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

   Сообщить ("Номенклатура" + ВыборкаРезультатаЗапроса.НоменклатураНаименование + " кол. " + ВыборкаРезультатаЗапроса.КоличествоОстаток);
КонецЦикла;


Но появляется сообщение что параметр Номенклатуры не определен..
я ведь выгружаю колонку

chuevsf

Запрос.УстановитьПараметр("Номенклатура",ЭлементыФормы.Товары.Значение.ВыгрузитьКолонку("Номенклатура"));

Эта срока точно правильная?

Ее надо поместить сразу после Запрос = Новый Запрос;
А то у вас фигня получается. Сначала делаете выборку, а только потом указываете параметр....

И самое интересное, что 1С точно указывает Вам на Вашу ошибку, но Вы ее не увидели до конца.

И еще я не понял. А зачем две строки:  ВыборкаРезультатаЗапроса = Запрос.Выполнить().Выбрать();
Ведь вполне достаточно одной.

Chuchi


Chuchi

(((
ну вот и проблемы начались

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

Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДата());
Запрос.УстановитьПараметр("Номенклатура",ЭлементыФормы.Товары.Значение.ВыгрузитьКолонку("Номенклатура"));
Запрос.УстановитьПараметр("организация1", организация1);
//***********Создание Реализации**************
ВыборкаРезультатаЗапроса = Запрос.Выполнить().Выбрать();
док = документы.РеализацияТоваровУслуг.СоздатьДокумент();
Док.Организация = Организация1;
Док.Дата=ТекущаяДата();
мВалютаРегламентированногоУчета = Неопределено;
РаботаСДиалогами.ПриИзмененииЗначенияДатыДокумента(Док, мВалютаРегламентированногоУчета);   
Док.Склад = Организация1.ОсновнойСклад;
Док.Контрагент=Контрагент3;
мСписокВидовДоговоров=Неопределено;
ЗаполнениеДокументов.ПриИзмененииЗначенияКонтрагента(Док,мСписокВидовДоговоров);
Док.ТипЦен=Цена2;
Док.ВалютаДокумента=Справочники.Валюты.НайтиПоКоду("643");
Док.СпособЗачетаАвансов = Перечисления.СпособыЗачетаАвансов.Автоматически;
Док.ЗаполнитьСчетаУчетаРасчетов();
//***************Цикл первого запроса*****************
Пока    ВыборкаРезультатаЗапроса.Следующий()Цикл
Сообщить ("Номенклатура " + ВыборкаРезультатаЗапроса.НоменклатураНаименование + " кол. " + ВыборкаРезультатаЗапроса.КоличествоОстаток);
Остаток1 = ВыборкаРезультатаЗапроса.КоличествоОстаток;
        Если ЭлементыФормы.Товары.ТекущиеДанные.Количество  > Остаток1 Тогда;
Разница=    (ЭлементыФормы.Товары.ТекущиеДанные.Количество - Остаток1);
Разница=Макс(Разница, -Разница);
Иначе
Док.Товары.Загрузить(Номенклатура.Выгрузить());
Для каждого СтрокаТЧ из Док.Товары цикл
СчетаУчета     = БухгалтерскийУчет.ПолучитьСчетаУчетаНоменклатуры(Док.Организация, СтрокаТЧ.Номенклатура, Док.Склад);
//СчетаРозницы   = (Склад.ВидСклада = Перечисления.ВидыСкладов.Розничный);
ЭтоКомиссия    = (Док.ДоговорКонтрагента.ВидДоговора = Перечисления.ВидыДоговоровКонтрагентов.СКомиссионером);
МетаданныеДока = Док.Метаданные();
Док.ЗаполнитьСчета(СтрокаТЧ, "Товары", СчетаУчета, Истина, ЭтоКомиссия, МетаданныеДока);
// Заполняем реквизиты табличной части.
ОбработкаТабличныхЧастей.ЗаполнитьСтавкуНДСТабЧасти(СтрокаТЧ, Док);
// Заполнение цены 
ОбработкаТабличныхЧастей.ЗаполнитьЕдиницуЦенуПродажиТабЧасти(СтрокаТЧ, Док, мВалютаРегламентированногоУчета);
ОбработкаТабличныхЧастей.РассчитатьСуммуТабЧасти(СтрокаТЧ, Док);
ОбработкаТабличныхЧастей.РассчитатьСуммуНДСТабЧасти(СтрокаТЧ, Док);
КонецЦикла;
Док.Записать(РежимЗаписиДокумента.Проведение) ;
КонецЕсли;
КонецЦикла;

Док.Печать("ТОРГ12");
ДокСч=Документы.СчетФактураВыданный.СоздатьДокумент();
ДокСч.Организация=Организация1;
ДокСч.Дата=ТекущаяДата();
ДокСч.Контрагент=Контрагент3;
мСписокВидовДоговоров=Неопределено;
ЗаполнениеДокументов.ПриИзмененииЗначенияКонтрагента(ДокСч,мСписокВидовДоговоров);
строка12 = ДокСч.ДокументыОснования.Добавить();
строка12.ДокументОснование = док.Ссылка;
ДокСч.ВалютаДокумента=Справочники.Валюты.НайтиПоКоду("643");
ДокСч.Записать(РежимЗаписиДокумента.Проведение);
ДокСч.Печать("СчетФактура");
КонецПроцедуры


Пишет что не может провести реализацию

{Форма.Форма.Форма(57)}: Ошибка при вызове метода контекста (Записать)
         Док.Записать(РежимЗаписиДокумента.Проведение) ;
по причине:

по причине:
Не удалось провести: "Реализация товаров и услуг"!

Chuchi

( и не заполняет вовсе реализацию..

chuevsf

А может еще раз внимательно посмотреть код?

Chuchi

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

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

Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДата());
Запрос.УстановитьПараметр("Номенклатура",ЭлементыФормы.Товары.Значение.ВыгрузитьКолонку("Номенклатура"));
Запрос.УстановитьПараметр("организация1", организация1);
ВыборкаРезультатаЗапроса = Запрос.Выполнить().Выбрать();
//***************Цикл первого запроса*****************
Пока    ВыборкаРезультатаЗапроса.Следующий()Цикл
Остаток1 = ВыборкаРезультатаЗапроса.КоличествоОстаток;
Сообщить ("Номенклатура " + ВыборкаРезультатаЗапроса.НоменклатураНаименование + " кол. " + ВыборкаРезультатаЗапроса.КоличествоОстаток);
Если ЭлементыФормы.Товары.ТекущиеДанные.Количество  > Остаток1 Тогда;
Разница=    (ЭлементыФормы.Товары.ТекущиеДанные.Количество - Остаток1);
Разница=Макс(Разница, -Разница);
Иначе
док= документы.РеализацияТоваровУслуг.СоздатьДокумент();
Док.Организация=ЭлементыФормы.Организация1;
Док.Контрагент=элементыФормы.Контрагент3;
мВалютаРегламентированногоУчета = Неопределено;
РаботаСДиалогами.ПриИзмененииЗначенияДатыДокумента(Док, мВалютаРегламентированногоУчета);
Док.Дата=ТекущаяДата();
мСписокВидовДоговоров=Неопределено;
ЗаполнениеДокументов.ПриИзмененииЗначенияКонтрагента(Док,мСписокВидовДоговоров);
Док.ТипЦен=Цена2;
Док.ВалютаДокумента=Справочники.Валюты.НайтиПоКоду("643");
Док.СпособЗачетаАвансов = Перечисления.СпособыЗачетаАвансов.Автоматически;
Док.ЗаполнитьСчетаУчетаРасчетов();
Док.Товары.Загрузить(Номенклатура.Выгрузить());
Для каждого СтрокаТЧ из Док.Товары цикл
СчетаУчета     = БухгалтерскийУчет.ПолучитьСчетаУчетаНоменклатуры(Док.Организация, СтрокаТЧ.Номенклатура, Док.Склад);
//СчетаРозницы   = (Склад.ВидСклада = Перечисления.ВидыСкладов.Розничный);
ЭтоКомиссия    = (Док.ДоговорКонтрагента.ВидДоговора = Перечисления.ВидыДоговоровКонтрагентов.СКомиссионером);
МетаданныеДока = Док.Метаданные();
Док.ЗаполнитьСчета(СтрокаТЧ, "Товары", СчетаУчета, Истина, ЭтоКомиссия, МетаданныеДока);
// Заполняем реквизиты табличной части.
ОбработкаТабличныхЧастей.ЗаполнитьСтавкуНДСТабЧасти(СтрокаТЧ, Док);
// Заполнение цены 
ОбработкаТабличныхЧастей.ЗаполнитьЕдиницуЦенуПродажиТабЧасти(СтрокаТЧ, Док, мВалютаРегламентированногоУчета);
ОбработкаТабличныхЧастей.РассчитатьСуммуТабЧасти(СтрокаТЧ, Док);
ОбработкаТабличныхЧастей.РассчитатьСуммуНДСТабЧасти(СтрокаТЧ, Док);
КонецЦикла;

Док.Записать(РежимЗаписиДокумента.Проведение) ;
КонецЕсли;
КонецЦикла;


Результат в сообщении
Номенклатура Конфеты "Каракум" кол. 20
Проведение документа "Реализация товаров и услуг 00000000016 от 23.04.2011 19:21:30":
Не заполнено значение реквизита "Организация"!
Не заполнено значение реквизита "Контрагент"!
Не заполнено значение реквизита "Договор контрагента"!
Не заполнено значение реквизита "Склад"!

А ВЕДЬ Я ИХ ЗАПОЛНЯЮ

Chuchi

Номенклатура это список выбранных в форме

Chuchi

Док.Организация=ЭлементыФормы.Организация1.Значение;
Док.Контрагент=элементыФормы.Контрагент3.Значение;
это сработало из за того что это внешняя обработка?

Chuchi

Да справочник.ссылка)

Теги:

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

Рейтинг@Mail.ru

Поиск