Для чего нужен флаг "Автозаполнение" в СКД и каких проблем без него можно избежать

04.04.21

Разработка - СКД

Речь пойдет о флаге «Автозаполнение» в наборе данных Запрос Системы компоновки данных (СКД). Сразу хочу отметить, что флаг «Автозаполнение» доступен только в наборе данных - Запрос.

Что делает автозаполнение

Флаг «Автозаполнение» добавляет все выбранные поля последнего пакета запроса, а также поля измерений виртуальных таблиц из всех пакетов запроса. Всегда создает параметры периода в СКД для всех виртуальных таблиц(Обороты и ОстаткиИОбороты - &НачалоПериода, &КонецПериода, Остатки, СрезПервый, СрезПоследних - &Период). Другими словами эта настройка облегчает процесс составления схемы.


В чем подвох?

Иногда возникает ситуация, при которой автозаполнение устанавливает параметры и приводит к наложению отборов в тех местах, где это не требуется.

Пример 1

Создадим схему, выбирающую объединением двух запросов обороты за текущий и за прошлый период:

ВЫБРАТЬ
    "Этот период" КАК Раздел,
    ДвиженияДенежныхСредствОбороты.ПриходРасход,
    ДвиженияДенежныхСредствОбороты.СуммаОборот
ИЗ
    РегистрНакопления.ДвиженияДенежныхСредств.Обороты КАК ДвиженияДенежныхСредствОбороты

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "Прошлый период",
    ДвиженияДенежныхСредствОбороты.ПриходРасход,
    ДвиженияДенежныхСредствОбороты.СуммаОборот
ИЗ
    РегистрНакопления.ДвиженияДенежныхСредств.Обороты(&НачалоПрошлогоПериода, &КонецПрошлогоПериода, , ) КАК ДвиженияДенежныхСредствОбороты

«Автозаполнение» создаст параметры &НачалоПериода, &КонецПериода для виртуальной таблицы ДвиженияДенежныхСредств.Обороты

Настройка схемы будет выглядеть следующим образом:

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

Разобраться в причинах не составит особого труда, если взглянуть на запрос, который был сформирован компоновщиком макета СКД — одни и те же параметры были подставлены в оба запроса объединения:

ВЫБРАТЬ
    "Этот период" КАК Раздел,
    ДвиженияДенежныхСредствОбороты.ПриходРасход КАК ПриходРасход,
    ДвиженияДенежныхСредствОбороты.СуммаОборот КАК СуммаОборот,
    ДвиженияДенежныхСредствОбороты.ПриходРасход.Порядок КАК ПриходРасходПорядок
ИЗ
    РегистрНакопления.ДвиженияДенежныхСредств.Обороты(&П, &П2, , ) КАК ДвиженияДенежныхСредствОбороты

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "Прошлый период",
    ДвиженияДенежныхСредствОбороты.ПриходРасход,
    ДвиженияДенежныхСредствОбороты.СуммаОборот,
    ДвиженияДенежныхСредствОбороты.ПриходРасход.Порядок
ИЗ
    РегистрНакопления.ДвиженияДенежныхСредств.Обороты(&П, &П2, , ) КАК ДвиженияДенежныхСредствОбороты

Решить можно двумя способами:

  • Не использовать параметры с именами &НачалоПериода, &КонецПериода
  • Отключить «Автозаполнение» и прописать все поля и параметры вручную

В случае с отключенным флагом «Автозаполнение» запрос в СКД будет выглядеть следующим образом:

ВЫБРАТЬ
    "Этот период" КАК Раздел,
    ДвиженияДенежныхСредствОбороты.ПриходРасход КАК ПриходРасход,
    ДвиженияДенежныхСредствОбороты.СуммаОборот КАК СуммаОборот
{ВЫБРАТЬ
    Раздел,
    ПриходРасход.*,
    СуммаОборот}
ИЗ
    РегистрНакопления.ДвиженияДенежныхСредств.Обороты(&НачалоПериода, &КонецПериода, , ) КАК ДвиженияДенежныхСредствОбороты
{ГДЕ
    ("Этот период") КАК Раздел,
    ДвиженияДенежныхСредствОбороты.ПриходРасход.*,
    ДвиженияДенежныхСредствОбороты.СуммаОборот}

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "Прошлый период",
    ДвиженияДенежныхСредствОбороты.ПриходРасход,
    ДвиженияДенежныхСредствОбороты.СуммаОборот
