Архив рубрики: 1С Предприятие 8.0

1С Предприятие 8.3 Как проверить наличие реквизита документа или табличной части программно

В типовых конфигурациях это делается просто:

//Сначала получим метаданные
МетаданныеДокумента = ДокументОбъект.Метаданные();
//для реквизита документа
ОбщегоНазначения.ЕстьРеквизитДокумента("СуммаВключаетНДС", МетаданныеДокумента);
//для таб.части документа
ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("ЕдиницаИзмерения", МетаданныеДокумента,ОбщегоНазначения.ПолучитьИмяТабличнойЧастиПоСсылкеНаСтроку(СтрокаТабличнойЧасти));

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

	реквНаименованиеПолное = метаданные.Справочники.Номенклатура.Реквизиты.Найти("НаименованиеПолное");
	//для табличных частей
	реквЦена=метаданные.Документы.ПоступлениеТоваровУслугВНТТ.ТабличныеЧасти.ВозвратнаяТара.Реквизиты.Найти("Цена");
	//у регистров метаданные разбиты на Измерения, Ресурсы и Реквизиты
	реквИзмер=метаданные.РегистрыСведений.ЦеныНоменклатуры.Измерения.Найти("ТипЦен");
	реквРесурс=метаданные.РегистрыСведений.ЦеныНоменклатуры.Ресурсы.Найти("Цена");
	реквРеквизит=метаданные.РегистрыСведений.ЦеныНоменклатуры.Реквизиты.Найти("БабаЯга");

Если реквизит отсутствует, тогда будет возвращено значение неопределено, как будет в случае с реквизитом «БабаЯга» в регистре цен.

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

рекв = метаданные["Справочники"]["Номенклатура"].Реквизиты.Найти("ТипНоменклатуры");

В случае удачного нахождения реквизита с указанным именем возвращается искомый объект метаданных, иначе, как уже упоминалось — НЕОПРЕДЕЛЕНО,

1c 8.3 (8.2, 8.1) перенос остатков товаров

Ахтунг! На момент написания статьи данная обработка выгружает только остатки оптовых и НТТ складов. Потому что я спешил и большего мне не нужно было на этот момент. Если вам нужно выгружать розничные склады, пишите в комментариях, я сделаю доработку.

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

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

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

Я выкладываю обработку бесплатно, но надеюсь, если она окажется полезной, Вы щелкните по кнопке соцсети, или обратите внимание на некоторые объявления.

Принцип работы :

  1. Выгружается файл csv по указанному складу с остатками на конец указанной даты. Файл содержит перечень кодов номенклатуры и остатков по каждой позиции.
  2. Загружается из файла в другую базу. Номенклатура совмещается по коду. При загрузке создаются два документа: Оприходование для положительных остатков и списание — для отрицательных. Склад в этих документах берется из реквизита «Склад» обработки. Дата документа устанавливается из реквизита «Дата остатков» обработки. Так как при загрузке создаются не только количества, но и суммы в документах оприходования и списания, нужно указать тип цен.
Внешний вид обработки переноса остатков товаров

После выполнения обработки открываются формы документа оприходования и списания. Они не записаны. Вы можете внести недостающие счета и заполнить другие реквизиты, а затем провести или записать эти документы. Или же просто закрыть без сохранения.

Как программно определить количество строк и столбцов 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();

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Недостаточно памяти сервера для обработки команды 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 с кучей пользователей. Хотелось бы сервер конечно для удобства регламентных заданий, но вот так.. настроил, людям хватает.

1С 8 УТ Украины 3.1 как вывести в отчете «Ведомость товаров на складах» склады в колонках

В версии УТ Украины 3.0 склады выводились в колонках. Многие пользователи считают это удобным вариантом. Как сделать то-же самое в 3.1 разобрался не сразу, поэтому, чтобы не забыть, решил сделать видео на эту тему.

1С 8 Как создать реализацию товаров и услуг на основании заказа покупателя УТП

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

Заходим в меню: Сервис -> пользователи -> Настройка дополнительных прав пользователей. Настраиваем дополнительные права пользователя, как показано на рисунке.

Далее настраиваем параметр бухучета, который отвечает за контроль остатка при проведении бухгалтерских регистров.
Заходим в Сервис -> Настройка учета -> Настройка параметров учета
Далее находим закладку как показано на картинке и устанавливаем флажок «Отключить контроль отрицательных остатков МПЗ». Кстати в «Управление торговлей» я этой настройки не нашел. Будем считать её имеющейся только в УТП, Бухгалтерии и УПП,

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

Но для верности лучше использовать платежные документы. В этом случае последовательность действия такая.

Сначала создаем заказ покупателя:
Заполняем его шапку и табличную часть.
Далее на основании заказа покупателя создается счет на оплату покупателю.

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

Что интересно, сам счет на оплату выпадает из структуры подчиненности документа.

Для примера использовались такие платформа и конфигурация:

1С:Предприятие 8.3 (8.3.6.2524)

«Управление торговым предприятием для Украины», редакция 1.1.
Разработка конфигурации: «ABBYY Ukraine», 2007-2009
(1.1.5.3)

Хотя может быть применено в любой типовой конфигурации.