Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Пустые строки по Инвентаризации , В документе Инвентаризация выходят пустые строки          
Aisha12 Подменю пользователя
сообщение 14.04.14, 10:55
Сообщение #1

Общительный
**
Группа: Пользователи
Сообщений: 38
Спасибо сказали: 0 раз
Рейтинг: 0

Добрый день! 1С 7.7, конфигурация не типовая. Есть документ Инвентаризация и отчет инвентаризационная опись. До этого клиенты пользовались отчетом Инвентаризационная опись, там идет отбор по Мол и Подразделениям. а теперь надо, чтобы они пользовались документом Инвентаризация, там тоже есть отбор, но когда сравниваешь данные по отчету и документу, выходит, что данных в документе больше. Не совсем пойму, откуда он берет эти данные.
Вот отчет Инвентаризационная опись, выходит как полагается, опись идет только по основным средствам

Вот документ Инвентаризация, по материалам выходит все нормально, а по ОС выходят пустые строки, хотя они не сидят у этого сотрудника

Вот код отчета, кнопка сформировать
Процедура СформироватьОС()
    Стр=0;
    ИтогБалСтоим=0;    
    
    Если ПроверкаПериодаОтчета(ДатаНач,ДатаКон)=1 Тогда
        Возврат;    
    КонецЕсли;    
    
        
    Таб=СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("ОС");
    Таб.ВывестиСекцию("Шапка");
    
    Сч122_1 = глНайтиСчетик(СчетПоКоду("122.1",ПланыСчетов.Казахстан),ДатаНач);
    Сч122_2 = глНайтиСчетик(СчетПоКоду("122.2",ПланыСчетов.Казахстан),ДатаНач);
    Сч123_1 = глНайтиСчетик(СчетПоКоду("123.1",ПланыСчетов.Казахстан),ДатаНач);
    Сч123_2 = глНайтиСчетик(СчетПоКоду("123.2",ПланыСчетов.Казахстан),ДатаНач);
    Сч124   = глНайтиСчетик(СчетПоКоду("124",ПланыСчетов.Казахстан),ДатаНач);
    Сч125_1 = глНайтиСчетик(СчетПоКоду("125.1",ПланыСчетов.Казахстан),ДатаНач);
    Сч125_2 = глНайтиСчетик(СчетПоКоду("125.2",ПланыСчетов.Казахстан),ДатаНач);
    Сч131_1 = глНайтиСчетик(СчетПоКоду("131.1",ПланыСчетов.Казахстан),ДатаНач);
    Сч131_2 = глНайтиСчетик(СчетПоКоду("131.2",ПланыСчетов.Казахстан),ДатаНач);
    Сч132_1 = глНайтиСчетик(СчетПоКоду("132.1",ПланыСчетов.Казахстан),ДатаНач);
    Сч132_2 = глНайтиСчетик(СчетПоКоду("132.2",ПланыСчетов.Казахстан),ДатаНач);
    Сч133   = глНайтиСчетик(СчетПоКоду("133",ПланыСчетов.Казахстан),ДатаНач);
    Сч134_1 = глНайтиСчетик(СчетПоКоду("134.1",ПланыСчетов.Казахстан),ДатаНач);
    Сч134_2 = глНайтиСчетик(СчетПоКоду("134.2",ПланыСчетов.Казахстан),ДатаНач);
    Сп=СоздатьОбъект("СписокЗначений");
    Сп.ДобавитьЗначение(Сч122_1);
    Сп.ДобавитьЗначение(Сч122_2);
    Сп.ДобавитьЗначение(Сч123_1);
    Сп.ДобавитьЗначение(Сч123_2);
    Сп.ДобавитьЗначение(Сч124);
    Сп.ДобавитьЗначение(Сч125_1);
    Сп.ДобавитьЗначение(Сч125_2);
    Сп.ДобавитьЗначение(Сч131_1);
    Сп.ДобавитьЗначение(Сч131_2);
    Сп.ДобавитьЗначение(Сч132_1);
    Сп.ДобавитьЗначение(Сч132_2);
    Сп.ДобавитьЗначение(Сч133);
    Сп.ДобавитьЗначение(Сч134_1);
    Сп.ДобавитьЗначение(Сч134_2);
    
    Ит=СоздатьОбъект("БухгалтерскиеИтоги");
    Ит.ИспользоватьПланСчетов(ВыбратьПланСчетов(Датанач));
    Ит.ИспользоватьСубконто(ВидыСубконто.ОсновныеСредства);
    Если Подразделение.Выбран()=1 тогда
        Ит.ИспользоватьСубконто(ВидыСубконто.Подразделения, Подразделение, 2);
    КонецЕсли;    
    Если МОЛ.Выбран()=1 тогда
        Ит.ИспользоватьСубконто(ВидыСубконто.Сотрудники, МОЛ, 2);
    КонецЕсли;    
    Ит.ВключатьСубсчета(1);
    Ит.ВыполнитьЗапрос(ДатаНач, ДатаКон, сп);
    
    СпрОС=СоздатьОбъект("Справочник.ОсновныеСредства");
    СпрОС.ВыбратьЭлементы();
    Дата2=ДатаКон;
    
    __пер=СоздатьОбъект("Периодический");
    
    Пока СпрОС.ПолучитьЭлемент()=1 Цикл
        Если СпрОС.ЭтоГруппа()=1 Тогда
            продолжить;
        КонецЕсли;
        Если МОЛ.Выбран()=1 Тогда
            Если (СпрОС.МОЛ.Получить(Дата2)<>МОЛ) и
            (СпрОС.МОЛ.Получить(Дата2).Родитель<>МОЛ) Тогда
                продолжить;
            КонецЕсли;
        КонецЕсли;
        Если Подразделение.Выбран()=1 Тогда
            Если (СпрОС.Подразделение.Получить(Дата2)<>Подразделение) и
            (СпрОС.Подразделение.Получить(Дата2).Родитель<>Подразделение) и
            (СпрОС.Подразделение.Получить(Дата2).Родитель.Родитель<>Подразделение) и
            (СпрОС.Подразделение.Получить(Дата2).Родитель.Родитель.Родитель<>Подразделение) Тогда
                Продолжить;
            КонецЕсли;
        КонецЕсли;
        Если СпрОС.ПометкаУдаления()=1 Тогда
            продолжить;
        КонецЕсли;
        __эл=СпрОС.ТекущийЭлемент();
        __пер.ИспользоватьОбъект("ПризнакНачисленияАмортизации",__эл);
        __пер.ВыбратьЗначения('01.01.1950',ДатаКон);
        Если __пер.ПолучитьЗначение()=0 Тогда
            продолжить;
        КонецЕсли;
        Если __пер.ДатаЗнач>Дата2 Тогда
            продолжить;
        КонецЕсли;
        Ит.ВыбратьСубконто();
        Если Ит.ПолучитьСубконто(,,СпрОС.ТекущийЭлемент())=1 Тогда
            ОС=СпрОС.ТекущийЭлемент();
            
            БалСтоим    =?(Ит.ПолучитьСчет(, ОС.Группа.СчетБал.Получить(ДатаНач))=1, Ит.СКД(), 0);
            Износ        =?(Ит.ПолучитьСчет(, ОС.Группа.СчетИзноса.Получить(ДатаНач))=1, Ит.СКК(), 0);
                    
            Если (БалСтоим=0) и (Износ=0) тогда
                Продолжить;
            КонецЕсли;
            
            ИтогБалСтоим=ИтогБалСтоим+БалСтоим;
            Стр=Стр+1;
            Таб.ВывестиСекцию("Строка");
            Состояние("В отчет выведено "+Стр+ " строк");
        //Иначе
        //    
        //    ОС=СпрОС.ТекущийЭлемент();
        //    //БалСтоим    =0;
        //    //Износ        =0;
        //    //Стр=Стр+1;
        //    //Таб.ВывестиСекцию("Строка");
        //    Состояние("В отчет выведено "+Стр+ " строк");
        //    
        //    Если Ит.ПолучитьСчет(, ОС.Группа.СчетИзноса)=1 Тогда
        //        
        КонецЕсли;        
        
        //КонецЕсли;
    КонецЦикла;
    Таб.ВывестиСекцию("Подвал");
    Таб.Опции(0,0,0,0);
    Таб.ПараметрыСтраницы(1,,,,,,,,,1,,);
    Таб.ТолькоПросмотр(1);
    Таб.Показать("Инвентаризационная опись ОС");