ИЗ
    РегистрНакопления.ДвиженияДенежныхСредств.Обороты(&НачалоПрошлогоПериода, &КонецПрошлогоПериода, , ) КАК ДвиженияДенежныхСредствОбороты
{ГДЕ
    ("Прошлый период") КАК Раздел,
    ДвиженияДенежныхСредствОбороты.ПриходРасход.*,
    ДвиженияДенежныхСредствОбороты.СуммаОборот}

 

Пример 2

Нам нужно получить обороты по определенным счетам и остатки по всем счетам. Создаем набор данных запрос с флагом «Автозаполнение»:

ВЫБРАТЬ
    "ДДС" КАК Раздел,
    ДДС.Счет КАК Счет,
    ДДС.СтатьяДвиженияДенежныхСредств КАК СтатьяДвиженияДенежныхСредств,
    ДДС.СуммаОборот КАК СуммаОборот,
    NULL КАК СуммаОстаток
ИЗ
    РегистрНакопления.ДвиженияДенежныхСредств.Обороты(, , , ) КАК ДДС

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "ДС",
    "Общий остаток",
    NULL,
    NULL,
    ДенежныеСредстваОстатки.СуммаОстаток
ИЗ
    РегистрНакопления.ДенежныеСредства.Остатки({(&КонецПериода)}, ) КАК ДенежныеСредстваОстатки

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

Что подтверждает запрос из компоновщика макета:

ВЫБРАТЬ
    ДДС.Счет КАК Счет,
    ДДС.СуммаОборот КАК СуммаОборот,
    NULL КАК СуммаОстаток,
    ПРЕДСТАВЛЕНИЕССЫЛКИ(ДДС.Счет) КАК СчетПредставление
ИЗ
    РегистрНакопления.ДвиженияДенежныхСредств.Обороты(&П, , , Счет В(&П2)) КАК ДДС

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "Общий остаток",
    NULL,
    ДенежныеСредстваОстатки.СуммаОстаток,
    NULL
ИЗ
    РегистрНакопления.ДенежныеСредства.Остатки(, Счет В(&П2)) КАК ДенежныеСредстваОстатки

Решить данный кейс можно двумя способами:

  • В расширении языка запросов для поля Счет указать поле отбора, например СчетОтбор (пример описан в публикации)
  • Отключить флаг «Автозаполнение» и расставить поля отборов вручную.

Без использования «Автозаполнения» запрос в наборе данных будет выглядеть следующим образом:

ВЫБРАТЬ
    "ДДС" КАК Раздел,
    ДДС.Счет КАК Счет,
    ДДС.СтатьяДвиженияДенежныхСредств КАК СтатьяДвиженияДенежныхСредств,
    ДДС.СуммаОборот КАК СуммаОборот,
    NULL КАК СуммаОстаток
{ВЫБРАТЬ
    Раздел,
    Счет.*,
    СтатьяДвиженияДенежныхСредств.*,
    СуммаОборот,
    СуммаОстаток}
ИЗ
    РегистрНакопления.ДвиженияДенежныхСредств.Обороты({(&НачалоПериода)}, {(&КонецПериода)}, , {(Счет).*}) КАК ДДС
{ГДЕ
    ДДС.СуммаОборот}

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "ДС",
    "Общий остаток",
    NULL,
    NULL,
    ДенежныеСредстваОстатки.СуммаОстаток
ИЗ
    РегистрНакопления.ДенежныеСредства.Остатки({(&КонецПериода)}, ) КАК ДенежныеСредстваОстатки
{ГДЕ
    ДенежныеСредстваОстатки.СуммаОстаток}

А результат:

 

Плохие новости

В платформе 8.3.13 были проведены следующие доработки поведения СКД:

При добавлении отбора в запрос набора данных схемы компоновки данных, содержащего объединения, отбор обязательно добавляется во все части объединения, если отбор удалось поместить хотя бы в одну часть объединения. При этом, в тех частях объединения, в которых отбор применить не удается из-за отсутствия в них полей, использующихся в отборе, в добавляемые условия вместо отсутствующего поля проставляется выражение NULL.
В режиме совместимости с версией 8.3.12 поведение не изменилось.

Источник: http://downloads.v8.1c.ru/content//Platform/8_3_13_1513/1cv8upd_8_3_13_1513.htm#11b285ec-7857-11e8-a3f7-0050569f678a

Таким образом, если мы создаем объединение запросов по двум регистрам, в одном из которых нет определенных полей 

ВЫБРАТЬ
    "ДДС" КАК Раздел,
    ДДС.Счет КАК Счет,
    ДДС.СтатьяДвиженияДенежныхСредств КАК СтатьяДвиженияДенежныхСредств,
    ДДС.СуммаОборот КАК СуммаОборот
ИЗ
    РегистрНакопления.ДвиженияДенежныхСредств.Обороты КАК ДДС

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "ДС",
    ДС.Счет,
    NULL,
    ДС.СуммаОборот
