Имя: Пароль:
1C
1С v8
перестал работать самописный документ
,
0 JedaiMaster
 
24.02.14
05:42
в конфигурации есть документ Распределение отклонений счета 10_20
(писаный франчем у которого не спросить)
который хорошо отрабатывал свое, но вот в октябре он перестал работать не формирует проводки.  Опытным путем было определено что на этом участке кода не формируется Выборка.Где тыкать что бы понять почему октябрь он мне бракует и не работает?
Запрос.Текст = "ВЫБРАТЬ
                   |    ХозрасчетныйОбороты.Счет,
                   |    ХозрасчетныйОбороты.КорСчет,
                   |    ХозрасчетныйОбороты.Субконто1,
                   |    ХозрасчетныйОбороты.Субконто2,
                   |    ХозрасчетныйОбороты.Субконто3,
                   |    ХозрасчетныйОбороты.КорСубконто1,
                   |    ХозрасчетныйОбороты.КорСубконто2,
                   |    ХозрасчетныйОбороты.КорСубконто3,
                   |    ХозрасчетныйОбороты.СуммаОборотКт КАК СуммаОборотКт,
                   |    ЕСТЬNULL(ХозрасчетныйОбороты.ПодразделениеКор, ЗНАЧЕНИЕ(Справочник.ПодразделенияОрганизаций.ПустаяСсылка)) КАК Подразделение
                   |ИЗ
                   |    РегистрБухгалтерии.Хозрасчетный.Обороты(&НачПериода, &КонПериода, , Счет В ИЕРАРХИИ (&СписокСчетов10), , Субконто"+НомерСубконто+" = &Склад, НЕ КорСчет В (&ИсключаемыеКорСчета), ) КАК ХозрасчетныйОбороты";
    Запрос.УстановитьПараметр("ИсключаемыеКорСчета",ВернутьСписокИсклСчетов());
    Результат = Запрос.Выполнить();
    
    СуммаТМЦ = Результат10.ОстатокТМЦ + Результат10.ОборотТМЦ;
    ТаблицаДвижений = Движения.ДоляСписанияЗСР.ВыгрузитьКолонки();
    ТаблицаДвижений.Колонки.Добавить("КорСчет");
    ТаблицаДвижений.Колонки.Добавить("КорСубконто1");
    ТаблицаДвижений.Колонки.Добавить("КорСубконто2");
    ТаблицаДвижений.Колонки.Добавить("КорСубконто3");
    ТаблицаДвижений.Колонки.Добавить("Статья");
    ОстатокЗСР = 0;ОборотЗСР = 0;ДоляСписания = 0;
    Пока Результат10_20.Следующий() Цикл
        ОстатокЗСР = ОстатокЗСР + Результат10_20.ОстатокЗСР;
        ОборотЗСР = ОборотЗСР + Результат10_20.ОборотЗСР;
        ДоляСписания = ДоляСписания + ((Результат10_20.ОстатокЗСР + Результат10_20.ОборотЗСР) / СуммаТМЦ);
        Выборка = Результат.Выбрать();
        Пока Выборка.Следующий() Цикл
            НоваяСтрока = ТаблицаДвижений.Добавить();
            НоваяСтрока.Организация = СтруктураШапкиДокумента.Организация;
            НоваяСтрока.ПериодРасчета = КонецМесяца(ПериодРегистрации);
            НоваяСтрока.Статья = Результат10_20.Статья;
1 Wobland
 
24.02.14
05:45
тыкать в Результат10_20. внезапно, правда?
2 JedaiMaster
 
24.02.14
05:49
(1) очень внезапно *_*
3 JedaiMaster
 
24.02.14
05:53
(1) попробовал сделать как ты сказал.
В обоих случаях (месяц когда все норм и когда нет ) эта переменная похожа
4 Godofsin
 
24.02.14
05:54
(3) Всмысле похожа? ))))
5 Godofsin
 
24.02.14
05:54
Выборка есть или нет?
6 JedaiMaster
 
