Как программно определить количество строк и столбцов Excel

Пример делаю на 1с 8, вместе с подключением и отключением 

Попытка
Эксель = Новый COMОбъект(«Excel.Application»);
Исключение
Предупреждение(«MS Excel не установлен на компьютере!»,10);
Возврат;
КонецПопытки;
Состояние(«Подключение к EXCEL»,50);
Книга = Эксель.WorkBooks.Open(Путь);
Лист = Книга.WorkSheets(1);
КолСтрок=Лист.Cells(1,1).SpecialCells(11).Row;
КолКолонок = Лист.Cells(1,1).SpecialCells(11).Column;

………………………

//Шо то робим

………………………

//Сохраняем результаты
Эксель.ActiveWorkbook.Save();
//выходим из Excel
Эксель.Quit();

VirtualDud ошибка no audio decompressor could be found 00ff source format tag 2000

При попытке воспроизвести в VirtualDub видеофайл, в котором звук закодирован способом AC3 — возникает соответствующая ошибка «no audio decompressor could be found 00ff source format tag 2000». Можно всё ещё вырезать кусочки видео и сохранять его в режиме «Direct stream copy», однако «Full processing mode» уже не получится.

Нужно скачать и установить декодер AC3, учитывая разрядность вашей виндовс (32(86) или 64 бита).

Ссылка на чистую скачку «при памяти» без вирусов и разных непонятных приделок (видно во размеру) здесь: https://www.videohelp.com/software/AC3-ACM-Decompressor

Видеоурок по этой теме:

1с 8 Почему спрашивает «Данные были изменены», если ничего не менялось в форме?

Возможно у кнопки, которую нажимали, или у реквизита, который редактировали, установлен флажок «изменяет данные». Он специально предназначен, чтобы установить модифицированность в «истина», если система сама не может определить, изменяет ли данные элемент.

Обычно такое возникает, если делаются различные вспомогательные формы, но вид формы — форма справочника или документа, а не произвольная форма. Мне например больше нравится, чтобы форма была формой справочника или документа — потому что тогда имеется доступ к реквизитам соответствующего объекта, чего в произвольной форме не будет.

Снимаем флажок, и можно закрывать форму, без сохранения элемента справочника. 

1с 8 Почему в СКД во вложенном запросе не видно параметров связи в настройке схемы

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

Нет полей вложенного запроса для связи

Попробуем разобраться. И оставляю себе напоминалочку, так как нервы не железные.

1 Заходим в схему вложенного отчета

рис. Открываем схему вложенного отчета

2 Открываем конструктор запроса

3 Переходим на закладку «Компоновка данных» и переносим стрелками из левой в правую часть те реквизиты, по которым хотим установить связь.

Жмем Ок.

4 Открываем снова настройки связей схемы

Нужные поля для связи появились

5 Но вот в правом значении дает выбирать только элементы

6 Поэтому нажимаем крестик

7 Выбираем «Поле компоновки данных

8 Выбираем нужное поле родителя для связи с вложенным запросом

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

1С 8 Как заполнить значения при добавлении новой строки в табличную часть

Нужно вставить обработчик события самой табличной части, который называется «При начале редактирования». В нем есть параметр «Новая строка», что дает нам возможность выполнять некоторые действия только при добавлении новой строки. При этом сама строка уже существует, 

Процедура СоставПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
Если НоваяСтрока тогда
текСтрока = ЭлементыФормы.Состав.ТекущиеДанные;
Если не текСтрока = неопределено тогда
текСтрока.ИсточникДанных = перечисления.СпособПолучения.ИзТабличнойЧасти;
КонецЕсли;
КонецЕсли;
КонецПроцедуры

в отличии от обработчика «ПередНачаломДобавления», который можно использовать с тем же успехом, но код будет другой

Примерно так:

СтандартнаяОбработка = ложь;

нов = Состав.Добавить();

нов.ИсточникДанных = перечисления.СпособПолучения.ИзТабличнойЧасти;

То бишь, сами добавляем строку и устанавливаем параметры, что мне меньше нравится. Я приверженец использования типовых механизмов насколько это возможно.