ИЗ
    РегистрНакопления.ДенежныеСредства.Обороты КАК ДС

...и накладываем отбор по такому полю (СтатьяДвиженияДенежныхСредств), то компоновщик макета нам добавит условие Null = &П4, которые мы ну никак не ожидали

ВЫБРАТЬ
    "ДДС" КАК Раздел,
    ДДС.Счет КАК Счет,
    ДДС.СуммаОборот КАК СуммаОборот,
    ПРЕДСТАВЛЕНИЕССЫЛКИ(ДДС.Счет) КАК СчетПредставление,
    ДДС.Счет.Наименование КАК СчетНаименование
ИЗ
    РегистрНакопления.ДвиженияДенежныхСредств.Обороты(&П, &П2, , ) КАК ДДС
ГДЕ
    ДДС.Счет = &П3
    И ДДС.СтатьяДвиженияДенежныхСредств = &П4

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "ДС",
    ДС.Счет,
    ДС.СуммаОборот,
    ПРЕДСТАВЛЕНИЕССЫЛКИ(ДС.Счет),
    ДС.Счет.Наименование
ИЗ
    РегистрНакопления.ДенежныеСредства.Обороты(&П, &П2, , ) КАК ДС
ГДЕ
    ДС.Счет = &П3
    И NULL = &П4

Как побороть данную проблему? В статье //infostart.ru/public/936863/ освещена проблема, но предложенное решение мне не удалось повторить. Пока не нашёл решение. Судя по всему данную особенность исправили в версии платформы 8.3.14

При добавлении отбора в запрос набора данных схемы компоновки данных, содержащего объединения, отбор обязательно добавляется во все части объединения, если у набора данных включено автоматическое заполнение доступных полей или поле, к которому применяется отбор, получается через точку от поля, доступного для отбора.
Кроме того, если группа элементов отбора содержала поле, которое было недоступно в одном из объединений, и другое поле, которое было доступно и при этом в другой части объединения все поля были доступными, то такой отбор будет применен и в той части, в которой он был недоступен, с заменой недоступных полей на NULL.
Если в отчете или динамическом списке используется запрос, содержащий объединения и нужно, чтобы отбор на некоторое поле помещался только в определенные части объединения, то рекомендуется отключить для набора данных автоматическое заполнение доступных полей и добавить требуемое поле только в нужные части объединения.
В режиме совместимости с версией 8.3.13 поведение не изменилось.

Источник: https://dl04.1c.ru/content/Platform/8_3_14_1779/1cv8upd_8_3_14_1779.htm#c2e40243-2915-11e9-a3f7-0050569f678a

И действительно, если отключить «Автозаполнение» и расставить поля отборов вручную, то компоновщик макета строит следующий запрос:

ВЫБРАТЬ
    "ДДС" КАК Раздел,
    ДДС.Счет КАК Счет,
    ДДС.СуммаОборот КАК СуммаОборот,
    ПРЕДСТАВЛЕНИЕССЫЛКИ(ДДС.Счет) КАК СчетПредставление,
    ДДС.Счет.Наименование КАК СчетНаименование,
    ВЫБОР
        КОГДА ДДС.Счет.Ссылка ЕСТЬ NULL
            ТОГДА 0
        ИНАЧЕ 1
    КОНЕЦ КАК СчетПолеУпорядочивания1
ИЗ
    РегистрНакопления.ДвиженияДенежныхСредств.Обороты(&П, &П2, , (Счет = &П3) И СтатьяДвиженияДенежныхСредств = &П4) КАК ДДС

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "ДС",
    ДС.Счет,
    ДС.СуммаОборот,
    ПРЕДСТАВЛЕНИЕССЫЛКИ(ДС.Счет),
    ДС.Счет.Наименование,
    ВЫБОР
        КОГДА ДС.Счет.Ссылка ЕСТЬ NULL
            ТОГДА 0
        ИНАЧЕ 1
    КОНЕЦ
ИЗ
    РегистрНакопления.ДенежныеСредства.Обороты(&П, &П2, , Счет = &П3) КАК ДС

УПОРЯДОЧИТЬ ПО
    Раздел,
    СчетПолеУпорядочивания1,
    СчетНаименование,
    Счет

 

скд запрос конфигурирование НаборДанных компоновка автозаполнение

См. также

SALE! 20%

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

Инструментарий разработчика Роли и права Запросы СКД Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

13000 10400 руб.

02.09.2020    122170    670    389    

714

Генератор схемы компоновки данных (СКД), написание кода схемы программно

