8.х БП Не записывает значение в переменную

Тема в разделе ""1С:Бухгалтерия БП"", создана пользователем ARkiller, 17 янв 2014.

  1. TopicStarter Overlay
    ARkiller
    Offline

    ARkiller Опытный в 1С

    Регистрация:
    9 апр 2013
    Сообщения:
    79
    Симпатии:
    0
    Баллы:
    26
    Доброго времени суток, столкнулся с непонятной проблемой.

    Бухгалтерия 3.0.27.10 КОРП платформа 8.2.19.83

    Добавил в плане счетов в счет 58.03 третье субконто "статьи движения денежных средств" (далее СДДС). При проведении документа ПКО (да и другихтоже) СДДС в проводках не проставлялась.
    Также требуется при наличии в документе проводки по трём конкретным статьям добавить еще одну проводку.
    Решил допилить процедуру проведения документа ПриходныйКассовыйОрдер следующим образом.

    Код:
    Процедура ОбработкаПроведения(Отказ, Режим)
    
    // ПОДГОТОВКА ПРОВЕДЕНИЯ ПО ДАННЫМ ДОКУМЕНТА
    
    ПроведениеСервер.ПодготовитьНаборыЗаписейКПроведению(ЭтотОбъект);
    Если РучнаяКорректировка Тогда
    Возврат;
    КонецЕсли;
    
    ПараметрыПроведения = Документы.ПриходныйКассовыйОрдер.ПодготовитьПараметрыПроведения(Ссылка, Отказ);
    Если Отказ Тогда
    Возврат;
    КонецЕсли;
    
    // Программист Добавляем в проведение документа СДДС по счету 58.03 начало
    Если ВидОперации = Перечисления.ВидыОперацийПКО.РасчетыПоКредитамИЗаймам Тогда
    
    Для Каждого СтрокаТЗ ИЗ РасшифровкаПлатежа Цикл
    Если СтрокаТЗ.СчетУчетаРасчетовСКонтрагентом = ПланыСчетов.Хозрасчетный.НайтиПоКоду("58.03") Тогда
    ПараметрыПроведения.РасшифровкаПлатежаПрочее[СтрокаТЗ.НомерСтроки - 1].СубконтоКт3 = СтрокаТЗ.СтатьяДвиженияДенежныхСредств;
    
    Если (СтрокаТЗ.СтатьяДвиженияДенежныхСредств = Справочники.СтатьиДвиженияДенежныхСредств.НайтиПоКоду("00-000007")) ИЛИ
    (СтрокаТЗ.СтатьяДвиженияДенежныхСредств = Справочники.СтатьиДвиженияДенежныхСредств.НайтиПоКоду("00-000014")) ИЛИ
    (СтрокаТЗ.СтатьяДвиженияДенежныхСредств = Справочники.СтатьиДвиженияДенежныхСредств.НайтиПоКоду("00-000017")) Тогда
    НоваяСтрокаПараметров = ПараметрыПроведения.РасшифровкаПлатежаПрочее.Добавить();
    
    НоваяСтрокаПараметров.СчетДт   = ПланыСчетов.Хозрасчетный.НайтиПоКоду("58.03");
    НоваяСтрокаПараметров.СчетКт   = ПланыСчетов.Хозрасчетный.НайтиПоКоду("90.01.1");
    НоваяСтрокаПараметров.ВалютнаяСумма  = СтрокаТЗ.СуммаПлатежа;
    НоваяСтрокаПараметров.ПодразделениеДТ = ПодразделениеОрганизации;
    НоваяСтрокаПараметров.ПодразделениеКТ = ПодразделениеОрганизации;
    НоваяСтрокаПараметров.СубконтоДт1  = Контрагент;
    НоваяСтрокаПараметров.СубконтоДт2  = ДоговорКонтрагента;
    НоваяСтрокаПараметров.СубконтоДт3  = СтрокаТЗ.СтатьяДвиженияДенежныхСредств;
    НоваяСтрокаПараметров.СубконтоКт1  = Справочники.НоменклатурныеГруппы.НайтиПоКоду("00-000001");
    НоваяСтрокаПараметров.СубконтоКт2  = Перечисления.СтавкиНДС.БезНДС;
    НоваяСтрокаПараметров.СуммаРуб   = СтрокаТЗ.СуммаПлатежа;
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;
    
    КонецЕсли;
    // Программист Добавляем в проведение документа СДДС по счету 58.03 конец
    
    // ПОДГОТОВКА ПРОВЕДЕНИЯ ПО ДАННЫМ ИНФОРМАЦИОННОЙ БАЗЫ
    
    ТаблицаВзаиморасчеты = УчетВзаиморасчетов.ПодготовитьТаблицуВзаиморасчетовПогашениеЗадолженности(
    ПараметрыПроведения.РасшифровкаПлатежа, ПараметрыПроведения.Реквизиты, Отказ);
    
    ТаблицаСуммовыхРазниц = УчетНДС.ПодготовитьТаблицуСуммовыхРазниц(ТаблицаВзаиморасчеты,
    ПараметрыПроведения.Реквизиты, Отказ);
    
    // Структура таблиц для отражения в налоговом учете УСН
    СтруктураТаблицУСН = Новый Структура("ТаблицаРасчетов", ТаблицаВзаиморасчеты);
    
    // Учет доходов и расходов ИП
    ТаблицаОплатПокупателяИП = УчетДоходовИРасходовПредпринимателя.ПодготовитьТаблицуОплатыПокупателя(
    ТаблицаВзаиморасчеты, ПараметрыПроведения.Реквизиты);
    
    // ФОРМИРОВАНИЕ ДВИЖЕНИЙ
    
    УчетВзаиморасчетов.СформироватьДвиженияПогашениеЗадолженности(ТаблицаВзаиморасчеты,
    ПараметрыПроведения.Реквизиты, Движения, Отказ);
    
    УчетДоходовРасходов.СформироватьДвиженияРозничнаяВыручка(ПараметрыПроведения.РозничнаяВыручка,
    ПараметрыПроведения.Реквизиты, Движения, Отказ);
    
    УчетДоходовРасходов.СформироватьДвиженияСуммовыеРазницыРасчетыВУЕ(ТаблицаСуммовыхРазниц,
    ПараметрыПроведения.Реквизиты, Движения, Отказ);
    
    УчетНДС.СформироватьДвиженияКурсовыеРазницы(ПараметрыПроведения.Реквизиты,
    ТаблицаВзаиморасчеты, Движения, Отказ);
    
    УчетНДС.СформироватьДвиженияСуммовыеРазницы(ТаблицаСуммовыхРазниц,
    ПараметрыПроведения.Реквизиты, Движения, Отказ);
    
    УчетНДС.СформироватьДвиженияРозничнаяВыручка(ПараметрыПроведения.РозничнаяВыручкаНДС,
    ПараметрыПроведения.Реквизиты, Движения, Отказ);
    
    УчетДенежныхСредств.СформироватьДвиженияПрочееПоступление(ПараметрыПроведения.РасшифровкаПлатежаПрочее,
    ПараметрыПроведения.Реквизиты, Движения, Отказ);
    
    НалоговыйУчетУСН.СформироватьДвиженияУСН(ЭтотОбъект, СтруктураТаблицУСН);
    
    // Переоценка валютных остатков - после формирования проводок всеми другими механизмами
    ТаблицаПереоценка = УчетДоходовРасходов.ПодготовитьТаблицуПереоценкаВалютныхОстатковПоПроводкамДокумента(
    ПараметрыПроведения.Реквизиты, Движения, Отказ);
    
    УчетДоходовРасходов.СформироватьДвиженияПереоценкаВалютныхОстатков(ТаблицаПереоценка,
    ПараметрыПроведения.Реквизиты, Движения, Отказ);
    
    УчетУСН.СформироватьДвиженияПереоценкаВалютныхОстатков(ТаблицаПереоценка,
    ПараметрыПроведения.Реквизиты, Движения, Отказ);
    
    // Учет доходов и расходов ИП
    УчетДоходовИРасходовПредпринимателя.СформироватьДвиженияОплатаПокупателя(
    ТаблицаОплатПокупателяИП,
    ПараметрыПроведения.Реквизиты, Движения, Отказ);
    
    УчетДоходовИРасходовПредпринимателя.СформироватьДвиженияВыручкаНТТ(
    ПараметрыПроведения.РозничнаяВыручка,
    ПараметрыПроведения.Реквизиты, Движения, Отказ);
    
    КонецПроцедуры
    Строка проводки создается, но волшебным образом в ней не заполняются поля СубконтоДт1, СубконтоДт3, СубконтоКт1, СубконтоКт2. Именно так (т.е. СубконтоДт2 заполняется).
    Отладка показала что проблема именно в строках:
    НоваяСтрокаПараметров.СубконтоДт1 = Контрагент;
    НоваяСтрокаПараметров.СубконтоДт3 = СтрокаТЗ.СтатьяДвиженияДенежныхСредств;
    НоваяСтрокаПараметров.СубконтоКт1 = Справочники.НоменклатурныеГруппы.НайтиПоКоду("00-000001");
    НоваяСтрокаПараметров.СубконтоКт2 = Перечисления.СтавкиНДС.БезНДС;

    присвоение не происходит. После этих строк в этих полях остается пустое значение с типом Неопределено.
  2. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.266
    Симпатии:
    131
    Баллы:
    104
    как вариант - удалите эти колонки из таблицы значений и добавьте заново - колонки сформированы запросом, возможно, что-то там не так 1с делает с типом колонки.
  3. TopicStarter Overlay
    ARkiller
    Offline

    ARkiller Опытный в 1С

    Регистрация:
    9 апр 2013
    Сообщения:
    79
    Симпатии:
    0
    Баллы:
    26
    Сделал как вы советовали, теперь в добавленной строке не прописывается СубконтоДт3. Что самое интересное отладка показала что в ТЗ все заполняется.
    Делал так:
    Код:
    Если ВидОперации = Перечисления.ВидыОперацийПКО.РасчетыПоКредитамИЗаймам Тогда
    
    ПараметрыПроведения.РасшифровкаПлатежаПрочее.Колонки.Удалить("СубконтоДт1");
    ПараметрыПроведения.РасшифровкаПлатежаПрочее.Колонки.Удалить("СубконтоДт2");
    ПараметрыПроведения.РасшифровкаПлатежаПрочее.Колонки.Удалить("СубконтоДт3");
    ПараметрыПроведения.РасшифровкаПлатежаПрочее.Колонки.Удалить("СубконтоКт1");
    ПараметрыПроведения.РасшифровкаПлатежаПрочее.Колонки.Удалить("СубконтоКт2");
    ПараметрыПроведения.РасшифровкаПлатежаПрочее.Колонки.Удалить("СубконтоКт3");
    
    ПараметрыПроведения.РасшифровкаПлатежаПрочее.Колонки.Добавить("СубконтоДт1",,"СубконтоДт1");
    ПараметрыПроведения.РасшифровкаПлатежаПрочее.Колонки.Добавить("СубконтоДт2",,"СубконтоДт2");
    ПараметрыПроведения.РасшифровкаПлатежаПрочее.Колонки.Добавить("СубконтоДт3",,"СубконтоДт3");
    ПараметрыПроведения.РасшифровкаПлатежаПрочее.Колонки.Добавить("СубконтоКт1",,"СубконтоКт1");
    ПараметрыПроведения.РасшифровкаПлатежаПрочее.Колонки.Добавить("СубконтоКт2",,"СубконтоКт2");
    ПараметрыПроведения.РасшифровкаПлатежаПрочее.Колонки.Добавить("СубконтоКт3",,"СубконтоКт3");
    
    Для Каждого СтрокаТЗ ИЗ РасшифровкаПлатежа Цикл
    Если СтрокаТЗ.СчетУчетаРасчетовСКонтрагентом = ПланыСчетов.Хозрасчетный.НайтиПоКоду("58.03") Тогда
    
    ПараметрыПроведения.РасшифровкаПлатежаПрочее[СтрокаТЗ.НомерСтроки - 1].СубконтоДт1 = СтрокаТЗ.СтатьяДвиженияДенежныхСредств;
    
    ПараметрыПроведения.РасшифровкаПлатежаПрочее[СтрокаТЗ.НомерСтроки - 1].СубконтоКт1 = Контрагент;
    ПараметрыПроведения.РасшифровкаПлатежаПрочее[СтрокаТЗ.НомерСтроки - 1].СубконтоКт2 = СтрокаТЗ.ДоговорКонтрагента;
    ПараметрыПроведения.РасшифровкаПлатежаПрочее[СтрокаТЗ.НомерСтроки - 1].СубконтоКт3 = СтрокаТЗ.СтатьяДвиженияДенежныхСредств;
    
    
    Если (СтрокаТЗ.СтатьяДвиженияДенежныхСредств = Справочники.СтатьиДвиженияДенежныхСредств.НайтиПоКоду("00-000007")) ИЛИ
    (СтрокаТЗ.СтатьяДвиженияДенежныхСредств = Справочники.СтатьиДвиженияДенежныхСредств.НайтиПоКоду("00-000014")) ИЛИ
    (СтрокаТЗ.СтатьяДвиженияДенежныхСредств = Справочники.СтатьиДвиженияДенежныхСредств.НайтиПоКоду("00-000017")) Тогда
    //ПараметрыПроведения.ВременнаяТаблицаРасшифровкаПлатежа[0].Количество = ПараметрыПроведения.ВременнаяТаблицаРасшифровкаПлатежа[0].Количество + 1;
    НоваяСтрокаПараметров = ПараметрыПроведения.РасшифровкаПлатежаПрочее.Добавить();
    НоваяСтрокаПараметров.НомерСтроки  = ПараметрыПроведения.ВременнаяТаблицаРасшифровкаПлатежа[0].Количество + 1;
    НоваяСтрокаПараметров.СчетДт   = ПланыСчетов.Хозрасчетный.НайтиПоКоду("58.03");
    НоваяСтрокаПараметров.ПодразделениеДТ = ПодразделениеОрганизации;
    НоваяСтрокаПараметров.СубконтоДт1  = СтрокаТЗ.ДоговорКонтрагента.Владелец;
    НоваяСтрокаПараметров.СубконтоДт2  = ДоговорКонтрагента;
    НоваяСтрокаПараметров.СубконтоДт3  = СтрокаТЗ.СтатьяДвиженияДенежныхСредств;
    НоваяСтрокаПараметров.СубконтоКт1  = Справочники.НоменклатурныеГруппы.НайтиПоКоду("00-000001");
    НоваяСтрокаПараметров.СубконтоКт2  = Перечисления.СтавкиНДС.БезНДС;
    
    НоваяСтрокаПараметров.СчетКт   = ПланыСчетов.Хозрасчетный.НайтиПоКоду("90.01.1");
    НоваяСтрокаПараметров.ПодразделениеКТ = ПодразделениеОрганизации;
    НоваяСтрокаПараметров.ВалютнаяСумма  = СтрокаТЗ.СуммаВзаиморасчетов;
    НоваяСтрокаПараметров.СуммаРуб   = СтрокаТЗ.СуммаВзаиморасчетов;
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;
    
    КонецЕсли;
  4. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.266
    Симпатии:
    131
    Баллы:
    104
    а зачем удалять все колонки субконто?
    только Дт1, Дт3, Кт1 и Кт2 - именно в них Неопределено в запросе закатывается.
    при этом необходимо задать типы колонок, причем тип должен быть составной, чтобы в ней начальным значением было Неопределено, а не пустая ссылка на справочник

Поделиться этой страницей