1C 8 как округлять до заданной числом точности, например 0.01

мОкруглятьДо = 0,01;

Цел(ВыборкаСотрудник.Сумма/мОкруглятьДо)*мОкруглятьДо;//округляет до сотых

мОкруглятьДо = 0,1;

Цел(ВыборкаСотрудник.Сумма/мОкруглятьДо)*мОкруглятьДо;//округляет до десятых

1С 8 неверные конечные остатки в универсальном отчете

Три основных причины неверного конечного остатка в универсальном отчете. Те же причины могут приводить к неверным конечным остаткам и в обычных отчетах, а т.д. СКД.

1 Следует указывать в полях выборки «ПериодСекунда», если в них присутствует регистратор.

2 Немного каламбурно, поэтому смотрите на примеры. Если вы выбираете разименованное значение реквизита объекта, например: ВЫБРАТЬ ТоварыВНТТОстаткиИОбороты.Склад.ВидСклада

тогда нужно выбирать и сам объект отдельным полем, например:

ВЫБРАТЬ 

ТоварыВНТТОстаткиИОбороты.Склад ,

ТоварыВНТТОстаткиИОбороты.Склад.ВидСклада

3 Если вы используете периодичность в запросе, отличную от «Авто», тогда нужно в полях выборки указывать все поля периода: ПериодСекунда,
ПериодМинута,
ПериодДень,
ПериодНеделя,
ПериодМесяц,
ПериодГод

Лучше один раз увидеть, поэтому просмотрите мой коротенький мастер-класс по этой теме на YouTube

Как работает доступ на уровне записей RLS в 1с 8.3

С помощью RLS можно скрыть некоторые записи от пользователей, которые не должны их видеть.

Такую настройку можно привязать чисто к роли, или же создать справочник, в котором будет информация о том, какой пользователь к чему имеет доступ. Типичный пример — никто кроме расчетчика и кадровика не должен видеть РКО с видом операции «Выплата зарплаты». Делаем справочник, к примеру «Группы доступа РКО», а в его табличной части добавляем два реквизита: 1) пользователь, 2) Вид операции РКО. И к примеру далее отталкиваемся от того, что если есть комбинация Пользователь/Вид операции РКО — тогда пользователю можно видеть РКО с таким видом операций.

Касательно ролей, есть один интересный вопрос: Что если в одной роли есть ограничение доступа на уровне записей, а в другой нет? Будет ли ограничение потому что в одной из ролей оно есть, или не будет, потому что в другой роли его нет? В этом случае 1С будет работать привычным для программиста образом — Если хотя бы в одной роли что то разрешено, то разрешение преобладает над запретом. Иными словами в описанном случае ограничение доступа не будет действовать, будут видны все записи.

Поэтому обычно используют две роли: «Пользователь», и «Наша Роль» — в которой мы и творим ограничение на уровне записей, далее (ОУЗ
 (RLS) ).

Можно поступить хитрее. Для всех ролей внести ОУЗ
 (RLS) , а для отдельной роли нет. И у кого будет эта роль — тот будет видеть все записи.

Роли, у которых нет прав на данный объект, не влияют на ОУЗ (RLS) . Поэтому вносить правило можно только в роли, у которых имеется доступ к объекту, который мы хотим ограничить.

ОУЗ используется только для действий «Чтение»,»Изменение»,»Добавление» и «Удаление». Причем для каждого действия правила могут быть различными. Это дает большую гибкость.

По сути ОУЗ  (RLS) — это запрос, со своими конечно ограничениями. Видны будут те записи, которые войдут в этот запрос. При этом в запросе нет полей, только таблицы. По умолчанию это текущая таблица (справочник или документ и т.д), в которой мы настраиваем ОУЗ (RLS) . Можно использовать произвольные таблицы.

Таким образом запрос вида «ГДЕ ЛОЖЬ» сделает то, ни одной записи мы не увидим. А «ГДЕ ИСТИНА» — покажет все записи. Что касается нашего РКО, то чтобы не увидели зарплатные документы, запрос будет выглядеть так 

