Имя: Пароль:
1C
1С v8
Дополнительная нумерация в документе
,
0 reginah2015
 
19.01.15
22:20
Добрый день! Помогите пожалуйста, я начинающий программист.
Задача: Просим рассмотреть возможность нумерации документа Приходный кассовый ордер в разрезе подразделения.
Моё решение: 1)создала в справочнике Подразделения дополнительный реквизит Префикс - строка
2) Создала в документе ПКО дополнительный префикс
3) Создала дополнительный регистр сведений Нумерация по подразделению Измерения : Регистрационный номер , Подразделение, Организация Ресурс : Префикс
В форме документа пишу : в процедуре Перед записью
    НомерПрефиксПодразделения         = 0;
    НомерПрефиксПодразделенияКод      = 0;
    НомерПрефиксПодразделенияНомер    = 0;
    
    
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ЕСТЬNULL(НумерацияПоПодразделениямСрезПоследних.РегистрационныйНомер, 0) КАК РегистрационныйНомер
    |ИЗ
    |    РегистрСведений.НумерацияПоПодразделениям.СрезПоследних(
    |            ,
    |            Организация = &Организация
    |                И Подразделение = &Подразделение) КАК НумерацияПоПодразделениямСрезПоследних";
    
    Запрос.УстановитьПараметр("Организация",Организация);
    Запрос.УстановитьПараметр("Подразделение",ПодразделениеОрганизации);
    
    РезультатЗапроса = Запрос.Выполнить().Выбрать();
    
    Пока РезультатЗапроса.Следующий() Цикл
        НомерПрефиксПодразделения = РезультатЗапроса.РегистрационныйНомер ;
    КонецЦикла;
    НомерПрефиксПодразделенияНомер    =  НомерПрефиксПодразделения +1;
    НомерПрефиксПодразделенияКод      = ПодразделениеОрганизации.ПрефиксПодразделения + " - "+ НомерПрефиксПодразделенияНомер;
    
            Если ПодразделениеОрганизации.ПрефиксПодразделения <>"" Тогда
            
            Движения.НумерацияПоПодразделениям.Записывать = Истина;
            Движение                                      = Движения.НумерацияПоПодразделениям.Добавить();
            Движение.Период                               = Дата;
            Движение.РегистрационныйНомер                 = НомерПрефиксПодразделенияНомер;
            Движение.Подразделение                        = ПодразделениеОрганизации;
            Движение.Организация                          = Организация;
            Движение.Префикс                              = ПодразделениеОрганизации.ПрефиксПодразделения;
            КонецЕсли;
1 reginah2015
 
19.01.15
22:22
Создаю новый документ
При нажатие на кнопку Записать , в регистре сведений появляется запись
При нажатие на ОК - запись исчезает
2 reginah2015
 
19.01.15
22:23
как правильно написать код ??? Подскажите пожалуйста
3 Hans
 
19.01.15
22:25
(0) зачем регистр сведений? В задаче ведь этого небыло? Почему нельзя писать в тот же номер?
4 reginah2015
 
19.01.15
22:26
регистр сведение Периодичность По позиции регистратора
Режим записи Подчинение регистратору
5 reginah2015
 
19.01.15
22:27
документ могут удалить
6 reginah2015
 
19.01.15
22:27
надо где-то хранить данные
7 Hans
 
19.01.15
22:30
(5) Зачем тебе номер документа без самого документа? не мудри, пиши свой номер с префиксом подразделения в тот же реквизит.

Либо ты задачу полностью не договариваешь.
8 Hans
 
19.01.15
22:32
Твоя структура регистра непонятно какую информацию несет.
9 reginah2015
 
19.01.15
22:33
эта нумерация должна ещё в кассовую книгу попадать
10 reginah2015
 
19.01.15
22:35
Организация состоит из нескольких маленьких организаций, и это только для одной
11 reginah2015
 
19.01.15
22:36
если документ пометили на удаление, потом удалили, откуда взять нумерацию для следующего документа
12 Фокусник
 
19.01.15
22:36
(6) платформа сама делает уникальные номера по каждому префиксу, Ваше дело только префикс правильный назначить.
13 reginah2015
 
19.01.15
22:37
по подразделению
14 grate
 
