Имя: Пароль:
1C
 
Откуда лезет валюта в отчетах ?
☑
0 vv2304
 
14.10.26
✎
16:21
Типовая отраслевая КОРП на базе бухгалтерии.
Делал слияние баз с пом. переноса ВыгрузкаЗагрузкаДанныхXML.
В базе-источнике валютный учет выключен.
В базе-приемнике валютный учет включен.
Почему-то по некоторым перенесенным контрагентам по 60 счету появились строки "Вал." Хотя в договорах руб.
Отключать константу нельзя.
В проводках документов валюты нет. Если документ перепровести, в бух.отчетах строка "Вал." пропадает, но документы в закрытом периоде, трогать нельзя.
1 Kigo_Kigo
 
14.10.26
✎
17:17
В проводке стоит Валюта как Справочники.Валюты.ПустаяСсылка()
Лечится легко, часто сталкиваемся при обменах, вот код полечить, обработку сам сваяещь


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

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

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

Процедура УстановитьФлажки(Команда)
    Для Каждого Стр_ТЧ Из ТЧ Цикл
        Стр_ТЧ.Использовать = Истина;
    КонецЦикла;    
КонецПроцедуры

Процедура СнятьФлажки(Команда)
    Для Каждого Стр_ТЧ Из ТЧ Цикл
        Стр_ТЧ.Использовать = Ложь;
    КонецЦикла;
КонецПроцедуры

Процедура ИсправитьNULLНаСервере()
    
    Валюта_ПустаяСсылка = Справочники.Валюты.ПустаяСсылка();
    //Подразделение_ПустаяСсылка = Справочники.СтруктураПредприятия.ПустаяСсылка();
//    НаправлениеДеятельности_ПустаяСсылка = Справочники.НаправленияДеятельности.ПустаяСсылка();
    СписокДокументов = ТЧ.Выгрузить(Новый Структура("Использовать", Истина), "Документ");
    СписокДокументов.Свернуть("Документ");
    
    Индикатор1=0;
    Инд=0;
    КолДок=СписокДокументов.Количество();
    Счетчик=0;
    Для Каждого Стр Из СписокДокументов Цикл
        Счетчик=Счетчик+1;
        Если Инд<>Окр(Счетчик*100/КолДок) тогда
             Инд=Окр(Счетчик*100/КолДок);
             Индикатор1=Инд;
        КонецЕсли;
        //Если Не Стр.Использовать Тогда
        //    Продолжить;
        //КонецЕсли;
        
        НЗ = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
        НЗ.Отбор.Регистратор.Установить(Стр.Документ);
        НЗ.Прочитать();
        
        флБылиИзменения = Ложь;
        
        Для Каждого Запись_НЗ Из НЗ Цикл
            //Если НЕ Запись_НЗ.СчетДт.Валютный
            //    И Запись_НЗ.ВалютаДт = Валюта_ПустаяСсылка Тогда
            //    Запись_НЗ.ВалютаДт = NULL;
            //    флБылиИзменения = Истина;
            //КонецЕсли;
            //
            //Если НЕ Запись_НЗ.СчетКт.Валютный
            //    И Запись_НЗ.ВалютаКт = Валюта_ПустаяСсылка Тогда
            //    Запись_НЗ.ВалютаКт = NULL;
            //    флБылиИзменения = Истина;
            //КонецЕсли;
            
            Если ВалютаНеNULL И НЕ Запись_НЗ.СчетДт.Валютный
                И ТипЗнч(Запись_НЗ.ВалютаДт) <> Тип("Null") Тогда
                Запись_НЗ.ВалютаДт = NULL;
                ЕстьИзменения = Истина;
            КонецЕсли;
            
            Если ВалютаНеNULL И НЕ Запись_НЗ.СчетКт.Валютный
                И ТипЗнч(Запись_НЗ.ВалютаКт) <> Тип("Null") Тогда
                Запись_НЗ.ВалютаКт = NULL;
                ЕстьИзменения = Истина;
            КонецЕсли;

            
            //Если НЕ Запись_НЗ.СчетДт.УчетПоПодразделениям
            //    И Запись_НЗ.ПодразделениеДт = Подразделение_ПустаяСсылка Тогда
            //    Запись_НЗ.ПодразделениеДт = NULL;
            //    флБылиИзменения = Истина;
            //КонецЕсли;
            //
            //Если НЕ Запись_НЗ.СчетКт.УчетПоПодразделениям
            //    И Запись_НЗ.ПодразделениеКт = Подразделение_ПустаяСсылка Тогда
            //    Запись_НЗ.ПодразделениеКт = NULL;
            //    флБылиИзменения = Истина;
            //КонецЕсли;
            //
            //Если НЕ Запись_НЗ.СчетДт.УчетПоНаправлениямДеятельности
            //    И Запись_НЗ.НаправлениеДеятельностиДт = НаправлениеДеятельности_ПустаяСсылка Тогда
            //    Запись_НЗ.НаправлениеДеятельностиДт = NULL;
            //    флБылиИзменения = Истина;
            //КонецЕсли;
            //
            //Если НЕ Запись_НЗ.СчетКт.УчетПоНаправлениямДеятельности
            //    И Запись_НЗ.НаправлениеДеятельностиКт = НаправлениеДеятельности_ПустаяСсылка Тогда
            //    Запись_НЗ.НаправлениеДеятельностиКт = NULL;
            //    флБылиИзменения = Истина;
            //КонецЕсли;

        КонецЦикла;
        
        Если ЕстьИзменения Тогда
            НЗ.ОбменДанными.Загрузка = Истина;
            НЗ.Записать();
        КонецЕсли;
        
    КонецЦикла;
        Индикатор1=100;

     Сообщить("Обработка выполнена!!!");
    
