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

Публикация № 1200689

Разработка - Практика программирования

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

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

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

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


В чем подвох?

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

Пример 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

Как побороть данную проблему? В статье //igorvoloshin.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,
    СчетНаименование,
    Счет

 

Специальные предложения

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

Ладно, согласен, слишком сильно пригорело ))
20. awk 697 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 73 27.02.20 16:51 Сейчас в теме
(20) а если в программе при записи документа время автоматически устанавливать на 0:00:00?
В зуп же так делается?
28. awk 697 28.02.20 09:46 Сейчас в теме
(21) Вопрос не в варианте исправления.
39. arimefu 10.03.20 07:12 Сейчас в теме
(20) Есть еще один нюанс: пользователь должен потратить время при таком сравнении не только на то, чтобы сформировать отчет, но еще и проверить все данные, потом разобраться, почему же документ не попал, исправить это. Хотя причина банальна - отчет составлен неправильно. Думаю, при ежедневном (да и просто частом) использовании такого отчета его в любом случае необходимо исправлять, а не мириться с тем, что данные могут быть некорректными.
41. awk 697 10.03.20 13:45 Сейчас в теме
(39) Да.. Полностью согласен... Исправлять надо. Вопрос в приоритетах...
26. Nikola23 449 28.02.20 00:23 Сейчас в теме
(16) Владимир, ох как вас зацепило.
Серьезно "улыбает" то, что не зная меня вы написали несколько абацев обо мне.

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

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

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

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


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

12. zqzq 19 27.02.20 08:45 Сейчас в теме
Решить можно двумя способами:

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

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

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


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

Как только у вас будет фирма 24/7 с хорошей нагрузкой, то вы получите проблему. Поступление в 23:59:58.020, а отгрузку 23:59:58.011 и ошибку нет остатка.
34. Rustig 1366 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 697 04.03.20 09:06 Сейчас в теме
(34) Вы лечите симптомы, а не болезнь.
36. Rustig 1366 04.03.20 13:18 Сейчас в теме
(35) согласен, что проблемы СКД я не решаю.
решаю задачи клиента. :)
Оставьте свое сообщение

См. также

Программная работа с настройками СКД

Статья Программист Нет файла v8 v8::СКД 1cv8.cf Бесплатно (free) Практика программирования

Нюансы программной работы с настройками системы компоновки данных в отчетах и динамических списках. Обзор всех видов настроек компоновки. Что в каких случаях правильно применять. В качестве примера рассмотрена работа с отборами и группировками.

27.01.2020    9085    ids79    26       

Онлайн-курс «Практические аспекты внедрения регламентированного учета и расчета себестоимости в 1С:ERP на крупных промышленных предприятиях» с 20 апреля по 15 мая 2020 года. Промо

Курс рассчитан для подготовки экспертов по регламентированному учету и учету затрат для внедрения на крупных промышленных предприятиях с «исторически сложившимся» учетом

9000 рублей

[СКД] Программное создание схемы компоновки данных

Статья Программист Стажер Нет файла v8 v8::СКД 1cv8.cf Бесплатно (free) Практика программирования

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

15.01.2020    10481    John_d    22       

Последовательности событий. Шпаргалка

Статья Программист Нет файла v8 Россия Бесплатно (free) Практика программирования

Собрал информацию о событиях/подписках/расширениях в одном месте.

30.12.2019    6828    kuzyara    33       

Подборка решений для взаимодействия со ФГИС «Меркурий» Промо

С 1 июля 2019 года все компании, участвующие в обороте товаров животного происхождения, должны перейти на электронную ветеринарную сертификацию (ЭВС) через ФГИС «Меркурий». Инфостарт предлагает подборку программ, связанных с этим изменением.

Программы для исполнения 488-ФЗ: Маркировка товаров Промо

1 января 2019 года вступил в силу ФЗ от 25.12.2018 № 488-ФЗ о единой информационной системе маркировки товаров с использованием контрольных (идентификационных) знаков, который позволяет проследить движение товара от производителя до конечного потребителя. Инфостарт предлагает подборку программ, связанных с применением 488-ФЗ и маркировкой товаров.

СКД не только для отчетов

Статья Программист Нет файла v8::СКД 1cv8.cf Бесплатно (free) Практика программирования

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

18.09.2019    14372    YPermitin    34       

Программы для исполнения 54-ФЗ Промо

С 01.02.2017 контрольно-кассовая техника должна отправлять электронные версии чеков оператору фискальных данных - правила установлены в 54-ФЗ ст.2 п.2. Инфостарт предлагает подборку программ, связанных с применением 54-ФЗ, ККТ и электронных чеков.

Агрегатные функции СКД, о которых мало кто знает

Статья Программист Нет файла v8 v8::СКД 1cv8.cf Бесплатно (free) Практика программирования