19.01.15
22:38
(0) о, ручная нумерация! "но зачем!?" (с)
п.1 правильно, дальше в документе в ПриУстановкеНовогоНомера пропиши установку префикса из реквизита документа (подразделение)
ну или в ту же подписку ПриУстановкеНовогоНомераДокумента добавь, если это всё на типовой какой-то делается
15 reginah2015
 
19.01.15
22:38
по мелких организациям уже есть префиксы
16 Hans
 
19.01.15
22:39
(11) Можно просто доп реквизит добавть "ДопНомер" и туда писать. И перенумеровывать его перед кассовой книгой.

я обычно работал со связками  УТ > БП

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

То что ты делаешь с регистром сведений это муть. В голову нормальному человеку не придет =)
17 reginah2015
 
19.01.15
22:43
извините, вопрос: В какую процедуру писать???
18 reginah2015
 
19.01.15
22:43
Перед записью???
19 reginah2015
 
19.01.15
22:45
при проведение?
При записи?
20 Hans
 
19.01.15
22:45
(15) будет у тебя два префикса ПрефиксОрг + ПрефиксПодр.
в подписке на событие ПриУстановкеНовогоНомераДокумента пропишешь что нужно. не забывай про обработчики "ПриСменеПодразделения" в формах.
21 Hans
 
19.01.15
22:46
(19) пишешь там ПриУстановкеНовогоНомераДокумента
22 reginah2015
 
19.01.15
22:53
Процедура ДобавитьПрефиксПодразделенияОрганизации(ДокументОбъект, Префикс) Экспорт
    
    МетаданныеДокумента = ДокументОбъект.Метаданные();
    
    Если ЕстьРеквизитДокумента("ПодразделениеОрганизации", МетаданныеДокумента)
       И ЗначениеЗаполнено(ДокументОбъект.ПодразделениеОрганизации.Префикс) Тогда
      
        Если Префикс = "0" Тогда
      
            Префикс = ДокументОбъект.ПодразделениеОрганизации.Префикс + Префикс;
            
        Иначе
            
            Префикс = Префикс + ДокументОбъект.ПодразделениеОрганизации.Префикс;
            
        КонецЕсли;
        
    ИначеЕсли ЕстьРеквизитДокумента("ПодразделениеОтправитель", МетаданныеДокумента)
       И ЗначениеЗаполнено(ДокументОбъект.ПодразделениеОтправитель.Префикс) Тогда
      
        Если Префикс = "0" Тогда
      
            Префикс = ДокументОбъект.ПодразделениеОтправитель.Префикс + Префикс;
            
        Иначе
            
            Префикс = Префикс + ДокументОбъект.ПодразделениеОтправитель.Префикс;
            
        КонецЕсли;
        
    Иначе
        
        Префикс = Префикс + "0";
        
    КонецЕсли;
    
Конецпроцедуры // ДобавитьПрефиксПодразделенияОрганизации()
23 reginah2015
 
19.01.15
22:56
нумерация должна быть
Бухгалтерия   00001
Администрация 00001
Бухгалтерия   00002
Производ.     00001
24 Фокусник
 
19.01.15
22:56
(17) включаешь замер производительности, записываешь новый документ, отключаешь замер, анализируешь выполнившийся код (можно в замере сделать поиск по "Префикс")
25 reginah2015
 
19.01.15
22:56
основную нумерацию не трогать
26 reginah2015
 
19.01.15
22:57
а с регистром сведений никак???(((
27 Фокусник
 
19.01.15
22:59
(25) зачем документу два номера? В задании нет ничего про две параллельные нумерации ;)
28 reginah2015
 
19.01.15
23:04
решила не трогать основную нумерацию
29 Фокусник
 
19.01.15
23:09
(28) хозяин - барин  ;)
30 reginah2015
 
19.01.15
23:12
Как сделать, чтобы один раз записать в регистр сведений и при пере проведение документа , запись не исчезала???
31 reginah2015
 
20.01.15
04:39
помогите пожалуйста, как написать???
32 Peltzer
 
20.01.15
06:20
Ну дык, при перепроведении система очищает все записи регистров, созданные этим документом, потом выполняет Процедура ОбработкаПроведения(Отказ, Режим)
и двигает только те регистры, которые там прописаны двигать.
Сделайте реквизит в документ и расслабьтесь.
33 reginah2015
 
20.01.15
18:15
Задача:
1) В кассовой книги в печатной форме вместо номер документа , выводить нумерацию из реквизита ПрефиксПодразделения, созданная в первом задание
34 reginah2015
 
