Имя: Пароль:
1C
1С v8
Не записывается движения документа
0 Zeratul
 
19.12.11
17:05
Всем привет! Заранее извиняюсь за глупый вопрос...
Не записывается вот эта проводка...все реквизиты находятся в шапке документа...что я делаю не так???

Процедура ОбработкаПроведения(Отказ, РежимПроведения)
   Движения.Хозрасчетный.Записывать = Истина;
   Движения.Хозрасчетный.Очистить();
   
   
     Сч_20_3 = ПланыСчетов.Хозрасчетный.НайтиПоКоду("20.03");

   ДвижениеШапка = Движения.Хозрасчетный.Добавить();
   ДвижениеШапка.Период = Дата;
   ДвижениеШапка.СчетДт = Сч_20_3;
   БухгалтерскийУчет.УстановитьСубконто(ДвижениеШапка.СчетДт,ДвижениеШапка.СубконтоДт,Субконто1.Родитель.Метаданные().Имя,Субконто1);
   БухгалтерскийУчет.УстановитьСубконто(ДвижениеШапка.СчетДт,ДвижениеШапка.СубконтоДт,Субконто2.Родитель.Метаданные().Имя,Субконто2);
   ДвижениеШапка.ПодразделениеДт = Субконто3.Ссылка;
   
   Номенклатура = ПродукцияПущена.Ссылка;
   
   МассивНоменклатура     = Новый Массив();
   МассивНоменклатура.Добавить(Номенклатура);
   
   ТестЗапрос = Новый Запрос();
   ТестЗапрос.УстановитьПараметр("Номенклатура",МассивНоменклатура);
   ТестЗапрос.Текст =
   "ВЫБРАТЬ РАЗРЕШЕННЫЕ
   |    СчетаУчетаНоменклатуры.Организация КАК Организация,
   |    СчетаУчетаНоменклатуры.Номенклатура КАК Номенклатура,
   |    СчетаУчетаНоменклатуры.Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
   |    СчетаУчетаНоменклатуры.Склад КАК Склад,
   |    СчетаУчетаНоменклатуры.ТипСклада КАК ТипСклада,
   |    СчетаУчетаНоменклатуры.СчетУчета КАК СчетУчета,
   |    СчетаУчетаНоменклатуры.СчетУчетаПередачи КАК СчетУчетаПередачи,
   |    СчетаУчетаНоменклатуры.СчетДоходовОтРеализации КАК СчетДоходовОтРеализации,
   |    СчетаУчетаНоменклатуры.СчетРасходовОтРеализации КАК СчетРасходовОтРеализации,
   |    СчетаУчетаНоменклатуры.СчетУчетаНДСПоПриобретеннымЦенностям КАК СчетУчетаНДСПоПриобретеннымЦенностям,
   |    СчетаУчетаНоменклатуры.СчетУчетаНДСПоРеализации КАК СчетУчетаНДСПоРеализации,
   |    СчетаУчетаНоменклатуры.СчетУчетаНДСУплаченногоНаТаможне КАК СчетУчетаНДСУплаченногоНаТаможне,
   |    СчетаУчетаНоменклатуры.Субконто1 КАК Субконто1,
   |    СчетаУчетаНоменклатуры.Субконто2 КАК Субконто2,
   |    СчетаУчетаНоменклатуры.Субконто3 КАК Субконто3
   |ИЗ
   |    РегистрСведений.СчетаУчетаНоменклатуры КАК СчетаУчетаНоменклатуры
   |ГДЕ
   |    СчетаУчетаНоменклатуры.Номенклатура В(&Номенклатура)";
   
   ТаблицаЗапроса = ТестЗапрос.Выполнить().Выгрузить();
   
   Для каждого Строка из ТаблицаЗапроса Цикл
       СчетУчетаНоменклатурыШапка = Строка.СчетУчета;    
   КонецЦикла;
   ДвижениеШапка.СчетКт = СчетУчетаНоменклатурыШапка;
   БухгалтерскийУчет.УстановитьСубконто(ДвижениеШапка.СчетКт,ДвижениеШапка.СубконтоКт,ПродукцияПущена.Родитель.Метаданные().Имя, ПродукцияПущена);
   БухгалтерскийУчет.УстановитьСубконто(ДвижениеШапка.СчетКт,ДвижениеШапка.СубконтоКт,СкладОтправитель.Родитель.Метаданные().Имя,СкладОтправитель);
   ДвижениеШапка.КоличествоДт = КоличествоПущено; //внимательно
   
   Запрос =  Новый Запрос;
   Запрос.УстановитьПараметр("НачПериода",Дата);
   Запрос.УстановитьПараметр("КонПериода",Дата);
   Счет = СчетУчетаНоменклатурыШапка;
   НоменклатураСсылка = ПродукцияПущена.Ссылка;
   Запрос.УстановитьПараметр("Счет",Счет);
   Запрос.УстановитьПараметр("Ссылка",НоменклатураСсылка);
   Запрос.Текст =
   "ВЫБРАТЬ
   |    ХозрасчетныйОстаткиИОбороты.Счет КАК Счет,
   |    ХозрасчетныйОстаткиИОбороты.Субконто1 КАК Субконто1,
   |    ХозрасчетныйОстаткиИОбороты.Субконто2 КАК Субконто2,
   |    ХозрасчетныйОстаткиИОбороты.Организация КАК Организация,
   |    ХозрасчетныйОстаткиИОбороты.КоличествоначальныйОстатокДт КАК КоличествоначальныйОстатокДт,
   |    ХозрасчетныйОстаткиИОбороты.СуммаНачальныйОстатокДт КАК СуммаНачальныйОстатокДт
   |ИЗ
   |    РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&НачПериода, &КонПериода, , , , , ) КАК ХозрасчетныйОстаткиИОбороты
   |ГДЕ
   |    ХозрасчетныйОстаткиИОбороты.Счет = &Счет
   |    И ХозрасчетныйОстаткиИОбороты.Субконто1 = &Ссылка
   |    И ХозрасчетныйОстаткиИОбороты.СуммаНачальныйОстатокДт > 0 ";
   
   Результат = запрос.Выполнить().Выбрать();
   Пока результат.Следующий() Цикл
       СредняяСтоимость = результат.СуммаНачальныйОстатокДт/результат.КоличествоначальныйОстатокДт;
   КонецЦикла;    
   Если СредняяСтоимость > 0 Тогда
       ДвижениеШапка.Сумма = Окр(КоличествоПущено * СредняяСтоимость,2);
   Иначе
       Предупреждение("Средняя стоимость номенклатуры -"+ ПродукцияПущена.Наименование +" равна 0!");
       Отказ = Истина;
       Возврат;
   КонецЕсли;
   ДвижениеШапка.Содержание = "Передана продукция";
   Движения.Записать();
