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

Хранилище

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

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



> 1С УПП 1.3: Отчет Кассовая книга, ошибка формирования Страниц.          
Володька Подменю пользователя
сообщение 04.05.18, 12:42
Сообщение #1

Завсегдатай
****
Группа: Пользователи
Сообщений: 166
Спасибо сказали: 8 раз
Рейтинг: 0

Суть проблемы:
Нумерация кассовой книги дала сбой.
Описание ситуации:
Печатаю Кассовую книгу за период 13.03 - 17.03.
Нумерация 13,14,15-го - нормальная, 16-го , 17-го бред.
Смотрю отличие между этими числами и данными, а оно в том, что 15-го числа количество документов не влезло на один печатный лист.
Лезу в конфигурацию и вижу супер-функцию
Процедура НачатьНовуюСтраницу(СоответствиеНомеровГод, СоответствиеНомеровМесяц, ТекДата, СледДата, ОбластьШапка)
    
    ЧислоДокумента                          = Формат(ТекДата,"ДФ='дд';Л=uk_UA");
    ДатаДокумента                           = Формат(ТекДата,"ДФ='дд ММММ ггггр.';Л=uk_UA");
    ДатаДокументаБезЧисла                   = Прав(ДатаДокумента, СтрДлина(ДатаДокумента) - 2);
    ОбластьШапка.Параметры.ДатаПрописью       = """" + ЧислоДокумента + """" + ДатаДокументаБезЧисла;
    
    // номер листа
    НомеТекЛистаГода = СоответствиеНомеровГод.Получить(НачалоДня(ТекДата));
    СоответствиеНомеровГод.Вставить(НачалоДня(ТекДата), НомеТекЛистаГода + 1);
    НомеТекЛистаМесяца = СоответствиеНомеровМесяц.Получить(НачалоДня(ТекДата));
    СоответствиеНомеровМесяц.Вставить(НачалоДня(ТекДата), НомеТекЛистаМесяца + 1);
        
    ОбластьШапка.Параметры.НомерЛиста = НомеТекЛистаГода + 1;

    Если НачалоМесяца(СледДата) = НачалоМесяца(ТекДата) Тогда
        СоответствиеНомеровМесяц.Вставить(НачалоДня(СледДата), НомеТекЛистаМесяца + 2);
    КонецЕсли;
    
    Если НачалоГода(СледДата) = НачалоГода(ТекДата) Тогда
        СоответствиеНомеровГод.Вставить(НачалоДня(СледДата), НомеТекЛистаГода + 2);
    КонецЕсли;
    
КонецПроцедуры // НачатьНовуюСтраницу


Смотрю соответствие до:
13.03 - 1
14.03 - 2
15.03 - 3
16.03 - 4
17.03 - 5

и вижу весь этот ужас после:
13.03 - 1
14.03 - 2
15.03 - 4
16.03 - 5
17.03 - 5

По коду всё вроде логично и правильно, отрабатывает он, как и ожидалось. Вопрос, у меня у одного не вмещается на лист ПКО и РКО за день? Как побороть?

Пробовал перенумеровать оставшиеся элементы в соответствии так:
    
Для Каждого Элемент Из СоответствиеНомеровГод Цикл
        
        Если Элемент.Ключ > НачалоДня(ТекДата) Тогда
            
            СоответствиеНомеровГод.Вставить(Элемент.Ключ, Элемент.Значение + 1);            
            
        КонецЕсли;        
    
КонецЦикла;


Но это не панацея, во-первых долго, во-вторых т.к. этот код выполняется только в случае разрыва страницы, для печати другого периода он не будет учитывать нумерацию. И получится, что если мой период закончится на 6 (реальной странице), при формировании 18.03-20.03, начальная страница будет 5 (расчетная).
Подкиньте идей, я потерялся.


 ! 

Правила: 3
 


Сообщение отредактировал logist - 04.05.18, 12:49

alex_shkut Подменю пользователя
сообщение 31.07.19, 19:03
Сообщение #2

Общительный
**
Группа: Пользователи
Сообщений: 37
Из: Сумы
Спасибо сказали: 5 раз
Рейтинг: 4.3

Володька @ 04.05.18, 13:42 * ,
Хоть и прошло больше года, ситуация не разрешена до сих пор. У меня почти каждый день касса не помещается на 1 лист и вследствие - разрыв нумерации.
На УПП перешли в апреле этого года (см. дату поста).
Релиз 1.3.61.3
Проблему решаем "сдвигом" начального номера листов кассовой книги.
Я нашел в конфигурации регистр сведений НомераЛистовКассовойКниги, внес туда начальный номер следующего дня.
Судя по его полной пустоте и глобальному поиску по конфигурации - либо я чего-то не знаю, либо он не используется нигде.
Теперь буду в Кассовую Книгу при формировании брать начальный номер по ПолучитьПоследнее и после формирования записывать, какой номер будет начальным завтра.
Типовой код не менял, в пределах дня нумерует нормально, с учетом сдвига начального номера.

Володька @ 04.05.18, 13:42 * ,
Вот прямо по ходу работы комментирую свои размышления:
Можно "слегка" подправить" типовой код функции ПолучитьНачальныйНомерЛиста() на регистр НомераЛистовКассовойКниги, НО!
Он не "заточен" под обособленное Подразделение, следовательно, нужно привести его к виду регистра сведений НачальныеНомераЛистовКассовойКниги.
(Если честно - я вообще не вижу смысла в регистре сведений НачальныеНомераЛистовКассовойКниги, его периодичность - Год и пользы ноль)
Периодичность регистра НомераЛистовКассовойКниги - День, что меня очень устраивает.
Также подправить функцию ЗаписатьНачальныйНомерЛиста() на тот же регистр.
Итого:
1. Переделываем регистр НомераЛистовКассовойКниги точно как НачальныеНомераЛистовКассовойКниги. Периодичность не трогаем.
2. Переделываем 2 функции под новый регистр.
Должно работать, даже в динамике, т.е. в процессе работы можно формировать КК сколько угодно ).