20.01.15
18:16
По первому заданию : кто-то нибудь писал в регистр сведений , при проведение документа???
35 ale-sarin
 
20.01.15
18:20
посмотрите, как в типовых конфах последних релизов реализовано ведение кассовых книг по подразделениям.
36 reginah2015
 
20.01.15
18:21
Перем ДатаЛиста;

    Если НЕ ПроверкаПериода() Тогда
        Возврат;
    КонецЕсли;

    Если Организация.Пустая() Тогда
        Сообщить("Не выбрана организация.");
        Возврат;
    КонецЕсли;

    // {ОбособленныеПодразделения
    Если ФормироватьПоПодразделению И НЕ ЗначениеЗаполнено(ПодразделениеОрганизации) Тогда
        Сообщить("Не выбрано подразделение.");
        Возврат;
    ИначеЕсли НЕ ФормироватьПоПодразделению И ЗначениеЗаполнено(ПодразделениеОрганизации) Тогда
        Сообщить("При снятом флажке ""Подразделение"" подразделение должно быть очищено.");
        Возврат;
    КонецЕсли;
    // }ОбособленныеПодразделения

    ДокументРезультат.Очистить();
    ДокументРезультат.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_КассоваяКнига";
                        
    НачалоГода = НачалоГода(ДатаНач);

    // расчет номера начального листа
    // осуществляется по проводкам так как не все операции по
    // кассе оформляются приходными/расходными ордерами

    ЛистовЗаГод   = 0;
    ЛистовЗаМесяц = 0;

    Попытка //для случая, когда к организации нет доступа
        Если ПересчитатьНомера Тогда
            
            Запрос = Новый Запрос;
            Запрос.УстановитьПараметр("Организация",    Организация);
            Запрос.УстановитьПараметр("ПлатежныйАгент", ПлатежныйАгент);
            Запрос.УстановитьПараметр("НачалоГода",     НачалоГода);
            // {ОбособленныеПодразделения
            Запрос.УстановитьПараметр("Подразделение", ПодразделениеОрганизации);
            // }ОбособленныеПодразделения
            ТекстЗапроса =
            "ВЫБРАТЬ
            |    НомераЛистовКассовойКниги.Период,
            |    НомераЛистовКассовойКниги.Организация,
            // {ОбособленныеПодразделения
            |    НомераЛистовКассовойКниги.ПодразделениеОрганизации,
            // }ОбособленныеПодразделения
            |    НомераЛистовКассовойКниги.ПлатежныйАгент,
            |    НомераЛистовКассовойКниги.НомерЛиста
            |ИЗ
            |    РегистрСведений.НомераЛистовКассовойКниги КАК НомераЛистовКассовойКниги
            |ГДЕ
            |    НомераЛистовКассовойКниги.Период >= &НачалоГода
            |    И НомераЛистовКассовойКниги.Организация = &Организация
            // {ОбособленныеПодразделения
            |    И НомераЛистовКассовойКниги.ПодразделениеОрганизации = &Подразделение
            // }ОбособленныеПодразделения
            |    И НомераЛистовКассовойКниги.ПлатежныйАгент = &ПлатежныйАгент";
            
            Запрос.Текст = ТекстЗапроса;
            Выборка = Запрос.Выполнить().Выбрать();
            
            Пока Выборка.Следующий() Цикл
                Менеджер = РегистрыСведений.НомераЛистовКассовойКниги.СоздатьМенеджерЗаписи();
                ЗаполнитьЗначенияСвойств(Менеджер, Выборка);
                Менеджер.Удалить();
            КонецЦикла;
            
        Иначе
            
            Если ДатаНач <> НачалоГода Тогда
                
                Отбор = Новый Структура();
                Отбор.Вставить("Организация",    Организация);
                Отбор.Вставить("ПлатежныйАгент", ПлатежныйАгент);
                // {ОбособленныеПодразделения
                Отбор.Вставить("ПодразделениеОрганизации", ПодразделениеОрганизации);
                // }ОбособленныеПодразделения
                Номера = РегистрыСведений.НомераЛистовКассовойКниги.СрезПоследних(ДатаНач - 86400, Отбор);
                
                Если (Номера.Количество() > 0) И (Номера[0].Период >= НачалоГода) Тогда
                    
                    ЛистовЗаГод = Номера[0].НомерЛиста;
                    
                    ЛистовЗаПредыдущиеМесяцы = 0;
                    НомераПредМесяцев = РегистрыСведений.НомераЛистовКассовойКниги.СрезПоследних(НачалоМесяца(ДатаНач) - 86400, Отбор);
                    Если (НомераПредМесяцев.Количество() > 0) И (НомераПредМесяцев[0].Период >= НачалоГода) Тогда
                        ЛистовЗаПредыдущиеМесяцы = НомераПредМесяцев[0].НомерЛиста;
                    КонецЕсли;
                    
                    ЛистовЗаМесяц = ЛистовЗаГод - ЛистовЗаПредыдущиеМесяцы;
                    
                КонецЕсли;
                
            КонецЕсли;
            
        КонецЕсли;
    Исключение
        //Эта ветка сработает при выборе организации на которю нет прав
        Предупреждение(НСтр("ru = 'Нарушение прав доступа!'"));
        Возврат;
    КонецПопытки;

    // Инициируем области отчета

    Макет = ПолучитьМакет("КассоваяКнига");

    //////////////////////////////////////////////////////////////////////////////////////////
    
    ОбластьВалОстатокОтчет                 = Макет.ПолучитьОбласть("ВалОстаток|Отчет");
    ОбластьПодвалОтчет                     = Макет.ПолучитьОбласть("Подвал|Отчет");
    ОбластьВТомЧислеОтчет                 = Макет.ПолучитьОбласть("ВТомЧисле|Отчет");
    ОбластьОстатокОтчет                 = Макет.ПолучитьОбласть("Остаток|Отчет");
    ОбластьЛистовЗаМесяцОтчет             = Макет.ПолучитьОбласть("ЛистовЗаМесяц|Отчет");
    ОбластьЛистовЗаГодОтчет             = Макет.ПолучитьОбласть("ЛистовЗаГод|Отчет");
    ОбластьВкладнойЛистОтчет             = Макет.ПолучитьОбласть("ВкладнойЛист|Отчет");
    ОбластьВкладнойЛист373ПОтчет        = Макет.ПолучитьОбласть("ВкладнойЛист373П|Отчет");
    ОбластьОтчетКассираОтчет             = Макет.ПолучитьОбласть("ОтчетКассира|Отчет");
    ОбластьОтчетКассира373ПОтчет        = Макет.ПолучитьОбласть("ОтчетКассира373П|Отчет");
    ОбластьШапкаОтчет                     = Макет.ПолучитьОбласть("Шапка|Отчет");
    ОбластьОстатокНаНДОтчет             = Макет.ПолучитьОбласть("ОстатокНаНД|Отчет");
    ОбластьКурсовыеРазницыОтчет         = Макет.ПолучитьОбласть("КурсовыеРазницы|Отчет");
    ОбластьКурсовыеРазницыПоВалютеОтчет = Макет.ПолучитьОбласть("КурсовыеРазницыПоВалюте|Отчет");
    ОбластьПереносОтчет                 = Макет.ПолучитьОбласть("Перенос|Отчет");
    ОбластьСтрокаВалШирокаяОтчет         = Макет.ПолучитьОбласть("СтрокаВалШирокая|Отчет");
    ОбластьСтрокаВалОтчет                 = Макет.ПолучитьОбласть("СтрокаВал|Отчет");
    ОбластьСтрокаШирокаяОтчет             = Макет.ПолучитьОбласть("СтрокаШирокая|Отчет");
    ОбластьСтрокаОтчет                     = Макет.ПолучитьОбласть("Строка|Отчет");
    ОбластьОборотОтчет                     = Макет.ПолучитьОбласть("Оборот|Отчет");
    ОбластьОборотРубОтчет                 = Макет.ПолучитьОбласть("ОборотРуб|Отчет");
    ОбластьОборотВалОтчет                 = Макет.ПолучитьОбласть("ОборотВал|Отчет");
    ОбластьКурсоваяРазницаОтчет         = Макет.ПолучитьОбласть("КурсоваяРазница|Отчет");
    ОбластьКурсоваяРазницаПоВалютеОтчет = Макет.ПолучитьОбласть("КурсоваяРазницаПоВалюте|Отчет");
    ОбластьКонечныйОстатокОтчет         = Макет.ПолучитьОбласть("КонечныйОстаток|Отчет");

    ////////////////////////////////////////////////////////////////////////////////////////////////

    НачИтоги = ?(ПересчитатьНомера,НачалоГода,ДатаНач);

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

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

    ЗапросПоДокументам.УстановитьПараметр("НачИтоги",    НачалоДня(НачИтоги));
    ЗапросПоДокументам.УстановитьПараметр("ДатаКон",     КонецДня(ДатаКон));
    ЗапросПоДокументам.УстановитьПараметр("Организация", Организация);
    ЗапросПоДокументам.УстановитьПараметр("Счет",        МассивСчетов);
    // {ОбособленныеПодразделения
    ЗапросПоДокументам.УстановитьПараметр("ПодразделениеОрганизации",      ПодразделениеОрганизации);
    ЗапросПоДокументам.УстановитьПараметр("ФормироватьПоПодразделению",    ФормироватьПоПодразделению);
    // }ОбособленныеПодразделения
    ЗапросПоДокументам.УстановитьПараметр("ОперацияПриемРозничнойВыручки", Перечисления.ВидыОперацийПКО.РозничнаяВыручка);
    
    РезультатЗапросаПоДокументам = ЗапросПоДокументам.Выполнить();
    
    ТаблицаДокументы = РезультатЗапросаПоДокументам.Выгрузить();
    ТаблицаДокументы.Очистить();
    ТаблицаДокументы.Колонки.Добавить("СтрокаСчет");
    ТаблицаДокументы.Колонки.Добавить("Валютный");
    ТаблицаДокументы.Колонки.Добавить("ВидДокумента");
    
    ТипЧисло=ОбщегоНазначения.ПолучитьОписаниеТиповЧисла(15,2);
    
    РабочаяТаблица = Новый ТаблицаЗначений;
    РабочаяТаблица.Колонки.Добавить("Валюта",Новый ОписаниеТипов("СправочникСсылка.Валюты"));
    РабочаяТаблица.Колонки.Добавить("ВалютаПредставление", ОбщегоНазначения.ПолучитьОписаниеТиповСтроки(100));
    РабочаяТаблица.Колонки.Добавить("ВалОстаток",ТипЧисло);
    РабочаяТаблица.Колонки.Добавить("Остаток",ТипЧисло);
    РабочаяТаблица.Колонки.Добавить("ВалПриход",ТипЧисло);
    РабочаяТаблица.Колонки.Добавить("Приход",ТипЧисло);
    РабочаяТаблица.Колонки.Добавить("ВалРасход",ТипЧисло);
    РабочаяТаблица.Колонки.Добавить("Расход",ТипЧисло);
    РабочаяТаблица.Индексы.Добавить("Валюта");
        
    ВыборкаПоВалюте = РезультатЗапросаПоИтогам.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"Валюта");
        
    Пока ВыборкаПоВалюте.Следующий() Цикл
        Если НЕ ВыборкаПоВалюте.Валюта = Справочники.Валюты.ПустаяСсылка() Тогда
            Строка            = РабочаяТаблица.Добавить();
            Строка.Валюта     = ВыборкаПоВалюте.Валюта;
            Строка.ВалютаПредставление = Строка(ВыборкаПоВалюте.Валюта);
            Строка.Остаток    = ВыборкаПоВалюте.СуммаНачальныйОстатокДт;
            Строка.ВалОстаток = ВыборкаПоВалюте.ВалютнаяСуммаНачальныйОстатокДт;
        КонецЕсли;
    КонецЦикла;
    
    ВыборкаОбщихИтогов = РезультатЗапросаПоИтогам.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"Общие");
    
    Строка        = РабочаяТаблица.Добавить();
    Строка.Валюта = Справочники.Валюты.ПустаяСсылка();
    
    Если ВыборкаОбщихИтогов.Следующий() Тогда        
        
        Строка.Остаток    = ВыборкаОбщихИтогов["СуммаНачальныйОстатокДт"]-РабочаяТаблица.Итог("Остаток");
        Строка.ВалОстаток = ВыборкаОбщихИтогов["ВалютнаяСуммаНачальныйОстатокДт"]-РабочаяТаблица.Итог("ВалОстаток");
        
    Иначе
        
        Строка.Остаток    = 0;
        Строка.ВалОстаток = 0;
        
    КонецЕсли;

    РабочаяТаблица.Сортировать("ВалютаПредставление");
    
    // Определяем последние дни месяцев за которые формируется кассовая книга
    
    СписокДней = Новый СписокЗначений;
    
    ВыборкаИтоговПоДням = РезультатЗапросаПоИтогам.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"Период");
    Пока ВыборкаИтоговПоДням.Следующий() Цикл
        СписокДней.Добавить(ВыборкаИтоговПоДням.Период);
    КонецЦикла;
    ВыборкаДокументовПоДням = РезультатЗапросаПоДокументам.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"День");
    Пока ВыборкаДокументовПоДням.Следующий() Цикл
        СписокДней.Добавить(ВыборкаДокументовПоДням.День);
    КонецЦикла;
    СписокДней.СортироватьПоЗначению();
    
    МассивПоследнихДней = Новый Массив;
    Для й = 2 По СписокДней.Количество() Цикл
        Если НачалоМесяца(СписокДней[й - 2].Значение) <> НачалоМесяца(СписокДней[й - 1].Значение) Тогда
            МассивПоследнихДней.Добавить(СписокДней[й - 2].Значение);
        КонецЕсли;
    КонецЦикла;
    
    // Формирование листов кассовой книги
    
    ВыборкаИтоговПоДням     = РезультатЗапросаПоИтогам.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"Период");
    ВыборкаДокументовПоДням = РезультатЗапросаПоДокументам.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"День");
    
    ПоПроводкам  = ВыборкаИтоговПоДням.Следующий();
    ПоДокументам = ВыборкаДокументовПоДням.Следующий();
    
    БылиОшибки    = Ложь;
    ВывестиПодвал = Ложь;
    
    СведенияОбОрганизации = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Организация, КонецДня(ДатаКон));

    ДатаДействияПриказа373П = '20120101';
    ТипПКО = Тип("ДокументСсылка.ПриходныйКассовыйОрдер");
    ТипРКО = Тип("ДокументСсылка.РасходныйКассовыйОрдер");
        
    Пока ПоПроводкам Или ПоДокументам  Цикл
        Если НЕ ПоПроводкам  Тогда
            ДатаЛиста = ВыборкаДокументовПоДням.День;
        ИначеЕсли НЕ ПоДокументам Тогда
            ДатаЛиста = ВыборкаИтоговПоДням.Период;
        Иначе                
            ДатаЛиста = Мин(ВыборкаДокументовПоДням.День, ВыборкаИтоговПоДням.Период);
        КонецЕсли;
        Если ВыборкаИтоговПоДням.СуммаОборотДт = 0 И ВыборкаИтоговПоДням.СуммаОборотКт = 0 Тогда
            Если НЕ ПоДокументам ИЛИ ДатаЛиста <> ВыборкаДокументовПоДням.День Тогда
                ПоПроводкам = ВыборкаИтоговПоДням.Следующий();
                Продолжить;
            КонецЕсли;
        КонецЕсли;
        НомерЛиста = ЛистовЗаГод + 1;
        ЛистовЗаГод = ЛистовЗаГод + 1;
        ЛистовЗаМесяц = ЛистовЗаМесяц + 1;
        
        КоличествоПриходныхДокументов = 0;
        КоличествоРасходныхДокументов = 0;
        
        СчетКурсовыхРазниц = ПланыСчетов.Хозрасчетный.ПрочиеДоходыИРасходы;
        Остаток = РабочаяТаблица.Итог("Остаток");
        Если ДатаЛиста >= ДатаНач Тогда
            
            ЗаголовокЛиста = "  КАССА за " + Формат(ДатаЛиста, "ДФ=dd.MM.yyyy");
            НомерЛистаСтр  = "Лист " + НомерЛиста;
            Если ДатаЛиста < ДатаДействияПриказа373П Тогда
                ОбластьВкладнойЛистОтчет.Параметры.ЗаголовокЛиста = ЗаголовокЛиста;
                ДокументРезультат.Вывести(ОбластьВкладнойЛистОтчет);
                ОбластьОтчетКассираОтчет.Параметры.ЗаголовокЛиста = ЗаголовокЛиста;
                ДокументРезультат.Присоединить(ОбластьОтчетКассираОтчет);
                ОбластьШапкаОтчет.Параметры.ТекстНомерЛиста = НомерЛистаСтр;
            Иначе
                ЗаголовокЛиста = "  КАССА за " + Формат(ДатаЛиста, "ДЛФ=DD");
                ОбластьВкладнойЛист373ПОтчет.Параметры.ЗаголовокЛиста  = ЗаголовокЛиста;
                ОбластьОтчетКассира373ПОтчет.Параметры.ЗаголовокЛиста  = ЗаголовокЛиста;
                ОбластьВкладнойЛист373ПОтчет.Параметры.ТекстНомерЛиста = НомерЛистаСтр;
                ОбластьОтчетКассира373ПОтчет.Параметры.ТекстНомерЛиста = НомерЛистаСтр;
                ДокументРезультат.Вывести(ОбластьВкладнойЛист373ПОтчет);
                ДокументРезультат.Присоединить(ОбластьОтчетКассира373ПОтчет);
                ОбластьШапкаОтчет.Параметры.ТекстПлатежныйАгент = "";
                ОбластьШапкаОтчет.Параметры.ТекстНомерЛиста     = "";
            КонецЕсли;
            
            Если ПлатежныйАгент Тогда
                ОбластьШапкаОтчет.Параметры.ТекстПлатежныйАгент = "По деятельности платежного агента";
            КонецЕсли;
            
            ДокументРезультат.Вывести(ОбластьШапкаОтчет);
            ДокументРезультат.Присоединить(ОбластьШапкаОтчет);
            
            ОбластьОстатокНаНДОтчет.Параметры.ОстатокНачало=Остаток;
            ДокументРезультат.Вывести(ОбластьОстатокНаНДОтчет);
            ДокументРезультат.Присоединить(ОбластьОстатокНаНДОтчет);
            
        КонецЕсли;
    
        ПоВалютам = Ложь;
        Для Каждого Строка Из РабочаяТаблица Цикл  
            Если ((Строка.Остаток <> 0) Или (Строка.ВалОстаток <> 0)) И (НЕ Строка.Валюта=Справочники.Валюты.ПустаяСсылка()) Тогда
                ПоВалютам = Истина;      
                Прервать;
            КонецЕсли;
        КонецЦикла;
        