КонецПроцедуры


Вот код документа Инвентаризация
Процедура Заполнить()
    
    Если КоличествоСтрок()>0 Тогда
        Если вопрос("Существующая табличная часть будет очищена и заполнена заново! Продолжить?",4)<>6 Тогда
            возврат;
        КонецЕсли;
    КонецЕсли;
    
    Если Фл_Мат_ОС_Ном<>1 Тогда
        Если Склад.Выбран()=0 Тогда
            Предупреждение("Не выбран склад!");
            возврат;
        КонецЕсли;
    КонецЕсли;
    
    би=СоздатьОбъект("БухгалтерскиеИтоги");
    би.ИспользоватьПланСчетов(ВыбратьПланСчетов(ДатаДок));
    счета=СоздатьОбъект("СписокЗначений");
    Если Константа.НовыйПланСчетов.Получить(ДатаДок)=Перечисление.Булево.Нет Тогда
        сч=СоздатьОбъект("Счет.Казахстан");    
    Иначе                          
        сч=СоздатьОбъект("Счет.МСФОКазахстан");    
    КонецЕсли;    
    сч.ВыбратьСчета();
    Пока сч.ПолучитьСчет()=1 Цикл
        Если сч.ЭтоГруппа()=1 Тогда
            продолжить;
        КонецЕсли;
        Если Фл_Мат_ОС_Ном=0 Тогда      
            Если Константа.НовыйПланСчетов.Получить(ДатаДок)=Перечисление.Булево.Нет Тогда
                Если (число(Лев(сч.Код,3))>=201) и (число(Лев(сч.Код,3))<=208) Тогда
                    счета.ДобавитьЗначение(сч.ТекущийСчет());
                КонецЕсли;
            Иначе
                Если (число(Лев(сч.Код,3))=131) или (число(Лев(сч.Код,4))=1351) Тогда
                    счета.ДобавитьЗначение(сч.ТекущийСчет());
                КонецЕсли;
            КонецЕсли;    
        ИначеЕсли Фл_Мат_ОС_Ном=1 Тогда    
            Если Константа.НовыйПланСчетов.Получить(ДатаДок)=Перечисление.Булево.Нет Тогда
                Если ((число(Лев(сч.Код,3))>=121) и (число(Лев(сч.Код,3))<=125)) или
                ((число(Лев(сч.Код,3))>=131) и (число(Лев(сч.Код,3))<=134)) Тогда
                    счета.ДобавитьЗначение(сч.ТекущийСчет());
                КонецЕсли;
            Иначе    
                Если число(Лев(сч.Код,2))=24 Тогда
                    счета.ДобавитьЗначение(сч.ТекущийСчет());
                КонецЕсли;
            КонецЕсли;    
        ИначеЕсли Фл_Мат_ОС_Ном=2 Тогда
            Если Константа.НовыйПланСчетов.Получить(ДатаДок)=Перечисление.Булево.Нет Тогда
                Если (число(Лев(сч.Код,3))>=221) и (число(Лев(сч.Код,3))<=223) Тогда
                    счета.ДобавитьЗначение(сч.ТекущийСчет());
                КонецЕсли;
            Иначе
                Если (число(Лев(сч.Код,3))=132) или (число(Лев(сч.Код,3))=133) или (число(Лев(сч.Код,4))=1352) Тогда
                    счета.ДобавитьЗначение(сч.ТекущийСчет());
                КонецЕсли;
            КонецЕсли;    
        КонецЕсли;
    КонецЦикла;
    
    Если Фл_Мат_ОС_Ном=0 Тогда
        би.ИспользоватьСубконто(ВидыСубконто.Материалы);
        Если Склад.Выбран()=1 Тогда
            би.ИспользоватьСубконто(ВидыСубконто.МестаХранения,Склад);
        КонецЕсли;
    ИначеЕсли Фл_Мат_ОС_Ном=1 Тогда
        би.ВключатьСубсчета(-1,-1);
        би.ВключатьСубсчета(1);
        би.ИспользоватьСубконто(ВидыСубконто.ОсновныеСредства);
        Если Подразделение.Выбран()=1 Тогда
            би.ИспользоватьСубконто(ВидыСубконто.Подразделения,Подразделение, 2);
        КонецЕсли;
        Если МОЛ.Выбран()=1 Тогда
            би.ИспользоватьСубконто(ВидыСубконто.Сотрудники,МОЛ, 2);
        КонецЕсли;
    ИначеЕсли Фл_Мат_ОС_Ном=2 Тогда
        би.ИспользоватьСубконто(ВидыСубконто.Номенклатура);
        Если Склад.Выбран()=1 Тогда
            би.ИспользоватьСубконто(ВидыСубконто.МестаХранения,Склад);
        КонецЕсли;  
    КонецЕсли;

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

