Сведения о
контрагенте
|
Всего
задолженность [РУБ]
|
Шифр
|
Наименование
|
Дебетовая
|
Кредитовая
|
000003
|
ТО Охрана г.
Казань
|
|
45,00
|
000004
|
Охрана ТО г.
Магнитогорск
|
|
735,00
|
000005
|
Предприниматель
Попков И.
|
51,92
|
|
000015
|
А/Ф
ВАМИН-Минзаля'
|
|
124 752,15
|
000027
|
ФГУЗ
'Набережночел. дезста
|
|
10 903, 20
|
000050
|
ООО АРСЛАН
|
|
23 937,48
|
000060
|
ООО'Агава К'
|
|
18,90
|
000062
|
Челн. предпр.
АООТ 'Стройме
|
|
4 011 317,82
|
000063
|
ОАО'ЧЕЛНЫ-ЛАДА'
|
|
65 799,18
|
000069
|
ОАО
'ЧЕЛНЫНЕФТЕПРОДУКТ'
|
73 929,06
|
|
000072
|
АО ПАК
|
|
14 816,28
|
000074
|
Департамент
главн. энергет
|
62 759,56
|
|
000094
|
ООО'Кран-Сервис'
ИДЦ
|
|
8 509,64
|
000096
|
ОАО 'Камснаб'
|
25 198,06
|
|
000112
|
ФГУП'Охрана'МВД
г. Наб. Чел
|
|
41 278,53
|
000131
|
Фил.
ЗАО'РОСТЭК-Татарстан'
|
|
323,47
|
000133
|
ЧМУС-2
'Татсантехмонтаж'
|
10 917,97
|
|
000150
|
ООО'ТатЦентр'
|
1 727,24
|
|
000164
|
ООО
Агроремонтсервис
|
|
5 951,92
|
000165
|
ООО 'Полет'
|
|
13 389,83
|
000181
|
ООО'РИД-маркет'
|
154,89
|
|
000182
|
ОАО'Компания
Татглавснаб'
|
8 000,00
|
|
000186
|
Елаб.
'Стальконструкция'
|
|
1 631,91
|
000202
|
ООО'Транс-Ойл'
г. Казань
|
|
94 358,40
|
000209
|
ООО'Бау
Траст-Комплект'
|
6 571,45
|
|
000215
|
ООО'Бухгалтер-ПРО'
|
|
2 300,00
|
000236
|
ООО'НЗС и МК'
|
|
455,60
|
000266
|
ООО СЭП
Экосервис
|
16 174,01
|
|
000306
|
ОАО
'Прокатмонтаж'
|
|
92 580,47
|
000317
|
ЗАО'Востокмонтажмеханизац
|
|
27 545,28
|
000331
|
АО
'Монтажник'г. Магнитог.
|
|
9 884,33
|
000346
|
ООО 'Мехснаб'г.
Магнитогор
|
|
3 560,43
|
000355
|
ООО ПФ
ТрансТехСервис-3
|
3,00
|
|
000360
|
ОАО 'РМЗ К-700'
|
|
19 092,78
|
000364
|
ТОО ПКФ
'Гаммон'
|
158 350,00
|
|
000386
|
ЧМУ
ОАО'Татэлектромонтаж'
|
|
4 512,01
|
000399
|
МСШСП г.
Магнитогорск
|
|
165 695,73
|
Итого
|
363837,16
|
4743395,34
|
Директор:
Аппаков А.М.
|
Главный
бухгалтер: Минкова Е.А.
|
Приложение Д
Листинг модуля формы документа
"ВводДанныхОВыработкеНаМеханизмах"
Перем мГоловнаяОрганизация;
Перем ОсновнойВидОплаты, ПустойВидОплаты;
Функция ПолучитьДоступныеВидыОплат (Механизм)
ТЗРегистра = РегистрыСведений. лс_ОплатаРаботНаМеханизмах.
СрезПоследних (Дата, Новый Структура ("Механизм", Механизм));
Список = Новый СписокЗначений;
Список. ЗагрузитьЗначения (ТЗРегистра. ВыгрузитьКолонку
("ВидОплаты"));
Возврат Список;
КонецФункции // ПолучитьДоступныеВидыОплат
(ТекСтрока. Механизм) ()
Функция ЧислоСтрок (Механизм, ВидОплаты,
Сотрудник)
Возврат Выработка. НайтиСтроки (Новый Структура
("Механизм, ВидОплаты, Сотрудник", Механизм, ВидОплаты, Сотрудник)).
Количество ();
КонецФункции // ЕстьСтрока ()
Функция ПолучитьРазмер (Механизм, ВидОплаты)
Возврат РегистрыСведений. лс_ОплатаРаботНаМеханизмах.
ПолучитьПоследнее (Дата, Новый Структура ("Механизм, ВидОплаты",
Механизм, ВидОплаты)). Размер;
КонецФункции //
Процедура Пересчет (СтрокаТЧ)
Если СтрокаТЧ. ВидОплаты = ОсновнойВидОплаты Тогда
СтрокаТЧ. Результат = СтрокаТЧ. Размер * СтрокаТЧ.
ВыработкаЧас;
Иначе
СтрокаТЧ. Результат = 0;
КонецЕсли;
КонецПроцедуры
Процедура КоманднаяПанель1Подбор (Кнопка)
ПроцедурыУправленияПерсоналом.
ОткрытьФормуВыбораСотрудникаОрганизации (ЭлементыФормы. Выработка, Ссылка,
Ложь, Дата, мГоловнаяОрганизация, 1);
КонецПроцедуры
Процедура ВыработкаСотрудникНачалоВыбора
(Элемент, СтандартнаяОбработка)
ПроцедурыУправленияПерсоналом.
ОткрытьФормуВыбораСотрудникаОрганизации (Элемент, Ссылка, Истина, Дата,
мГоловнаяОрганизация, 1, СтандартнаяОбработка, Элемент. Значение);
КонецПроцедуры
Процедура ПриОткрытии ()
Если ЭтоНовый () Тогда // проверить объект на то, что он
еще не внесен в ИБ
// Заполнить реквизиты значениями по умолчанию.
ОбщегоНазначения. ЗаполнитьШапкуДокумента (ЭтотОбъект,
глЗначениеПеременной ("глТекущийПользователь"));
КонецЕсли;
РаботаСДиалогами. УстановитьДоступностьПоляВводаНомера
(Метаданные (), ЭтаФорма, ЭлементыФормы. ДействияФормы. Кнопки. Подменю1,
ЭлементыФормы. Номер);
// Заполним реквизит формы МесяцСтрока.
МесяцСтрока = РаботаСДиалогами. ДатаКакМесяцПредставление
(ПериодРегистрации);
// Вывести в заголовке формы статус документа
(новый, не проведен, проведен).
РаботаСДиалогами. УстановитьЗаголовокФормыДокумента (,
ЭтотОбъект, ЭтаФорма);
// Запомнить текущие значения реквизитов формы.
мТекущаяДатаДокумента = Дата;
// Получим и запомним ссылку на головную
организацию
мГоловнаяОрганизация = ОбщегоНазначения. ГоловнаяОрганизация
(Организация);
КонецПроцедуры
Процедура ПериодРегистрацииПриИзменении (Элемент)
РаботаСДиалогами. ДатаКакМесяцПодобратьДатуПоТексту (Элемент.
Значение, ПериодРегистрации);
Элемент. Значение = РаботаСДиалогами.
ДатаКакМесяцПредставление (ПериодРегистрации);
КонецПроцедуры // ПериодРегистрацииПриИзменении
()
// Процедура - обработчик события
"Регулирование" поля ввода периода регистрации.
Процедура ПериодРегистрацииРегулирование
(Элемент, Направление, СтандартнаяОбработка)
ПериодРегистрации = ДобавитьМесяц (ПериодРегистрации,
Направление);
Элемент. Значение = РаботаСДиалогами.
ДатаКакМесяцПредставление (ПериодРегистрации);
КонецПроцедуры // ПериодРегистрацииРегулирование
()
// Процедура - обработчик события
"Очистка" поля ввода периода регистрации.
Процедура ПериодРегистрацииОчистка (Элемент,
СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
КонецПроцедуры // ПериодРегистрацииОчистка ()
// Процедура - обработчик события "НачалоВыбораИзСписка"
поля ввода периода регистрации.
Процедура ПериодРегистрацииНачалоВыбораИзСписка
(Элемент, СтандартнаяОбработка)
РаботаСДиалогами.
НачалоВыбораИзСпискаПредставленияПериодаРегистрации (Элемент,
СтандартнаяОбработка, ПериодРегистрации, ЭтаФорма);
КонецПроцедуры // ПериодРегистрацииНачалоВыбораИзСписка
()
// Процедура - обработчик события
"АвтоПодборТекста" поля ввода периода регистрации.
Процедура ПериодРегистрацииАвтоПодборТекста
(Элемент, Текст, ТекстАвтоПодбора, СтандартнаяОбработка)
РаботаСДиалогами. ДатаКакМесяцАвтоПодборТекста (Текст,
ТекстАвтоПодбора, СтандартнаяОбработка);
КонецПроцедуры // ПериодРегистрацииАвтоПодборТекста
()
// Процедура - обработчик события
"ОкончаниеВводаТекста" поля ввода периода регистрации.
Процедура ПериодРегистрацииОкончаниеВводаТекста
(Элемент, Текст, Значение, СтандартнаяОбработка)
РаботаСДиалогами. ДатаКакМесяцОкончаниеВводаТекста (Текст,
Значение, СтандартнаяОбработка);
КонецПроцедуры // ПериодРегистрацииОкончаниеВводаТекста
()
Процедура ОбработкаВыбора (ЗначениеВыбора,
Источник)
Если ТипЗнч (ЗначениеВыбора) = Тип ("Структура")
Тогда
Команда = ""; Реквизиты = "";
Если ЗначениеВыбора. Свойство ("Команда", Команда)
и Команда = "ЗаполнитьСписокРаботников" Тогда
ВременнаяТаблица = ЗначениеВыбора. Данные. Выгрузить ();
МассивСотрудников = ВременнаяТаблица. ВыгрузитьКолонку
("Сотрудник");
ВременнаяТаблица. Колонки. Подразделение. Имя =
"ПодразделениеОрганизации";
ВременнаяТаблица. Колонки. Добавить ("Авторасчет");
ВременнаяТаблица. ЗаполнитьЗначения (Истина, "Авторасчет");
Выработка. Загрузить (ВременнаяТаблица);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура ВыработкаОбработкаВыбора (Элемент,
ВыбранноеЗначение, СтандартнаяОбработка)
Если ТипЗнч (ВыбранноеЗначение) <> Тип
("СправочникСсылка. СотрудникиОрганизаций") Тогда
Возврат;
КонецЕсли;
СтандартнаяОбработка = Ложь;
Если Выработка. НайтиСтроки (Новый Структура
("Сотрудник", ВыбранноеЗначение)). Количество () = 0 Тогда
СтрокаТабличнойЧасти = Выработка. Добавить ();
СтрокаТабличнойЧасти. Сотрудник= ВыбранноеЗначение;
СтрокаТабличнойЧасти. Авторасчет= Истина;
ЭлементыФормы. Выработка. ТекущаяСтрока =
СтрокаТабличнойЧасти;
ПроцедурыУправленияПерсоналом. ПроставитьДанныеСтроки
(ВыбранноеЗначение, Дата, ЭлементыФормы. Выработка);
КонецЕсли;
КонецПроцедуры
Процедура ВыработкаСотрудникПриИзменении
(Элемент)
ПроцедурыУправленияПерсоналом. ПроставитьДанныеСтроки
(Элемент. Значение, ПериодРегистрации, ЭлементыФормы. Выработка);
КонецПроцедуры
Процедура КоманднаяПанель1Заполнить (Кнопка)
Если Выработка. Количество () > 0 Тогда
ТекстВопроса = "Перед заполнением табличные части будут
очищены. Заполнить?";
Ответ = Вопрос (ТекстВопроса, РежимДиалогаВопрос. ДаНет,,
КодВозвратаДиалога. Да,);
Если Ответ <> КодВозвратаДиалога. Да Тогда
Возврат;
КонецЕсли;
Выработка. Очистить ();
КонецЕсли;
мИмяЗаполняемойТаблицы = "Выработка";
ПроцедурыУправленияПерсоналом.
ОткрытьФормуОтбораСпискаРаботников (ЭтаФорма, ПериодРегистрации,, Организация);
// ПроцедурыУправленияПерсоналом.
ОткрытьФормуОтбораСпискаРаботников (ЭтаФорма, ПериодРегистрации,, Организация,,,,"РазовыеРасчеты",
Новый Структура ("ВидРасчета, Показатель1, ДатаНачала,
ДатаОкончания", ПланыВидовРасчета. ОсновныеНачисленияОрганизаций.
ПустаяСсылка (),0, Дата (1,1,1), Дата (1,1,1)));
КонецПроцедуры
Процедура ВыработкаПередНачаломИзменения (Элемент,
Отказ)
Если Элемент. ТекущаяКолонка. Имя = "ВидОплаты"
Тогда
// проверим, выбран ли механизм
Если Элемент. ТекущаяСтрока. Механизм. Пустая () Тогда
Отказ = истина;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура ВыработкаМеханизмПриИзменении (Элемент)
Если ЧислоСтрок (Элемент. Значение, ОсновнойВидОплаты,
ЭлементыФормы. Выработка. ТекущаяСтрока. Сотрудник) =0 Тогда
ЭлементыФормы. Выработка. ТекущаяСтрока. ВидОплаты =
ОсновнойВидОплаты;
ЭлементыФормы. Выработка. ТекущаяСтрока. Размер =
ПолучитьРазмер (ЭлементыФормы. Выработка. ТекущаяСтрока. Механизм,
ЭлементыФормы. Выработка. ТекущаяСтрока. ВидОплаты);
Пересчет (ЭлементыФормы. Выработка. ТекущаяСтрока);
Иначе
ЭлементыФормы. Выработка. ТекущаяСтрока. ВидОплаты =
ПустойВидОплаты;
КонецЕсли;
ОбработкаИзмененияВидаОплаты (ЭлементыФормы. Выработка.
ТекущаяСтрока);
КонецПроцедуры
Процедура ВыработкаПередОкончаниемРедактирования
(Элемент, НоваяСтрока, ОтменаРедактирования, Отказ)
Если не ОтменаРедактирования Тогда
ТекСтрока = Элемент. ТекущаяСтрока;
ТекКолонка = Элемент. ТекущаяКолонка;
Если ЧислоСтрок (ТекСтрока. Механизм, ТекСтрока. ВидОплаты,
ТекСтрока. Сотрудник) >1 Тогда
Сообщить ("В строке " + ТекСтрока. НомерСтроки +
" дублируется комбинация ключевых полей!");
ТекСтрока. ВидОплаты = ПустойВидОплаты;
Отказ = истина;
Возврат;
КонецЕсли;
Если ТекСтрока. ВидОплаты <> ОсновнойВидОплаты Тогда
Если ЧислоСтрок (ТекСтрока. Механизм, ОсновнойВидОплаты,
ТекСтрока. Сотрудник) =0 Тогда
Сообщить ("У сотрудника " + ТекСтрока. Сотрудник +
" на механизме " + ТекСтрока. Механизм + " не введен основной
вид оплаты!");
ТекСтрока. ВидОплаты = ПустойВидОплаты;
Отказ = истина;
Возврат;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура ВыработкаПриНачалеРедактирования
(Элемент, НоваяСтрока, Копирование)
ТекСтрока = Элемент. ТекущаяСтрока;
Если Копирование Тогда
ТекКолонка = Элемент. ТекущаяКолонка;
ТекСтрока. ВидОплаты = ПустойВидОплаты;
ТекСтрока. ВыработкаЧас = 0;
ТекСтрока. Результат = 0;
КонецЕсли;
Если НоваяСтрока Тогда
ТекСтрока. Авторасчет = Истина;
КонецЕсли;
КонецПроцедуры
Процедура КоманднаяПанель1Рассчитать (Кнопка)
Если не РаботаСДиалогами.
ЗаписатьДокументПередВыполнениемДействия (ЭтотОбъект, ЭтаФорма, "Перед
расчетом документ необходимо записать. Записать документ?") Тогда
Возврат;
КонецЕсли;
Запрос = Новый Запрос;
Запрос. Текст = "ВЫБРАТЬ
|Выработка. НомерСтроки,
|ВЫБОР
|КОГДА Выработка. ВидОплаты = &Основной
|ТОГДА Выработка. ВыработкаЧас * ОсновнойТариф. Размер
|ИНАЧЕ Выработка. ВыработкаЧас * ОсновнойТариф. Размер *
ПрочиеТарифы. Размер / 100
|КОНЕЦ КАК Результат,
|ВЫБОР
|КОГДА Выработка. ВидОплаты = &Основной
|ТОГДА ОсновнойТариф. Размер
|ИНАЧЕ ПрочиеТарифы. Размер
|КОНЕЦ КАК Размер
|ИЗ
|Документ. лс_ВводДанныхОВыработкеНаМеханизмах. Выработка КАК
Выработка
|ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ
|лс_ВводДанныхОВыработкеНаМеханизмахВыработка. Механизм КАК
Механизм,
|лс_ОплатаРаботНаМеханизмахСрезПоследних. Размер КАК Размер
|ИЗ
|Документ. лс_ВводДанныхОВыработкеНаМеханизмах. Выработка КАК
лс_ВводДанныхОВыработкеНаМеханизмахВыработка
|ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.
лс_ОплатаРаботНаМеханизмах. СрезПоследних (&ДатаДок, ВидОплаты =
&Основной) КАК лс_ОплатаРаботНаМеханизмахСрезПоследних
|ПО лс_ВводДанныхОВыработкеНаМеханизмахВыработка. Механизм =
лс_ОплатаРаботНаМеханизмахСрезПоследних. Механизм) КАК ОсновнойТариф
|ПО Выработка. Механизм = ОсновнойТариф. Механизм
|ПО Выработка. Механизм = ПрочиеТарифы. Механизм
|И Выработка. ВидОплаты = ПрочиеТарифы. ВидОплаты
|ГДЕ
|Выработка. Ссылка = &Ссылка";
Запрос. УстановитьПараметр ("Основной",
ОсновнойВидОплаты);
Запрос. УстановитьПараметр ("ДатаДок", Дата);
Запрос. УстановитьПараметр ("Ссылка", Ссылка);
ТабРезультат = Запрос. Выполнить (). Выгрузить ();
Для каждого СтрТЧ Из Выработка Цикл
СтрТаб = ТабРезультат. Найти (СтрТЧ. НомерСтроки,
"НомерСтроки");
Если СтрТаб <> Неопределено Тогда
СтрТЧ. Результат = СтрТаб. Результат;
СтрТЧ. Размер = СтрТаб. Размер;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура ВыработкаРезультатПриИзменении
(Элемент)
ЭлементыФормы. Выработка. ТекущаяСтрока. Авторасчет = Ложь;
КонецПроцедуры
Процедура ВыработкаВыработкаПриИзменении
(Элемент)
Пересчет (ЭлементыФормы. Выработка. ТекущаяСтрока);
КонецПроцедуры
Процедура ВыработкаВидОплатыНачалоВыбора
(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ТекСтрока = ЭлементыФормы. Выработка. ТекущаяСтрока;
СписокВидовОплат = ПолучитьДоступныеВидыОплат (ТекСтрока.
Механизм);
ЭлементСписка = ВыбратьИзСписка (СписокВидовОплат, Элемент,
СписокВидовОплат. НайтиПоЗначению (Элемент. Значение));
Если ЭлементСписка <> Неопределено Тогда
Элемент. Значение = ЭлементСписка. Значение;
ТекСтрока. Размер = ПолучитьРазмер (ТекСтрока. Механизм,
Элемент. Значение);
Пересчет (ТекСтрока);
КонецЕсли;
КонецПроцедуры
ОсновнойВидОплаты= Справочники. лс_ВидыОплаты. ЧасовойТариф;
ПустойВидОплаты= Справочники. лс_ВидыОплаты. ПустаяСсылка ();
Приложение Е
Листинг модуля документа "Доплата из
коллективного фонда по итогам месяца"
// // // // // // // // // // // // // // // //
// // // // // // // // // // // // // // // // // // // // // // // //
// ПЕРЕМЕННЫЕ МОДУЛЯ
Перем мТекущаяДатаДокумента;
Перем мДеревоМакетов; // Хранит дерево макетов печатных
форм
Перем мПодменюПечати; // Хранит элемент управления подменю
печати
Перем мПечатьПоУмолчанию; // Хранит элемент управления
кнопку печать по умолчанию
Перем мКнопкиЗаполненияТЧ; // Хранит дерево кнопок подменю
заполнение ТЧ
Перем мСтарыйРезультат; // Хранит "Результат"
текущей строки
Перем мСтароеФизлицо; // Хранит ссылку на физлицо, для
формирования имени кнопки расчета по работнику
Перем мГоловнаяОрганизация; // Хранит ссылку на головную
организацию
Перем мМассивЭУ; // Массив ЭУ видимостью которых
необходимо управлять в зависимости от учетной политики по персоналу
Перем ПоправочныйКоэффициент;
// // // // // // // // // // // // // // // //
// // // // // // // // // // // // // // // // // // // // // // // //
// ПРОЦЕДУРЫ И ФУНКЦИИ ОБЩЕГО НАЗНАЧЕНИЯ
Процедура ПриСменеПериодаРегистрации ()
ДатаНачалаБП = НачалоМесяца (ПериодРегистрации);
ДатаОкончанияБП = КонецМесяца (ПериодРегистрации);
КонецПроцедуры
Функция ПолучитьПремиюВсего ()
Рез = 0;
Для каждого СтрТаб Из Начисления Цикл
ПромРез =? (СтрТаб. База<>0, СтрТаб. База, СтрТаб.
Результат);
Рез = Рез + ПромРез*СтрТаб. КТУ;
КонецЦикла;
ВозвратРез;
КонецФункции
// Процедура устанавливает подменю
"Заполнить" в командных панелях ТЧ документа при необходимости
Процедура УстановитьКнопкиПодменюЗаполненияТЧ ()
СоответствиеТЧ = Новый Соответствие;
СоответствиеТЧ. Вставить (ЭлементыФормы. Начисления,
ЭлементыФормы. КоманднаяПанельНачисления);
мКнопкиЗаполненияТЧ = РаботаСДиалогами.
СформироватьПодменюЗаполненияТЧ (Ссылка, СоответствиеТЧ, Новый Действие
("НажатиеНаДополнительнуюКнопкуЗаполненияТЧ"));
КонецПроцедуры // УстановитьКнопкиПодменюЗаполненияТЧ
()
// Процедура устанавливает подменю
"Печать" и кнопку "Печать по умолчанию" при необходимости
Процедура УстановитьКнопкиПечати ()
мДеревоМакетов = РаботаСДиалогами.
ПолучитьДеревоМакетовПечати (Ссылка, ПолучитьСтруктуруПечатныхФорм (), Новый
Действие ("ОсновныеДействияФормыПечать"), Новый Действие
("ОсновныеДействияФормыУстановитьПечатьПоУмолчанию"));
РаботаСДиалогами. УстановитьПодменюПечати (мПодменюПечати,
ЭлементыФормы. ОсновныеДействияФормы, мДеревоМакетов. Строки. Количество ()
> 0);
РаботаСДиалогами. УстановитьПечатьПоУмолчанию
(мПечатьПоУмолчанию, ЭлементыФормы. ОсновныеДействияФормы, мДеревоМакетов,
Метаданные (). Имя, Новый Действие
("ОсновныеДействияФормыПечатьПоУмолчанию"));
Если Не мПодменюПечати = Неопределено Тогда
РаботаСДиалогами. СформироватьПодменю (мДеревоМакетов,
мПодменюПечати, Истина, Истина);
КонецЕсли;
КонецПроцедуры // УстановитьКнопкиПечати ()
// В зависимости от видимости колонок подпись
"Итого: " вписывается колонке, предшествующей колонке Результат
Процедура УстановитьТекстИтого ()
КоллекцияКолонок = ЭлементыФормы. Начисления. Колонки;
ИндексКолонкиРезультат = КоллекцияКолонок. Индекс
(КоллекцияКолонок. Результат);
// очищаем текст подвала всех колонок
Для каждого Колонка Из КоллекцияКолонок Цикл
Если Колонка. Имя <> "Результат" Тогда
Колонка. ТекстПодвала = ""
КонецЕсли;
КонецЦикла;
// вписывать надпись будем только тогда, когда
слева от результатов есть еще одна колонка
Если ИндексКолонкиРезультат > 0 Тогда
ИндексПредшествующейКолонки = ИндексКолонкиРезультат - 1;
// ищем предшествующую видимую колонку
Пока ИндексПредшествующейКолонки >= 0 Цикл
Колонка = КоллекцияКолонок. Получить
(ИндексПредшествующейКолонки);
Если Колонка. Видимость Тогда
Прервать;
КонецЕсли;
ИндексПредшествующейКолонки = ИндексПредшествующейКолонки -
1;
КонецЦикла;
// вписывать надпись можем не в любую колонку, а
только в некоторые
Если ИндексПредшествующейКолонки >= 0 Тогда
ИмяПредшествующейКолонки = Колонка. Имя;
Если ИмяПредшествующейКолонки = "Авторасчет"
Или ИмяПредшествующейКолонки = "Сотрудник"
Или ИмяПредшествующейКолонки = "Размер" Тогда
Колонка. ТекстПодвала = "Итого: "
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры // УстановитьТекстИтого ()
// Выставляет автоотметку незаполненного базового
периода, если это требуется и
// переписывает название колонки в т.п.
Процедура УправлениеВнешнимВидомФормы
(ПриОткрытии = Ложь)
ЭтоПремияПроцентом = ВидРасчета. СпособРасчета =
Перечисления. СпособыРасчетаОплатыТруда. Процентом;
НеобходимБазовыйПериод = ЭтоПремияПроцентом Или ВидРасчета.
ВидПремии = Перечисления. ВидыПремии. ГодоваяПремия;
ЭлементыФормы. Начисления. Колонки. Размер. ТекстШапки =?
(ЭтоПремияПроцентом,"Процент","Сумма");
Если Не ПриОткрытии или Не ЭтоПремияПроцентом Тогда
ЭлементыФормы. Начисления. Колонки. Размер. Видимость =
ЭтоПремияПроцентом;
КонецЕсли;
ЭлементыФормы. ДатаНачалаБП. АвтоОтметкаНезаполненного=
НеобходимБазовыйПериод;
ЭлементыФормы. ДатаНачалаБП. ОтметкаНезаполненного=
ЭлементыФормы. ДатаНачалаБП. АвтоОтметкаНезаполненного И НЕ ЗначениеЗаполнено
(ДатаНачалаБП);
ЭлементыФормы. ДатаОкончанияБП. АвтоОтметкаНезаполненного=
НеобходимБазовыйПериод;
ЭлементыФормы. ДатаОкончанияБП. ОтметкаНезаполненного=
ЭлементыФормы. ДатаОкончанияБП. АвтоОтметкаНезаполненного И НЕ
ЗначениеЗаполнено (ДатаОкончанияБП);
УстановитьТекстИтого ();
КонецПроцедуры // УправлениеВнешнимВидомФормы
()
// Удаляет кнопку из набора кнопок, если она
существует
Процедура УдалитьКнопкуИзНабора (ИмяКнопки,
НаборКнопок)
Кнопка = НаборКнопок. Найти (ИмяКнопки);
Если Кнопка <> Неопределено Тогда
НаборКнопок. Удалить (НаборКнопок. Индекс (Кнопка));
КонецЕсли;
КонецПроцедуры // УдалитьКнопкуИзНабора ()
// Управляет видимостью элементов формы,
зависящих от наличия перерассчитываемого документа
Процедура ОбновитьВидимостьПоПерерассчитываемомуДокументу
()
// Заполнение команд подменю
"Заполнить"
КнопкиЗаполнить = ЭлементыФормы. ДействияФормы. Кнопки.
ПодменюЗаполнить. Кнопки;
ДействиеПоКнопке = Новый Действие
("ДействияФормыЗаполнить");
Если ЗначениеЗаполнено (ПерерассчитываемыйДокумент) Тогда
УдалитьКнопкуИзНабора ("СписокРаботников",
КнопкиЗаполнить);
Если КнопкиЗаполнить. Найти
("ПоПерерассчитываемомуДокументу") = Неопределено Тогда
КнопкиЗаполнить. Вставить (0,
"ПоПерерассчитываемомуДокументу", ТипКнопкиКоманднойПанели.
Действие,"По перерассчитываемому документу", ДействиеПоКнопке);
КонецЕсли;
Иначе
УдалитьКнопкуИзНабора
("ПоПерерассчитываемомуДокументу", КнопкиЗаполнить);
Если КнопкиЗаполнить. Найти ("СписокРаботников") =
Неопределено Тогда
КнопкиЗаполнить. Вставить (0, "СписокРаботников",
ТипКнопкиКоманднойПанели. Действие,"Списком работников",
ДействиеПоКнопке);
КонецЕсли;
КонецЕсли;
КонецПроцедуры // ОбновитьВидимостьПоПерерассчитываемомуДокументу
()
// Активизирует строки табличных частей документа
после заполнения
Процедура УстановитьТекущуюСтрокуТабличнойЧасти
()
мСтароеФизлицо = Справочники. ФизическиеЛица. ПустаяСсылка
();
// активизируем во всех табличных частях 1-ю
строку
Если Начисления. Количество () > 0 Тогда
СтрокаТЧ = Начисления. Получить (0);
ЭлементыФормы. Начисления. ТекущаяСтрока = СтрокаТЧ;
КонецЕсли;
КонецПроцедуры //
УстановитьТекущуюСтрокуТабличнойЧасти ()
// // // // // // // // // // // // // // // //
// // // // // // // // // // // // // // // // // // // // // // // //
// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ
// Процедура - обработчик события
"ПередОткрытием" формы.
Процедура ПередОткрытием (Отказ,
СтандартнаяОбработка)
// Установка кнопок печати
УстановитьКнопкиПечати ();
// Установка кнопок заполнение ТЧ
УстановитьКнопкиПодменюЗаполненияТЧ ();
КонецПроцедуры // ПередОткрытием ()
Процедура ПриОткрытии ()
Если ЭтоНовый () Тогда // проверить объект на то, что он
еще не внесен в ИБ
// Заполнить реквизиты значениями по умолчанию.
ОбщегоНазначения. ЗаполнитьШапкуДокумента (ЭтотОбъект,
глЗначениеПеременной ("глТекущийПользователь"));
// АБС
ВидРасчета = ВосстановитьЗначение
("ВидРасчетаПремияКРО");
ПоправочныйКоэффициент = 1;
ЧислоМесяцев = 1;
ПриСменеПериодаРегистрации ();
// -АБС
КонецЕсли;
// АБС
НачисленоПремии = ПолучитьПремиюВсего ();
Если НачисленоПремии>0 Тогда
ПоправочныйКоэффициент = Окр
(СуммаКРаспределению/НачисленоПремии,4);
ЭлементыФормы. ТекстКоэффициента. Заголовок =
"Справочно: коэффициент пересчета = " + ПоправочныйКоэффициент;
Иначе
ПоправочныйКоэффициент = 1;
ЭлементыФормы. ТекстКоэффициента. Заголовок = "";
КонецЕсли;
// -АБС
РаботаСДиалогами. УстановитьДоступностьПоляВводаНомера
(Метаданные (), ЭтаФорма, ЭлементыФормы. ДействияФормы. Кнопки. Подменю1,
ЭлементыФормы. Номер);
// Заполним реквизит формы МесяцСтрока.
МесяцСтрока = РаботаСДиалогами. ДатаКакМесяцПредставление
(ПериодРегистрации);
СтруктураКолонок = Новый Структура ();
// Установить колонки, видимостью которых
пользователь управлять не может.
СтруктураКолонок. Вставить ("Сотрудник");
СтруктураКолонок. Вставить ("Размер");
// Установить ограничение - изменять видимость
колонок для табличной части Начисления
ОбработкаТабличныхЧастей.
УстановитьИзменятьВидимостьКолонокТабЧасти (ЭлементыФормы. Начисления. Колонки,
СтруктураКолонок);
// Активизируем табличную часть
ТекущийЭлемент = ЭлементыФормы. Начисления;
// Вывести в заголовке формы статус документа
(новый, не проведен, проведен).
РаботаСДиалогами. УстановитьЗаголовокФормыДокумента (,
ЭтотОбъект, ЭтаФорма);
// Запомнить текущие значения реквизитов формы.
мТекущаяДатаДокумента = Дата;
// Получим и запомним ссылку на головную
организацию
мГоловнаяОрганизация = ОбщегоНазначения. ГоловнаяОрганизация
(Организация);
// Установим видимость реквизитов в зависимости
от уч. политики по персоналу организаций
мМассивЭУ = Новый Массив ();
мМассивЭУ. Добавить (ЭлементыФормы. Начисления. Колонки.
ТабельныйНомерСтрока);
РаботаСДиалогами.
УстановитьВидимостьЭУПоУчетнойПолитикеПоПерсоналу (мМассивЭУ,
глЗначениеПеременной ("глУчетнаяПолитикаПоПерсоналуОрганизации"),
Организация);
УправлениеВнешнимВидомФормы (Истина);
// Установим видимость в зависимости от наличия
перерассчитываемого документа
ОбновитьВидимостьПоПерерассчитываемомуДокументу ();
// Установить активный реквизит.
Если Не РаботаСДиалогами. АктивизироватьРеквизитВФорме
(ЭтотОбъект, ЭтаФорма) Тогда
ТекущийЭлемент = ЭлементыФормы. Начисления;
КонецЕсли;
КонецПроцедуры // ПриОткрытии ()
Процедура ПослеЗаписи ()
// Установка кнопок печати
УстановитьКнопкиПечати ();
// Вывести в заголовке формы статус документа
(новый, не проведен, проведен).
РаботаСДиалогами. УстановитьЗаголовокФормыДокумента (,
ЭтотОбъект, ЭтаФорма);
РаботаСДиалогами. ОбновитьПодсказкуКодНомерОбъекта
(ЭтотОбъект. Метаданные (), ЭлементыФормы. ДействияФормы. Кнопки. Подменю1,
ЭлементыФормы. Номер);
// АБС
СохранитьЗначение ("ВидРасчетаПремияКРО",
ВидРасчета);
// -АБС
КонецПроцедуры // ПослеЗаписи ()
// Процедура - обработчик события
"ОбработкаВыбора" формы.
Процедура ОбработкаВыбора (ЗначениеВыбора,
Источник)
Если ТипЗнч (ЗначениеВыбора) = Тип ("Структура")
Тогда
Команда = "";
Реквизиты = "";
Если ЗначениеВыбора. Свойство ("Команда", Команда)
и Команда = "ЗаполнитьСписокРаботников" Тогда
ВременнаяТаблица = ЗначениеВыбора. Данные. Выгрузить ();
Если ЗначениеВыбора. Свойство
("Реквизиты",Реквизиты) Тогда
ИмяКолонки =? (ВидРасчета. СпособРасчета = Перечисления.
СпособыРасчетаОплатыТруда. Процентом,"Размер","Результат");
ВременнаяТаблица. Колонки. Добавить (ИмяКолонки);
ВременнаяТаблица. ЗаполнитьЗначения (Реквизиты. Размер,
ИмяКолонки);
КонецЕсли;
ВременнаяТаблица. Колонки. Добавить ("Авторасчет");
ВременнаяТаблица. ЗаполнитьЗначения
(Истина,"Авторасчет");
// АБС
ВременнаяТаблица. Колонки. Добавить ("КТУ");
ВременнаяТаблица. ЗаполнитьЗначения (1,"КТУ");
ВременнаяТаблица. ЗаполнитьЗначения (100,"Размер");
// -АБС
Начисления. Загрузить (ВременнаяТаблица);
КонецЕсли;
КонецЕсли;
КонецПроцедуры // ОбработкаВыбора ()
// // // // // // // // // // // // // // // //
// // // // // // // // // // // // // // // // // // // // // // // //
// ПРОЦЕДУРЫ - ДЕЙСТВИЯ КОМАНДНЫХ ПАНЕЛЕЙ ФОРМЫ
// Процедура вызывается при выборе пункта подменю
"Движения документа по регистрам" // меню "Перейти"
командной панели формы. Процедура отрабатывает печать движений // документа по
регистрам.
Процедура
ДействияФормыДвиженияДокументаПоРегистрам (Кнопка)
РаботаСДиалогами. НапечататьДвиженияДокумента (Ссылка);
КонецПроцедуры // ДействияФормыДвиженияДокументаПоРегистрам
()
// Процедура-обработчик события нажатия кнопки
"Рассчитать"
Процедура ДействияФормыРассчитатьВсе (Кнопка)
Если СуммаКРаспределению=0 Тогда
Предупреждение ("Не задана сумма к распределению. Расчет
невозможен");
Возврат;
КонецЕсли;
Если ВидРасчета. СпособРасчета = Перечисления.
СпособыРасчетаОплатыТруда. Процентом Тогда
Если НЕ РаботаСДиалогами.
ЗаписатьДокументОтменивПроведениеПередВыполнениемДействия (ДокументОбъект, ЭтаФорма,
"рассчитать") Тогда
Возврат;
КонецЕсли;
ОбработкаКомментариев = глЗначениеПеременной
("глОбработкаСообщений");
ОбработкаКомментариев. УдалитьСообщения ();
РассчитатьПремию ();
ОбработкаКомментариев. ПоказатьСообщения ();
// АБС
НачисленоПремии = ПолучитьПремиюВсего ();
Если НачисленоПремии>0 Тогда
ПоправочныйКоэффициент = Окр
(СуммаКРаспределению/НачисленоПремии,4);
ЭлементыФормы. ТекстКоэффициента. Заголовок =
"Справочно: коэффициент пересчета = " + ПоправочныйКоэффициент;
Для каждого СтрТЧ Из Начисления Цикл
СтрТЧ. Результат = Окр (СтрТЧ. База*СтрТЧ.
КТУ*ПоправочныйКоэффициент,
);
КонецЦикла;
Разность = СуммаКРаспределению-Начисления. Итог
("Результат");
Если Разность<>0 Тогда // разницу из-за ошибок
округления отнесем на последнюю строку
ПоследняяСтрока = Начисления [Начисления. Количество () - 1];
ПоследняяСтрока. Результат = ПоследняяСтрока. Результат +
Разность;
КонецЕсли;
КонецЕсли;
// -АБС
ТекущаяСтрока = ЭлементыФормы. Начисления. ТекущаяСтрока;
Если ТекущаяСтрока <> Неопределено Тогда
мСтарыйРезультат = ТекущаяСтрока. Результат;
КонецЕсли;
Иначе
Сообщить ("Для премий, установленных в фиксированных
суммах, расчет не производится!")
КонецЕсли;
КонецПроцедуры // ДействияФормыРассчитатьВсе
()
// Процедура - вызывается при нажатии на кнопку
"Заполнить"
Процедура ДействияФормыЗаполнить (Кнопка)
Если Начисления. Количество () > 0 Тогда
ТекстВопроса = "Перед заполнением табличные части будут
очищены. Заполнить?";
Ответ = Вопрос (ТекстВопроса, РежимДиалогаВопрос. ДаНет,,
КодВозвратаДиалога. Да,);
Если Ответ <> КодВозвратаДиалога. Да Тогда
Возврат;
КонецЕсли;
Начисления. Очистить ();
КонецЕсли;
Если Кнопка. Имя = "СписокРаботников" Тогда
ПроцедурыУправленияПерсоналом.
ОткрытьФормуОтбораСпискаРаботников (ЭтаФорма, ПериодРегистрации,,
Организация,,,,"ПремииРаботниковОрганизаций", Новый Структура
("Размер",100));
ИначеЕсли Кнопка. Имя =
"ПоПерерассчитываемомуДокументу" Тогда
Если Не ЗаполнитьПоПерерассчитываемомуДокументу () Тогда
Сообщить ("Нет необходимости перерассчитывать заданный
документ. Для получения списка документов, подлежащих перерасчету, необходимо
использовать: пункт Перерасчет зарплаты меню Расчет зарплаты");
КонецЕсли;
КонецЕсли;
УстановитьТекущуюСтрокуТабличнойЧасти ();
КонецПроцедуры // ДействияФормыЗаполнить ()
Процедура ДействияФормыБезНалогов (Кнопка)
Док = Документы. ЗарплатаКВыплатеОрганизаций. СоздатьДокумент
();
Док. Заполнить (Новый Структура ("Ссылка,
СпособРасчета", Ссылка,"ЗаВычетомНалога"));
Док. ПолучитьФорму (). Открыть ();
КонецПроцедуры // ДействияФормыБезНалогов
()
Процедура ДействияФормыСНалогами (Кнопка)
Док = Документы. ЗарплатаКВыплатеОрганизаций. СоздатьДокумент
();
Док. Заполнить (Новый Структура ("Ссылка,
СпособРасчета", Ссылка,"ВсяНачисленнаяСумма"));
Док. ПолучитьФорму (). Открыть ();
КонецПроцедуры // ДействияФормыСНалогами ()
// Процедура выполняет открытие формы работы со
свойствами документа
Процедура ДействияФормыДействиеОткрытьСвойства
(Кнопка)
РаботаСДиалогами. ОткрытьСвойстваДокумента (ЭтотОбъект,
ЭтаФорма);
КонецПроцедуры // ДействияФормыДействиеОткрытьСвойства
()
// Процедура выполняет открытие формы работы с
категориями документа
Процедура ДействияФормыДействиеОткрытьКатегории
(Кнопка)
РаботаСДиалогами. ОткрытьКатегорииДокумента (ЭтотОбъект,
ЭтаФорма);
КонецПроцедуры // ДействияФормыДействиеОткрытьКатегории
()
// Процедура вызова структуры подчиненности
документа
Процедура
ДействияФормыСтруктураПодчиненностиДокумента (Кнопка)
РаботаСДиалогами. ПоказатьСтруктуруПодчиненностиДокумента
(Ссылка);
КонецПроцедуры // ДействияФормыСтруктураПодчиненностиДокумента
()
// Процедура - обработчик нажатия на любую из
дополнительных кнопок по заполнению ТЧ
Процедура
НажатиеНаДополнительнуюКнопкуЗаполненияТЧ (Кнопка)
РаботаСДиалогами.
ОбработатьНажатиеНаДополнительнуюКнопкуЗаполненияТЧ (мКнопкиЗаполненияТЧ.
Строки. Найти (Кнопка. Имя,"Имя", Истина), ЭтотОбъект);
КонецПроцедуры // НажатиеНаДополнительнуюКнопкуЗаполненияТЧ
()
// Процедура - обработчик нажатия на кнопку
"Печать по умолчанию"
Процедура ОсновныеДействияФормыПечатьПоУмолчанию
(Кнопка)
РаботаСДиалогами. ПечатьПоДополнительнойКнопке
(мДеревоМакетов, ЭтотОбъект, ЭтаФорма, Кнопка. Текст);
КонецПроцедуры // ОсновныеДействияФормыПечатьПоУмолчанию
()
// Процедура - обработчик нажатия на кнопку
"Печать"
Процедура ОсновныеДействияФормыПечать (Кнопка)
РаботаСДиалогами. ПечатьПоДополнительнойКнопке
(мДеревоМакетов, ЭтотОбъект, ЭтаФорма, Кнопка. Текст);
КонецПроцедуры // ОсновныеДействияФормыПечать
()
// Процедура - обработчик нажатия на кнопку
"Установить печать по умолчанию"
Процедура
ОсновныеДействияФормыУстановитьПечатьПоУмолчанию (Кнопка)
УстановитьКнопкиПечати ();
КонецЕсли;
КонецПроцедуры // ОсновныеДействияФормыУстановитьПечатьПоУмолчанию
()
// Процедура - вызывается при нажатии на кнопку
"Подбор"
Процедура КоманднаяПанельНачисленияПодбор
(Кнопка)
ПроцедурыУправленияПерсоналом.
ОткрытьФормуВыбораСотрудникаОрганизации (ЭлементыФормы. Начисления, Ссылка,
Ложь, Дата, мГоловнаяОрганизация, 1);
КонецПроцедуры // КоманднаяПанельНачисленияПодбор
()
// // // // // // // // // // // // // // // // // // // //
// // // // // // // // // // // // // // // // // // // //
// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ РЕКВИЗИТОВ ШАПКИ
// Процедура - обработчик события
"ПриИзменении" поля ввода даты документа.
Процедура ДатаПриИзменении (Элемент)
РаботаСДиалогами. ПроверитьНомерДокумента (ЭтотОбъект,
мТекущаяДатаДокумента);
РаботаСДиалогами. ОбновитьПодсказкуКодНомерОбъекта
(ЭтотОбъект. Метаданные (), ЭлементыФормы. ДействияФормы. Кнопки. Подменю1,
ЭлементыФормы. Номер);
мТекущаяДатаДокумента = Дата;
КонецПроцедуры // ДатаПриИзменении ()
// Процедура - обработчик события
"ПриИзменении" поля ввода организации.
Процедура ОрганизацияПриИзменении (Элемент)
Если Не ПустаяСтрока (Номер) Тогда
РаботаСДиалогами. СброситьУстановленныйКодНомерОбъекта
(ЭтотОбъект, "Номер", ЭлементыФормы. ДействияФормы. Кнопки. Подменю1,
ЭлементыФормы. Номер);
КонецЕсли;
// Получим и запомним ссылку на головную
организацию
мГоловнаяОрганизация = ОбщегоНазначения. ГоловнаяОрганизация (Организация);
РаботаСДиалогами.
УстановитьВидимостьЭУПоУчетнойПолитикеПоПерсоналу (мМассивЭУ,
глЗначениеПеременной ("глУчетнаяПолитикаПоПерсоналуОрганизации"),
Организация);
УстановитьТекстИтого ();
КонецПроцедуры // ОрганизацияПриИзменении
()
// Процедура - обработчик события
"ПриИзменении" поля ввода периода регистрации.
Процедура ПериодРегистрацииПриИзменении (Элемент)
РаботаСДиалогами. ДатаКакМесяцПодобратьДатуПоТексту (Элемент.
Значение, ПериодРегистрации);
Элемент. Значение = РаботаСДиалогами. ДатаКакМесяцПредставление
(ПериодРегистрации);
// премия за текущий месяц
ПриСменеПериодаРегистрации ();
КонецПроцедуры // ПериодРегистрацииПриИзменении
()
// Процедура - обработчик события
"Регулирование" поля ввода периода регистрации.
Процедура ПериодРегистрацииРегулирование
(Элемент, Направление, СтандартнаяОбработка)
ПериодРегистрации = ДобавитьМесяц (ПериодРегистрации,
Направление);
Элемент. Значение = РаботаСДиалогами.
ДатаКакМесяцПредставление (ПериодРегистрации);
ПриСменеПериодаРегистрации ();
КонецПроцедуры // ПериодРегистрацииРегулирование
()
// Процедура - обработчик события
"Очистка" поля ввода периода регистрации.
Процедура ПериодРегистрацииОчистка (Элемент,
СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
КонецПроцедуры // ПериодРегистрацииОчистка
()
// Процедура - обработчик события
"НачалоВыбораИзСписка" поля ввода периода регистрации.
Процедура ПериодРегистрацииНачалоВыбораИзСписка
(Элемент, СтандартнаяОбработка)
РаботаСДиалогами.
НачалоВыбораИзСпискаПредставленияПериодаРегистрации (Элемент, СтандартнаяОбработка,
ПериодРегистрации, ЭтаФорма);
ПриСменеПериодаРегистрации ();
КонецПроцедуры // ПериодРегистрацииНачалоВыбораИзСписка
()
// Процедура - обработчик события
"АвтоПодборТекста" поля ввода периода регистрации.
Процедура ПериодРегистрацииАвтоПодборТекста
(Элемент, Текст, ТекстАвтоПодбора, СтандартнаяОбработка)
РаботаСДиалогами. ДатаКакМесяцАвтоПодборТекста (Текст,
ТекстАвтоПодбора, СтандартнаяОбработка);
КонецПроцедуры // ПериодРегистрацииАвтоПодборТекста
()
// Процедура - обработчик события "ОкончаниеВводаТекста"
поля ввода периода регистрации.
Процедура ПериодРегистрацииОкончаниеВводаТекста
(Элемент, Текст, Значение, СтандартнаяОбработка)
РаботаСДиалогами. ДатаКакМесяцОкончаниеВводаТекста (Текст,
Значение, СтандартнаяОбработка);
КонецПроцедуры // ПериодРегистрацииОкончаниеВводаТекста
()
Процедура ВидРасчетаПриИзменении (Элемент)
УправлениеВнешнимВидомФормы ();
ЧислоМесяцев = ВидРасчета. ЧислоМесяцев;
КонецПроцедуры // ВидРасчетаПриИзменении ()
Процедура ВидРасчетаНачалоВыбора (Элемент,
СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
// Предложим для выбора список расчетов,
относящихся только к премиям.
ФормаВыбораВидаРасчета = ПланыВидовРасчета.
ДополнительныеНачисленияОрганизаций. ПолучитьФормуВыбора
("ФормаВыбора", Элемент, "дляДокументаПриемНаРаботуВОрганизацию");
ФормаВыбораВидаРасчета. Отбор. ВидПремии. Значение=
Перечисления. ВидыПремии. НеПремия;
ФормаВыбораВидаРасчета. Отбор. ВидПремии. ВидСравнения=
ВидСравнения. НеРавно;
ФормаВыбораВидаРасчета. Отбор. ВидПремии. Использование=
ИСТИНА;
ФормаВыбораВидаРасчета. Отбор. ЧислоМесяцев. Значение= 1; //
за 1 месяц
ФормаВыбораВидаРасчета. Отбор. ЧислоМесяцев. ВидСравнения=
ВидСравнения. Равно;
ФормаВыбораВидаРасчета. Отбор. ЧислоМесяцев. Использование=
ИСТИНА;
ФормаВыбораВидаРасчета. НачальноеЗначениеВыбора = Элемент.
Значение;
ФормаВыбораВидаРасчета. Открыть ();
КонецПроцедуры // ВидРасчетаНачалоВыбора ()
// Процедура - обработчик события
"ПриИзменении" поля ввода перерассчитываемого документа.
Процедура ПерерассчитываемыйДокументПриИзменении
(Элемент)
ОбновитьВидимостьПоПерерассчитываемомуДокументу ();
КонецПроцедуры // ПерерассчитываемыйДокументПриИзменении
()
// Процедура - обработчик события
"НачалоВыбора" поля ввода перерассчитываемого документа.
Процедура ПерерассчитываемыйДокументНачалоВыбора
(Элемент, СтандартнаяОбработка)
ПроцедурыУправленияПерсоналом.
ОткрытьФормуВыбораПерерассчитываемогоДокумента (Элемент, СтандартнаяОбработка,
ДокументОбъект);
КонецПроцедуры // ПерерассчитываемыйДокументНачалоВыбора
()
// // // // // // // // // // // // // // // //
// // // // // // // // // // // // // // // // // // // // // //
// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЧНОГО
ПОЛЯ Начисления
// Процедура - обработчик оповещения о выборе,
присланного формой рег-ра сведений
Процедура НачисленияОбработкаВыбора (Элемент,
ВыбранноеЗначение, СтандартнаяОбработка)
Если ТипЗнч (ВыбранноеЗначение) <> Тип
("СправочникСсылка. СотрудникиОрганизаций") Тогда
Возврат;
КонецЕсли;
СтандартнаяОбработка = Ложь;
Если Начисления. НайтиСтроки (Новый Структура
("Сотрудник", ВыбранноеЗначение)). Количество () = 0 Тогда
СтрокаТабличнойЧасти = Начисления. Добавить ();
СтрокаТабличнойЧасти. Сотрудник = ВыбранноеЗначение;
СтрокаТабличнойЧасти. Физлицо = ВыбранноеЗначение. Физлицо;
СтрокаТабличнойЧасти. Авторасчет = Истина;
// АБС
СтрокаТабличнойЧасти. КТУ = 1;
// -АБС
КонецЕсли;
КонецПроцедуры // НачисленияОбработкаВыбора
()
// Процедура - обработчик события
"ПриВыводеСтроки" ТЧ
Процедура НачисленияПриВыводеСтроки (Элемент,
ОформлениеСтроки, ДанныеСтроки)
Если ДанныеСтроки. Сторно Тогда
ОформлениеСтроки. ЦветТекста = Новый Цвет (255, 0, 0);
КонецЕсли;
ЯчейкаСКартинкой = ОформлениеСтроки. Ячейки. Картинка;
ЯчейкаСКартинкой. ОтображатьКартинку = Истина;
ЯчейкаСКартинкой. ИндексКартинки = Число (ДанныеСтроки.
Авторасчет);
КонецПроцедуры // НачисленияПриВыводеСтроки
()
// Процедура - обработчик события
"ПриПолученииДанных"
Процедура НачисленияПриПолученииДанных (Элемент,
ОформленияСтрок)
РаботаСДиалогами.
УстановитьЗначенияКолонкиТабельныйНомерСтрока (ЭлементыФормы. Начисления,
ОформленияСтрок);
КонецПроцедуры // НачисленияПриПолученииДанных
()
// Процедура - обработчик события
"ПриНачалеРедактирования" ТЧ
Процедура НачисленияПриНачалеРедактирования
(Элемент, НоваяСтрока, Копирование)
Если НоваяСтрока И Не Копирование Тогда
Элемент. ТекущиеДанные. Авторасчет = Истина;
// АБС
Элемент. ТекущиеДанные. КТУ = 1;
// -АБС
КонецЕсли;
КонецПроцедуры // НачисленияПриНачалеРедактирования
()
// Процедура - обработчик события
"ПриАктивизацииСтроки"
Процедура НачисленияПриАктивизацииСтроки
(Элемент)
ДанныеСтроки = Элемент. ТекущиеДанные;
// запомним текущее физлицо
Если ДанныеСтроки = Неопределено Тогда
мСтароеФизлицо = Справочники. ФизическиеЛица. ПустаяСсылка
();
Иначе
мСтароеФизлицо = ДанныеСтроки. Сотрудник. Физлицо;
КонецЕсли;
ТекущаяСтрока = Элемент. ТекущаяСтрока;
Если Элемент. ТекущаяСтрока <> Неопределено Тогда
мСтарыйРезультат = Элемент. ТекущаяСтрока. Результат;
КонецЕсли;
КонецПроцедуры // НачисленияПриАктивизацииСтроки
()
// Процедура - обработчик события
"ПриОкончанииРедактирования"
Процедура НачисленияПриОкончанииРедактирования
(Элемент, НоваяСтрока, ОтменаРедактирования)
Если НЕ ОтменаРедактирования Тогда
мСтароеФизлицо = Элемент. ТекущиеДанные. Сотрудник. Физлицо;
КонецЕсли;
КонецПроцедуры //
НачисленияПриОкончанииРедактирования ()
// // // // // // // // // // // // // // // //
// // // // // // // // // // // // // // // // // /// // // // //
// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ РЕКВИЗИТОВ
ТАБЛИЧНОГО ПОЛЯ
Процедура НачисленияСотрудникПриИзменении
(Элемент)
ЭлементыФормы. Начисления. ТекущиеДанные. Физлицо = Элемент.
Значение. Физлицо;
ЭлементыФормы. Начисления. ТекущиеДанные. Авторасчет =
Истина;
КонецПроцедуры
// Процедура - обработчик события
"НачалоВыбора" поля ввода физлица
// переопеределим выбор физлица на выбор из
списка регистра сведений
Процедура НачисленияСотрудникНачалоВыбора
(Элемент, СтандартнаяОбработка)
ПроцедурыУправленияПерсоналом.
ОткрытьФормуВыбораСотрудникаОрганизации (Элемент, Ссылка, Истина, Дата,
мГоловнаяОрганизация, 1, СтандартнаяОбработка, Элемент. Значение);
КонецПроцедуры //
НачисленияСотрудникНачалоВыбора ()
// Процедура - обработчик события
"АвтоПодборТекста" поля ввода физлица
// переопеределим выбор физлица на выбор из
списка регистра сведений
Процедура НачисленияСотрудникАвтоПодборТекста
(Элемент, Текст, ТекстАвтоПодбора, СтандартнаяОбработка)
ТекстАвтоПодбора = ПроцедурыУправленияПерсоналом.
ПодобратьФИОРаботникаКандидата (СтандартнаяОбработка,
"РаботникиОрганизации", Текст, Организация);
КонецПроцедуры // НачисленияСотрудникАвтоПодборТекста
()
// Процедура - обработчик события
"АвтоПодборТекста" поля ввода физлица
// переопеределим выбор физлица на выбор из
списка регистра сведений
Процедура НачисленияСотрудникОкончаниеВводаТекста
(Элемент, Текст, Значение, СтандартнаяОбработка)
Значение = ПроцедурыУправленияПерсоналом.
ПодобратьСписокРаботниковКандидатов (СтандартнаяОбработка,
"РаботникиОрганизации", Текст, Элемент. Значение, Организация);
КонецПроцедуры // НачисленияСотрудникОкончаниеВводаТекста
()
// Процедура - обработчик события
"ПриИзменении" поля "Результат"
Процедура НачисленияРезультатПриИзменении
(Элемент)
Если Элемент. Значение <> мСтарыйРезультат Тогда
ЭлементыФормы. Начисления. ТекущиеДанные. Авторасчет = Ложь;
мСтарыйРезультат = Элемент. Значение;
КонецЕсли;
// АБС.
ПроверитьСумму ();
// -АБС
КонецПроцедуры // НачисленияРезультатПриИзменении
()
// Процедура разрешения/запрещения редактирования
номера документа
Процедура ДействияФормыРедактироватьНомер
(Кнопка)
РаботаСДиалогами. ИзменениеВозможностиРедактированияНомера
(ЭтотОбъект. Метаданные (), ЭтаФорма, ЭлементыФормы. ДействияФормы. Кнопки.
Подменю1, ЭлементыФормы. Номер);
КонецПроцедуры
// АБС
Процедура ПроверитьСумму ()
Если СуммаКРаспределению>0 и Начисления. Итог
("Результат") <>СуммаКРаспределению Тогда
Предупреждение ("Сумма по документу не совпадает с
суммой к распределению. Рекомендуется выполнить перерасчет документа");
КонецЕсли;
КонецПроцедуры
Процедура НачисленияКТУПриИзменении (Элемент)
ТекСтрока = ЭлементыФормы. Начисления. ТекущаяСтрока;
ТекСтрока. Результат = Окр (ТекСтрока. Результат*ТекСтрока.
КТУ,2);
ПроверитьСумму ();
// ТекСтрока. Авторасчет = Ложь;
КонецПроцедуры
// -АБС
Приложение Ж
Листинг обработки "Загрузка контрагентов и
связанной информации"
Перем ТаблДБФ;
Перем ВыборФайла;
Перем ПротоколОшибок;
Перем ТаблицаБанков;
Функция ВсеРеквизитыЗаполнены ()
Результат = Истина;
Если ПустаяСтрока (ФайлКонтрагентов) Тогда
Сообщить ("Не выбран файл Контрагентов");
Результат = Ложь;
КонецЕсли;
Если ПустаяСтрока (ФайлБанкСчетов) Тогда
Сообщить ("Не выбран файл банковских счетов");
Результат = Ложь;
КонецЕсли;
Если ПустаяСтрока (ФайлАдресов) Тогда
Сообщить ("Не выбран файл адресов");
Результат = Ложь;
КонецЕсли;
Если ПустаяСтрока (ФайлБанков) Тогда
Сообщить ("Не выбран файл банков");
Результат = Ложь;
КонецЕсли;
Возврат Результат;
КонецФункции // ВсеРеквизитыЗаполнены ()
Функция НайтиСчетКонтрагента (Контрагент, Банк,
НомерСчета)
Запрос = Новый Запрос;
Запрос. Текст = "ВЫБРАТЬ
|БанковскиеСчета. Ссылка
|ИЗ
|Справочник. БанковскиеСчета КАК БанковскиеСчета
|ГДЕ
|БанковскиеСчета. ПометкаУдаления = ЛОЖЬ
|И БанковскиеСчета. Владелец = &Контрагент
|И БанковскиеСчета. Банк = &Банк
|И БанковскиеСчета. НомерСчета = &НомерСчета";
Запрос. УстановитьПараметр ("Контрагент",
Контрагент);
Запрос. УстановитьПараметр ("Банк", Банк);
Запрос. УстановитьПараметр ("НомерСчета",
НомерСчета);
Результат = Запрос. Выполнить ();
Выборка = Результат. Выбрать ();
Если Выборка. Следующий () Тогда
Возврат Выборка. Ссылка;
Иначе
Возврат Справочники. БанковскиеСчета. ПустаяСсылка ();
КонецЕсли;
КонецФункции
Процедура ЗагрузкаБанков ()
Если ТаблДБФ. Открыта () Тогда
ТаблДБФ. ЗакрытьФайл ();
КонецЕсли;
ТаблДБФ. ОткрытьФайл (ФайлБанков,, Истина);
Если не ТаблДБФ. Открыта () Тогда
Сообщить ("Не удалось открыть " + ФайлБанков);
Возврат;
КонецЕсли;
ВсегоЗаписей = ТаблДБФ. КоличествоЗаписей ();
// обработка таблицы
Если не ТаблДБФ. Первая () Тогда
Сообщить ("Выбранная таблица пуста!");
Возврат;
КонецЕсли;
Счетчик = 1;
Пока Истина Цикл
Код = СокрЛП (ТаблДБФ. BNK_ID);
БИК = СокрЛП (ТаблДБФ. BNK_CODE);
Имя = СокрЛП (ТаблДБФ. BNK_NAME);
КоррСчет = СокрЛП (ТаблДБФ. ACNT_KORR);
Адрес = СокрЛП (ТаблДБФ. ADDR);
Если ПустаяСтрока (БИК) Тогда
ПротоколОшибок. ДобавитьСтроку ("Не указан БИК у
элемента " + Имя +". пропускаем. ");
Если ТаблДБФ. Следующая () Тогда
Продолжить;
Иначе
Прервать;
КонецЕсли;
КонецЕсли;
СтрТаб = ТаблицаБанков. Добавить ();
СтрТаб. Код = Код;
СтрТаб. БИК = БИК;
СтрТаб. Имя = Имя;
СтрТаб. КоррСчет = КоррСчет;
СтрТаб. Адрес = Адрес;
Если не ТаблДБФ. Следующая () Тогда
Прервать;
КонецЕсли;
Счетчик = Счетчик+1;
Если Цел (Счетчик/100) =Счетчик/100 Тогда
Состояние ("Загрузка банков. Обработано " + Счетчик
+ " зап. из " + ВсегоЗаписей);
КонецЕсли;
ОбработкаПрерыванияПользователя ();
КонецЦикла;
ТаблДБФ. ЗакрытьФайл ();
КонецПроцедуры
Процедура ЗагрузкаКонтрагентов ()
Если ТаблДБФ. Открыта () Тогда
ТаблДБФ. ЗакрытьФайл ();
КонецЕсли;
ТаблДБФ. ОткрытьФайл (ФайлКонтрагентов,, Истина);
Если не ТаблДБФ. Открыта () Тогда
Сообщить ("Не удалось открыть " +
ФайлКонтрагентов);
Возврат;
КонецЕсли;
ВсегоЗаписей = ТаблДБФ. КоличествоЗаписей ();
// обработка таблицы
Если не ТаблДБФ. Первая () Тогда
Сообщить ("Выбранная таблица пуста!");
Возврат;
КонецЕсли;
Счетчик = 1;
Пока Истина Цикл
Имя = СокрЛП (ТаблДБФ. SHORTNAME);
КодБЭСТ = СокрЛП (ТаблДБФ. PART_ID);
Наименование = СокрЛП (ТаблДБФ.orgNAME);
ИНН = СокрЛП (ТаблДБФ. CODE_INN);
КПП = СокрЛП (ТаблДБФ. CODE_KPP);
ОКПО = СокрЛП (ТаблДБФ. CODE_OKPO);
Если ПустаяСтрока (ИНН) и не ЗагрузкаБезИНН Тогда
ПротоколОшибок. ДобавитьСтроку ("Не указан ИНН у
элемента " + Имя + " (" + КодБЭСТ + "). пропускаем.
");
Если ТаблДБФ. Следующая () Тогда
Продолжить;
Иначе
Прервать;
КонецЕсли;
КонецЕсли;
Попытка
ТипЛица = Число (СокрЛП (ТаблДБФ. STATUS));
Исключение
ТипЛица = 0;
КонецПопытки;
ЮрФизЛицо =? (ТипЛица = 0, Перечисления. ЮрФизЛицо. ЮрЛицо,
Перечисления. ЮрФизЛицо. ФизЛицо);
СпрСсылка = Справочники. Контрагенты. НайтиПоРеквизиту
("КодБЭСТ", КодБЭСТ);
Если СпрСсылка. Пустая () Тогда // еще нет - попробуем
создать
Если не ПустаяСтрока (ИНН) Тогда // загрузка пустых ИНН
разрешена, иначе мы сюда не попадем. Пустые на дубли не проверяем
// проверим существование контрагента с данным
ИНН
СпрОшибка = Справочники. Контрагенты. НайтиПоРеквизиту
("ИНН", ИНН);
Если не СпрОшибка. Пустая () Тогда // контрагент с таким
ИНН есть - это ошибка
ПротоколОшибок. ДобавитьСтроку ("Элемент справочника с
ИНН " + ИНН + " уже существует. Код БЭСТ=" +
КодБЭСТ +". пропускаем. ");
Если ТаблДБФ. Следующая () Тогда
Продолжить;
Иначе
Прервать;
КонецЕсли;
КонецЕсли;
КонецЕсли;
СпрОбъект = Справочники. Контрагенты. СоздатьЭлемент ();
Если не ГруппаЗагрузки. Пустая () Тогда
СпрОбъект. Родитель = ГруппаЗагрузки;
КонецЕсли;
Иначе // есть - перепишем данные
СпрОбъект = СпрСсылка. ПолучитьОбъект ();
КонецЕсли;
СпрОбъект. ИНН = ИНН;
СпрОбъект. КодБЭСТ = КодБЭСТ;
СпрОбъект. КодПоОКПО = ОКПО;
СпрОбъект. КПП = КПП;
СпрОбъект. Наименование = Имя;
СпрОбъект. НаименованиеПолное = Наименование;
СпрОбъект. ЮрФизЛицо = ЮрФизЛицо;
СпрОбъект. Записать ();
СпрОбъект. ГоловнойКонтрагент = СпрОбъект. Ссылка;
СпрОбъект. Записать ();
Исключение
ПротоколОшибок. ДобавитьСтроку ("Не удалось записать
элемент справочника " + Имя +
": " + ОписаниеОшибки ());
КонецПопытки;
Если не ТаблДБФ. Следующая () Тогда
Прервать;
КонецЕсли;
Счетчик = Счетчик+1;
Если Цел (Счетчик/100) =Счетчик/100 Тогда
Состояние ("Загрузка контрагентов. Обработано " +
Счетчик + " зап. из " + ВсегоЗаписей);
КонецЕсли;
ОбработкаПрерыванияПользователя ();
КонецЦикла;
ТаблДБФ. ЗакрытьФайл ();
КонецПроцедуры
Процедура ЗагрузкаАдресов ()
Если ТаблДБФ. Открыта () Тогда
ТаблДБФ. ЗакрытьФайл ();
КонецЕсли;
ТаблДБФ. ОткрытьФайл (ФайлАдресов,, Истина);
Если не ТаблДБФ. Открыта () Тогда
Сообщить ("Не удалось открыть " + ФайлАдресов);
Возврат;
КонецЕсли;
ВсегоЗаписей = ТаблДБФ. КоличествоЗаписей ();
// обработка таблицы
Если не ТаблДБФ. Первая () Тогда
Сообщить ("Таблица адресов пуста!");
Возврат;
КонецЕсли;
Счетчик = 1;
Пока Истина Цикл
КодБЭСТ = СокрЛП (ТаблДБФ. PART_ID);
ВидАдресаСтр = СокрЛП (ТаблДБФ. ADR_TYPE); // 1 -
"фактический", 2 - "Юридический" остальные типы адресов не
переносить
Адрес = СокрЛП (ТаблДБФ. ADDRESS);
Если ПустаяСтрока (Адрес) Тогда
Если ТаблДБФ. Следующая () Тогда
Продолжить;
Иначе
Прервать;
КонецЕсли;
КонецЕсли;
ХозяинАдреса = Справочники. Контрагенты. НайтиПоРеквизиту
("КодБЭСТ", КодБЭСТ);
Если ХозяинАдреса. Пустая () Тогда
ПротоколОшибок. ДобавитьСтроку ("Не найден контрагент с
кодом " + КодБЭСТ + "). пропускаем. ");
Если ТаблДБФ. Следующая () Тогда
Продолжить;
Иначе
Прервать;
КонецЕсли;
КонецЕсли;
Если ВидАдресаСтр = "1" Тогда
Если ХозяинАдреса. ЮрФизЛицо = Перечисления. ЮрФизЛицо.
ЮрЛицо Тогда
ВидАдреса = Справочники. ВидыКонтактнойИнформации.
ФактАдресОрганизации;
Иначе
ВидАдреса = Справочники. ВидыКонтактнойИнформации.
ФактАдресФизЛица;
КонецЕсли;
ИначеЕсли ВидАдресаСтр = "2" Тогда
Если ХозяинАдреса. ЮрФизЛицо = Перечисления. ЮрФизЛицо.
ЮрЛицо Тогда
ВидАдреса = Справочники. ВидыКонтактнойИнформации.
ЮрАдресОрганизации;
Иначе
ВидАдреса = Справочники. ВидыКонтактнойИнформации.
ЮрАдресФизЛица;
КонецЕсли;
Иначе // неизвестный тип адреса
Если ТаблДБФ. Следующая () Тогда
Продолжить;
Иначе
Прервать;
КонецЕсли;
КонецЕсли;
ЗаписьАдреса = РегистрыСведений. КонтактнаяИнформация.
СоздатьМенеджерЗаписи ();
ЗаписьАдреса. Объект = ХозяинАдреса;
ЗаписьАдреса. Вид = ВидАдреса;
ЗаписьАдреса. Тип = Перечисления. ТипыКонтактнойИнформации.
Адрес;
ЗаписьАдреса. Представление = Адрес;
ЗаписьАдреса. Записать (Истина);
Счетчик = Счетчик+1;
Если не ТаблДБФ. Следующая () Тогда
Прервать;
КонецЕсли;
Если Цел (Счетчик/100) =Счетчик/100 Тогда
Состояние ("Загрузка адресов контрагентов. Обработано
" + Счетчик + " зап. из " + ВсегоЗаписей);
КонецЕсли;
ОбработкаПрерыванияПользователя ();
КонецЦикла;
ТаблДБФ. ЗакрытьФайл ();
КонецПроцедуры
Процедура ЗагрузкаСчетов ()
Если ТаблДБФ. Открыта () Тогда
ТаблДБФ. ЗакрытьФайл ();
КонецЕсли;
ТаблДБФ. ОткрытьФайл (ФайлБанкСчетов,, Истина);
Если не ТаблДБФ. Открыта () Тогда
Сообщить ("Не удалось открыть " + ФайлБанкСчетов);
Возврат;
КонецЕсли;
ВсегоЗаписей = ТаблДБФ. КоличествоЗаписей ();
// обработка таблицы
Если не ТаблДБФ. Первая () Тогда
Сообщить ("Таблица счетов пуста!");
Возврат;
КонецЕсли;
Счетчик = 1;
Пока Истина Цикл
КодБЭСТ = СокрЛП (ТаблДБФ. PART_ID); // контрагент
НомерСчета = СокрЛП (ТаблДБФ. ACCNT);
КодБанка = СокрЛП (ТаблДБФ. BNK_ID);
ВидСчетаСтр = СокрЛП (ТаблДБФ. ACC_TP);
ВидСчетаСтр =? (ВидСчетаСтр = "1", "Расчетный",
"Другой");
Если ПустаяСтрока (НомерСчета) Тогда
Если ТаблДБФ. Следующая () Тогда
Продолжить;
Иначе
Прервать;
КонецЕсли;
КонецЕсли;
Хозяин = Справочники. Контрагенты. НайтиПоРеквизиту
("КодБЭСТ", КодБЭСТ);
Если Хозяин. Пустая () Тогда
ПротоколОшибок. ДобавитьСтроку ("Не найден контрагент с
кодом " + КодБЭСТ +". пропускаем. ");
Если ТаблДБФ. Следующая () Тогда
Продолжить;
Иначе
Прервать;
КонецЕсли;
КонецЕсли;
// найдем банк
СтрТабБанк = ТаблицаБанков. Найти (КодБанка,
"Код");
Если СтрТабБанк=Неопределено Тогда
ПротоколОшибок. ДобавитьСтроку ("Не найден банк с кодом
" + КодБанка +". пропускаем. ");
Если ТаблДБФ. Следующая () Тогда
Продолжить;
Иначе
Прервать;
КонецЕсли;
КонецЕсли;
Банк1С = Справочники. Банки. НайтиПоКоду (СтрТабБанк. БИК);
Если Банк1С. Пустая () Тогда // надо создавать новый банк
БанкОбъект = Справочники. Банки. СоздатьЭлемент ();
БанкОбъект. Адрес = СтрТабБанк. Адрес;
БанкОбъект. Код = СтрТабБанк. БИК;
БанкОбъект. КоррСчет = СтрТабБанк. КоррСчет;
БанкОбъект. Наименование = СтрТабБанк. Имя;
Попытка
БанкОбъект. Записать ();
Исключение
ПротоколОшибок. ДобавитьСтроку ("Не удалось записать
банк " + СтрТабБанк. Имя + " с кодом " + СтрТабБанк. БИК
+"." + ОписаниеОшибки ());
Если ТаблДБФ. Следующая () Тогда
Продолжить;
Иначе
Прервать;
КонецЕсли;
КонецПопытки;
Банк1С = БанкОбъект. Ссылка;
КонецЕсли;
НайденныйСчет = НайтиСчетКонтрагента (Хозяин, Банк1С,
НомерСчета);
Если НайденныйСчет. Пустая () Тогда
НовыйСчет = Справочники. БанковскиеСчета. СоздатьЭлемент ();
Иначе
НовыйСчет = НайденныйСчет. ПолучитьОбъект ();
КонецЕсли;
НовыйСчет. Банк = Банк1С;
НовыйСчет. ВалютаДенежныхСредств = Константы.
ВалютаРегламентированногоУчета. Получить ();
НовыйСчет. ВидСчета = ВидСчетаСтр;
НовыйСчет. Владелец = Хозяин;
НовыйСчет. ВсегдаУказыватьКПП = Истина;
НовыйСчет. НомерСчета = НомерСчета;
НовыйСчет. Наименование = "Счет № " + НомерСчета +
" в банке " + Банк1С. Наименование;
Попытка
НовыйСчет. Записать ();
Исключение
ПротоколОшибок. ДобавитьСтроку ("Не удалось записать
счет № " + НомерСчета + " в банке " + Банк1С. Наименование +
" для " + Хозяин. Наименование +"." + ОписаниеОшибки ());
КонецПопытки;
Счетчик = Счетчик+1;
Если не ТаблДБФ. Следующая () Тогда
Прервать;
КонецЕсли;
Если Цел (Счетчик/100) =Счетчик/100 Тогда
Состояние ("Загрузка счетов контрагентов. Обработано
" + Счетчик + " зап. из " + ВсегоЗаписей);
КонецЕсли;
ОбработкаПрерыванияПользователя ();
КонецЦикла;
ТаблДБФ. ЗакрытьФайл ();
КонецПроцедуры
Процедура КнопкаВыполнитьНажатие (Кнопка)
Если не ВсеРеквизитыЗаполнены () Тогда
Предупреждение ("Заполните все нужные реквизиты
формы!", 20);
Возврат;
КонецЕсли;
ПротоколОшибок. ДобавитьСтроку ("*** Загрузка
контрагентов начата ***");
ЗагрузкаКонтрагентов ();
ПротоколОшибок. ДобавитьСтроку ("*** Загрузка
контрагентов завершена ***");
ПротоколОшибок. ДобавитьСтроку
("********************************************");
ПротоколОшибок. ДобавитьСтроку ("*** Загрузка адресов
контрагентов начата ***");
ЗагрузкаАдресов ();
ПротоколОшибок. ДобавитьСтроку ("*** Загрузка адресов
контрагентов завершена ***");
ПротоколОшибок. ДобавитьСтроку
("********************************************");
ПротоколОшибок. ДобавитьСтроку ("*** Загрузка банков
начата ***");
ЗагрузкаБанков ();
ПротоколОшибок. ДобавитьСтроку ("*** Загрузка банков
завершена ***");
ПротоколОшибок. ДобавитьСтроку ("********************************************");
ПротоколОшибок. ДобавитьСтроку ("*** Загрузка счетов
начата ***");
ЗагрузкаСчетов ();
ПротоколОшибок. ДобавитьСтроку ("*** Загрузка счетов
завершена ***");
Если Вопрос ("Загрузка завершена. Показать протолок ошибок",
РежимДиалогаВопрос. ДаНет) =КодВозвратаДиалога. Да Тогда
ПротоколОшибок. Показать ("Протокол ошибок переноса
данных");
КонецЕсли;
КонецПроцедуры
Процедура ФайлКонтрагентовНачалоВыбора (Элемент,
СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Если ВыборФайла. Выбрать () Тогда
Элемент. Значение = ВыборФайла. ПолноеИмяФайла;
КонецЕсли;
КонецПроцедуры
Процедура КоманднаяПанель2Вывод (Кнопка)
ПротоколОшибок. Показать ("Протокол ошибок переноса
данных");
КонецПроцедуры
ВыборФайла = Новый ДиалогВыбораФайла
(РежимДиалогаВыбораФайла. Открытие);
ВыборФайла. Фильтр = "Таблица dbf (*. dbf) |*.
dbf";
ТаблДБФ = Новый xBase ();
ПротоколОшибок = Новый ТекстовыйДокумент;
ТаблицаБанков = Новый ТаблицаЗначений;
ТаблицаБанков. Колонки. Добавить ("Код");
ТаблицаБанков. Колонки. Добавить ("БИК");
ТаблицаБанков. Колонки. Добавить ("Имя");
ТаблицаБанков. Колонки. Добавить ("КоррСчет");
ТаблицаБанков. Колонки. Добавить ("Адрес");
Приложение З
Листинг обработки
"ЗагрузкаОстатковВзаиморасчетов"
Перем ТаблДБФ;
Перем ВыборФайла, ВыборФайлаExcel;
Перем ПротоколОшибок;
Перем ТаблицаКонтрагентов;
Перем ТаблицаОстатков;
Процедура МанипуляцииСВидомДоговора ()
КодСчета = "";
Если не СчетДляДебета. Пустая () Тогда
КодСчета = Лев (СчетДляДебета. Код,2);
ИначеЕсли не СчетДляКредита. Пустая () Тогда
КодСчета = Лев (СчетДляКредита. Код,2);
КонецЕсли;
Если КодСчета = "60" Тогда
ВидДоговора = Перечисления. ВидыДоговоровКонтрагентов.
СПоставщиком;
ЭлементыФормы. ВидДоговора. Доступность = Ложь;
ИначеЕсли КодСчета = "62" Тогда
ВидДоговора = Перечисления. ВидыДоговоровКонтрагентов.
СПокупателем;
ЭлементыФормы. ВидДоговора. Доступность = Ложь;
Иначе
ЭлементыФормы. ВидДоговора. Доступность = Истина;
КонецЕсли;
КонецПроцедуры
Функция ВсеРеквизитыЗаполнены ()
Результат = Истина;
Если ПустаяСтрока (ФайлКонтрагентов) Тогда
Сообщить ("Не выбран файл Контрагентов");
Результат = Ложь;
КонецЕсли;
Если ПустаяСтрока (ФайлОстатков) Тогда
Сообщить ("Не выбран файл остатков");
Результат = Ложь;
КонецЕсли;
Если (ПерваяСтрока=0) или (КолонкаКодаКонтрагента=0) или (КолонкаДебет=0)
или (КолонкаКредит=0) Тогда
Сообщить ("Не полностью описана структура входной
таблицы");
Результат = Ложь;
КонецЕсли;
Если (СчетДляДебета. Пустая ()) или (СчетДляКредита. Пустая
()) Тогда
Сообщить ("Не заполнены счета отнесения остатков");
Результат = Ложь;
КонецЕсли;
Если СчетДляДебета. Родитель<>СчетДляКредита. Родитель
Тогда
Сообщить ("Cубсчета отнесения остатков по дебету и
кредиту принадлежат к разным счетам. ");
Результат = Ложь;
КонецЕсли;
Если не ЗначениеЗаполнено (ДатаОперации) Тогда
Сообщить ("Не указана дата формирования операции
переноса остатков");
Результат = Ложь;
КонецЕсли;
Если Организация. Пустая () Тогда
Сообщить ("Не указана организация формирования операции
переноса остатков");
Результат = Ложь;
КонецЕсли;
Возврат Результат;
КонецФункции // ВсеРеквизитыЗаполнены ()
Процедура УдалитьСтарыеОперации ()
ТекстКомментария = "Ввод начальных остатков
взаиморасчетов по счету " + СчетДляДебета. Родитель. Код;
Запрос = Новый Запрос;
Запрос. Текст = "ВЫБРАТЬ
|ОперацияБух. Ссылка
|ИЗ
|Документ. ОперацияБух КАК ОперацияБух
|ГДЕ
|ОперацияБух. Содержание ПОДОБНО &ТекстПереносТМЦ";
Запрос. УстановитьПараметр ("ТекстПереносТМЦ",
"<Фирма ЛИСТ> " + ТекстКомментария);
Результат = Запрос. Выполнить ();
Выборка = Результат. Выбрать ();
Пока Выборка. Следующий () Цикл
ДокОбъект = Выборка. Ссылка. ПолучитьОбъект ();
Сообщить ("Удаляем " + ДокОбъект);
ДокОбъект. Удалить ();
КонецЦикла;
КонецПроцедуры
Функция НайтиИлиСоздатьДоговор (Контрагент)
Запрос = Новый Запрос;
Запрос. Текст = "ВЫБРАТЬ ПЕРВЫЕ 1
|ДоговорыКонтрагентов. Ссылка
|ИЗ
|Справочник. ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
|ГДЕ
|ДоговорыКонтрагентов. Владелец = &Контрагент
|И ДоговорыКонтрагентов. ВидДоговора = &НужныйВид";
Если не ВидВзаиморасчетов. Пустая () Тогда
Запрос. Текст = Запрос. Текст + "И ДоговорыКонтрагентов.
ВидВзаиморасчетов = &Взаиморасчеты";
Запрос. УстановитьПараметр ("Взаиморасчеты",
ВидВзаиморасчетов);
КонецЕсли;
Запрос. УстановитьПараметр ("Контрагент",
Контрагент);
Запрос. УстановитьПараметр ("НужныйВид", ВидДоговора);
Результат = Запрос. Выполнить ();
Выборка = Результат. Выбрать ();
Если Выборка. Следующий () Тогда
Возврат Выборка. Ссылка;
Иначе // не нашли - надо создать
НовыйДоговор = Справочники. ДоговорыКонтрагентов.
СоздатьЭлемент ();
НовыйДоговор. ВалютаВзаиморасчетов = Константы.
ВалютаРегламентированногоУчета. Получить ();
НовыйДоговор. ВидДоговора = ВидДоговора;
НовыйДоговор. ВедениеВзаиморасчетов = Перечисления.
ВедениеВзаиморасчетовПоДоговорам. ПоДоговоруВЦелом;
НовыйДоговор. Владелец = Контрагент;
НовыйДоговор. Наименование = "Договор вида
""" + ВидДоговора + """"; НовыйДоговор.
Организация = Организация;
НовыйДоговор. ВидВзаиморасчетов = ВидВзаиморасчетов;
Попытка
НовыйДоговор. Записать ();
Возврат НовыйДоговор. Ссылка;
Исключение
Возврат Справочники. ДоговорыКонтрагентов. ПустаяСсылка ();
КонецПопытки;
КонецЕсли;
КонецФункции // НайтиИлиСоздатьДоговор
Процедура СформироватьОперацию ()
Операция = Документы. ОперацияБух. СоздатьДокумент ();
Операция. Организация = Организация;
Операция. Дата = ДатаОперации;
// Заполнить реквизиты значениями по умолчанию.
ОбщегоНазначения. ЗаполнитьШапкуДокумента (Операция,
глЗначениеПеременной ("глТекущийПользователь"),,
"Продажа");
// счет переноса и нужный вид договора.
ПланСчетов = ПланыСчетов. Хозрасчетный;
СчетПереноса = СчетДляДебета. Родитель;
Если СчетПереноса. ПринадлежитЭлементу (ПланСчетов.
РасчетыСПоставщикамиИПодрядчиками) или СчетПереноса=ПланСчетов.
РасчетыСПоставщикамиИПодрядчиками Тогда // 60
НужныйВидДоговора = Перечисления. ВидыДоговоровКонтрагентов.
СПоставщиком;
ИначеЕсли СчетПереноса. ПринадлежитЭлементу (ПланСчетов.
РасчетыСПокупателямиИЗаказчиками) или СчетПереноса=ПланСчетов.
РасчетыСПокупателямиИЗаказчиками Тогда // 62
Иначе
НужныйВидДоговора = Перечисления. ВидыДоговоровКонтрагентов.
Прочее;
КонецЕсли;
ТекстКомментария = "Ввод начальных остатков
взаиморасчетов по счету " + СчетПереноса. Код;
Операция. Комментарий = ТекстКомментария;
Операция. Ответственный = глЗначениеПеременной
("глТекущийПользователь");
Операция. Содержание = "<Фирма ЛИСТ> " +
ТекстКомментария;
Для каждого СтрТЧ Из ТаблицаОстатков Цикл
Договор = НайтиИлиСоздатьДоговор (СтрТЧ. Контрагент);
Если Договор. Пустая () Тогда
ПротоколОшибок. ДобавитьСтроку ("Для контрагента "
+ СтрТЧ. Контрагент + " не удалось найти или создать договор " +
НужныйВидДоговора);
Продолжить;
КонецЕсли;
// теоретически возможны остатки и по дебету и по
кредиту, поэтому возможны 2 проводки
Если СтрТЧ. СальдоДебет>0 Тогда
Проводка = Операция. Движения. Хозрасчетный. Добавить ();
Проводка. Период = ДатаОперации;
Проводка. СчетКт = ПланСчетов. Вспомогательный;
Проводка. СчетДт = СчетДляДебета;
Проводка. Сумма =? (СчетДляДебета. Вид=ВидСчета. Активный,
СтрТЧ. СальдоДебет, - СтрТЧ. СальдоДебет);
ОбщегоНазначения. УстановитьСубконто (Проводка. СчетДт,
Проводка. СубконтоДт,"Контрагенты", СтрТЧ. Контрагент, Истина);
ОбщегоНазначения. УстановитьСубконто (Проводка. СчетДт,
Проводка. СубконтоДт,"Договоры", Договор, Истина);
КонецЕсли;
Если СтрТЧ. СальдоКредит>0 Тогда
Проводка = Операция. Движения. Хозрасчетный. Добавить ();
Проводка. Период = ДатаОперации;
Проводка. СчетДт = ПланСчетов. Вспомогательный;
Проводка. СчетКт = СчетДляКредита;
Проводка. Сумма =? (СчетДляКредита. Вид=ВидСчета. Пассивный,
СтрТЧ. СальдоКредит, - СтрТЧ. СальдоКредит);
ОбщегоНазначения. УстановитьСубконто (Проводка. СчетКт,
Проводка. СубконтоКт,"Контрагенты", СтрТЧ. Контрагент, Истина);
ОбщегоНазначения. УстановитьСубконто (Проводка. СчетКт,
Проводка. СубконтоКт,"Договоры", Договор, Истина);
КонецЕсли;
КонецЦикла;
Операция. Записать ();
КонецПроцедуры
Процедура ЗагрузкаКонтрагентов ()
ТаблицаКонтрагентов. Очистить ();
Если ТаблДБФ. Открыта () Тогда
ТаблДБФ. ЗакрытьФайл ();
КонецЕсли;
ТаблДБФ. ОткрытьФайл (ФайлКонтрагентов,, Истина);
Если не ТаблДБФ. Открыта () Тогда
Сообщить ("Не удалось открыть " +
ФайлКонтрагентов);
Возврат;
КонецЕсли;
ВсегоЗаписей = ТаблДБФ. КоличествоЗаписей ();
// обработка таблицы
Если не ТаблДБФ. Первая () Тогда
Сообщить ("Выбранная таблица пуста!");
Возврат;
КонецЕсли;
Счетчик = 1;
Пока Истина Цикл
СтрТаб = ТаблицаКонтрагентов. Добавить ();
СтрТаб. Имя = СокрЛП (ТаблДБФ. SHORTNAME);
СтрТаб. КодБЭСТ = СокрЛП (ТаблДБФ. CODE);
СтрТаб. ВнутрКод = СокрЛП (ТаблДБФ. PART_ID);
Счетчик = Счетчик+1;
Если Цел (Счетчик/100) =Счетчик/100 Тогда
Состояние ("Загрузка контрагентов. Обработано " +
Счетчик + " зап. из " + ВсегоЗаписей);
КонецЕсли;
Если не ТаблДБФ. Следующая () Тогда
Прервать;
КонецЕсли;
ОбработкаПрерыванияПользователя ();
КонецЦикла;
ТаблДБФ. ЗакрытьФайл ();
КонецПроцедуры
Процедура ЗагрузкаОстатков ()
ТаблицаОстатков. Очистить ();
Екзель = Новый COMObject ("Excel. Application");
Попытка
Екзель. WorkBooks. Open (ФайлОстатков);
Исключение
Предупреждение ("Excel не удалось открыть файл " +
ФайлОстатков);
Возврат;
КонецПопытки;
НомерСтрокиСДанными = ПерваяСтрока;
Лист = Екзель. Sheets (1);
КолВоКолонок = Лист. Cells (1,1). SpecialCells (11). Column;
КолВоСтрок = Лист. Cells (1,1). SpecialCells (11). Row;
Счетчик = 1;
Для индС = (НомерСтрокиСДанными + 1) По КолВоСтрок Цикл
КодКонтрБЭСТ = СокрЛП (Лист. Cells (индС,
КолонкаКодаКонтрагента). Value);
СтрТабКонтр = ТаблицаКонтрагентов. Найти (КодКонтрБЭСТ,
"КодБЭСТ");
Если СтрТабКонтр=Неопределено Тогда
ПротоколОшибок. ДобавитьСтроку ("Неизвестный контрагент
с кодом " + КодКонтрБЭСТ);
Продолжить;
КонецЕсли;
ВнутрКод = СтрТабКонтр. ВнутрКод;
Контрагент1С = Справочники. Контрагенты. НайтиПоРеквизиту
("КодБЭСТ", ВнутрКод);
Если Контрагент1С. Пустая () Тогда
ПротоколОшибок. ДобавитьСтроку ("Контрагент " +
СтрТабКонтр. Имя + " с внутр. кодом " + ВнутрКод + " не найден в
справочнике. ");
Продолжить;
КонецЕсли;
СодержимоеЯчейки = Лист. Cells (индС, КолонкаДебет). Value;
СальдоДебет =? (ЗначениеЗаполнено (СодержимоеЯчейки), Число
(СодержимоеЯчейки), 0);
СодержимоеЯчейки = Лист. Cells (индС, КолонкаКредит). Value;
СальдоКредит =? (ЗначениеЗаполнено (СодержимоеЯчейки), Число
(СодержимоеЯчейки), 0);
Если (СальдоДебет=0) и (СальдоКредит=0) Тогда
ПротоколОшибок. ДобавитьСтроку ("По контрагенту " +
СтрТабКонтр. Имя + " с внутр. кодом " + ВнутрКод + " нет
остатков. ");
Продолжить;
КонецЕсли;
НовыйОстаток = ТаблицаОстатков. Добавить ();
НовыйОстаток. Контрагент = Контрагент1С;
НовыйОстаток. СальдоДебет = СальдоДебет;
НовыйОстаток. СальдоКредит = СальдоКредит;
Счетчик = Счетчик+1;
Если Цел (Счетчик/100) =Счетчик/100 Тогда
Состояние ("Загрузка контрагентов. Обработано " +
Счетчик + " зап. из " + КолВоСтрок);
КонецЕсли;
Если (ЗаписейНаОперацию>0) и (ТаблицаОстатков. Количество
() =ЗаписейНаОперацию) Тогда
СформироватьОперацию ();
ТаблицаОстатков. Очистить ();
КонецЕсли;
ОбработкаПрерыванияПользователя ();
КонецЦикла;
Если ТаблицаОстатков. Количество () Тогда
СформироватьОперацию ();
КонецЕсли;
КонецПроцедуры
Процедура КнопкаВыполнитьНажатие (Кнопка)
Если не ВсеРеквизитыЗаполнены () Тогда
Предупреждение ("Заполните все нужные реквизиты
формы!", 20);
Возврат;
КонецЕсли;
Если УдалятьСтарое Тогда
УдалитьСтарыеОперации ();
КонецЕсли;
ПротоколОшибок. ДобавитьСтроку ("*** Загрузка
контрагентов начата ***");
ЗагрузкаКонтрагентов ();
ПротоколОшибок. ДобавитьСтроку ("*** Загрузка
контрагентов завершена ***");
ПротоколОшибок. ДобавитьСтроку
("********************************************");
ПротоколОшибок. ДобавитьСтроку ("*** Загрузка остатков
начата ***");
ЗагрузкаОстатков ();
ПротоколОшибок. ДобавитьСтроку ("*** Загрузка остатков
завершена ***");
ПротоколОшибок. ДобавитьСтроку
("********************************************");
Если Вопрос ("Загрузка завершена. Показать протолок
ошибок?", РежимДиалогаВопрос. ДаНет) =КодВозвратаДиалога. Да Тогда
ПротоколОшибок. Показать ("Протокол ошибок переноса
данных");
КонецЕсли;
КонецПроцедуры
Процедура ФайлКонтрагентовНачалоВыбора (Элемент,
СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Если ВыборФайла. Выбрать () Тогда
Элемент. Значение = ВыборФайла. ПолноеИмяФайла;
КонецЕсли;
КонецПроцедуры
Процедура КоманднаяПанель2Вывод (Кнопка)
ПротоколОшибок. Показать ("Протокол ошибок переноса
данных");
КонецПроцедуры
Процедура ФайлОстатковНачалоВыбора (Элемент,
СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Если ВыборФайлаExcel. Выбрать () Тогда
Элемент. Значение = ВыборФайлаExcel. ПолноеИмяФайла;
КонецЕсли;
КонецПроцедуры
Процедура ПриОткрытии ()
МанипуляцииСВидомДоговора ();
КонецПроцедуры
Процедура СчетДляДебетаПриИзменении (Элемент)
Если СчетДляКредита. Родитель <> СчетДляДебета.
Родитель Тогда
СчетДляКредита = СчетДляДебета;
КонецЕсли;
МанипуляцииСВидомДоговора ();
КонецПроцедуры
Процедура СчетДляКредитаПриИзменении (Элемент)
Если СчетДляКредита. Родитель <> СчетДляДебета.
Родитель Тогда
СчетДляДебета = СчетДляКредита;
КонецЕсли;
МанипуляцииСВидомДоговора ();
КонецПроцедуры
ВыборФайла = Новый ДиалогВыбораФайла
(РежимДиалогаВыбораФайла. Открытие);
ВыборФайла. Фильтр = "Таблица dbf (*. dbf) |*.
dbf";
ВыборФайлаExcel = Новый ДиалогВыбораФайла
(РежимДиалогаВыбораФайла. Открытие);
ВыборФайлаExcel. Фильтр = "Таблица Excel (*. xls) |*.
xls";
ТаблДБФ = Новый xBase ();
ПротоколОшибок = Новый ТекстовыйДокумент;
ТаблицаКонтрагентов = Новый ТаблицаЗначений;
ТаблицаКонтрагентов. Колонки. Добавить ("КодБЭСТ");
ТаблицаКонтрагентов. Колонки. Добавить
("ВнутрКод");
ТаблицаКонтрагентов. Колонки. Добавить ("Имя");
ТаблицаОстатков = Новый ТаблицаЗначений;
ТаблицаОстатков. Колонки. Добавить ("Контрагент");
ТаблицаОстатков. Колонки. Добавить ("СальдоДебет");
ТаблицаОстатков. Колонки. Добавить ("СальдоКредит");
Приложение И
Листинг обработки "Загрузка
номенклатуры"
Перем ТаблДБФ;
Перем ВыбранныйФайл;
Перем ВыбранныйФайлГрупп;
Перем ФайлСохранения;
Перем мПерезаписывать;
Перем ТаблицаЕдиниц;
Перем ПрефиксКода;
Перем Протокол;
Функция ЕстьВсеПоля (Поля)
Рез = Истина;
Если Поля. Найти ("NNUM") =Неопределено Тогда
Сообщить ("Отсутствует поле NNUM", СтатусСообщения.
Важное);
Рез = Ложь;
КонецЕсли;
Если Поля. Найти ("GRUP") =Неопределено Тогда
Сообщить ("Отсутствует поле GRUP", СтатусСообщения.
Важное);
Рез = Ложь;
КонецЕсли;
Если Поля. Найти ("NAME") =Неопределено Тогда
Сообщить ("Отсутствует поле NAME", СтатусСообщения.
Важное);
Рез = Ложь;
КонецЕсли;
Если Поля. Найти ("ED") =Неопределено Тогда
Сообщить ("Отсутствует поле ED", СтатусСообщения.
Важное);
Рез = Ложь;
КонецЕсли;
Возврат Рез;
КонецФункции // ЕстьВсеПоля ()
Функция НайтиГруппу (ИмяГруппы)
Запрос = Новый Запрос;
Запрос. Текст = "ВЫБРАТЬ
|Номенклатура. Ссылка
|ИЗ
|Справочник. Номенклатура КАК Номенклатура
|ГДЕ
|Номенклатура. ЭтоГруппа = ИСТИНА
|И Номенклатура. ПометкаУдаления = ЛОЖЬ
|И Номенклатура. Наименование = &ИмяГруппы
|И Номенклатура. Родитель = &Родитель";
Запрос. УстановитьПараметр ("ИмяГруппы",
ИмяГруппы);
Запрос. УстановитьПараметр ("Родитель",
ГруппаДляЗагрузки);
Выборка = Запрос. Выполнить (). Выбрать ();
Если Выборка. Следующий () Тогда
Возврат Выборка. Ссылка;
Иначе
Возврат Справочники. Номенклатура. ПустаяСсылка ();
КонецЕсли;
КонецФункции // НайтиГруппу ()
Функция ЗагрузитьГруппы ()
ТабГрупп = Новый ТаблицаЗначений;
ТабГрупп. Колонки. Добавить ("Код");
ТабГрупп. Колонки. Добавить ("Наименование");
ТабГрупп. Колонки. Добавить ("Группа1С");
Если ПустаяСтрока (ФайлГрупп) Тогда
Возврат ТабГрупп;
КонецЕсли;
Если ТаблДБФ. Открыта () Тогда
ТаблДБФ. ЗакрытьФайл ();
КонецЕсли;
Попытка
ТаблДБФ. ОткрытьФайл (ФайлГрупп,, Истина);
Исключение
Сообщить ("Не получилось открыть
"+ФайлГрупп+": "+ ОписаниеОшибки ());
Возврат ТабГрупп;
КонецПопытки;
Если не ТаблДБФ. Открыта () Тогда
Сообщить ("Не получилось открыть
"+ФайлГрупп+": "+ ОписаниеОшибки ());
Возврат ТабГрупп;
КонецЕсли;
Если не ТаблДБФ. Первая () Тогда
Сообщить ("Таблица групп пуста!");
Возврат ТабГрупп;
КонецЕсли;
Пока Истина Цикл
Имя = СокрЛП (ТаблДБФ. NAME);
СтрТаб = ТабГрупп. Добавить ();
СтрТаб. Код = СокрЛП (ТаблДБФ. CODE);
СтрТаб. Наименование = Имя;
Группа1С = НайтиГруппу (Имя);
Если не Группа1С. Пустая () Тогда
СтрТаб. Группа1С = Группа1С;
Иначе // попытаемся создать группу
НовГруппа = Справочники. Номенклатура. СоздатьГруппу ();
НовГруппа. Родитель = ГруппаДляЗагрузки;
НовГруппа. Наименование = Имя;
Попытка
НовГруппа. Записать ();
СтрТаб. Группа1С = НовГруппа. Ссылка;
Исключение
Сообщить ("Не получилось создать группу
"+Имя+": "+ ОписаниеОшибки ());
КонецПопытки;
КонецЕсли;
Если не ТаблДБФ. Следующая () Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Возврат ТабГрупп;
КонецФункции // ЗагрузитьГруппы ()
Функция ВсеРеквизитыЗаполнены ()
Результат = Истина;
Если ПустаяСтрока (ВыбФайл) Тогда
Сообщить ("Не выбран файл загружаемой
номенклатуры");
Результат = Ложь;
КонецЕсли;
Если ГруппаДляЗагрузки. Пустая () Тогда
Сообщить ("Не выбрана группа номенклатуры для
загрузки");
Результат = Ложь;
КонецЕсли;
Если ПустаяСтрока (ФайлГрупп) Тогда
Ответ = Вопрос ("Не выбран файл групп номенклатуры.
Загрузить все позиции в группу " + ГруппаДляЗагрузки + "?",
РежимДиалогаВопрос. ДаНет);
Если Ответ = КодВозвратаДиалога. Нет Тогда
Результат = Ложь;
Иначе
мЗагрузкаПоГруппам = Ложь;
КонецЕсли;
КонецЕсли;
Если СтавкаНДС. Пустая () Тогда
Сообщить ("Не выбрана Ставка НДС по умолчанию");
Результат = Ложь;
КонецЕсли;
Если ЕдиницаПоУмолчанию. Пустая () Тогда
Сообщить ("Не выбрана единица измерения по
умолчанию");
Результат = Ложь;
КонецЕсли;
Если ЗагружаемТовары=1 Тогда
ПрефиксКода = "Т";
ИначеЕсли ЗагружаемТовары=2 Тогда
ПрефиксКода = "М";
ИначеЕсли ЗагружаемТовары=3 Тогда
ПрефиксКода = "У";
Иначе
Сообщить ("Не установлен вид загружаемых данных");
Результат = Ложь;
КонецЕсли;
Если Перезаписывать=1 Тогда
мПерезаписывать = Истина;
ИначеЕсли Перезаписывать=2 Тогда
мПерезаписывать = Ложь;
Иначе
Сообщить ("Не выбрано действие при нахождении
элемента");
Результат = Ложь;
КонецЕсли;
Возврат Результат;
КонецФункции // ВсеРеквизитыЗаполнены ()
Процедура КнопкаВыполнитьНажатие (Кнопка)
Протокол = Новый ТекстовыйДокумент;
мЗагрузкаПоГруппам = Истина;
Если не ВсеРеквизитыЗаполнены () Тогда
Предупреждение ("Заполните все нужные реквизиты
формы!", 20);
Возврат;
КонецЕсли;
Если мЗагрузкаПоГруппам Тогда
ТаблицаГрупп = ЗагрузитьГруппы ();
Если ТаблицаГрупп. Количество () =0 Тогда
Ответ = Вопрос ("Не удалось загрузить таблицу групп.
Загрузить все данные в группу " + ГруппаДляЗагрузки +"?",
РежимДиалогаВопрос. ДаНет);
Если Ответ=КодВозвратаДиалога. Нет Тогда
Возврат;
Иначе
мЗагрузкаПоГруппам = Ложь;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если ТаблДБФ. Открыта () Тогда
КонецЕсли;
Попытка
ТаблДБФ. ОткрытьФайл (ВыбФайл,, Истина);
Исключение
Сообщить ("Не получилось открыть "+ВыбФайл+":
"+ ОписаниеОшибки ());
Возврат;
КонецПопытки;
ПоляБазы = ТаблДБФ. Поля;
Если не ЕстьВсеПоля (ПоляБазы) Тогда
Сообщить ("Структура выбранного файла неверна!",
СтатусСообщения. ОченьВажное);
Возврат;
КонецЕсли;
ВсегоЗаписей = ТаблДБФ. КоличествоЗаписей ();
// обработка таблицы
Если не ТаблДБФ. Первая () Тогда
Сообщить ("Выбранная таблица пуста!");
Возврат;
КонецЕсли;
Счетчик = 1;
Пока Истина Цикл
Имя = СокрЛП (ТаблДБФ. NAME);
ЕдБЭСТ = ВРег (СокрЛП (ТаблДБФ. ED));
Если ПустаяСтрока (ЕдБЭСТ) Тогда
Протокол. ДобавитьСтроку ("Не выбрана единица измерения
для " + Имя +". используем " + ЕдиницаПоУмолчанию);
Ед1С = ЕдиницаПоУмолчанию;
Иначе
СтрЕд1С = СоответствиеЕдиниц. Найти (ЕдБЭСТ,
"ЕдиницаБЭСТ");
Если СтрЕд1С = Неопределено Тогда
Протокол. ДобавитьСтроку ("Не найдено соответствие
единицы измерения " + ЕдБЭСТ + " для " + Имя +". используем
" + ЕдиницаПоУмолчанию);
Ед1С = ЕдиницаПоУмолчанию;
Иначе
Ед1С = СтрЕд1С. Единица1С;
КонецЕсли;
КонецЕсли;
КодБЭСТ = ПрефиксКода +"." + СокрЛП (ТаблДБФ. GRUP)
+"." + СокрЛП (ТаблДБФ. NNUM);
НоваяСтрока = ТаблицаПросмотра. Добавить ();
НоваяСтрока. Наименование = Имя;
// НоваяСтрока. Код1С = Имя;
НоваяСтрока. КодБЭСТ = КодБЭСТ;
НоваяСтрока. Единица = Ед1С;
СтрГруппы = ТаблицаГрупп. Найти (ТаблДБФ. GRUP,
"Код");
Если СтрГруппы = Неопределено Тогда
Если мЗагрузкаПоГруппам Тогда
Протокол. ДобавитьСтроку ("Не найдена группа " +
ТаблДБФ. GRUP + " для " + Имя);
КонецЕсли;
НоваяСтрока. Группа = ГруппаДляЗагрузки. Наименование;
Группа1С = Справочники. Номенклатура. ПустаяСсылка ();
// Группа1С = ГруппаДляЗагрузки;
Иначе
НоваяСтрока. Группа = СтрГруппы. Наименование;
Группа1С = СтрГруппы. Группа1С;
КонецЕсли;
// поищем элемент по коду БЭСТ
Элемент = Справочники. Номенклатура. НайтиПоРеквизиту
("КодБЭСТ", КодБЭСТ);
Если Элемент. Пустая () Тогда // не нашли
Объект = Справочники. Номенклатура. СоздатьЭлемент ();
Если Группа1С. Пустая () Тогда
Если мЗагрузкаПоГруппам Тогда // такое пропускаем -
ошибочная ситуация
Если ТаблДБФ. Следующая () Тогда
Продолжить;
Иначе
Прервать;
КонецЕсли;
Иначе // загрузка без иерархии (не мЗагрузкаПоГруппам)
Объект. Родитель = ГруппаДляЗагрузки;
КонецЕсли;
Иначе
Объект. Родитель = Группа1С;
КонецЕсли;
Иначе // Нашли, перезапишем существующий
Объект = Элемент. ПолучитьОбъект ();
КонецЕсли;
Объект. Наименование = Имя;
Объект. НаименованиеПолное = Имя;
Объект. БазоваяЕдиницаИзмерения = Ед1С;
Объект. КодБЭСТ = КодБЭСТ;
Объект. СтавкаНДС = СтавкаНДС;
Если ЗагружаемТовары=3 Тогда
Объект. Услуга = Истина;
КонецЕсли;
Попытка
Объект. Записать ();
НоваяСтрока. Код1С = Объект. Код;
Исключение
Протокол. ДобавитьСтроку ("Не получилось создать элемент
"+Имя+": "+ ОписаниеОшибки ());
КонецПопытки;
Если не ТаблДБФ. Следующая () Тогда
Прервать;
КонецЕсли;
Счетчик = Счетчик+1;
Если Цел (Счетчик/10) =Счетчик/10 Тогда
Состояние ("Обработано " + Счетчик + " зап. из
" + ВсегоЗаписей);
КонецЕсли;
ОбработкаПрерыванияПользователя ();
КонецЦикла;
Если Вопрос ("Загрузка завершена. Показать протокол
ошибок,", РежимДиалогаВопрос. ДаНет) = КодВозвратаДиалога. Да Тогда
Протокол. Показать ("Протокол ошибок переноса
данных");
КонецЕсли;
КонецПроцедуры
Процедура ВыбФайлНачалоВыбора (Элемент,
СтандартнаяОбработка)
Если ВыбранныйФайл. Выбрать () Тогда
Элемент. Значение = ВыбранныйФайл. ПолноеИмяФайла;
КонецЕсли;
КонецПроцедуры
Процедура ФайлГруппНачалоВыбора (Элемент,
СтандартнаяОбработка)
Если ВыбранныйФайлГрупп. Выбрать () Тогда
Элемент. Значение = ВыбранныйФайлГрупп. ПолноеИмяФайла;
КонецЕсли;
КонецПроцедуры
Процедура ФайлСохраненияНачалоВыбора (Элемент,
СтандартнаяОбработка)
Если ФайлСохранения. Выбрать () Тогда
Элемент. Значение = ФайлСохранения. ПолноеИмяФайла;
КонецЕсли;
КонецПроцедуры
Процедура КоманднаяПанель3Действие1 (Кнопка)
ЗначениеВФайл (ИмяФайлаСохранения, СоответствиеЕдиниц);
КонецПроцедуры
Процедура КоманднаяПанель3Действие (Кнопка)
СоответствиеЕдиниц = ЗначениеИзФайла (ИмяФайлаСохранения);
КонецПроцедуры
Процедура КоманднаяПанель2ЗагрузитьЕдиницы
(Кнопка)
Если СоответствиеЕдиниц. Количество () >0 Тогда
Ответ = Вопрос ("Таблица соответствия не пуста.
Очистить?", РежимДиалогаВопрос. ДаНет);
Если Ответ=КодВозвратаДиалога. Нет Тогда
Возврат;
Иначе
СоответствиеЕдиниц. Очистить ();
КонецЕсли;
КонецЕсли;
Если ТаблДБФ. Открыта () Тогда
ТаблДБФ. ЗакрытьФайл ();
КонецЕсли;
Попытка
ТаблДБФ. ОткрытьФайл (ВыбФайл,, Истина);
Исключение
Сообщить ("Не получилось открыть "+ВыбФайл+":
"+ ОписаниеОшибки ());
Возврат;
КонецПопытки;
ВсегоЗаписей = ТаблДБФ. КоличествоЗаписей ();
ПоляБазы = ТаблДБФ. Поля;
// обработка таблицы
Если не ТаблДБФ. Первая () Тогда
Сообщить ("Выбранная таблица пуста!");
КонецЕсли;
Счетчик = 1;
Пока Истина Цикл
ЕдБЭСТ = ВРег (СокрЛП (ТаблДБФ. ED));
Если ПустаяСтрока (ЕдБЭСТ) Тогда
Сообщить ("Не задана единица измерения для " +
СокрЛП (ТаблДБФ. NAME), СтатусСообщения. Внимание);
Ед1С = ЕдиницаПоУмолчанию;
Если ТаблДБФ. Следующая () Тогда
Продолжить;
Иначе
Прервать;
КонецЕсли;
КонецЕсли;
СтрокаЕд = СоответствиеЕдиниц. Найти (ЕдБЭСТ,
"ЕдиницаБЭСТ");
Если СтрокаЕд = Неопределено Тогда // такой ед. еще нет!
СтрТаб = СоответствиеЕдиниц. Добавить ();
СтрТаб. ЕдиницаБЭСТ = ЕдБЭСТ;
ЕдИзСправочника = Справочники. КлассификаторЕдиницИзмерения.
НайтиПоНаименованию (ЕдБЭСТ);
Если не ЕдИзСправочника. Пустая () Тогда
СтрТаб. Единица1С = ЕдИзСправочника;
КонецЕсли;
Иначе // уже есть - ничего не делаем!
КонецЕсли;
Если не ТаблДБФ. Следующая () Тогда
Прервать;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура ОсновныеДействияФормыПоказатьПротокол
(Кнопка)
Протокол. Показать ("Протокол ошибок переноса
данных");
КонецПроцедуры
ТаблДБФ = Новый xBase ();
ВыбранныйФайл = Новый ДиалогВыбораФайла
(РежимДиалогаВыбораФайла. Открытие);
ВыбранныйФайл. Фильтр = "Таблица dbf (*. dbf) |*.
dbf";
ВыбранныйФайлГрупп = Новый ДиалогВыбораФайла
(РежимДиалогаВыбораФайла. Открытие);
ВыбранныйФайлГрупп. Фильтр = "Таблица dbf (*. dbf) |*.
dbf";
ФайлСохранения = Новый ДиалогВыбораФайла
(РежимДиалогаВыбораФайла. Сохранение);
ФайлСохранения. Фильтр = "Внутренняя таблица (*. tbl)
|*. tbl";
ТаблицаЕдиниц = Новый ТаблицаЗначений;
ТаблицаЕдиниц. Колонки. Добавить ("ЕдиницаБЭСТ");
ТаблицаЕдиниц. Колонки. Добавить ("Единица1С");
Приложение К
Листинг обработки
"ЗагрузкаОстатковНоменклатурыБЭСТ"
Перем ТаблДБФ;
Перем ВыбранныйФайл;
Перем ВыбранныйФайлГрупп;
Перем ВыбранныйФайлНоменклатуры;
Перем ФайлСохранения;
Перем мПерезаписывать;
Перем ТаблицаСчетов;
Перем ПрефиксКода;
Перем ВестиПартионныйУчетБУ, ВестиСкладскойУчетБУ,
ВестиСуммовойУчетПоСкладамБУ;
Перем ВестиПартионныйУчетНУ, ВестиСкладскойУчетНУ,
ВестиСуммовойУчетПоСкладамНУ;
Функция ЗагрузитьСклады ()
ТабСкладов = Новый ТаблицаЗначений;
ТабСкладов. Колонки. Добавить ("Код");
ТабСкладов. Колонки. Добавить ("Наименование");
ТабСкладов. Колонки. Добавить ("Склад1С");
Если ТаблДБФ. Открыта () Тогда
ТаблДБФ. ЗакрытьФайл ();
КонецЕсли;
Попытка
ТаблДБФ. ОткрытьФайл (ФайлГрупп,, Истина);
Исключение
Сообщить ("Не получилось открыть
"+ФайлГрупп+": "+ ОписаниеОшибки ());
Возврат ТабСкладов;
КонецПопытки;
Если не ТаблДБФ. Первая () Тогда
Сообщить ("Таблица складов пуста!");
Возврат ТабСкладов;
КонецЕсли;
Пока Истина Цикл
Имя = СокрЛП (ТаблДБФ. SHORTNAME);
Код = Врег (СокрЛП (ТаблДБФ. CODE));
СтрТаб = ТабСкладов. Добавить ();
СтрТаб. Код = Код;
СтрТаб. Наименование = Имя;
Склад1С = Справочники. Склады. НайтиПоКоду (Код);
Если не Склад1С. Пустая () Тогда
СтрТаб. Склад1С = Склад1С;
Иначе // попытаемся создать склад
НовСклад = Справочники. Склады. СоздатьЭлемент ();
НовСклад. Наименование = Имя;
НовСклад. Код = Код;
НовСклад. ВидСклада = Перечисления. ВидыСкладов. Оптовый;
Попытка
НовСклад. Записать ();
СтрТаб. Склад1С = НовСклад. Ссылка;
Исключение
Сообщить ("Не получилось создать склад
"+Имя+": "+ ОписаниеОшибки ());
КонецПопытки;
КонецЕсли;
Если не ТаблДБФ. Следующая () Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Возврат ТабСкладов;
КонецФункции
Функция ПолучитьСчет1С (Знач СчетБЭСТ)
ОригСчетБЭСТ = СчетБЭСТ;
КодСчета = Лев (СчетБЭСТ,2);
СчетБЭСТ = Сред (СчетБЭСТ,3);
Длина = СтрДлина (СчетБЭСТ);
Если Длина>0 Тогда
КолСимв = Мин (Длина,2);
КодСчета = КодСчета +"." + Формат (Число (Лев
(СчетБЭСТ, Длина)),"ЧЦ=2; ЧВН=");
СчетБЭСТ = Сред (СчетБЭСТ, Длина+1);
Длина = СтрДлина (СчетБЭСТ);
Если Длина>0 Тогда
КолСимв = Мин (Длина,2);
КодСчета = КодСчета +"." + Формат (Число (Лев
(СчетБЭСТ, Длина)),"ЧЦ=2; ЧВН=");
СчетБЭСТ = Сред (СчетБЭСТ, Длина+1);
Длина = СтрДлина (СчетБЭСТ);
КонецЕсли; // ну больше уж вряд ли будет
КонецЕсли;
НашлиСчет = ПланыСчетов. Хозрасчетный. НайтиПоКоду
(КодСчета);
Возврат НашлиСчет;
КонецФункции // ПолучитьСчет1С ()
Функция ВсеРеквизитыЗаполнены ()
Результат = Истина;
Если ПустаяСтрока (ВыбФайл) Тогда
Сообщить ("Не выбран файл загружаемой
номенклатуры");
Результат = Ложь;
КонецЕсли;
Если ПустаяСтрока (ФайлГрупп) Тогда
Сообщить ("Не выбран файл складов");
Результат = Ложь;
КонецЕсли;
Если ПустаяСтрока (ФайлНоменклатуры) Тогда
Сообщить ("Не выбран файл номенклатуры");
Результат = Ложь;
КонецЕсли;
Если СчетПоУмолчанию. Пустая () Тогда
Сообщить ("Не выбран счет по умолчанию");
Результат = Ложь;
КонецЕсли;
Если ЗагружаемТовары=1 Тогда
ПрефиксКода = "Т";
ИначеЕсли ЗагружаемТовары=2 Тогда
ПрефиксКода = "М";
Иначе
Сообщить ("Не установлен вид загружаемых данных");
Результат = Ложь;
КонецЕсли;
Если Организация. Пустая () Тогда
Сообщить ("Не выбрана организация");
Результат = Ложь;
КонецЕсли;
Если ВестиПартионныйУчетБУ и Партия. Пустая () Тогда
Сообщить ("Не выбран документ для создания служебной
партии");
Результат = Ложь;
КонецЕсли;
Возврат Результат;
КонецФункции // ВсеРеквизитыЗаполнены ()
Функция ЗагрузитьНоменклатуру ()
Таб = Новый ТаблицаЗначений;
Таб. Колонки. Добавить ("КодНоменклатуры");
Таб. Колонки. Добавить ("КодГруппы");
Таб. Колонки. Добавить ("ЦенаБух");
Таб. Колонки. Добавить ("ЦенаНал");
Если ТаблДБФ. Открыта () Тогда
ТаблДБФ. ЗакрытьФайл ();
КонецЕсли;
Попытка
ТаблДБФ. ОткрытьФайл (ФайлНоменклатуры,, Истина);
Исключение
Сообщить ("Не получилось открыть
"+ФайлНоменклатуры+": "+ ОписаниеОшибки ());
Возврат Таб;
КонецПопытки;
Если не ТаблДБФ. Первая () Тогда
Сообщить ("Таблица номенклатуры пуста!");
Возврат Таб;
КонецЕсли;
Пока Истина Цикл
Код = Врег (СокрЛП (ТаблДБФ. NNUM));
Группа = Врег (СокрЛП (ТаблДБФ. GRUP));
СтрТаб = Таб. Добавить ();
СтрТаб. КодГруппы = Группа;
СтрТаб. КодНоменклатуры = Код;
СтрТаб. ЦенаБух = ТаблДБФ. CENA;
СтрТаб. ЦенаНал = ТаблДБФ. CENAN;
Если не ТаблДБФ. Следующая () Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Возврат Таб;
КонецФункции // ЗагрузитьНоменклатуру ()
Функция НайтиСчетНУПоБУ (СчетБУ)
Результат = ПланыСчетов. Налоговый. ПустаяСсылка ();
Запрос = Новый Запрос;
Запрос. Текст = "ВЫБРАТЬ
|СоответствиеСчетовБУиНУ. СчетНУ КАК СчетНУ
|ИЗ
|РегистрСведений. СоответствиеСчетовБУиНУ КАК
СоответствиеСчетовБУиНУ
|ГДЕ
|СоответствиеСчетовБУиНУ. СчетБУ = &СчетБУ";
Запрос. УстановитьПараметр ("СчетБУ", СчетБУ);
Результат = Запрос. Выполнить ();
Выборка = Результат. Выбрать ();
Если Выборка. Следующий () Тогда
Результат = Выборка. СчетНУ;
КонецЕсли;
Возврат Результат;
КонецФункции // НайтиСчетНУПоБУ ()
Процедура УдалитьСтарыеОперации ()
ТекстКомментария = "<Фирма ЛИСТ> Ввод начальных
остатков ТМЦ" +? (ЗагружаемТовары=1, " (товары)", "
(материалы)");
Запрос. Текст = "ВЫБРАТЬ
|ОперацияБух. Ссылка
|ИЗ
|Документ. ОперацияБух КАК ОперацияБух
|ГДЕ
|ОперацияБух. Содержание ПОДОБНО &ТекстПереносТМЦ";
Запрос. УстановитьПараметр ("ТекстПереносТМЦ",
"<Фирма ЛИСТ> " + ТекстКомментария);
Результат = Запрос. Выполнить ();
Выборка = Результат. Выбрать ();
Пока Выборка. Следующий () Цикл
ДокОбъект = Выборка. Ссылка. ПолучитьОбъект ();
Сообщить ("Удаляем " + ДокОбъект);
ДокОбъект. Удалить ();
КонецЦикла;
КонецПроцедуры
Процедура СформироватьОперацию (Остатки)
ТабСоотвСчетов = Новый ТаблицаЗначений;
ТабСоотвСчетов. Колонки. Добавить ("СчетБУ");
ТабСоотвСчетов. Колонки. Добавить ("СчетНУ");
Если не (ВестиСкладскойУчетБУ или ВестиСкладскойУчетНУ) Тогда
Остатки. Свернуть ("Номенклатура, СчетУчета",
"Количество, СуммаБух, СуммаНал"); // уберем склад
КонецЕсли;
ТекстКомментария = "Ввод начальных остатков ТМЦ" +?
(ЗагружаемТовары=1, " (товары)", " (материалы)");
ВводОстатков = Документы. ОперацияБух. СоздатьДокумент ();
ОбщегоНазначения. ЗаполнитьШапкуДокумента (ВводОстатков,
глЗначениеПеременной ("глТекущийПользователь"),,
"Продажа");
ВводОстатков. Дата = ДатаОперации;
ВводОстатков. Комментарий = ТекстКомментария;
ВводОстатков. Организация = Организация;
ВводОстатков. Ответственный = глЗначениеПеременной
("глТекущийПользователь");
ВводОстатков. Содержание = "<Фирма ЛИСТ> " +
ТекстКомментария;
ВводОстатков. СуммаОперации = Остатки. Итог
("СуммаБух");
Для каждого СтрТЧ Из Остатки Цикл
СчетБУ = СтрТЧ. СчетУчета;
СтрокаСчетаНУ = ТабСоотвСчетов. Найти (СчетБУ,
"СчетБУ");
Если СтрокаСчетаНУ = Неопределено Тогда // счета нет в
таблице - заполним
СчетНУ = НайтиСчетНУПоБУ (СчетБУ);
Строчка = ТабСоотвСчетов. Добавить ();
Строчка. СчетБУ = СчетБУ;
Строчка. СчетНУ = СчетНУ;
Иначе
СчетНУ = СтрокаСчетаНУ. СчетНУ;
КонецЕсли;
ПроводкаБУ = ВводОстатков. Движения. Хозрасчетный. Добавить
();
ПроводкаБУ. Период = ДатаОперации;
ПроводкаБУ. Организация = Организация;
ПроводкаБУ. Содержание = ТекстКомментария;
ПроводкаБУ. СчетКт = ПланыСчетов. Хозрасчетный.
Вспомогательный;
ПроводкаБУ. СчетДт = СчетБУ;
ОбщегоНазначения. УстановитьСубконто (ПроводкаБУ. СчетДт,
ПроводкаБУ. СубконтоДт,"Номенклатура", СтрТЧ. Номенклатура, Истина);
Если ВестиСкладскойУчетБУ Тогда
ОбщегоНазначения. УстановитьСубконто (ПроводкаБУ. СчетДт,
ПроводкаБУ. СубконтоДт,"Склады", СтрТЧ. Склад, Истина);
КонецЕсли;
Если ВестиПартионныйУчетБУ Тогда
ОбщегоНазначения. УстановитьСубконто (ПроводкаБУ. СчетДт,
ПроводкаБУ. СубконтоДт,"Партии", Партия, Истина);
КонецЕсли;
ПроводкаБУ. КоличествоДт = СтрТЧ. Количество;
ПроводкаБУ. Сумма = СтрТЧ. СуммаБух;
ОбщегоНазначения. УстановитьСубконто (ПроводкаБУ. СчетДт,
ПроводкаБУ. СубконтоДт,"Номенклатура", СтрТЧ. Номенклатура, Истина);
ОбщегоНазначения. УстановитьСубконто (ПроводкаБУ. СчетДт,
ПроводкаБУ. СубконтоДт,"Склады", СтрТЧ. Склад, Истина);
КонецЦикла; // по строкам таб. остатков
ВводОстатков. Записать ();
Сообщить ("Сформирован документ: " + ВводОстатков);
КонецПроцедуры
Процедура КнопкаВыполнитьНажатие (Кнопка)
Ошибки = Ложь;
Фильтр = Новый Структура ("КодНоменклатуры,
КодГруппы");
Если не ВсеРеквизитыЗаполнены () Тогда
Предупреждение ("Заполните все нужные реквизиты
формы!", 20);
Возврат;
КонецЕсли;
ТабСкладов = ЗагрузитьСклады ();
ТабНоменклатуры = ЗагрузитьНоменклатуру ();
ТабОстатков = Новый ТаблицаЗначений;
ТабОстатков. Колонки. Добавить ("Номенклатура");
ТабОстатков. Колонки. Добавить ("Склад");
ТабОстатков. Колонки. Добавить ("СчетУчета");
ТабОстатков. Колонки. Добавить ("Количество");
ТабОстатков. Колонки. Добавить ("СуммаБух");
ТабОстатков. Колонки. Добавить ("СуммаНал");
Если ТаблДБФ. Открыта () Тогда
ТаблДБФ. ЗакрытьФайл ();
КонецЕсли;
Попытка
ТаблДБФ. ОткрытьФайл (ВыбФайл,, Истина);
Исключение
Сообщить ("Не получилось открыть "+ВыбФайл+":
"+ ОписаниеОшибки ());
Возврат;
КонецПопытки;
Если не ТаблДБФ. Открыта () Тогда
Сообщить ("Не получилось открыть "+ВыбФайл+":
"+ ОписаниеОшибки ());
Возврат;
КонецЕсли;
Если УдалятьСтарое Тогда
УдалитьСтарыеОперации ();
КонецЕсли;
ВсегоЗаписей = ТаблДБФ. КоличествоЗаписей ();
ПоляБазы = ТаблДБФ. Поля;
// обработка таблицы
Если не ТаблДБФ. Первая () Тогда
Сообщить ("Выбранная таблица пуста!");
КонецЕсли;
Счетчик = 1;
Пока Истина Цикл
Если ПустаяСтрока (ТаблДБФ. NNUM) Тогда
Если ТаблДБФ. Следующая () Тогда
Продолжить;
Иначе
Прервать;
КонецЕсли;
КонецЕсли;
Количество = ТаблДБФ. KOLTEK;
Если Количество = 0 Тогда
Если ТаблДБФ. Следующая () Тогда
ВсегоЗаписей = ВсегоЗаписей-1;
Продолжить;
Иначе
Прервать;
КонецЕсли;
КонецЕсли; // нечего переносить
Имя = СокрЛП (ТаблДБФ. NAME);
КодБЭСТ = ПрефиксКода +"." + ТаблДБФ. GRUP
+"." + ТаблДБФ. NNUM;
Номенклатура1С = Справочники. Номенклатура. НайтиПоРеквизиту
("КодБЭСТ", КодБЭСТ);
Если Номенклатура1С. Пустая () Тогда
Сообщить ("Не найдено соответствие для " + Имя +
" с кодом БЭСТ: " + КодБЭСТ +". Пропускаем",
СтатусСообщения. Внимание);
Ошибки = Истина;
Если ТаблДБФ. Следующая () Тогда
Продолжить;
Иначе
Прервать;
КонецЕсли;
КонецЕсли;
Если Номенклатура1С. Услуга Тогда // остатков по услугам
не бывает
Если ТаблДБФ. Следующая () Тогда
Продолжить;
Иначе
Прервать;
КонецЕсли;
КонецЕсли;
КодСклада = Врег (СокрЛП (ТаблДБФ. SCLAD));
СтрокаСклад = ТабСкладов. Найти (КодСклада, "Код");
Если СтрокаСклад = Неопределено Тогда
Сообщить ("Не найден склад с кодом БЭСТ: " +
КодСклада +". Пропускаем", СтатусСообщения. Внимание);
Ошибки = Истина;
Если ТаблДБФ. Следующая () Тогда
Продолжить;
Иначе
Прервать;
КонецЕсли;
КонецЕсли;
Склад1С = СтрокаСклад. Склад1С;
СчетБЭСТ = СокрЛП (ТаблДБФ. SCHET);
Если ПустаяСтрока (СчетБЭСТ) Тогда
Сообщить ("Счет учета не заполнен, используем счет по
умолчанию.", СтатусСообщения. Внимание);
Счет1С = СчетПоУмолчанию;
Иначе
СтрокаСчета = СоответствиеСчетов. Найти (СчетБЭСТ,
"СчетБЭСТ");
Если СтрокаСчета = Неопределено Тогда
Сообщить ("Счет учета " + СчетБЭСТ + " не
имеет соответственного счета 1С. Запись будет пропущена", СтатусСообщения.
Внимание);
Если ТаблДБФ. Следующая () Тогда
Продолжить;
Иначе
Прервать;
КонецЕсли;
Иначе
Счет1С = СтрокаСчета. Счет1СБух;
КонецЕсли;
КонецЕсли;
Если не Счет1С. ВидыСубконто [0]. ВидСубконто. ТипЗначения.
СодержитТип (Тип ("СправочникСсылка. Номенклатура")) Тогда
Сообщить ("Счет " + Счет1С + " не имеет
аналитики по номенклатуре. Запись будет пропущена", СтатусСообщения.
Внимание);
Ошибки = Истина;
Если ТаблДБФ. Следующая () Тогда
Продолжить;
Иначе
Прервать;
КонецЕсли;
КонецЕсли;
СтрТаб = ТабОстатков. Добавить ();
СтрТаб. Номенклатура = Номенклатура1С;
СтрТаб. Склад = Склад1С;
СтрТаб. СчетУчета = Счет1С;
СтрТаб. Количество = Количество;
Фильтр. КодНоменклатуры = СокрЛП (ТаблДБФ. NNUM);
Фильтр. КодГруппы = СокрЛП (ТаблДБФ. GRUP);
МасНомен = ТабНоменклатуры. НайтиСтроки (Фильтр);
Если МасНомен. Количество () >0 Тогда
СтрТабНом = МасНомен [0];
СтрТаб. СуммаБух = СтрТабНом. ЦенаБух * Количество;
СтрТаб. СуммаНал = СтрТабНом. ЦенаНал * Количество;
Иначе
Сообщить ("Не найдена строка номенклатуры
"+Имя+" ("+ТаблДБФ. NNUM+". "+ТаблДБФ. GRUP+").
Сумма не будет перенесена");
СтрТаб. СуммаБух = 0;
СтрТаб. СуммаНал = 0;
КонецЕсли;
Если не ТаблДБФ. Следующая () Тогда
Прервать;
КонецЕсли;
Если ЗаписейНаОперацию>0 Тогда
Если ТабОстатков. Количество () = ЗаписейНаОперацию Тогда
СформироватьОперацию (ТабОстатков);
ТабОстатков. Очистить ();
КонецЕсли;
КонецЕсли;
Счетчик = Счетчик+1;
Если Цел (Счетчик/100) =Счетчик/100 Тогда
Состояние ("Обработано " + Счетчик + " зап. из
" + ВсегоЗаписей);
КонецЕсли;
ОбработкаПрерыванияПользователя ();
КонецЦикла;
ЭлементыФормы. ТаблицаПросмотра. Колонки. Очистить ();
ТаблицаПросмотра = ТабОстатков. Скопировать ();
ЭлементыФормы. ТаблицаПросмотра. СоздатьКолонки ();
Если ТабОстатков. Количество () >0 Тогда
СформироватьОперацию (ТабОстатков);
КонецЕсли;
КонецПроцедуры
Процедура ВыбФайлНачалоВыбора (Элемент,
СтандартнаяОбработка)
Если ВыбранныйФайл. Выбрать () Тогда
Элемент. Значение = ВыбранныйФайл. ПолноеИмяФайла;
КонецЕсли;
КонецПроцедуры
Процедура ФайлГруппНачалоВыбора (Элемент,
СтандартнаяОбработка)
Если ВыбранныйФайлГрупп. Выбрать () Тогда
Элемент. Значение = ВыбранныйФайлГрупп. ПолноеИмяФайла;
КонецЕсли;
КонецПроцедуры
Процедура ФайлНоменклатурыНачалоВыбора (Элемент,
СтандартнаяОбработка)
Если ВыбранныйФайлНоменклатуры. Выбрать () Тогда
Элемент. Значение = ВыбранныйФайлНоменклатуры. ПолноеИмяФайла;
КонецЕсли;
КонецПроцедуры
Процедура ПриОткрытии ()
Если не ЗначениеЗаполнено (ДатаОперации) Тогда
ДатаОперации = НачалоГода (ТекущаяДата ()) - 1;
КонецЕсли;
// определим параметры учетной политики
БУ = ПланыСчетов. Хозрасчетный. Товары. ПолучитьОбъект ();
НУ = ПланыСчетов. Налоговый. Товары. ПолучитьОбъект ();
ВестиПартионныйУчетБУ = НЕ (БУ. ВидыСубконто. Найти
(ПланыВидовХарактеристик. ВидыСубконтоХозрасчетные. Партии,
"ВидСубконто") = Неопределено);
ВестиСкладскойУчетБУ = НЕ (БУ. ВидыСубконто. Найти
(ПланыВидовХарактеристик. ВидыСубконтоХозрасчетные. Склады,
"ВидСубконто") = Неопределено);
Если ВестиСкладскойУчетБУ Тогда
ВестиСуммовойУчетПоСкладамБУ = БУ. ВидыСубконто. Найти
(ПланыВидовХарактеристик. ВидыСубконтоХозрасчетные. Склады,
"ВидСубконто"). Суммовой;
Иначе
ВестиСуммовойУчетПоСкладамБУ = Ложь;
КонецЕсли;
ВестиСкладскойУчетНУ = НЕ (НУ. ВидыСубконто. Найти
(ПланыВидовХарактеристик. ВидыСубконтоХозрасчетные. Склады,
"ВидСубконто") = Неопределено);
Если ВестиСкладскойУчетНУ Тогда
ВестиСуммовойУчетПоСкладамНУ = НУ. ВидыСубконто. Найти
(ПланыВидовХарактеристик. ВидыСубконтоХозрасчетные. Склады,
"ВидСубконто"). Суммовой;
Иначе
ВестиСуммовойУчетПоСкладамНУ = Ложь;
КонецЕсли;
ЭлементыФормы. Партия. Доступность = ВестиПартионныйУчетБУ;
КонецПроцедуры
Процедура ФайлСохраненияНачалоВыбора (Элемент,
СтандартнаяОбработка)
Если ФайлСохранения. Выбрать () Тогда
Элемент. Значение = ФайлСохранения. ПолноеИмяФайла;
КонецЕсли;
КонецПроцедуры
Процедура КоманднаяПанель3Действие1 (Кнопка)
ЗначениеВФайл (ИмяФайлаСохранения, СоответствиеСчетов);
КонецПроцедуры
Процедура КоманднаяПанель3Действие (Кнопка)
СоответствиеСчетов = ЗначениеИзФайла (ИмяФайлаСохранения);
КонецПроцедуры
Процедура КоманднаяПанель2ЗагрузитьСчета (Кнопка)
Если СоответствиеСчетов. Количество () >0 Тогда
Ответ = Вопрос ("Таблица соответствия не пуста.
Очистить?", РежимДиалогаВопрос. ДаНет);
Если Ответ=КодВозвратаДиалога. Нет Тогда
Возврат;
Иначе
СоответствиеСчетов. Очистить ();
КонецЕсли;
КонецЕсли;
Если ТаблДБФ. Открыта () Тогда
ТаблДБФ. ЗакрытьФайл ();
КонецЕсли;
Попытка
ТаблДБФ. ОткрытьФайл (ВыбФайл,, Истина);
Исключение
Сообщить ("Не получилось открыть "+ВыбФайл+":
"+ ОписаниеОшибки ());
Возврат;
КонецПопытки;
ВсегоЗаписей = ТаблДБФ. КоличествоЗаписей ();
ПоляБазы = ТаблДБФ. Поля;
// обработка таблицы
Если не ТаблДБФ. Первая () Тогда
Сообщить ("Выбранная таблица пуста!");
КонецЕсли;
Счетчик = 1;
Пока Истина Цикл
СчетБЭСТ = СокрЛП (ТаблДБФ. SCHET);
Если ПустаяСтрока (СчетБЭСТ) Тогда
Если не ТаблДБФ. Следующая () Тогда
Прервать;
КонецЕсли;
Продолжить;
КонецЕсли;
СтрокаСчета = СоответствиеСчетов. Найти (СчетБЭСТ,
"СчетБЭСТ");
Если СтрокаСчета = Неопределено Тогда // такого счета еще
нет!
Счет1СБ = ПолучитьСчет1С (СчетБЭСТ);
Если не Счет1СБ. Пустая () Тогда
Счет1СН = НайтиСчетНУПоБУ (Счет1СБ);
Иначе
Счет1СН = ПланыСчетов. Налоговый. ПустаяСсылка ();
КонецЕсли;
СтрТаб = СоответствиеСчетов. Добавить ();
СтрТаб. СчетБЭСТ = СчетБЭСТ;
СтрТаб. Счет1СБух = Счет1СБ;
СтрТаб. Счет1СНал = Счет1СН;
Иначе // уже есть - ничего не делаем!
КонецЕсли;
Если не ТаблДБФ. Следующая () Тогда
Прервать;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
ТаблДБФ = Новый xBase ();
ВыбранныйФайл = Новый ДиалогВыбораФайла
(РежимДиалогаВыбораФайла. Открытие);
ВыбранныйФайл. Фильтр = "Таблица dbf (*. dbf) |*.
dbf";
ВыбранныйФайлГрупп = Новый ДиалогВыбораФайла
(РежимДиалогаВыбораФайла. Открытие);
ВыбранныйФайлГрупп. Фильтр = "Таблица dbf (*. dbf) |*.
dbf";
ВыбранныйФайлНоменклатуры = Новый ДиалогВыбораФайла
(РежимДиалогаВыбораФайла. Открытие);
ВыбранныйФайлНоменклатуры. Фильтр = "Таблица dbf (*. dbf)
|*. dbf";
ФайлСохранения = Новый ДиалогВыбораФайла
(РежимДиалогаВыбораФайла. Сохранение);
ФайлСохранения. Фильтр = "Внутренняя таблица (*. tbl)
|*. tbl";
ТаблицаСчетов = Новый ТаблицаЗначений;
ТаблицаСчетов. Колонки. Добавить ("СчетБЭСТ");
ТаблицаСчетов. Колонки. Добавить ("Счет1С");