Вывожу отчет в СКД, вывожу в столбец Ресурс. Делаю для этого ресурса условное форматирование(меняю цвет заливки). В отчет 3 группировки, для нижних группировок делается отлично, если все закрашены, закрашивается группировка. Но для верхней не срабатывает, то есть если все группировки 2 уровня закрашены, верхняя тоже должна быть закрашена.
Подскажите, как поправить. Макет рисовать не хочется
Циклы применяются для выполнения каких либо повторяющихся действий, возможные варианты перебора в цикле:
Перебираем строки с помощью цикла Для каждого
Перебираем строки с помощью цикла Пока
Перебираем строки с помощью цикла Для
Еще вариант, но советую его использовать только в без выходных ситуациях, Если
Примеры циклов
А какой цикл работает быстрее?
Итак, я нашел пять способов, как можно организовать цикл средствами 1С.
Первый вид цикла, назовем его условно «Для По» выглядит так:
Второй вид «Для Каждого»:
Третий «Пока»:
Далее вспомнил ассемблерную молодость & цикл «Если»:
Ну и напоследок «Рекурсия»
Естественно, что относить рекурсию к циклам не совсем корректно, но тем ни менее с её помощью можно добиться похожих результатов. Сразу оговорюсь, что в дальнейшем тестировании рекурсия не участвовала. Во первых все тесты проводились при 1 000 000 итераций, а рекурсия выпадает уже при 2 000. Во вторых скорость рекурсии в десятки раз меньше, чем скорость остальных циклов.
Последнее отступление. Одним из условий было выполнение в цикле каких-либо действий. Во первых пустой цикл используется очень редко. Во вторых цикл «ДляКаждого» используется для какой-либо коллекции, а значит и остальные циклы должны работать с коллекцией, чтобы тестирование проходило в одинаковых условиях.
Ну что ж, поехали. В качестве тела цикла использовалось чтение из заранее заполненного массива.
или, при использовании цикла «Для Каждого»
Тестирование проводилось на платформе 8.3.5.1231 для трех видов интерфейса (Обычное приложение, Управляемое приложение и Такси).
Результаты для 8.3.5.1231
Интерфейс
ДляПо
ДляКаждого
Пока
Если
Обычное приложение
5734,2
4680,4
7235,4
7263,0
Управляемое приложение
5962,4
4882,6
7497,4
7553,6
Такси
5937,2
4854,6
7500,8
7513,0
Числа это время в миллисекундах полученное с помощью функции ТекущаяУниверсальнаяДатаВМиллисекундах(), которую я вызывал до цикла и после его завершения. Числа дробные, потому что я использовал среднее арифметическое пяти замеров. Почему я не использовал Замер производительности? У меня не было цели замерить скорость каждой строчки кода, только скорость циклов с одинаковым результатом работы.
Казалось бы и все, но & тестировать так тестировать!
Результаты для 8.2.19.106
Интерфейс
ДляПо
ДляКаждого
Пока
Если
Обычное приложение
4411,8
3497,2
5432,0
5454,0
Управляемое приложение
4470,8
3584,8
5522,6
5541,0
В среднем платформа 8.2 на 25% быстрее, чем 8.3. Я немножко не ожидал такой разницы и решил провести тест на другой машине. Скажу только, что там 8.2 была быстрее процентов на 20.
Почему? Не знаю, дезасемблировать ядро в мои планы не входило, но в замер производительности я все же заглянул. Оказалось, что сами циклические операции в 8.3 проходят несколько быстрее, чем в 8.2. Но на строке
то есть при считывании элемента коллекции в переменную происходит значительное снижение производительность.
Для себя я сделал несколько выводов:
1. Если есть возможность использовать специализированный цикл & «Для Каждого», то лучше использовать его. Кстати, сам по себе он отрабатывает дольше чем другие циклы, но скорость доступа к элементу коллекции у него на много выше.
2. Если заранее знаешь количество итераций & используй «Для По». «Пока» отработает медленнее.
3. Если использовать цикл «Если» & другие программисты тебя явно не поймут.
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос. Создается этот объект вызовом конструкции Новый Запрос. Запрос удобно использовать, когда требуется получить сложную выборку данных, сгруппированную и отсортированную необходимым образом. Классический пример применения запроса - получение сводки по состоянию регистра накопления на определенный момент времени. Так же, механизм запросов позволяет легко получать информацию в различных временных разрезах.
Текст запроса – это инструкция, в соответствии с которой должен быть выполнен запрос. В тексте запроса описывается:
таблицы информационной базы, используемые в качестве источников данных запроса;
поля таблиц, которые требуется обрабатывать в запросе;
правила группировки;
сортировки результатов;
и т. д.
Инструкция составляется на специальном языке – языке запросов и состоит из отдельных частей – секций, предложений, ключевых слов, функций, арифметических и логических операторов, комментариев, констант и параметров.
Язык запросов платформы 1С очень похож на синтаксис других SQL-языков, но имеются отличия. Основными преимуществами встроенного языка запросов являются: разыменование полей, наличие виртуальных таблиц, удобная работа с итогами, нетипизированные поля в запросах.
Рекомендации по написанию запросов к базе данных на языке запросов платформы 1С:
1) Текст запроса может содержать предопределенные данные конфигурации, такие как:
значения перечислений;
предопределенные данные:
справочников;
планов видов характеристик;
планов счетов;
планов видов расчетов;
пустые ссылки;
значения точек маршрута бизнес-процессов.
Также текст запроса может содержать значения системных перечислений, которые могут быть присвоены полям в таблицах базы данных: ВидДвиженияНакопления, ВидСчета и ВидДвиженияБухгалтерии. Обращение в запросах к предопределенным данным конфигурации и значениям системных перечислений осуществляется с помощью литерала функционального типа ЗНАЧЕНИЕ. Данный литерал позволяет повысить удобочитаемость запроса и уменьшить количество параметров запроса.
Пример использования литерала ЗНАЧЕНИЕ:
ГДЕ Город = ЗНАЧЕНИЕ(Справочник.Города.Москва)
ГДЕ Город = ЗНАЧЕНИЕ(Справочник.Города.ПустаяСсылка)
ГДЕ ТипТовара = ЗНАЧЕНИЕ(Перечисление.ВидыТоваров.Услуга)
ГДЕ ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
ГДЕ ТочкаМаршрута = ЗНАЧЕНИЕ(БизнесПроцесс.БизнесПроцесс1.ТочкаМаршрута.Действие1
2) Использование инструкции АВТОУПОРЯДОЧИВАНИЕ в запросе может сильно время выполнения запроса, поэтому, если сортировка не требуется, то лучше вообще ее не использовать. Во большинстве случаях лучше всего применять сортировку с помощью инструкции УПОРЯДОЧИТЬ ПО.
Автоупорядочивание работает по следующим принципам:
Если в запросе было указано предложение УПОРЯДОЧИТЬ ПО, то каждая ссылка на таблицу, находящаяся в этом предложении, будет заменена полями, по которым по умолчанию сортируется таблица (для справочников это код или наименование, для документов – дата документа). Если поле для упорядочивания ссылается на иерархический справочник, то будет применена иерархическая сортировка по этому справочнику.
Если в запросе отсутствует предложение УПОРЯДОЧИТЬ ПО, но есть предложение ИТОГИ, тогда результат запроса будет упорядочен по полям, присутствующим в предложении ИТОГИ после ключевого слова ПО, в той же последовательности и, в случае если итоги рассчитывались по полям – ссылкам, то по полям сортировки по умолчанию таблиц, на которые были ссылки.
Если в запросе отсутствуют предложения УПОРЯДОЧИТЬ ПО и ИТОГИ, но есть предложение СГРУППИРОВАТЬ ПО, тогда результат запроса будет упорядочен по полям, присутствующим в предложении, в той же последовательности и, в случае если группировка велась по полям – ссылкам, то по полям сортировки по умолчанию таблиц, на которые были ссылки.
В случае же, если в запросе отсутствуют предложения и УПОРЯДОЧИТЬ ПО, ИТОГИ и СГРУППИРОВАТЬ ПО, результат будет упорядочен по полям сортировки по умолчанию для таблиц, из которых выбираются данные, в порядке их появления в запросе.
В случае, если запрос содержит предложение ИТОГИ, каждый уровень итогов упорядочивается отдельно.
3) Что бы избежать повторного запроса к базе данных при выводе результата запроса пользователю (например, построение запроса или отображение результата запроса с помощью табличного документа) полезно использовать инструкцию ПРЕДСТАВЛЕНИЕССЫЛКИ, которая позволяет получать представление ссылочного значения. Пример:
Так же возможно использование инструкции ПРЕДСТАВЛЕНИЕ - предназначена для получения строкового представления значения произвольного типа. Отличие этих инструкций в том, что в первом случае, если инструкции передать ссылку, результатом будет строка, В остальных случаях результатом будет значение переданного параметра. Во втором случае, результатом инструкции всегда будет строка!
4) Если в запросе имеется поле с составным типом, то для таких полей возникает необходимость привести значения поля к какому-либо определенному типу с помощью инструкции ВЫРАЗИТЬ, что позволит убрать лишние таблицы из левого соединения с полем составного типа данных и ускорить выполнение запроса. Пример:
Имеется регистра накопления ОстаткиТоваров, у которого поле Регистратор имеет составной тип. В запросе выбираются Дата и Номер документов ПоступлениеТоваров, при этом при обращении к реквизитам документа через поле Регистратор не происходит множество левых соединений таблицы регистра накопления с таблицами документов-регистраторов.
Если приведение типа считается не осуществимым, то результатом приведения типа будет значение NULL.
5) Не стоит забывать про инструкцию РАЗРЕШЕННЫЕ, которая означает, что запрос выберет только те записи, на которые у текущего пользователя есть права. Если данное слово не указать, то в случае, когда запрос выберет записи, на которые у пользователя нет прав, запрос отработает с ошибкой.
6) В случае, если в запросе используется объединение, и в некоторых частях объединения присутствуют вложенные таблицы (документ с табличной частью), а в некоторых нет, возникает необходимость дополнения списка выборки полями – пустыми вложенными таблицами. Делается это при помощи ключевого слова ПУСТАЯТАБЛИЦА, после которого в скобках указываются псевдонимы полей, из которых будет состоять вложенная таблица. Пример:
7) Что бы в результат запроса не попали повторяющиеся строки, следует использовать инструкцию РАЗЛИЧНЫЕ, потому что так нагляднее и понятнее, а инструкция СГРУППИРОВАТЬ ПО применяется для группировки с помощью агрегатных функций. Ксати, при использовании агрегатных функций предложение СГРУППИРОВАТЬ ПО может быть и не указано совсем, при этом все результаты запроса будут сгруппированы в одну единственную строку. Пример:
8) Инструкция СГРУППИРОВАТЬ ПО позволяет обращаться к полям верхнего уровня, без группировки результатов по этим полям, если агрегатные функции применены к полям вложенной таблицы. Хотя в справке 1С написано, при группировке результатов запроса в списке полей выборки обязательно должны быть указаны агрегатные функции, а помимо агрегатных функций в списке полей выборки допускается указывать только поля, по которым осуществляется группировка. Пример:
9) Инструкция ЕСТЬNULL предназначена для замены значения NULL на другое значение, но не забываем, что второй параметр будет преобразован к типу первого в случае, если тип первого параметра является строкой или числом.
10) При обращении к главной таблице можно в условии обратиться к данным подчиненной таблицы. Такая возможность называется разыменование полей подчиненной таблицы.
Пример (поиск документов, содержащих в табличной части определенный товар):
Преимущество этого запроса перед запросом к подчиненной таблице Приходная.Товары в том, что если есть дубли в документах, результат запроса вернет только уникальные документы без использования ключевого слова РАЗЛИЧНЫЕ.
11) Интересный вариант оператора В - это проверка вхождения упорядоченного набора в множество таких наборов (Поле1, Поле2, ... , ПолеN) В (Поле1, Поле2, ... , ПолеN).
Пример:
12) При любой возможности используйте виртуальные таблицы запросов. При создании запроса система предоставляет в качестве источников данных некоторое количество виртуальных таблиц - это таблицы, которые так же являются результатом запроса, который система формирует в момент выполнения соответствующего участка кода.
Разработчик может самостоятельно получить те же самые данные, которые система предоставляет ему в качестве виртуальных таблиц, однако алгоритм получения этих данных не будет оптимизирован, так как:
Все виртуальные таблицы параметризованы, т. е. разработчику предоставляется возможность задать некоторые параметры, которые система будет использовать при формировании запроса создания виртуальной таблицы. В зависимости от того, какие параметры виртуальной таблицы указаны разработчиком, система может формировать РАЗЛИЧНЫЕ запросы для получения одной и той же виртуальной таблицы, причем они будут оптимизированы с точки зрения переданных параметров.
Не всегда разработчик имеет возможность получить доступ к тем данным, к которым имеет доступ система.
13) В клиент-серверном варианте работы функция ПОДСТРОКА() реализуется при помощи функции SUBSTRING() соответствующего оператора SQL, передаваемого серверу баз данных SQL Server, который вычисляет тип результата функции SUBSTRING() по сложным правилам в зависимости от типа и значений ее параметров, а так же в зависимости от контекста, в котором она используется. В большинстве случаев эти правила не оказывают влияния на выполнение запроса, но бывают случаи, когда для выполнения запроса существенна максимальная длина строки результата, вычисленная SQL Server. Важно иметь в виду, что в некоторых контекстах использования функции ПОДСТРОКА() максимальная длина ее результата может оказаться равной максимальной длине строки ограниченной длины, которая в SQL Server равна 4000 символам. Это может привести к неожиданному аварийному завершению выполнения запроса:
Microsoft OLE DB Provider for SQL Server: Warning: The query processor could not produce a query plan from the optimizer because the total length of all the columns in the GROUP BY or ORDER BY clause exceeds 8000 bytes.
HRESULT=80040E14, SQLSTATE=42000, native=8618
Чтобы избежать такой ошибки, не рекомендуют использовать функцию ПОДСТРОКА() с целью приведения строк неограниченной длины к строкам ограниченной длины. Вместо нее лучше использовать операцию приведения типа ВЫРАЗИТЬ().
14) С осторожностью используйте ИЛИ в конструкции ГДЕ, так как использование условия с ИЛИ может значительно "утяжелить" запрос. Решить проблему можно конструкцией ОБЪЕДИНИТЬ ВСЕ. Пример:
15) Условие НЕ В в конструкции ГДЕ увеличивает время исполнения запроса, так как это своего рода НЕ (ИЛИ1 ИЛИ2 ... ИЛИn), поэтому для больших таблиц старайтесь использовать ЛЕВОЕ СОЕДИНЕНИЕ с условием ЕСТЬ NULL. Пример:
16) При использовании Временных таблиц нужно индексировать поля условий и соединений в этих таблицах, НО, при использовании индексов запрос может выполняться еще медленнее. Поэтому необходимо анализировать каждый запрос с применением индекса и без, замерять скорость выполнения запроса и принимать окончательное решение.
Если вы помещаете во временную таблицу данные, которые изначально индексированы по некоторым полям, то во временной таблице индекса по этим полям уже не будет.
17) Если вы не используете Менеджер временных таблиц, то явно удалять временную таблицу не требуется, она будет удалена после завершения выполнения пакетного запроса, иначе следует удалить временную таблицу одним из способов: командой УНИЧТОЖИТЬ в запросе, вызвать метод МенеджерВременныхТаблиц.Закрыть().
В 1С предполагается, что СообщениеПользователю выводятся для того, чтобы сообщить пользователю об ошибках.
А для информирования о выполняемом действии рекомендуется использовать метод встроенного языка ПоказатьОповещениеПользователя().
СообщениеПользователю выводит сообщение пользователю (после окончания обработки) или сохраняет его в очередь, если сообщение невозможно вывести прямо сейчас.
Пример вывода сообщения на клиенте:
При обработке на сервере:
Необходимо зарегистрировать в системе соответствие объекта и имени реквизита формы. Для этого в глобальном контексте реализована функция УстановитьСоответствиеОбъектаИРеквизитаФормы(). Сделать это можно следующим образом:
В данном фрагменте выполняется преобразование объекта из данных формы в реальный объект и устанавливается его соответствие с реквизитом формы по имени "Объект".
Если в дальнейшем требуется создать сообщение, можно сделать это следующим образом:
В этом фрагменте создается новый объект СообщениеПользователю, в котором запоминается Текст сообщения и указывается Поле объекта, ошибка в данных которого вызвала необходимость вывода сообщения. Информация о том, как объект расположен в форме берется из предварительно запомненной пары "Объект/ИмяРеквизитаФормы". В дальнейшем сообщение будет выведено в окно сообщений формы и привязано к соответствующему элементу управления.
Примеры заполнения свойства Поле объекта СообщениеПользователю
ТипШаблонПример
Реквизит
ИмяРеквизита
Контрагент
Табличная часть
ИмяТабличнойЧасти
Скидки
Реквизит табличной части
ИмяТабличнойЧасти[ИндексСтроки].ИмяРеквизита
Номенклатура[10].Количество
Реквизит набора записей
[ИндексСтроки].ИмяРеквизита
[10].Курс
Еще примеры:
ПоказатьОповещениеПользователя - оповещение возникает в правом нижнем углу приложения и сообщает о совершенном действии. В течение нескольких секунд оно постепенно гаснет и пропадает. При этом, если навести на оповещение курсор мышки, оно не гаснет, и есть возможность внимательно его прочитать:
Очень часто менеджеры дублируют информацию в справочниках и время от времени их приходится чистить.
Но как удалить только те элементы справочника, которые не используются в документах?
Следующий пример кода поможет это сделать(в примере обрабатывается 4 справочника: Сотрудники, ФизЛица, Договора и Контрагенты) Скачать: Обработка для УТ 10:
Проблема: После обновления на 1С:Бухгалтерию предприятия 3-й версии, при нажатии на закладку командного интерфейса 1С:предприятие, выскакивает ошибка:
Aboutsecurity_1cv8c.exe или Aboutsecurity_1cv8.exe
«Содержимое указанного ниже веб-узла в этом приложении блокировано конфигурацией усиленной безопасности Internet Explorer».
Ошибка исчезает после многократного нажатия на «Закрыть», что несколько мешает работать, мягко говоря. Похожая ошибка бывает и в конфигураторе, при обновлении конфигурации или сравнении/объединении конфигураций. Чаще всего, мне попадалась эта проблема в серверных ОС, в частности Windows 2008 r2.
Решение: нужно добавить исключение в настройках безопасности Internet Explorer (далее & IE).
Это делается просто, если у вас один или несколько компьютеров & просто открываете IE/Свойства обозревателя/Безопасность/Надёжные узлы/Сайты, добавляете Aboutsecurity_1cv8c.exe и Aboutsecurity_1cv8.exe, нажимаете Ок, и наслаждаетесь результатом.
Но вот если у вас терминал-сервер и 40/60 пользователей, или еще хуже & пользователей 150 и они ходят в SQL версию 1С с локальных рабочих станций, то бегать по всем корпусам и добавлять эту настройку весьма накладно по времени, да и отвлекать пользователей лишний раз от работы не порядочно.
В этом случае, нужно пользоваться групповыми политиками домена (который у вас должен быть настроен, если вы не офисный спортсмен-бегун).
Вариант №1. Неудавшийся.
Первое решение & прописать настройки через Group Polices (Административные шаблоны/Компоненты Windows/Internet explorer/Вкладка «Безопасность»/Список назначений зоны для веб-сайтов) & не увенчалось успехом. Настройки пользователей, как и обещалось в статьях по данному методу, перестали работать, а вот зоны, описанные в этих настройках, работать не начали. При этом, я пробовал добавлять настройки и в локальные политики, и в доменные и в политики контроллера домена. Скорее всего из-за этих экспериментов с разными зонами действия групповых политик и появилась проблема.
И так, после этих манипуляций, в настройках безопасности IE появилась надпись «Некоторыми параметрами управляет системный администратор» и добавлять/удалять сайты узлов безопасности стало невозможно. От этой надписи, почему-то, оказалось не так просто избавиться. Удаление проделанных настроек GPO не разблокировали вкладку «Безопасность», а манипуляции с реестром привели к появлению ошибок «В параметрах зоны есть ошибка. Не удалось добавить сайт.» (IE 10) или «При установке параметров безопасности зоны произошла ошибка. Добавить узел не удается.» (IE 9) & все дальнейшие действия сходили на нет.
Исправить косяк удалось следующим путём:
Обновил Internet Explorer до версии 10 (был 9-й).
Предварительно экспортировав разделы реестра в файл, на случай восстановления, удалил из следующие ключи:
Восстановил настройки Internet Explorer (Свойства обозревателя/Дополнительно/Сброс).
Проверить, что проблема не вернётся можно введя команду gpupdate /force в командной строке. После обновления политики запустите IE и проверьте, что настройки остались на месте. Если настройки опять слетели и добавление сайтов в узлы безопасности стало опять невозможно, то, скорее всего вы забыли отключить параметр «Список назначений зоны для веб-сайтов» в какой-то из зон групповой политики.
Чтобы определить в какой из зон групповых политик засела настройка (в локальных, доменных или контроллера домена), удобно пользоваться мастером отчётов «Результаты групповой политики», который находится в консоли «Диспетчер сервера», в разделе «Компоненты/Управление групповой политикой» (в Windows 2008 r2, по крайне мере он там).
Так что, здесь стоит быть осторожным, чтобы не создать себе дополнительной работы.
Вариант №2. Через GPO и реестр.
Этот метод делается через те же групповые политики, но через прямые записи в реестр, а не манипулирование стандартными настройками.
Что делать:
Удаляем узлы Aboutsecurity_1cv8 из настроек IE, если вы их туда уже добавили вручную & это нужно для чистоты эксперимента. Проверьте, что в 1С ошибка сохранилась.
Небольшая ремарка: подраздел EscDomains используется в режиме расширенной настройки безопасности, если же этот режим отключен по какой-то причине, то нужно использовать раздел Domains вместо EscDomains (подробнее о записях реестра IE см. в базе знаний Microsoft).
И пробуем добавить его в реестр & если срабатывает, и в тонком клиенте 1С ошибка Aboutsecurity_1cv8c.exe исчезает, делаем дальше.
Снова открываем Default Domain Policy в диспетчере управления сервером, далее Конфигурация пользователя/Настройка/Конфигурация Windows/Реестр.
Добавляем туда две записи, где поле «Путь раздела»:
в первой записи это «Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\EscDomains\security_1cv8c.exe» (для тонкого клиента 1С),
во второй записи «Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\EscDomains\security_1cv8.exe» (для толстого клиента).
В остальном запись содержит те же данные, что и на картинке.
После этого, как положено, перелогиниваемся и проверяем результат. В толстом и тонком клиенте 1С:предприятие, ошибка должна исчезнуть.
В моём случае, для надёжности избавления от проделанных в Варианте №2 настроек, были добавлены ещё три записи в реестр:
Обновить: HKCU\Software\Policies\Microsoft\Windows\CurrentVersion\Internet Settings; параметр: ListBox_Support_ZoneMapKey; значение 0 (тип DWORD десятичный)
Есть ещё вариант, который переключит работу программы в режим интерфейса «Такси» : Администрирование/Настройки программы/Интерфейс & здесь включаем «Интерфейс «Такси»" & в этом режиме данная ошибка не появляется, но пользователям может не понравиться работать с этим вариантом интерфейса, т. к. он предназначен для мобильных устройств и планшетов (например, для работы через Web).
Обратился ко мне клиент с задачей: Нужно запретить изменение всех видов платежных документов (ПП, РКО, ПКО) спустя 8 часов с момента проведения соответствующего документа
Для реализации этого я использовал Подписку на событие: ПередЗаписьюДокументаДатаЗапретаРедактирования
В конце процедуры обработчика добавил вызов своей процедуры
Вот ее код:
Пока документ не проведен, его можно менять сколько угодно, но после первого проведения и истечения указанного количества часов, документ заблокируется, и при проведении будет выведено сообщение:
Батник на "языке 1С" для клиент серверных баз, скачивает с сайта ИТС нужное обновление, бекапит базу и обновляет. Подойдет как рабочая заготовка для собственных "обновляторов". В текущем виде все работает. Надо только занести свои переменные.
В статье описан процесс работы с MySQL базой из 1С через ODBC.
Первое что следует обязательно учесть это версия драйвера, для того чтобы всё корректно работало вам потребуется драйвер версии 3.51 (с драйвером 5-ой версии я пробился пол дня пытаясь хоть чего нибудь добиться, безрезультатно & поменял на предыдущую версию и всё заработало!
Для подключения используем вот такую строчку:
то касается кодировки то лучше её конечно задать, но на вставку записей в БД MySQL оно почемуто не влияет, и чтобы корректно всё отрабатывало и не выглядело кракозябриками после отработки скриптов, перед выполнением самих скриптов лучше выполнить вот такой вот скрипт «set names cp1251» в рамках соединения он правильно установит кодировку (так надёжнее).
Для работы с самой базой объявляем объект ADODB.Connection & это соединение с базой.
Для работы с данными можем объявить: ADODB.Recordset & для чтения данных, и ADODB.Command для изменения.
(ADODB.Command & не имеет метода ExecuteScalar, поэтому вместо него придётся обходиться Recordset-ом и с его помощью выбирать данные, хотя возможно я чегото не доглядел).
Разрабатывая некий функционал в 1С, бывает, необходимо посчитать количество рабочих дней после какой-то даты.
В этой статье примеры кода и запросы в которых считается количество рабочих дней:
Код, при вычислении определяет только по дню недели, викидывая выходные. Праздники не учитывает!
В запросе, с использованием производственного календаря и учетом всех праздников:
Еще один вариант, в котором допустим, что:
1) Регистр сведений Календарь имеет структуру (Измерения={ДатаКалендаря}, Ресурсы={ВидДня}), а перечисление ВидыДня задано как {Рабочий, Предпразничный} и праздничные дни в календаре отсутствуют.
2) В документе Реализация заданы поля Дата и ОтсрочкаДней. Тогда:
Собственно, если календарь содержит и праздничные дни, то можно добавить секцию ГДЕ, и там отобрать только рабочие дни. В секции ГДЕ можно отобрать и интересующий календарь, если ведется несколько календарей.
В 1С есть такая замечательная вещь, как МенеджерВременныхТаблиц. Этот объект позволяет передавать временные таблицы из одного запроса в другой. То есть, мы можем создать временную таблицу в запросе, прерваться, выполнить какой-нибудь код, и продолжить работу с этой временной таблицей дальше.
Например, в отчете в зависимости от выбранных настроек первичные данные обрабатываются тем или иным способом. Тогда имеет смысл в одной процедуре сформировать эти данные и поместить их во временную таблицу, которую уже передаем через менеджер временных таблиц в другую процедуру, отвечающую за выбранный способ обработки. Это позволит сократить код, сделать запросы более читаемыми. А так же в случае, если возникнут изменения в методике подготовки первичных данных для обработки, то потребуется внести изменения только в один запрос, а не в каждый.
В качестве примера работы с менеджером временных таблиц приведу следующую обработку.
Я создаю менеджер временных таблиц, и передаю его последовательно в каждую процедуру, для создания и объединения временных таблиц. Результат выводится в сводную таблицу.