//        Высота каждой строки = 13 пунктов
//      На стандартную страницу помещается 59 строк

//        Высоты секций в строках:
//      Шапка = 5 стр
//        ВкладнойЛист = 3 стр (с 2013 2 стр)
//        ОтчетКассира = 3 стр (с 2013 2 стр)
//        ОстатокНаНачало = 1 стр
//        ВТомЧисле = 1 стр
//        Остаток = 1 стр
//        ВалОстаток = 2 стр
//        КурсовыеРазницы = 2 стр
//        КурсовыеРазницыПоВалюте = 1 стр
//        Строка = 2 стр
//        СтрокаШирокая = 4 стр
//        СтрокаВал = 2 стр
//        СтрокаВалШирокая = 4 стр
//        Перенос = 1 стр
//        Оборот = 1 стр
//        ОборотРуб = 1 стр
//        ОборотВал = 2 стр
//        КурсоваяРазница = 1 стр
//        КурсоваяРазницаПоВалюте = 1 стр
//        КонечныйОстаток = 1
37 reginah2015
 
20.01.15
18:39
Может, у кого ещё мысли появились:
Задача: 1) Создать регистр сведений  2) При проведение документа писать номер в регистр сведений и на форму документа в новый реквизит 3) При пометке документа на удаление, удалять по нему записи 4) При перепродение документа, чтобы номер не увеличивался  , 5) при замене подразделения в документе, уже существующего документа, чтобы номер менялся
38 mdocs
 