24.02.14
05:55
Процедура РаспределениеОтклоненийСчета10_20(СтруктураШапкиДокумента, Отказ, Заголовок)
    НомерСубконто = ВернутьНомерСубконтоСклады();
    Запрос = Новый Запрос("ВЫБРАТЬ
                          |    ХозрасчетныйОстаткиИОбороты.Субконто"+НомерСубконто+" КАК Склад,
                          |    ХозрасчетныйОстаткиИОбороты.СуммаНачальныйОстатокДт КАК ОстатокТМЦ,
                          |    ХозрасчетныйОстаткиИОбороты.СуммаОборотДт КАК ОборотТМЦ
                          |ИЗ
                          |    РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(
                          |            &НачПериода,
                          |            &КонПериода,
                          |            Месяц,
                          |            ДвиженияИГраницыПериода,
                          |            Счет В (&СписокСчетов10),
                          |            ,
                          |            Организация = &Организация
                          |                И Субконто"+НомерСубконто+" = &Склад) КАК ХозрасчетныйОстаткиИОбороты");
    Запрос.УстановитьПараметр("Организация", Организация);
    Запрос.УстановитьПараметр("НачПериода", НачалоМесяца(ПериодРегистрации));
    Запрос.УстановитьПараметр("КонПериода", КонецМесяца(ПериодРегистрации));
    Запрос.УстановитьПараметр("СписокСчетов10", ВернутьСписокСчетов10());
    Запрос.УстановитьПараметр("Склад", Склад);
    Результат10 = Запрос.Выполнить().Выбрать();
    Если НЕ Результат10.Следующий() Тогда
        Возврат;
    КонецЕсли;
    Запрос.Текст = "ВЫБРАТЬ
                   |    ХозрасчетныйОстаткиИОбороты.Субконто1 КАК Статья,
                   |    СУММА(ХозрасчетныйОстаткиИОбороты.СуммаНачальныйОстатокДт) КАК ОстатокЗСР,
                   |    СУММА(ХозрасчетныйОстаткиИОбороты.СуммаОборотДт) КАК ОборотЗСР
                   |ИЗ
                   |    РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&НачПериода, &КонПериода, Месяц, ДвиженияИГраницыПериода, Счет = &Счет10_20, , Организация = &Организация) КАК ХозрасчетныйОстаткиИОбороты
                   |
                   |СГРУППИРОВАТЬ ПО
                   |    ХозрасчетныйОстаткиИОбороты.Субконто1";
    Запрос.УстановитьПараметр("Счет10_20",ПланыСчетов.Хозрасчетный.ЗаготовительноСкладскиеРасходыПоМатериалам);
    Результат10_20 = Запрос.Выполнить().Выбрать();
    
    Запрос.Текст = "ВЫБРАТЬ
                   |    ХозрасчетныйОбороты.Счет,
                   |    ХозрасчетныйОбороты.КорСчет,
                   |    ХозрасчетныйОбороты.Субконто1,
                   |    ХозрасчетныйОбороты.Субконто2,
                   |    ХозрасчетныйОбороты.Субконто3,
                   |    ХозрасчетныйОбороты.КорСубконто1,
                   |    ХозрасчетныйОбороты.КорСубконто2,
                   |    ХозрасчетныйОбороты.КорСубконто3,
                   |    ХозрасчетныйОбороты.СуммаОборотКт КАК СуммаОборотКт,
                   |    ЕСТЬNULL(ХозрасчетныйОбороты.ПодразделениеКор, ЗНАЧЕНИЕ(Справочник.ПодразделенияОрганизаций.ПустаяСсылка)) КАК Подразделение
                   |ИЗ
                   |    РегистрБухгалтерии.Хозрасчетный.Обороты(&НачПериода, &КонПериода, , Счет В ИЕРАРХИИ (&СписокСчетов10), , Субконто"+НомерСубконто+" = &Склад, НЕ КорСчет В (&ИсключаемыеКорСчета), ) КАК ХозрасчетныйОбороты";
    Запрос.УстановитьПараметр("ИсключаемыеКорСчета",ВернутьСписокИсклСчетов());
    Результат = Запрос.Выполнить();
    
    СуммаТМЦ = Результат10.ОстатокТМЦ + Результат10.ОборотТМЦ;
    ТаблицаДвижений = Движения.ДоляСписанияЗСР.ВыгрузитьКолонки();
    ТаблицаДвижений.Колонки.Добавить("КорСчет");
    ТаблицаДвижений.Колонки.Добавить("КорСубконто1");
    ТаблицаДвижений.Колонки.Добавить("КорСубконто2");
    ТаблицаДвижений.Колонки.Добавить("КорСубконто3");
    ТаблицаДвижений.Колонки.Добавить("Статья");
    ОстатокЗСР = 0;ОборотЗСР = 0;ДоляСписания = 0;
    Пока Результат10_20.Следующий() Цикл
        ОстатокЗСР = ОстатокЗСР + Результат10_20.ОстатокЗСР;
        ОборотЗСР = ОборотЗСР + Результат10_20.ОборотЗСР;
        ДоляСписания = ДоляСписания + ((Результат10_20.ОстатокЗСР + Результат10_20.ОборотЗСР) / СуммаТМЦ);
        Выборка = Результат.Выбрать();
        Пока Выборка.Следующий() Цикл
            НоваяСтрока = ТаблицаДвижений.Добавить();
            НоваяСтрока.Организация = СтруктураШапкиДокумента.Организация;
            НоваяСтрока.ПериодРасчета = КонецМесяца(ПериодРегистрации);
            НоваяСтрока.Статья = Результат10_20.Статья;
            НоваяСтрока.Подразделение = Выборка.Подразделение;
            НоваяСтрока.ОстатокЗСР = Результат10_20.ОстатокЗСР;
            НоваяСтрока.ОборотЗСР = Результат10_20.ОборотЗСР;
            НоваяСтрока.ОстатокТМЦ = Результат10.ОстатокТМЦ;
            НоваяСтрока.ОборотТМЦ = Результат10.ОборотТМЦ;
            НоваяСтрока.ДоляСписания = (Результат10_20.ОстатокЗСР + Результат10_20.ОборотЗСР) / СуммаТМЦ;
            НоваяСтрока.СуммаСписания = Окр(Выборка.СуммаОборотКт * НоваяСтрока.ДоляСписания ,2,1);
            НоваяСтрока.КорСчет = Выборка.КорСчет;
            НоваяСтрока.КорСубконто1 = Выборка.КорСубконто1;
            НоваяСтрока.КорСубконто2 = Выборка.КорСубконто2;
            НоваяСтрока.КорСубконто3 = Выборка.КорСубконто3;
        КонецЦикла;
    КонецЦикла;
    ТаблицаСписания = ТаблицаДвижений.Скопировать();
    ТаблицаСписания.Свернуть("Статья,Подразделение,КорСчет,КорСубконто1,КорСубконто2,КорСубконто3","СуммаСписания");
    Для Каждого СтрокаТЗ Из ТаблицаСписания Цикл
        Проводка = мПроводкиБУ.Добавить();
        Проводка.Период = КонецМесяца(ПериодРегистрации);
        Проводка.Организация = СтруктураШапкиДокумента.Организация;
        Проводка.СчетДт = СтрокаТЗ.КорСчет;
        Проводка.ПодразделениеДт = СтрокаТЗ.Подразделение;
        БухгалтерскийУчет.УстановитьСубконто(Проводка.СчетДт, Проводка.СубконтоДт, 1, СтрокаТЗ.КорСубконто1);
        БухгалтерскийУчет.УстановитьСубконто(Проводка.СчетДт, Проводка.СубконтоДт, 2, СтрокаТЗ.КорСубконто2);
        БухгалтерскийУчет.УстановитьСубконто(Проводка.СчетДт, Проводка.СубконтоДт, 3, СтрокаТЗ.КорСубконто3);
        Проводка.СчетКт = ПланыСчетов.Хозрасчетный.ЗаготовительноСкладскиеРасходыПоМатериалам;
        БухгалтерскийУчет.УстановитьСубконто(Проводка.СчетКт, Проводка.СубконтоКт, "ЗаготовительноСкладскиеРасходы", СтрокаТЗ.Статья);
        Проводка.Сумма = СтрокаТЗ.СуммаСписания;
        Проводка.Содержание = "Списаны затраты собственных сил - "+СтруктураШапкиДокумента.Склад;
        //НалоговыйУчет.ЗаполнитьНалоговыеСуммыПроводки(
        //СуммаПроводкиНУ, СуммаПроводкиНУ, СуммаПроводкиПР, СуммаПроводкиПР, СуммаПроводкиВР ,СуммаПроводкиВР , Проводка);
    КонецЦикла;
    ТаблицаДвижений.Свернуть("Организация,ПериодРасчета,Подразделение,ОстатокТМЦ,ОборотТМЦ","ОстатокЗСР,ОборотЗСР,ДоляСписания,ОборотТМЦКт,СуммаСписания");
    ТЗ = Результат.Выгрузить();
    ТЗ.Свернуть("Подразделение","СуммаОборотКт");
    Для Каждого СтрокаТЗ Из ТЗ Цикл
        СтрокаТД = ТаблицаДвижений.Найти(СтрокаТЗ.Подразделение,"Подразделение");
        Если СтрокаТД <> Неопределено Тогда
            СтрокаТД.ОборотТМЦКт = СтрокаТЗ.СуммаОборотКт;
        КонецЕсли;
    КонецЦикла;
    ТаблицаДвижений.ЗаполнитьЗначения(ОстатокЗСР,"ОстатокЗСР");
    ТаблицаДвижений.ЗаполнитьЗначения(ОборотЗСР,"ОборотЗСР");
    ТаблицаДвижений.ЗаполнитьЗначения(ДоляСписания,"ДоляСписания");
    Движения.ДоляСписанияЗСР.Очистить();
    Движения.ДоляСписанияЗСР.Загрузить(ТаблицаДвижений);    