Инструментарий разработчика СКД Платформа 1С v8.3 Конфигурации 1cv8 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

По выбранной схеме компоновки данных генерирует программный код, который генерирует СКД, аналогичную исходной схеме. Есть дополнительные инструменты для просмотра дерева схемы, сравнение исходной схемы и полученной по коду, а также сравнение изменений в сгенерированном коде для исходной схемы и для измененной.

3 стартмани

05.02.2024    4041    25    obmailok    17    

63

Набор-объект для СКД по тексту или запросу

Запросы СКД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Есть список полей в виде текста, или запрос - закидываем в набор СКД.

1 стартмани

31.01.2024    2000    2    Yashazz    0    

29

СКД на JavaScript в 1С

СКД WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Долгое время поддерживаю web-портал, в котором появилась необходимость создавать отчеты. Просмотрев различные фреймворки на js, я решил сделать свое решение, которое позволяло бы быстро разрабатывать и добавлять новые отчеты на web-портал.

2 стартмани

11.12.2023    8161    20    John_d    25    

123

Использование менеджера временных таблиц в СКД

СКД Платформа 1С v8.3 Система компоновки данных Конфигурации 1cv8 Бесплатно (free)

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

05.12.2023    4656    PROSTO-1C    13    

61

Модель СКД

Инструментарий разработчика СКД Платформа 1С v8.3 Система компоновки данных Абонемент ($m)

DSL для работы с СКД.

1 стартмани

15.11.2023    5807    15    kalyaka    5    

86

Пользовательские настройки отчетов 1С. Часть 1. Простые и расширенные настройки

СКД Инструкции пользователю Платформа 1С v8.3 Конфигурации 1cv8 1С:Бухгалтерия 3.0 Россия Бесплатно (free)

Простые приемы работы с отчетами на СКД. Что нужно знать пользователю про настройку отчетов, чтобы использовать их на полную катушку.

18.09.2023    6703    accounting_cons    5    

29

Разрыв страницы в СКД. Легко!

СКД Платформа 1С v8.3 Система компоновки данных Бесплатно (free)

Когда отчет надо разделить по страницам, это всегда проблема для разработчика. Поскольку в СКД нет стандартных вариантов, как это сделать. Нашел (на свой взгляд) самое простое и оптимальное решение.

01.09.2023    4520    KVIKS    15    

80
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Vladimir Litvinenko 2869 26.02.20 16:41 Сейчас в теме
РегистрНакопления.ДвиженияДенежныхСредств.Обороты({(&НачалоПериода)}, {(&КонецПериода)}
ОБЪЕДИНИТЬ ВСЕ
РегистрНакопления.ДенежныеСредства.Остатки({(&КонецПериода)}, ) 

Как всегда при определении остатков не учитываете последнюю секунду. Потом программисты тотально методом копирования-вставки разносят это по всем конфигурациям. Не придирался бы, если бы не массовость явления. И тяжесть последствий... не для разработчиков, которые так пишут на подряде, а для тех, кто потом иголку в стоге сена ищет, исправляя результаты расчетов ;))
Shmell; SagittariusA; user635629_exter; RustIG; purgin; Yashazz; Lapitskiy; Danil.Potapov; +8 Ответить
2. echo77 1868 26.02.20 17:04 Сейчас в теме
(1) Владимир, привет! :-)
Дельное замечание - согласен здесь надо быть внимательнее
Vladimir Litvinenko; +1 Ответить
3. Vladimir Litvinenko 2869 26.02.20 17:15 Сейчас в теме
(2) Тут разработчики платформы, конечно, свинью подложили + не дали в СКД границу использовать. Но исправлять очевидно уже не будут. А ошибка частая и больная, особенно при применении стандартного периода. Допустив её почти всегда можно сдать отчет заказчику, так как она плавающая, но почти всегда она потом проявляется. А если СКД используется для заполнения документов, а не просто отчетности.... Ох.
4. sapervodichka 6697 26.02.20 17:33 Сейчас в теме
(1) компоновка по-моему сама границу захватывает для виртуальных таблиц остатков, это уже в запросах в коде нужно ставить параметр = Граница(&КонецПериода, ВидГраницы.Включая), вроде автор про компоновку пишет, и текст РегистрНакопления.ДенежныеСредства.Остатки({(&КонецПериода)}, ) должно в компоновке нормально прокатывать или нет?
5. Vladimir Litvinenko 2869 26.02.20 18:15 Сейчас в теме
(4) Если поставите в качестве &КонецПериода начало следующего дня, то остатки за предыдущий день зацепятся. Но это не отменяет того факта, что обороты при этом начнут включать в себя и движения за первую секунду следующего для. То есть в целом запрос останется ошибочным.