20.01.15
18:47
тебе подсказали два нормальных решения.
1. основной номер с префиксом.
2. дополнительный номер, можно с префиксом, можно без.
все замуты с регистром сведений - мазохизм. контролировать нумерацию надо глазками есно буха.
39 reginah2015
 
20.01.15
18:50
сказали, как хочешь, но пиши в регистр
40 reginah2015
 
20.01.15
19:01
номер надо куда-то писать, чтобы нумерация никуда не пропадала
допустим 1,2,4    - 3 пропало так как документ пометили на удаление
41 mdocs
 
20.01.15
19:11
(40) если ручками напачкали пусть ручками и приберут - либо изменят руками номер четвертого, либо следующий документ введут под номером три. такие вещи не нужно автоматизировать - автоматизируя хаос получаешь автоматизированный хаос, это надо помнить.
42 reginah2015
 
20.01.15
20:28
почему хаос??? главное как это автоматизировать
43 reginah2015
 
20.01.15
20:31
может, кто-то сталкивался с этим???
44 reginah2015
 
21.01.15
04:49
я про дополнительную нумерацию
45 Peltzer
 
21.01.15
06:26
Вот недавно же была тема от Alena_Ly про доп.нумерацию.
46 DrZombi
 
гуру
21.01.15
06:34
Сделай проще Добавь префикс в подразделение, и при создании нового ПКО подставляй его.