КонецПроцедуры

Функция ВернутьЗначениеСубконто(Выборка, Счет,СубконтоДтКт, ИмяТипа)
    Для х =1 По Счет.ВидыСубконто.Количество() Цикл
        Если ТипЗнч(Выборка[СубконтоДтКт+СокрЛП(Строка(х))]) = Тип(ИмяТипа) Тогда
            Возврат Выборка[СубконтоДтКт+СокрЛП(Строка(х))];
        КонецЕсли;
    КонецЦикла;
    Возврат Неопределено;
КонецФункции

// Выполняет движения по регистрам
//
Процедура ДвиженияПоРегистрам(СтруктураШапкиДокумента, Отказ, Заголовок)
    РаспределениеОтклоненийСчета10_20(СтруктураШапкиДокумента, Отказ, Заголовок);
КонецПроцедуры
7 JedaiMaster
 
24.02.14
05:56
(5) да, данные в выборке есть
8 Wobland
 
24.02.14
05:59
Пока Результат10_20.Следующий() Цикл
        Выборка = Результат.Выбрать();
        Пока Выборка.Следующий() Цикл

это что за адовы циклы?
9 Godofsin
 
24.02.14
06:01
(7) в обоих?
10 JedaiMaster
 
24.02.14
06:05
(8) работа франча
(9) Выборка = Результат.Выбрать();
тут уже нет, http://imageban.ru/show/2014/02/24/af278512c1f737b73acfc2d2387e9edb/jpg
11 Wobland
 