СКД не оперирует типом "Граница". "Стандартный период" помогает устанавливать последнюю секунду периода в качестве верхней границы, но тип этого значения всё равно будет "Дата", а не "Граница".

Проверьте, это же дело пяти минут. Может быть это хороший повод, чтобы переписать старые отчёты? ;)) Хотя, если клиенты не заметили, то лучше не палиться. Вдруг они у себя сейчас одну сплошную выручку видят в отчёте по продажам без учета себестоимости и радуются, зачем людей радости лишать? ;))

Есть ещё таблица ОстаткиИОбороты. Вот она себя более адекватно ведёт. Но это больше к бухгалтерии или к разным ведомостям. В оперативном учёте и при заполнении документов она почти не используется, особенно в последних конфигурациях семейства УТ/ERP, ввиду отсутствия подходящей физической таблицы у регистров накопления и необходимости в оптимизации запросов.
sapervodichka; +1 Ответить
6. leosoft 165 26.02.20 19:51 Сейчас в теме
(5) Я так и не понял - как же тогда корректно "захватить" последнюю секунду?
7. Danil.Potapov 514 26.02.20 19:59 Сейчас в теме
(6)
1. сделать скрытый параметр КонецПериодаДляОстатков и из стандартного периода конец периода брать с плюс секундой.
2. заменить &КонецПериода на ДОБАВИТЬКДАТЕ(&КонецПериода, СЕКУНДА, 1)
PowerBoy; Vladimir Litvinenko; +2 Ответить
8. leosoft 165 26.02.20 21:00 Сейчас в теме
(7) А это не будет начало следующего дня? И как написано в (5) "обороты при этом начнут включать в себя и движения за первую секунду следующего дня".
9. Vladimir Litvinenko 2869 26.02.20 21:05 Сейчас в теме
(8) Для оборотов нужно использовать прежний параметр. Для остатков - отдельный вычисляемый параметр. Они должны быть разными. Среди вариантов, которые привёл выше Данил лучше выбрать вариант №1, так как это позволит гарантировано задействовать индекс по периоду в таблице итогов и движений. Вариант №2 может привести скану по таблицам. На MS SQL вроде бы не должен приводить, но всё таки лучше избегать вычислений над параметрами виртуальных таблиц, которые для работы с индексами заточены.
23. Yashazz 4709 27.02.20 18:14 Сейчас в теме
(9)
Вариант №2 может привести скану по таблицам

Впервые задумался об этом, как-то всегда на автопилоте писал ДобавитьКДате, а вот вы навели на раздумья. Да, хз, может и правда так быть. Спасибо, учту.
31. login1020 133 28.02.20 16:15 Сейчас в теме
(9) т.е. Для таблиц Вида Остатки задавать параметр Конца периода следует вот так?
Прикрепленные файлы:
38. TerveRus 09.03.20 18:34 Сейчас в теме
(31) предпочитаю
КОНЕЦПЕРИОДА(&СтандартныйПериод.ДатаОкончания, ДЕНЬ)
37. TerveRus 09.03.20 18:31 Сейчас в теме
(6) Я всегда устанавливаю &КонецПериода в
КОНЕЦПЕРИОДА(&СтандартныйПериод.ДатаОкончания, ДЕНЬ)

Это же аналог
Запрос.УстановитьПараметр("КонецПериода", КонецДня(&ДатаОкончания));

Не понимаю, зачем эти заморочки с секундой?
10. sapervodichka 6697 27.02.20 00:16 Сейчас в теме
(5) я "Стандартный период" использую везде, вероятно, меня это и спасает в СКД (спасибо за ответ)
11. rpgshnik 3631 27.02.20 03:21 Сейчас в теме
(10) тоже его стараюсь использовать всегда, ещё с базового курса по разработке в 1С от 1С именно так и учат, заводить стандартный период, но не объясняя зачем, говоря - так удобнее :)
17. gelotus 27.02.20 12:34 Сейчас в теме
По идее если вы используете начало следующего дня, то движения за первую секунду следующего дня НЕ захватит.
так как период будет установлен на начало секунды. а все движения будут после начала секунды.
33. RustIG 1351 04.03.20 07:38 Сейчас в теме
(5) обходил этот косяк СКД так - в документе при проведении явно ставил дату на одну секунду меньше конца периода. По задаче требовалось раз в месяц проводить управленческие расходы. Сажал их на конец месяца за минусом одной секунды, не зависимо от указанной даты в документе. В СКД далее собирал информацию по всем периодам.
Без этой дописки СКД некорректно брала итоги.
13. Nikola23 696 27.02.20 09:38 Сейчас в теме
(1) за 11 лет работы ни разу не встретил описанной проблемы.
Если но так серьезно, набросайте статью с примерами, поделитесь с сообщестом.
ИМХО, использование стандартного периода решает вопрос.
У меня решает.
rmarkovych; awk; +2 Ответить
14. awk 741 27.02.20 11:35 Сейчас в теме
(13) Эээ... А за что минус? За то что человек не видел? За предложение написать статью?
15. Nikola23 696 27.02.20 11:55 Сейчас в теме
16. Vladimir Litvinenko 2869 27.02.20 12:12 Сейчас в теме
(14) Ок. Только ради Вас, пускай лучше плюс будет )) Я тут чуть материться не стал вот за это