ГДЕ
ВидОперации<>Значение(Перечисление.ВидыОперацийРКО.ВыплатаЗаработнойПлатыРаботнику)
И
ВидОперации<>Значение(Перечисление.ВидыОперацийРКО.ВыплатаЗаработнойПлатыПоВедомостям)

То же самое будет, если обратиться напрямую к таблице

ТекущаяТаблица ИЗ Документ.РасходныйКассовыйОрдер КАК ТекущаяТаблица ГДЕ
ТекущаяТаблица.ВидОперации<>Значение(Перечисление.ВидыОперацийРКО.ВыплатаЗаработнойПлатыРаботнику)
И
ТекущаяТаблица.ВидОперации<>Значение(Перечисление.ВидыОперацийРКО.ВыплатаЗаработнойПлатыПоВедомостям)

Есть специальные зарезервированные фразы, которые начинаются с символа #. Так можно обратиться к текущей таблице с помощью выражения #ТекущаяТаблица. Зачем это нужно, для универсальности наверно. Использовать псевдонимы можно и нужно, если у вас используется несколько таблиц, у которых есть одинаковые реквизиты. В предыдущем запросе вы увидели, как мы создали псевдоним «ТекущаяТаблица» для таблицы «Документ.РасходныйкассовыйОрдер». А можно то же самое сделать вот так.

	ТекущаяТаблица
ИЗ
	#ТекущаяТаблица КАК ТекущаяТаблица
 ГДЕ
ТекущаяТаблица.ВидОперации<>Значение(Перечисление.ВидыОперацийРКО.ВыплатаЗаработнойПлатыРаботнику)
И
ТекущаяТаблица.ВидОперации<>Значение(Перечисление.ВидыОперацийРКО.ВыплатаЗаработнойПлатыПоВедомостям)

Если такой запрос с выражением «#ТекущаяТаблица» использовать в разных объектах, то каждый раз будет иметься ввиду именно таблица этого объекта. То-есть — это относительная ссылка на таблицу конкретного документа, справочника, регистра, в котором используется данное выражение.

Как вы заметили — в запросах ОУЗ нет слова ВЫБРАТЬ и так же нет полей. Зачем последние два запроса начинаются со слова «ТекущаяТаблица» — если это псевдоним таблицы, сказать не могу. Просто все так делают.

Покажу ещё пример, как сделал настраиваемые ограничения, с помощью нового справочника. Здесь присутствует объединения. Пользователь не видит продажи отчетах по регистру «Продажи», у которых ему не имеется соответствующей строки «пользователь/склад» в этом справочнике.

ТекущаяТаблица ИЗ РегистрНакопления.Продажи КАК ТекущаяТаблица
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступаСкладов.Склады КАК ГруппыДоступаСклады
    ПО 
        (    ТекущаяТаблица.Подразделение = ГруппыДоступаСклады.Склад.Подразделение
        	)
        И (ГруппыДоступаСклады.Ссылка.Пользователь = &ТекущийПользователь))

Здесь мы увидели новый элемент — такой как &ТекущийПользователь. Это параметр. Параметры берутся из одноименных переменных сеанса. По другому установить параметры для отбора невозможно.

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

Куда вводятся правила ОУЗ (RLS) в 1С 8. Есть много способов записать эти правила. Можно их писать непосредственно в документе, в роли, в окне «Все роли», в окне «Ограничения доступа». Выбираете роль, объект, и действие (чтение, запись, изменение или удаление) — и в поле редактирования нужно написать правило.

В окне редактирования одной роли, или в окне редактирования «Все ограничения доступа» имеется закладка «Шаблоны ограничений«, в котором можно написать шаблон, а потом вместо того, чтобы каждый раз копировать весь запрос, вносить только имя шаблона в формате #ИмяШаблона. Это предпочтительный метод, так как при изменении запроса не нужно искать и переклацывать его повсюду.

Каждая отдельно взятая роль «видит» только свои шаблоны. Так что для использования того же запроса в другой роли, нужно в ней создать аналогичный шаблон.