Пользуетесь ли Вы всеми возможными агрегатными функциями, которые предоставляет система компоновки данных? Если Вы используете только: СУММА, КОЛИЧЕСТВО, МИНИМУМ, МАКСИМУМ, СРЕДНЕЕ, то эта статья для Вас.

05.09.2019    30574    ids79    50       

Онлайн-курс «Автоматизация процессов управления МТО: методика сбора и формализации требований» с 1 апреля по 13 мая 2020 года. Промо

Цель курса - повысить полноту и качество сбора и формализации требований к автоматизации процессов управления материально-техническим обеспечением. Курс основан на процессном подходе, позволяет в полном объеме выявить и учесть все факторы, влияющие на специфику процессов управления МТО. Участники курса получают теоретические знания в области организации процессов управления МТО и готовый инструментарий для сбора и формализации требований по автоматизации этих процессов (шаблоны, опросники, модели).

40000 рублей

Три костыля. Сказ про фокусы в коде

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования

Три интересных (или странных) костыля в коде, которые могут помочь в повседневных и не очень задачах.

03.09.2019    18980    YPermitin    80       

Отслеживание выполнения фонового задания

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования Универсальные функции Разработка

Запуск фонового задания из модуля внешней обработки. Отслеживание выполнения задания в виде прогресса, расположенного на форме.

17.08.2019    21687    ids79    16       

Базовый курс по обмену данными в системе 1С:Предприятие. Онлайн-интенсив с 12 по 28 мая 2020 г. Промо

Данный онлайн-курс предусматривает изучение механизмов платформы “1С:Предприятие”, обеспечивающих обмен данными между различными прикладными 1С-решениями и взаимодействие с другими информационными системами. Курс предназначен для тех, кто уже имеет определенные навыки конфигурирования и программирования в системе “1С:Предприятие”.

5500 рублей

Функции СКД: ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив

Статья Программист Нет файла v8 v8::СКД 1cv8.cf Бесплатно (free) Практика программирования

Подробное описание и использование внутренних функций системы компоновки данных: Вычислить, ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив, ВычислитьВыражениеСГруппировкойТаблицаЗначений.

08.08.2019    42515    ids79    36       

Фоновое выполнение кода в 1С - это просто

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования

Как легко запускать выполнение в фоне, не прибегая к долгому описанию фоновых процедур.

02.08.2019    21707    avalakh    21       

Подборка программ для взаимодействия с ЕГАИС Промо

ЕГАИС (Единая государственная автоматизированная информационная система) - автоматизированная система, предназначенная для государственного контроля за объёмом производства и оборота этилового спирта, алкогольной и спиртосодержащей продукции. Инфостарт рекомендует подборку проверенных решений для взаимодействия с системой.

СКД - наборы данных и связи между ними, создание собственной иерархии, вложенные отчеты

Статья Программист Нет файла v8 v8::СКД 1cv8.cf Бесплатно (free) Практика программирования

Набор данных объект. Использование в схеме компоновки нескольких наборов данных. Различные варианты связи наборов: объединение, соединение. Использование иерархии в отчетах на СКД. Создание собственной иерархии, иерархия детальных записей. Использование вложенных схем в отчетах на СКД.

26.07.2019    33415    ids79    11       

СКД - использование расширений языка запросов, секция ХАРАКТЕРИСТИКИ

Статья Программист Нет файла v8 v8::СКД Бесплатно (free) Инструментарий разработчика Практика программирования

Автоматическое и не автоматическое заполнение полей компоновки данных. Использование расширений языка запросов для СКД «{…}», секция ВЫБРАТЬ, секция ГДЕ, параметры виртуальных таблиц. Автоматизированное использование дополнительных данных в запросе: секция ХАРАКТЕРИСТИКИ.

17.07.2019    23238    ids79    27       

Базовый курс для начинающих 1С-программистов. Онлайн-интенсив со 2 июня по 2 июля 2020 г. Промо

Данный онлайн-курс является начальной ступенью по изучению базовых принципов программирования в системе “1С:Предприятие” и предназначен для обучения 1С-программированию “с нуля”.

4500-9500 рублей

Регистры сведений. За кулисами

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования Разработка

Небольшие заметки по внутреннему устройству регистров сведений.

09.07.2019    17679    YPermitin    12       

"Меньше копипаста!", или как Вася универсальную процедуру писал

Статья Программист Стажер Нет файла v8 v8::СКД 1cv8.cf Бесплатно (free) Практика программирования Разработка

Программист Вася разбирает подход создания универсальных методов на примере программного вывода СКД.

04.07.2019    14349    SeiOkami    49       

Онлайн-интенсив "1C:Предприятие для программистов: Бухгалтерские задачи" с 22 июня по 8 июля 2020 г. Промо