Володька @ 04.05.18, 13:42 * ,
И последнее - решить вопрос перехода в Новый Год )))

Изменения в коде:
Процедура ПолучитьНачальныйНомерЛиста()

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

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

Процедура ЗаписатьНачальныйНомерЛиста()
    
    Если НЕ ВидОтчета = "Кассовая книга" Тогда
        Возврат;
    КонецЕсли;
    
    МенеджерЗаписи = РегистрыСведений.[highlight]НомераЛистовКассовойКниги[/highlight].СоздатьМенеджерЗаписи();
    МенеджерЗаписи.Период = [highlight]ДатаНач[/highlight];
    Если ОбособленноеПодразделениеОрганизации.Пустая() Тогда
        МенеджерЗаписи.СтруктурнаяЕдиница = Организация;
    Иначе
        МенеджерЗаписи.СтруктурнаяЕдиница = ОбособленноеПодразделениеОрганизации;
    КонецЕсли;
    МенеджерЗаписи.Валюта = Валюта;
    МенеджерЗаписи.НомерЛиста = НачальныйНомерЛиста;
    
    МенеджерЗаписи.Записать(Истина);
    
КонецПроцедуры

В регистре НомераЛистовКассовойКниги изменено Имя измерения Организация на ОбособленноеПодразделение.
Добавлено измерение Валюта. (скопировано и Начальных Номеров).
В коде изменено имя регистра.
Изменен Период, не НачлоГода(НачПериода), а НачПериода.
Продумываю переход через Год.

Размышляя дальше, я заметил, что
Процедура ДействияФормыСформировать(Кнопка)
    ЗаписатьНачальныйНомерЛиста();
    СформироватьОтчет(ЭлементыФормы.ДокументРезультат, ВидОтчета);
КонецПроцедуры

Начальный номер записывается перед формированием отчета, а он будет известен после формирования+1. )))

Идем дальше...
После изменения Измерения регистра необходимо проверить все РЛС - поменять имя реквизита.
В зависимости от требований компании добавить РЛС на валюту.

Сообщение отредактировал Vofka - 01.08.19, 8:15

alex_shkut Подменю пользователя
сообщение 31.07.19, 20:37
Сообщение #3

Общительный
**
Группа: Пользователи
Сообщений: 37
Из: Сумы
Спасибо сказали: 5 раз
Рейтинг: 4.3

alex_shkut @ Сегодня, 20:03 * ,
И тут все портит Функция СформироватьСтруктуруНомеровЛистов
Она выбирает все периоды движений по Датам, и последовательно присваивает номера листов, не учитывая их количество за день.
Просто тупо количество дней работы кассы. Один лист за день - будем бороться...

Цитата(alex_shkut @ 31.07.19, 21:26) *
И тут все портит Функция СформироватьСтруктуруНомеровЛистов
Она выбирает все периоды движений по Датам, и последовательно присваивает номера листов, не учитывая их количество за день.
Просто тупо количество дней работы кассы. Один лист за день - будем бороться...

По большому счету эта функция теперь совсем не нужна - мы будем опираться на "новый" регистр, где в любое время можем поменять нумерацию листов.
Фууухххх, тяжко. Почему УПП-шники не уделили этому внимания?
Кассовая дисциплина, однако!

Вы не удивляйтесь - до утра я должен это сделать.

alex_shkut Подменю пользователя
сообщение 31.07.19, 22:40
Сообщение #4

Общительный
**
Группа: Пользователи
Сообщений: 37
Из: Сумы
Спасибо сказали: 5 раз
Рейтинг: 4.3

Почти все получилось ))), работает на любой зафиксеынй в регистре период. Если записи на дату нет - книга не формируется. Поправим )
Вернемся к регистру НачальныеНомера, и посчитаем.... бред.
Надо поформировать КК и позаписывать номера листов, само устаканится...


А вот и вылезли нюансы. Если сформировать КК за год - нумерация "ползет". Надо контролировать переход через сутки, и записывать в регистр новые номера листов.


В итоге многих размышлений пришло решение - поработать над данным вопросом, он не так-то уж и прост. Много вариаций тут есть. Будет готовое решение - продолжим тему.
Но решить это надо по-любому.

И очень даже интересно, почему в такой конфе как УПП это до сих пор не разрешено?

Вот один из моментов в коде )))
МенеджерЗаписи.Период = ДатаКон+1; //Попытка записать Завтра ), а юзер сфрмировал концом года
//Жопа в том, что данный документ намного раньше ДатаКон - его надо фиксить
Действительно, последний документ в кассе не концом года )
Вот как-то так мыслим...

alex_shkut Подменю пользователя
сообщение 20.08.19, 8:43
Сообщение #5

Общительный
**
Группа: Пользователи
Сообщений: 37
Из: Сумы
Спасибо сказали: 5 раз
Рейтинг: 4.3

В итоге, задача решилась копированием кассовой книги из конфигурации Бухгалтерия с небольшим допиливанием под УПП.
И в Бухгалтерии таки используется дополнительный регистр, но он называется - ПоследниеНомераКассовойКниги smile.gif
Логика та же, что я писал раньше.

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


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

 

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