Домовик Подменю пользователя
сообщение 14.04.14, 12:01
Сообщение #2

Ветеран
Иконка группы
Группа: Местный
Сообщений: 975
Из: Киев
Спасибо сказали: 168 раз
Рейтинг: 0

кроме этих отчетов есть какие-то стандартные отчеты, типа оборотно-сальдовой ведомости?

маленькое изображение документа. не видно ОС, по кот нулевая сумма, и есть ли это ОС в отчете.


Спасибо сказали: Aisha12,

Aisha12 Подменю пользователя
сообщение 14.04.14, 12:10
Сообщение #3

Общительный
**
Группа: Пользователи
Сообщений: 38
Спасибо сказали: 0 раз
Рейтинг: 0

Цитата(Домовик @ 14.04.14, 17:01) *
кроме этих отчетов есть какие-то стандартные отчеты, типа оборотно-сальдовой ведомости?

маленькое изображение документа. не видно ОС, по кот нулевая сумма, и есть ли это ОС в отчете.


Да, оборотно-сальдовая ведомость есть, как и в типовой 7.7, В отчете выходят как раз те ОС, которые на определенном сотруднике. А в документ выходят еще и другие ос, которые записаны под другого сотрудника, но без суммы.

Домовик Подменю пользователя
сообщение 14.04.14, 12:25
Сообщение #4

