Имя: Пароль:
1C
1С v8
Перенос остатков по счету в Операцию
0 dft2014
 
20.07.17
13:55
БП 3.0

Подскажите, что не так с кодом? Пытаюсь перенести кредитовые остатки с одного счета на другой - в документ "Операция" но при записи выдает ошибку.

Ниже код:


&НаСервере
Процедура ПереносНаСервере()
    
    ДатаОпераций = ТекущаяДата();
    
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |    ХозрасчетныйОстатки.Субконто1,
    |    ХозрасчетныйОстатки.Субконто2,
    |    ХозрасчетныйОстатки.Субконто3 КАК ДокументРасчетов,
    |    ХозрасчетныйОстатки.СуммаОстатокКт КАК Сумма
    |ИЗ
    |    РегистрБухгалтерии.Хозрасчетный.Остатки(&Период, Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ПрочиеРасчетыСРазнымиДебиторамиИКредиторами), , ) КАК ХозрасчетныйОстатки
    |ГДЕ
    |    ХозрасчетныйОстатки.СуммаОстатокКт > 0";
    Запрос.УстановитьПараметр("Период", ДатаОпераций);
    
    Попытка
        НачатьТранзакцию();
        Операция = Документы.ОперацияБух.СоздатьДокумент();
        Операция.Дата = ДатаОпераций;
        Операция.Содержание = "ТЕСТ: перенос кредитового остатка со счета 76.09" + ДатаОпераций;
        Операция.Организация = Справочники.Организации.НайтиПоКоду("000000001");
        Операция.Ответственный = ПараметрыСеанса.ТекущийПользователь;
        Операция.Записать(РежимЗаписиДокумента.Запись);
        
        НаборЗаписей = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
        НаборЗаписей.Отбор.Регистратор.Установить(Операция.Ссылка);
        НаборЗаписей.Прочитать();
        
        Выборка = Запрос.Выполнить().Выбрать();
        Если Выборка.Следующий() Тогда
            
            НСтрока = НаборЗаписей.Добавить();
            НСтрока.Регистратор = Операция.Ссылка;
            НСтрока.Период = ДатаОпераций;
            НСтрока.Организация = Операция.Организация;
            
            НСтрока.СчетДт = ПланыСчетов.Хозрасчетный.ПрочиеРасчетыСРазнымиДебиторамиИКредиторами;
            БухгалтерскийУчет.УстановитьСубконто(НСтрока.СчетДт, НСтрока.СубконтоДт, "Контрагенты", Выборка.Субконто1);
            БухгалтерскийУчет.УстановитьСубконто(НСтрока.СчетДт, НСтрока.СубконтоДт, "Договоры", Выборка.Субконто2);
            БухгалтерскийУчет.УстановитьСубконто(НСтрока.СчетДт, НСтрока.СубконтоДт, "ДокументыРасчетовСКонтрагентами", Выборка.ДокументРасчетов);
            
            НСтрока.СчетКт = ПланыСчетов.Хозрасчетный.ВзаиморасчетыССКТранзитный;
            БухгалтерскийУчет.УстановитьСубконто(НСтрока.СчетКт, НСтрока.СубконтоКт, "Контрагенты", Выборка.Субконто1);
            БухгалтерскийУчет.УстановитьСубконто(НСтрока.СчетКт, НСтрока.СубконтоКт, "Договоры", Выборка.Субконто2);
            БухгалтерскийУчет.УстановитьСубконто(НСтрока.СчетКт, НСтрока.СубконтоКт, "ДокументыРасчетовСКонтрагентами", Выборка.ДокументРасчетов);
            
            НСтрока.Сумма = Выборка.Сумма;
            НСтрока.СуммаНУДт = Выборка.Сумма;
            НСтрока.СуммаНУКт = Выборка.Сумма;
            
        КонецЕсли;  
        НаборЗаписей.Записать();
        ЗафиксироватьТранзакцию();
        ТекстВозврата = ТекстВозврата + ?(ТекстВозврата = "", "", Символы.пс) + ": Создана операция """ + Строка(Операция.Ссылка) + """";
    Исключение
        ОтменитьТранзакцию();
        ЗаписьЖурналаРегистрации("ТЕСТ: перенос кредитового остатка со счета 76.09", УровеньЖурналаРегистрации.Ошибка, , , ОписаниеОшибки());
        ТекстВозврата = ТекстВозврата + ?(ТекстВозврата = "", "", Символы.пс) + ": " + ОписаниеОшибки();
    КонецПопытки;
    
КонецПроцедуры

&НаКлиенте
Процедура Перенос(Команда)
    ПереносНаСервере();
КонецПроцедуры
1 1dvd
 
20.07.17
13:55
я угадаю текст ошибки с 20 постов
2 Numerus Mikhail
 
20.07.17
13:56
Обычно в таких случаях еще и текст ошибки приводят
3 lodger
 
20.07.17
13:57
угадаю текст ошибки со 100 постов.
4 Ц_У
 
20.07.17
13:58
(1) (3) текст ошибки дан в коде :) угадываю с 1 поста :)
5 dft2014
 
20.07.17
13:58
Субконто у обоих счетов одинаковые (Контрагент, Договор, Документ расчетов).
6 1dvd
 
20.07.17
14:00
(5) отладчиком пользоваться умеем? скорее всего тебе запрос Субконто выдает не в том порядке
7 dft2014
 
20.07.17
14:01
(2) Текст ошибки:
"Преобразование значения к типу Число не может быть выполнено" и ссылка на строчку:

ТекстВозврата = ТекстВозврата + ?(ТекстВозврата = "", "", Символы.пс) + ": Создана операция """ + Строка(Операция.Ссылка) + """";
8 1dvd
 
20.07.17
14:02
(7) ну, а ТекстВозврата у тебя какого  типа?
9 Numerus Mikhail
 
20.07.17
14:02
Перед этим напиши
ТекстВозврата = ""; (7)
10 Numerus Mikhail
 
20.07.17
14:03
(7) Хотя да, у тебя текст возврата имеет тип число. Это реквизит формы?
11 cw014
 
20.07.17
14:05
У тебя ТекстВозврата = неопределенео
12 dft2014
 
20.07.17
14:18
(9) Спасибо! Ошибка ушла!
13 dft2014
 
20.07.17
14:18
Но почему-то только одну запись делает в Операцию...
14 1dvd
 
20.07.17
14:19
(13) потому что у тебя нет цикла по выборке
15 dft2014
 
20.07.17
14:31
(14) Да, поправила. Все работает!
всем спасибо!
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.