Після оновлення конфігурації BAS Бухгалтерія КОРП в документах "Відпустка" та "Звільнення" при заповнені стала генеруватись помилка "Номер року в літералі типу 'Дата' перевищує 3999". Причому лише в клієнт-серверному варіанті, у файловому - все добре. Причина виявилась в некоректному виконанні запиту спільного модуля УчетСреднегоЗаработка. Проблема виникає при розрахунку поля:
КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(Начисления.ДатаНачалаБазовогоПериода, МЕСЯЦ, Начисления.КоличествоМесяцев - 1), МЕСЯЦ) КАК ДатаОкончанияПериода
При цьому, якщо Начисления.ДатаНачалаБазовогоПериода - пуста дата, і Начисления.КоличествоМесяцев = 0, то розраховується не пойми що, яке потім в отладчику виглядає як "30.11.0001 0:00:00". Але сам запит - виконується без помилок, проте при використанні отриманих значень в інших запитах - генерується дана помилка.
P.S. Якщо в когось також дана помилка виникає - можу поділитись розширенням для даної конфігурації, що її виправляє.
Группа: Местный
Сообщений: 410
Спасибо сказали: 116 раз
Рейтинг: 118.8
Gorus @ Вчера, 17:36
, Из справки:
Цитата
Литерал типа ДАТА Литерал типа ДАТА записывается в виде: ДАТАВРЕМЯ ( <Целое число>, <Целое число>, <Целое число>[, <Целое число>, <Целое число>, <Целое число>] ) Значения типа дата задаются с помощью ключевого слова ДАТАВРЕМЯ, после которого в скобках последовательно указываются год, месяц, день, час, минута, секунда. Последние три указывать необязательно. Максимальная дата которую возможно задать при помощи литерала ДАТАВРЕМЯ – 31.12.3999 23:59:59.
Вы пишите
Цитата
При цьому, якщо Начисления.ДатаНачалаБазовогоПериода - пуста дата
Пустая дата - это 01.01.0001 или Null или Неопределено?
Группа: Местный
Сообщений: 410
Спасибо сказали: 116 раз
Рейтинг: 118.8
Цитата(Gorus @ 15.08.22, 18:30)
Пуста дата - це 01.01.0001, тобто '00010101'
У Вас из МИНИМАЛЬНОГО значения '00010101' вычитается месяц месяц - результат выходит за разрешенный диапазон и выдается сообщение о его превышении, все нормально... Это как деление на 0 (ноль) - результат = бесконечность...
Единственный выход я вижу в проверке на "0" (т.е. '00010101') перед выполнением кода...
AnryMc @ Сегодня, 9:25
, Зверніть увагу: у файловому варіанті даний код виконується без помилок. У клієнт-серверному - генерується помилка. Ймовірно, що SQL сервер опрацьовує цей запит коректно, просто отримане значення виходить за межі можливого діапазону значень в 1С. Але не зважаючи на це - 1С при цьому все одно опрацьовує результат запиту, хоча й дані там не відповідають обмеженню типа "Дата". А от при подальшій спробі використати отримані дані - генерується помилка, типу 1Ска зненацька "побачила" що дані в змінній некоректні. Тобто має місце різний алгоритм поводження з даними у файловому і клієнт-серверному варіантах, чого по ідеї бути не повинно - всі відмінності у типах мали б опрацьовуватись платформою автоматично. Ймовірно, що це може бути поправлено в наступних релізах (або, можливо, і вже поправлено, бо у мене це виникло на релізі 8.3.16.1814 з сервером PostgreSQL, а на інших - не перевіряв).
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!