Ветеран
Иконка группы
Группа: Местный
Сообщений: 975
Из: Киев
Спасибо сказали: 168 раз
Рейтинг: 0

грубо говоря, Ваш документ перебирает различные комбинации с парой субконто Мол и ОС, и если такой пары нет, то выдает остаток ноль.

в коде сейчас мне некогда смотреть, поэтому поставьте пока "заглушку" - условие

если ОСы.Сумма<>0 тогда// добавлено
        НоваяСтрока();
            ИнвНомер=ОСы.ОС.НомерИК;
            ТМЦ=ОСы.ОС;
            БКоличество=1;
            БСумма=ОСы.Сумма;
КонецЕсли;// добавлено


в дальнейшем, код заполнения табличной части документа нужно будет смотреть, изменять, переписывать.

alex040269 Подменю пользователя
сообщение 14.04.14, 12:39
Сообщение #5

Крутой
Иконка группы
Группа: Местный
Сообщений: 1626
Из: Гуляйполе
Спасибо сказали: 236 раз
Рейтинг: 0

Цитата(Aisha12 @ 14.04.14, 13:10) *
которые записаны под другого сотрудника, но без суммы.

в ОСВ выводятся данные только с результатом, т.е. с оборотом или остатками.


Signature
Никогда не бойся делать то, что не умеешь, помни - Ноев ковчег был построен любителем, профессионалы построили Титаник.
ЗиУП

Спасибо сказали: Aisha12,

Aisha12 Подменю пользователя
сообщение 14.04.14, 13:20
Сообщение #6

Общительный
**
Группа: Пользователи
Сообщений: 38
Спасибо сказали: 0 раз
Рейтинг: 0

Цитата(Домовик @ 14.04.14, 17:25) *
грубо говоря, Ваш документ перебирает различные комбинации с парой субконто Мол и ОС, и если такой пары нет, то выдает остаток ноль.

в коде сейчас мне некогда смотреть, поэтому поставьте пока "заглушку" - условие

если ОСы.Сумма<>0 тогда// добавлено
        НоваяСтрока();
            ИнвНомер=ОСы.ОС.НомерИК;
            ТМЦ=ОСы.ОС;
            БКоличество=1;
            БСумма=ОСы.Сумма;
КонецЕсли;// добавлено

спасибо, помогло

Цитата(Домовик @ 14.04.14, 17:25) *
в дальнейшем, код заполнения табличной части документа нужно будет смотреть, изменять, переписывать

зачем переписывать?

Сообщение отредактировал Vofka - 14.04.14, 20:52

alex040269 Подменю пользователя
сообщение 14.04.14, 14:33
Сообщение #7

Крутой
Иконка группы
Группа: Местный
Сообщений: 1626
Из: Гуляйполе
Спасибо сказали: 236 раз
Рейтинг: 0

Цитата(Aisha12 @ 14.04.14, 14:20) *
зачем переписывать?

время покажет!


Signature
Никогда не бойся делать то, что не умеешь, помни - Ноев ковчег был построен любителем, профессионалы построили Титаник.
ЗиУП

Домовик Подменю пользователя
сообщение 15.04.14, 11:29
Сообщение #8

Ветеран
Иконка группы
Группа: Местный
Сообщений: 975
Из: Киев
Спасибо сказали: 168 раз
Рейтинг: 0

переписывать не сейчас.

потому-что ошибка где-то есть. учитесь отладчиком пользоваться. и со временем найдете.

там схема такая:
в зависимости от условий назначается одно из субконто, список счетов, потом выполяется запрос к остаткам.

Потом перебираются результаты запроса по второму виду субконто. Но в случае ОС почему-то еще используется ВыбратьСчета() - внутри цикла еще перебор счетов.

часто используется схема вроде этой:
    Ит.ВыбратьСчета();
        Пока Ит.ПолучитьСчет() = 1 Цикл
            Ит.ВыбратьСубконто(1);
            Пока Ит.ПолучитьСубконто(1) = 1 Цикл
                Ит.ВыбратьСубконто(2);
                Пока Ит.ПолучитьСубконто(2) = 1 Цикл


добавить нужные проверки по счетам и видам субконто и нулей бы не было.
а так - нужно проверять отладчиком - что автор кода хотел перебором счетом внутри цикла отследить.



Владимир, Vofka, убиваете меня ограничением редактирования. ).

Сообщение отредактировал Домовик - 15.04.14, 11:27

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 28.03.24, 15:44
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!