за 11 лет работы ни разу не встретил описанной проблемы
ИМХО, использование стандартного периода решает вопрос.
У меня решает.

Вместо того, чтобы пойти и исправить косячный код. Хотел спросить где человек работает, чтобы к ним на собеседование ненароком не попасть. Это всё равно что бэкапы не делать, если за 11 лет сервер ни разу не летел и рекомендовать написать статью, что бэкапы нужны ))

Очень толерантное отношение к халатности в сообществе 1С, каждый за собой грешок чувствует и читать документацию не хочет. На Хабре ей богу более профессиональное отношение.

Вот врачу напиши - "работа без дезинфекции инструментов может привести к заражению пациента болезнью с инкубационным периодом в 11 лет". А он тебе в ответ "я за 11 лет ни разу не встретил описанной проблемы", ИМХО поплевать на руки - решает описанную проблему, у меня решает" ))

Проблема в том, что он то не встретил. А за ним исправляли. Или не исправляли, потому что поздно было. Или он 11 лет в одной компании работает? И пользователи данные не проверяют при приемке работ и программисты наивными глазами смотрят "Ну а чо, оно же работает!" ))

P.S. Статьи пишу если что, с ленью в этом плане не дружу )) Но вопрос уже разжёван выше в комментариях. Извините, если слишком резко, но слишком часто подтирать прходилось... и убеждать что надо ошибки исправлять... иногда безуспешно. Иногда кажется, что проще забить на это и продолжать подтирать.
1cnik2; user635629_exter; Yashazz; acanta; +4 Ответить
18. awk 741 27.02.20 15:09 Сейчас в теме
(16) Спасибо.


1. Косячный код - это код который косячит. Если в базе код не косячит, то код не косячный. Работает - не трогай. Аналогия с серверами - ложна, как любая аналогия.
2. Если вам не нравиться 1С сообщество - не пишите на инфостарт, пишите на хабре.
3. Если посмотрите историю создания антисептиков. То одного уважаемого пришибли в психушке, то же что и вы говорил. https://ru.wikipedia.org/wiki/Земмельвейс,_Игнац_Филипп
4. Ошибки надо исправлять спокойно, всегда помня, что кто-то исправляет за вами.
19. Vladimir Litvinenko 2869 27.02.20 15:21 Сейчас в теме
(18)
Косячный код - это код который косячит. Если в базе код не косячит, то код не косячный.

Так он и косячит. Халатность принимающего задачу помноженная на халатность разработчика не избавляет от факта ошибки. Писал уже выше - за те же 11 лет работы в 1С мне пришлось много раз исправлять эту ошибку. В реальных базах, на реальных суммах. Вот коллега тоже 11 лет как раз в 1С работает )) "Совпадение? Не думаю".

Если вам не нравиться 1С сообщество

Зря вы делаете такой вывод. Мне не нравится только та его часть, которая халатно относится к своей работе или оправдывает халатное отношение к работе и предпочитает прикрываясь "бизнес-программированием" и "решением реальных проблем" заваливать базы ошибками.

Ошибки надо исправлять спокойно

Согласен, об этом и речь. В то же время не отмахиваться от них.

всегда помня, что кто-то исправляет за вами

Помню. У каждого врача своё кладбище. И благодарен тем, кто исправляет за мной косяки. Стараюсь зафиксировать их причину и не считаю, что имею при этом право писать "а у меня работает".

Ладно, согласен, слишком сильно пригорело ))
tazhitkov; +1 Ответить
20. awk 741 27.02.20 16:42 Сейчас в теме
(19)

Вопрос) Можно ли исправить все ошибки?
Ответ) Нет.
Вопрос) Если нельзя исправить все ошибки, то какие надо исправлять.
Ответ) Зависит от области. Поскольку мы живем при капитализме, то исправление ошибки = деньги. На что готовы потратить деньги, то и следует исправлять.
Пример:
Ошибка: Документ с позицией 2019-02-02 23.59:59.005 не попадает в отчет.
Метод обхода: Изменить позицию документа на 2019-02-02 23.59:58.ХХХ