24.02.14
06:11
(10) вот вообще не убедил, что Выборка пуста
12 JedaiMaster
 
24.02.14
06:34
13 Wobland
 
24.02.14
06:35
смотри на неё после вызова Следующего()
14 JedaiMaster
 
24.02.14
06:41
15 echo77
 
24.02.14
06:44
(14) после, а не ДО
16 Godofsin
 
24.02.14
06:45
(14) .....
17 echo77
 
24.02.14
06:46
А вообще смотри в табло Результат.Выгрузить()
18 Feunoir
 
24.02.14
06:51
(8) Не говори так! Это же франч писал, а значит код красив, гладок и шелковист.
19 JedaiMaster
 
24.02.14
06:53
(16) да не дотягиваю до опытного, поэтому  и запостил
20 JedaiMaster
 
24.02.14
06:58
(17) Выборка = Результат.Выгрузить().ВыбратьСтроку();
выдает пустоту
21 Wobland
 
24.02.14
06:58
(18) да, я так и чувствую, как мои волосы на затылке начинают приобретать гладкость и шелковистость. пока не стояли торчком, я этого и не замечал
22 Godofsin
 
24.02.14
06:59
(20) Выборка = Результат.Выгрузить()[0]
23 Wobland
 
24.02.14
07:01
(22) ну нету у него ни одной строки
(20) теперь у тебя есть вопрос, который возвращает пустоту. он это правильно делает?
24 JedaiMaster
 
24.02.14
07:03
(22) за пределами индекса
25 Feunoir
 
24.02.14
07:03
(20) Бери запрос

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



На строчке Результат = Запрос.Выполнить(); ставь точку останова и смотри какие параметры передаются в запрос.
Потом текст запроса копируй в любую консоль запроса и выполняй там с теми-же параметрами. Потом смотри оборотку по 10 счету и сравнивай с твоим запросом.

Либо не тот склад, либо что-то с корсчетами накосячили
26 JedaiMaster
 
24.02.14
07:04
(23)да пустоты не должно быть, и ее нет когда провожу документ -сентябрь, когда провожу октябрь то путсота
27 Wobland
 
24.02.14
07:12
(26) ну нет движений за такой период по таким условиями
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.