Все остальные момент, типо съехал номер и т.д. это частный случай, возникают как правила из-за частных случаев, обычно это сбой.
47 DrZombi
 
гуру
21.01.15
06:35
(44) Зачем? Зачем лепить пятое колесо? :)
48 reginah2015
 
21.01.15
17:13
надо с регистром
49 reginah2015
 
21.01.15
17:32
сведений
50 reginah2015
 
21.01.15
17:33
потом в кассовой книге должна нумероваться не по коду, а по этому номеру
51 reginah2015
 
21.01.15
17:35
допустим Бухгалтерия  - Б
         Управление   - У


Б - 00001
Б - 00002
Б - 00003
У - 00001
У - 00002
У - 00003
52 alexei366
 
21.01.15
17:38
(48) В базах данных для таблиц у которых уникальным ключом является автоинкрементная колонка в отдельной таблице хранятся текущие использованые максимальные номера.

Можешь попробывать независимый не переодический регистр сведений с измерением "Префикс" (ну может ещё в добавок чонить по желанию смотря в скольки разрезах ты хочешь чтоб префикс жил) и ресурс "Номер".

В модуле ПередЗаписью к примеру при помощи "БлокировкаДанных" блокируешь конкретную строку этого регистра, вычисляешь текущее значение и записываешь следующее и также устанавливаешь номер. Можешь вынести получения нового номера по Префиксу в отдельную Функцию в которой будет ставиться блокировка на строку и инкрементироваться значение. Если Функция будет вызываться из модуля объекта или подписки то можешь не переживать за "зря" инкрементированные значения при ошибке записи, транзакция откатит все на свои места. Ну а при смене подразделения также в модуле объекта смотришь равенство "Подрасделение = Ссылка.Подразделение" и если изменилось то получаем новый код, ну или если код пустой.