КонецПроцедуры

Процедура ВыбПериодНажатие(Элемент)
    НастройкаПериода = Новый НастройкаПериода;
    НастройкаПериода.РедактироватьКакИнтервал = Истина;
    НастройкаПериода.РедактироватьКакПериод = Истина;
    НастройкаПериода.ВариантНастройки = ВариантНастройкиПериода.Период;
    НастройкаПериода.УстановитьПериод(НачПериода, ?(КонПериода='0001-01-01', КонПериода, КонецДня(КонПериода)));
    Если НастройкаПериода.Редактировать() Тогда
        НачПериода = НастройкаПериода.ПолучитьДатуНачала();
        КонПериода = НастройкаПериода.ПолучитьДатуОкончания();
    КонецЕсли;
КонецПроцедуры
2 Kigo_Kigo
 
14.10.26
✎
19:29
А картинку прицепил, ну может не то, я тогда хз, у нас по невалютным счетам валютные обороты были
3 Fedor-1971
 
14.10.26
✎
17:35
(0) Посмотри в файл XML по проблемным суммам и подчисти
Как вариант, заполни данные в выборке из источника при выгрузке гарантированно Валюта = Неопределено.
Будет достаточно просто перезагрузить данные

Или как в (1) придётся лечить базу приёмник
4 vv2304
 
14.10.26
✎
19:28
поднял копию, отчет сваял,посмотрел, такая проблема и по тем контрагентам, что были в базе-приемнике, но по ним не было валютных оборотов.
Получается, что надо лечить базу-приемник.
5 Олдж
 
14.10.26
✎
20:06
(4) Предположу, что обработкой ВыгрузкаЗагрузкаДанныхXML задвоилась запись "Рубли" в справочнике "Валюты".

Удали дубль обработкой "Поиск и удаление дублей"
6 Волшебник
 
14.10.26
✎
20:01
(5) лучше сначала сделать замену ссылок
7 Олдж
 
14.10.26
✎
20:06
(6) скорректировал :)
8 vv2304
 
14.10.26
✎
20:34
(5) Не, дублей нет.
9 Волшебник
 
14.10.26
✎
20:37
(8) Проверьте наличие пустой валюты в старых проводках. Если она есть, замените на рубли. Период открывать не надо. Перепроводить документы не надо
10 vv2304
 
14.10.26
✎
22:01
Если она есть, замените на рубли.
Заменил на Неопределено.

Но как так получилось ? Потому, что предстоит еще неоднократно переносить в базу-приемник.
11 Волшебник
 
14.10.26
✎
22:25
(10) Вам нужно в базе-приёмник заменить всю пустую валюту в старых проводках на Рубли.
Обработка проводок по каждом набору Движения из РегистрБухгалтерии.Хозрасчетный с флагом Набор.ОбменДанными=Истина
Период открывать не надо. Перепроводить документы не надо.
12 vv2304
 
14.10.26
✎
22:31
(11) я уже заменил. Только не на рубли, а на Неопределено.
"ВЫБРАТЬ РАЗЛИЧНЫЕ
    |    Хозрасчетный.Регистратор
    |ИЗ
    |    РегистрБухгалтерии.Хозрасчетный КАК Хозрасчетный
    |ГДЕ
    |    ((НЕ Хозрасчетный.СчетДт.Валютный)
    |                И Хозрасчетный.ВалютаДт <> НЕОПРЕДЕЛЕНО
    |            ИЛИ (НЕ Хозрасчетный.СчетКт.Валютный)
    |                И Хозрасчетный.ВалютаКт <> НЕОПРЕДЕЛЕНО)
    |    И Хозрасчетный.Период МЕЖДУ &НачалоПериода И &КонецПериода"
потом читаю наборЗаписей и далее
Если НЕ Запись.СчетДт.Валютный
                И Запись.ВалютаДт <> Неопределено Тогда
                
                Запись.ВалютаДт = Неопределено;
                
            КонецЕсли;
13 Волшебник
 
14.10.26
✎
22:58
(12) Вы дурак. Надо на Рубли
За период весь
И набор надо записать. С параметрами, которые я указал выше
14 Волшебник
 
14.10.26
✎
22:59
Зачем нам вообще общаться с этим ботом?
15 vv2304
 
14.10.26
✎
23:34
(13) Счета не валютные. Измерения ВалютаДт и ВалютаКт должны в таком случае быть Неопределено.