Данный онлайн-курс предусматривает изучение механизмов платформы “1С:Предприятие”, которые предназначены для решения задач бухгалтерского учета. Курс предназначен для тех, кто уже имеет определенные навыки конфигурирования и программирования в системе “1С:Предприятие”, а также для опытных пользователей прикладного решения “1С:Бухгалтерия” и прочих прикладных решений, в которых реализованы соответствующие механизмы для автоматизации бухгалтерских задач.

4900 рублей

Создание отчетов с помощью СКД - основные понятия и элементы

Статья Программист Нет файла v8 v8::СКД Бесплатно (free) Практика программирования Математика и алгоритмы

Основные принципы работы СКД. Понятия схемы компоновки и макета компоновки. Описание основных элементов схемы компоновки: наборы данных, поля, вычисляемые поля, ресурсы, параметры.

25.06.2019    36134    ids79    17       

Многопоточное ускорение однопользовательских нагрузок в 1С + Microsoft SQL Server 2017

Статья Программист Нет файла v8 v8::Запросы Бесплатно (free) Практика программирования Производительность и оптимизация (HighLoad)

Взаимодействие с Microsoft SQL Server нередко вызывает трудности у 1С-ников, а потому интересны любые моменты, связанные с его использованием. О своем опыте работы с новым SQL Server 2017 участникам конференции Infostart-2018 рассказал директор ООО «Аналитика софт» Дмитрий Дудин.

11.06.2019    18884    dmurk    144       

1C:Предприятие для программистов: Расчетные задачи (зарплата). Онлайн-интенсив с 01 по 17 июня 2020 г. Промо

Данный онлайн-курс предусматривает изучение механизмов платформы “1С:Предприятие”, которые предназначены для автоматизации периодических расчетов, а именно - для расчета зарплаты. Курс предназначен для тех, кто уже имеет определенные навыки конфигурирования и программирования в системе “1С:Предприятие”, а также для опытных пользователей прикладного решения “1С:Зарплата и управление персоналом” и прочих прикладных решений, в которых реализован функционал расчета зарплаты.

4900 рублей

Регистры накопления. Структура хранения в базе данных

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования Разработка

Структура хранения регистров накопления в базе данных для платформы 1С:Предприятие 8.x. Первая часть в серии публикаций.

16.05.2019    31117    YPermitin    30       

Выполнение внешней обработки в фоновом задании

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования Разработка

Подробное описание подхода к созданию длительной операции на основе внешней обработки. Реализация протестирована на 1С 8.3.12.1714 (x64).

11.05.2019    20306    Eret1k    23       

Новый раздел на Инфостарте - Electronic Software Distribution Промо

Инфостарт напоминает: на нашем сайте можно купить не только ПО, связанное с 1С. В нашем арсенале – ESD-лицензии на ПО от ведущих вендоров: Microsoft, Kaspersky, ESET, Dr.Web, Аскон и другие.

  • Низкие цены, без скрытых платежей и наценок
  • Оперативная отгрузка
  • Возможность оплаты с личного счета (кешбек, обмен стартмани на рубли и т.п.)
  • Покупки идут в накопления для получения скидочных карт лояльности Silver (5%) и Gold (10%)

Выгрузка документа по условию

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Разработка

Что делать, если документы нужно выгружать не все подряд, а по какому-то фильтру: статусу, дате, набору условий... А что если он соответствовал этим условиям, а потом перестал? А если потом опять начал? Такие ситуации заставили попотеть не одного программиста.

25.04.2019    11585    m-rv    2       

Как прикрутить ГУИД к регистру сведений

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Перенос данных из 1C8 в 1C8 Разработка

... и немного теории обмена данными. В частности, разберем боль всех, кто пишет небанальные обмены данными: как набору записей регистра сведений назначить гуид и далее использовать его в обмене для идентификации этого набора.

16.04.2019    14935    m-rv    16       

Готовые переносы данных из различных конфигураций 1C Промо

Рекомендуем готовые решения для переноса данных из различных конфигураций 1C. C техподдержкой от разработчиков и гарантией от Инфостарт.

О расширениях замолвите слово...

Статья Программист Стажер Нет файла v8 Бесплатно (free) Практика программирования Разработка

О чём стоит задуматься при принятии решения о создании расширения конфигурации…

07.04.2019    25957    ellavs    125       

Git-репозитории для 1С-кода (опыт использования при небольших проектах)

Статья Программист Стажер Нет файла v8 Windows Бесплатно (free) Практика программирования Разработка

Инструкции по взаимодействию с Git-репозиторием, которые писались для тех наших программистов, которые вообще никогда не работали с Git (руководства в духе "Как получить код из git-репозитория?", "Как отправить код в git-репозиторий")...

28.03.2019    20717    ellavs    83