Изменили шаблон, и всё. Вот для примера на картинке мы создали шаблон.

А вот мы им воспользовались.

или так, в окне «Все роли»

Или так, в окне «Все ограничения доступа».

Кто не знает, это в окне метаданных нужно открыть «Общие» ->»Роли» и щелкнуть по пункту «Роли» правой кнопкой мыши, и выбрать нужный пункт.

Кстати в окне «Все ограничения доступа» есть удобный конструктор запроса. А вот в шаблонах почему то конструктора нет. Поэтому для удобства первоначально можно создать запрос в этом конструкторе, а затем скопировать в шаблон и там уже корректировать при необходимости.

Для этого откройте для редактирования нужную строчку ограничений, и выберите кнопку конструктора.

Недостаточно памяти сервера для обработки команды 1С файловая при подключении через общую папку по сети

Эта ошибка возникает не только при подключении через 1С, но и просто при попытке открыть файл через сетевой ресурс.  Обычно это бывает, если ваш компьютер на XP, а сервер — виндовс семерка, либо наоборот, но не обязательно. Просто чаще бывает именно так.

Нужно зайти на компьютер-сервер —

Тобишь на тот компьютер, на котором файловая база 1с располагается, он и есть сервер в данном случае.

В нем зайти в реестр,  то есть нажать сочетание клавиш windows + R, либо зайти «Пуск» и внизу в окне ввода набрать «cmd» и нажать «Enter», он же «Ввод», он же стрелка вниз и влево (перевод каретки).

В реестре перейти в раздел: 
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\LanmanServer\Parameters

найти там параметр под названием: 

IRPStackSize

Если его нет — создать: Щелкнуть правой кнопкой мыши на свободном месте правой панели, и выбрать пункт «Создать — Параметр DWORD (32 бита)

Ввести наименование
IRPStackSize  в новой добавившейся строчке или же скопировать отсюда.

Важно — соблюдайте регистр букв. То есть большие и маленькие буквы как здесь указано, так и должны быть в наименовании в реестре.

Нажмите Enter

Нажмите ещё раз Enter или кликните двойным щелчком левой кнопки мыши по имени параметра 
IRPStackSize

или кликните правой кнопкой мыши по этой строке и выберите пункт «Изменить»

В появившемся окне выберите систему исчисления «Десятичная«, а значение напишите 50. По имеющейся у меня информации с других сайтов — это максимальное число одновременных подключений. Причем 1с 8 делает сразу несколько подключений — от 10 и больше. По проверенной мной информации, обычно это 24 открытых файла.

Нажмите ОК.

Закройте окно реестра.

Перезагрузите компьютер.

Ещё раз повторяю, так как многие, и я в том числе на этом спотыкались — это всё нужно делать на компьютере — на котором располагается папка общего доступа с базой 1С.

То же самое касается любых файлов, при доступе к которым не из 1с возникают подобные ошибки.

Вообще, если вы хотите использовать windows 7 для работы на ней файловой базы с количеством одновременно подключаемых пользователей от 3-х и выше, вышеперечисленных мер недостаточно. Нужно превратить операционную систему в некий файловый сервер, я бы сказал даже, в файловую помойку. Для этого придется поковыряться ещё.

Нужно установить следующие параметры в реестре:

 
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters\size
Установите одно из значений ключа: 1, 2 или 3. 1 = Минимальное использование памяти 2 = Сбалансированное 3 = Максимальная пропускная способность для общих файлов и приложений, подключающихся по сети
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager\MemoryManagement\LargeSystemCache
Для ключа доступны значения 0 и 1. 1 = Максимальная пропускная способность для использования файлов по сети, 0 = Максимальная пропускная способность для приложений, работающих по сети.

Таким образом, чтобы пользователи могли использовать общие файлы и подключаться к базе данных 1С без ограничений, выставляем на компьютере, который хотим использовать в качестве файлового сервера такие значения:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management]
"LargeSystemCache"=dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters]
"Size"=dword:00000003

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