Время исправления пользователем: 1 мин. умножить на количество документов, позиционированных после 23.59:59.
Время исправления программистов: 2+ часа (создать копию, исправить, проверить, обновить).

Стоимость 1 часа пользователя 100 р.
Стоимость 1 часа программиста 500 р.

Цена исправления ошибки 1000р. = 10 часов работы пользователя = 600 минут работы пользователя => количество документов, позиционированных после 23.59:59, должно быть больше 600 или штраф за неправильный документ (для фирмы!!!) больше 1000 рублей.

Если учесть:
1. Есть групповое изменение реквизитов (снижает время пользователя)
2. Отчет может быть не один (увеличивает время программиста)
То можно сделать вывод: в большинстве ситуаций исправление данной ошибки экономически не целесообразно!!!
21. acanta 27.02.20 16:51 Сейчас в теме
(20) а если в программе при записи документа время автоматически устанавливать на 0:00:00?
В зуп же так делается?
28. awk 741 28.02.20 09:46 Сейчас в теме
(21) Вопрос не в варианте исправления.
39. arimefu 10.03.20 07:12 Сейчас в теме
(20) Есть еще один нюанс: пользователь должен потратить время при таком сравнении не только на то, чтобы сформировать отчет, но еще и проверить все данные, потом разобраться, почему же документ не попал, исправить это. Хотя причина банальна - отчет составлен неправильно. Думаю, при ежедневном (да и просто частом) использовании такого отчета его в любом случае необходимо исправлять, а не мириться с тем, что данные могут быть некорректными.
41. awk 741 10.03.20 13:45 Сейчас в теме
(39) Да.. Полностью согласен... Исправлять надо. Вопрос в приоритетах...
26. Nikola23 696 28.02.20 00:23 Сейчас в теме
(16) Владимир, ох как вас зацепило.
Серьезно "улыбает" то, что не зная меня вы написали несколько абацев обо мне.

Почем не ответили по существу? Знаешь много - напиши статью.
Пока что - только хвост распушил. Все видим, какой вы молодец, а окружающие - косячники.

А еще, мне показалось, что Вы забыли про контекст. Помнить про последнюю секунду и границу - надо в запросе.
А в СКД вы как границу передаете?
Или таки "стандартный период" все же работает? Просвятите.
А почему в типовых конфах оно работает так же как я пишу? Неужели вся 1с косячит?

П,С, как пишет коллега ниже в (18)
"всегда помни, что кто-то исправляет за вами"

Код в студию (до проверки ванессой и сонаром). Код ревью проведу, посмеемся всем сообществом.
27. Vladimir Litvinenko 2869 28.02.20 02:02 Сейчас в теме
(26) Да будет Вам. Всё нормально и я принял мысль, что наличием капитализма в России (а до этого наличием коммунизма) и наличием ошибок в типовых всё можно оправдать. Приму этот аргумент на вооружение ))


Хорошо только, что в той типовой с которой я работаю такого пока не встречалось (за исключением бета версий времён ERP 2.0.x) и даже более того, написаны общие алгоритмы, которые позволяют решить задачу. Странно да? Ведь типовая:

SagittariusA; myoker; awk; +3 Ответить
12. zqzq 23 27.02.20 08:45 Сейчас в теме
Решить можно двумя способами:

Не использовать параметры с именами &НачалоПериода, &КонецПериода
Отключить «Автозаполнение» и прописать все поля и параметры вручную
Есть ещё 3-й вариант, не отключать автозаполнение и добавить подсказку для компоновки (можно через конструктор или вручную -- т.е. параметры в фигурных скобках):
РегистрНакопления.ДвиженияДенежныхСредств.Обороты({&НачалоПрошлогоПериода}, {&КонецПрошлогоПериода}, , ) 
KorniltsevMikhail; SagittariusA; СергейК; bulpi; CSiER; ktb; awk; Vladimir Litvinenko; Batman; +9 Ответить
22. Yashazz 4709 27.02.20 18:13 Сейчас в теме
Дельная, толковая статья, и интересные комменты. Спасибо!
24. bulpi 215 27.02.20 23:29 Сейчас в теме
Решить можно двумя способами:

Не использовать параметры с именами &НачалоПериода, &КонецПериода