1 Zeratul
 
19.12.11
17:05
Вот полный код процедуры


Процедура ОбработкаПроведения(Отказ, РежимПроведения)
   Движения.Хозрасчетный.Записывать = Истина;
   Движения.Хозрасчетный.Очистить();
   
   
     Сч_20_3 = ПланыСчетов.Хозрасчетный.НайтиПоКоду("20.03");

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

   
   
   
   
   
   
   Для Каждого ТекСтрокаТаблицаПродукции Из ТаблицаПродукции Цикл
       ДвижениеТч = Движения.Хозрасчетный.Добавить();
       ДвижениеТч.Период = Дата;
       
       НоменклатураТч = ТекСтрокаТаблицаПродукции.Номенклатура.Ссылка;
       
       МассивНоменклатураТч     = Новый Массив();
       МассивНоменклатураТч.Добавить(НоменклатураТч);
       
       ТестЗапрос = Новый Запрос();
       ТестЗапрос.УстановитьПараметр("НоменклатураТЧ",       МассивНоменклатураТч);
       ТестЗапрос.Текст =
       "ВЫБРАТЬ
       |    СчетаУчетаНоменклатуры.Организация КАК Организация,
       |    СчетаУчетаНоменклатуры.Номенклатура КАК Номенклатура,
       |    СчетаУчетаНоменклатуры.Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
       |    СчетаУчетаНоменклатуры.Склад КАК Склад,
       |    СчетаУчетаНоменклатуры.ТипСклада КАК ТипСклада,
       |    СчетаУчетаНоменклатуры.СчетУчета КАК СчетУчета,
       |    СчетаУчетаНоменклатуры.СчетУчетаПередачи КАК СчетУчетаПередачи,
       |    СчетаУчетаНоменклатуры.СчетДоходовОтРеализации КАК СчетДоходовОтРеализации,
       |    СчетаУчетаНоменклатуры.СчетРасходовОтРеализации КАК СчетРасходовОтРеализации,
       |    СчетаУчетаНоменклатуры.СчетУчетаНДСПоПриобретеннымЦенностям КАК СчетУчетаНДСПоПриобретеннымЦенностям,
       |    СчетаУчетаНоменклатуры.СчетУчетаНДСПоРеализации КАК СчетУчетаНДСПоРеализации,
       |    СчетаУчетаНоменклатуры.СчетУчетаНДСУплаченногоНаТаможне КАК СчетУчетаНДСУплаченногоНаТаможне,
       |    СчетаУчетаНоменклатуры.Субконто1 КАК Субконто1,
       |    СчетаУчетаНоменклатуры.Субконто2 КАК Субконто2,
       |    СчетаУчетаНоменклатуры.Субконто3 КАК Субконто3
       |ИЗ
       |    РегистрСведений.СчетаУчетаНоменклатуры КАК СчетаУчетаНоменклатуры
       |ГДЕ
       |    СчетаУчетаНоменклатуры.Номенклатура В(&НоменклатураТЧ)";
       ТаблицаЗапроса = ТестЗапрос.Выполнить().Выгрузить();
       
       Для каждого СтрокаТЧ из ТаблицаЗапроса Цикл
           СчетУчетаНоменклатурыТч = СтрокаТЧ.СчетУчета;    
       КонецЦикла;
       
       Если ЗначениеЗаполнено(СчетУчетаНоменклатурыТч) Тогда
           ДвижениеТч.СчетДт = СчетУчетаНоменклатурыТч;
       Иначе
           Предупреждение("Укажите счет учета для номенклатуры - "+НоменклатураТч.Наименование);
           Отказ = Истина;
           Возврат;
           
       КонецЕсли;    
       БухгалтерскийУчет.УстановитьСубконто(ДвижениеТч.СчетДт,ДвижениеТч.СубконтоДт,ТекСтрокаТаблицаПродукции.Номенклатура.Родитель.Метаданные().Имя,ТекСтрокаТаблицаПродукции.Номенклатура);
       БухгалтерскийУчет.УстановитьСубконто(ДвижениеТч.СчетДт,ДвижениеТч.СубконтоДт,СкладПолучатель.Родитель.Метаданные().Имя,СкладПолучатель);
       ДвижениеТч.КоличествоДт = ТекСтрокаТаблицаПродукции.Количество;
       ДвижениеТч.КоличествоКт = ТекСтрокаТаблицаПродукции.Количество;
       ДвижениеТч.СчетКт = Сч_20_3;
       БухгалтерскийУчет.УстановитьСубконто(ДвижениеТч.СчетКт,ДвижениеТч.СубконтоКт,Субконто1.Родитель.Метаданные().Имя,Субконто1);
       БухгалтерскийУчет.УстановитьСубконто(ДвижениеТч.СчетКт,ДвижениеТч.СубконтоКт,СтатьяВыходаПродукции.Родитель.Метаданные().Имя,СтатьяВыходаПродукции);
       ДвижениеТч.ПодразделениеКт = Субконто3;
       
       //запрос по ценам номенклатуры
       ДатаЦены = Дата;
       СсылкаНомен = ТекСтрокаТаблицаПродукции.Номенклатура;
       Запрос = Новый Запрос();
       Запрос.УстановитьПараметр("Период", ДатаЦены);
       Запрос.УстановитьПараметр("Ссылка", СсылкаНомен);
       
       Запрос.Текст =
       "ВЫБРАТЬ
       |    ТипыЦенНоменклатуры.Ссылка КАК ТипЦен,
       |    ЦеныНоменклатурыСрезПоследних.Цена,
       |    ЛОЖЬ КАК Записать,
       |    ВЫБОР КОГДА ЦеныНоменклатурыСрезПоследних.Валюта ЕСТЬ NULL ТОГДА
       |            ТипыЦенНоменклатуры.ВалютаЦены
       |          ИНАЧЕ
       |            ЦеныНоменклатурыСрезПоследних.Валюта
       |          КОНЕЦ КАК Валюта,
       |    ВЫБОР КОГДА ЦеныНоменклатурыСрезПоследних.Регистратор ЕСТЬ NULL ТОГДА
       |            МАКСИМУМ(ЦеныНоменклатурыСрезПоследних1.Регистратор)
       |          ИНАЧЕ
       |            ЦеныНоменклатурыСрезПоследних.Регистратор
       |          КОНЕЦ КАК Документ
       |ИЗ
       |    Справочник.ТипыЦенНоменклатуры КАК ТипыЦенНоменклатуры
       |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период, Номенклатура = &Ссылка) КАК ЦеныНоменклатурыСрезПоследних
       |        ПО ЦеныНоменклатурыСрезПоследних.ТипЦен = ТипыЦенНоменклатуры.Ссылка
       |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Период, ) КАК ЦеныНоменклатурыСрезПоследних1
       |        ПО ЦеныНоменклатурыСрезПоследних1.ТипЦен = ТипыЦенНоменклатуры.Ссылка
       |
       |СГРУППИРОВАТЬ ПО
       |    ТипыЦенНоменклатуры.Ссылка,
       |    ЦеныНоменклатурыСрезПоследних.Цена,
       |    ЦеныНоменклатурыСрезПоследних.Валюта,
       |    ЦеныНоменклатурыСрезПоследних.Регистратор";
       
       ЦеныНоменклатуры = Запрос.Выполнить().Выбрать();
       Пока ЦеныНоменклатуры.Следующий() Цикл
           ПлановаяСтоимость = ЦеныНоменклатуры.Цена;    
       КонецЦикла;
       Если ЗначениеЗаполнено(ПлановаяСтоимость) Тогда
           ДвижениеТч.Сумма =Окр(ТекСтрокаТаблицаПродукции.Количество*ПлановаяСтоимость,2);
       Иначе
           Предупреждение("Не указана цена для номенклатуры - "+ТекСтрокаТаблицаПродукции.Номенклатура.Наименование);
           Отказ = Истина;
           Возврат;
       КонецЕсли;
       ДвижениеТч.Организация = Организация;
       ДвижениеТч.Содержание = "Перемещена продукция";
       //Движения.Записать();
   КонецЦикла;
КонецПроцедуры
2 Zeratul
 
19.12.11
17:06
То что находится ТЧ делает движения
3 Zeratul
 
19.12.11
17:31
ап ап
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.