как-то так наверно

(P.S а чо без фотки?)
53 Biker
 
21.01.15
17:39
проапгрейдить бухию до корп,которая может работать с обособками и не изобретать велосипед и ломать существующий учет.
54 reginah2015
 
21.01.15
19:20
нумерация должна присвоиться, при проведение документа
55 reginah2015
 
21.01.15
19:21
делаю: при проведение документа:
56 reginah2015
 
21.01.15
19:22
проверяю новый ли документ
57 reginah2015
 
21.01.15
19:23
тока при перепроведение документа, нумерация удваиваеться
58 reginah2015
 
21.01.15
19:23
как сделать??? не пойму
59 alexei366
 
22.01.15
04:58
Время придет и ты все поймешь))))
60 reginah2015
 
22.01.15
05:22
DrZombi
46 - 21.01.15 - 06:34
Сделай проще Добавь префикс в подразделение, и при создании нового ПКО подставляй его.

....

а нумерацию будет какая :
Допустим : Б 0001
           Б 0002
           У 0003
или      
   Б 0001
   Б 0002
   У 0001
61 Peltzer
 
22.01.15
06:27
В рамках префикса система выдаст автоматически последний номер +1,
т.е.
Б01
Б02
У01
62 DrZombi
 
гуру
22.01.15
08:11
(60) Да такая. А какой номер ты выведешь в Кассовую книгу - С префиксом или Без, уже тебе решать.

И Ручное редактирование номера запретить :)