Как ? У меня не получилось. Они сами появляются и не удаляются.
40. arimefu 10.03.20 07:22 Сейчас в теме
(20) В статье как раз написано, сами они появляются только при включенной галочке "Автозаполнение". Но в этом нет ничего плохого, главное понимать, что и как должно применяться.
В статье немного подробнее, наверное, стоило бы написать про "жесткие" и "мягкие" параметры виртуальных таблиц. На самом деле, все довольно просто, есть 3 варианта:
РегистрНакопления.ДенежныеСредства.Остатки({(&КонецПериода)}, )
РегистрНакопления.ДенежныеСредства.Остатки(&КонецПериодаЖесткий {(&КонецПериода)}, )
РегистрНакопления.ДенежныеСредства.Остатки(&КонецПериодаЖесткий , )


В первом варианте указан "мягкий параметр". Именно он будет использоваться в схеме СКД, если он задан. Можно его вообще не указывать, с галочкой "Автозаполнение" он автоматически добавится с таким же именем.
Во втором варианте указаны и "жесткий", и "мягкий" параметры. В случае не заданного "мягкого", будет использован "жесткий", а иначе - "мягкий".
В третьем случае уже интереснее: если стоит галочка автозаполнения, то эта строка преобразуется во вторую автоматически, соответственно при указании параметра &КонецПериода именно он будет использоваться, хотя его даже нет явно в самом тексте запроса. А вот при снятой галочке автозаполнения будет использоваться &КонецПериодаЖесткий из текста запроса.
user635629_exter; max_zhilin; +2 Ответить
25. bulpi 215 27.02.20 23:38 Сейчас в теме
По времени :
При нормальной работе каким образом может получиться время 23:59:59, если рабочий день до 20-00 ? Тут разобраться надо. И причину устранить, возможно ?
29. awk 741 28.02.20 09:48 Сейчас в теме
(25) Операция закрытия месяца, квартала, года...
user635629_exter; +1 Ответить
30. bulpi 215 28.02.20 15:09 Сейчас в теме
(29)
Ну, я бы сделал подписку на событие перед записью всех документов, и менял 23:59:59 на 23:59:58 , вместо того, чтобы заморачиваться в каждом отчете.
32. awk 741 28.02.20 17:02 Сейчас в теме
(30) Это не правильно (не говоря о том, что это костыль). Время 23:59:59 - законно.

Как только у вас будет фирма 24/7 с хорошей нагрузкой, то вы получите проблему. Поступление в 23:59:58.020, а отгрузку 23:59:58.011 и ошибку нет остатка.
user635629_exter; LordKim; +2 Ответить
34. RustIG 1351 04.03.20 07:49 Сейчас в теме
(32) все поступления проводить датой, которая указана в документе, но если дата больше или равна 23:59:58.00, проводить датой равной 23:59.58.00.
Все отгрузки проводить датой, указанной в документе, но если дата больше или равна 23:59:58.00 и меньше 23:59:59.99, то проводить датой равной 23:59.58.01.

ПС. Любая платформа имеет ограничения, любые механизмы имеют ограничения, не нужно пытаться в СКД решать все ситуации из жизни, и делать из СКД универсальный всерешающий инструмент.
35. awk 741 04.03.20 09:06 Сейчас в теме
(34) Вы лечите симптомы, а не болезнь.
36. RustIG 1351 04.03.20 13:18 Сейчас в теме
(35) согласен, что проблемы СКД я не решаю.
решаю задачи клиента. :)
42. Hatson 528 10.12.21 11:55 Сейчас в теме
1. Таблица оборотов

Начало периода, Конец периода
Тип параметра: Дата; МоментВремени; Граница. Значение по умолчанию ВКЛЮЧАЕТСЯ в период расчета итогов. Для исключения значения из периода его следует задавать объектом Граница с исключением граничного значения.

2. Таблица остатков и оборотов

Начало периода
Аналогично Параметру таблицы Остатков - НЕ ВКЛЮЧАЕТСЯ в период расчета.

Конец периода
Тип параметра: Дата; МоментВремени; Граница. Указывается конец периода расчета итогов. Значение конца периода по умолчанию ВКЛЮЧАЕТСЯ в период расчета итогов. Для исключения значения из периода его следует задавать объектом Граница с исключением граничного значения.
Значение по умолчанию: Если параметр не задан, итоги рассчитываются по самую последнюю запись.


3. Таблица остатков

Период
Тип параметра: Дата; МоментВремени; Граница. Значение периода по умолчанию НЕ ВКЛЮЧАЕТСЯ в период расчета. Для расчета остатков по значение периода его необходимо задавать объектом Граница с включением граничного значения.
Значение по умолчанию: Если параметр не задан, итоги рассчитываются по самую последнюю запись.

Не благодарите.
fatman78; zavhome@gmail.com; SagittariusA; user635629_exter; SiAl; +5 Ответить
Оставьте свое сообщение