Имя: Пароль:
1C
1С v8
v8: создание документа в зависимости от даты
,
0 amadeus2010
 
25.04.12
15:48
перем СледующаяДата;
   Если СледующаяДата>СтрокаДанных.Fields(0).Value Тогда
       
Док = Документы.КорректировкаЗаписейРегистров.СоздатьДокумент();
ЗаполнениеДокументов.ЗаполнитьШапкуДокумента(Док.ЭтотОбъект, ПараметрыСеанса.ТекущийПользователь);
   Док.Дата=СтрокаДанных.Fields(0).Value;
   Док.Ответственный=УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "ОсновнойОтветственный");
   Док.Комментарий="Документ создан при помощи обработки Корректировка записей регистров";
   //Док.ИспользоватьЗаполнениеДвижений=Истина;
   
   //СтрокаПродажи =Док.Движения.Продажи.Добавить();
   СтрокаПродажи=Док.ТаблицаРегистровНакопления.Добавить();
   СтрокаПродажи.Имя="Продажи";
   СтрокаПродажи.Представление="Продажи";
   Док.Записать();
   
   ДокСсылка=Док.Ссылка;
   НЗПродажи=РегистрыНакопления.Продажи.СоздатьНаборЗаписей();
   НЗПродажи.Отбор.Регистратор.Значение=ДокСсылка;
   ЗПродажи=НЗПродажи.Добавить();
   ЗПродажи.Период= СтрокаДанных.Fields(0).Value;
   ЗПродажи.Регистратор=ДокСсылка;
   ЗПродажи.Организация=Справочники.Организации.НайтиПоКоду("000000001");
   ЗПродажи.Контрагент=ОбщегоНазначения.ПолучитьКонтрагентаПоКодуОракл(Формат(СтрокаДанных.Fields(1).Value,"ЧГ=0"));
   ЗПродажи.Номенклатура=ОбщегоНазначения.ПолучитьНоменклатуруПоКодуОракл(Формат(СтрокаДанных.Fields(3).Value,"ЧГ=0"));
   ЗПродажи.Количество=СтрокаДанных.Fields(4).Value;
   ЗПродажи.Стоимость=СтрокаДанных.Fields(5).Value;
   ЗПродажи.СтоимостьБезСкидок=СтрокаДанных.Fields(5).Value;

   ЗПродажи.Активность=Истина;
   
   НЗПродажи.Записать();
   
Иначе
   Док = Документы.КорректировкаЗаписейРегистров.СоздатьДокумент();
   ЗаполнениеДокументов.ЗаполнитьШапкуДокумента(Док.ЭтотОбъект, ПараметрыСеанса.ТекущийПользователь);
   Док.Дата=СтрокаДанных.Fields(0).Value;
   Док.Ответственный=УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "ОсновнойОтветственный");
   Док.Комментарий="Документ создан при помощи обработки Корректировка записей регистров";
   СтрокаПродажи=Док.ТаблицаРегистровНакопления.Добавить();
   СтрокаПродажи.Имя="Продажи";
   СтрокаПродажи.Представление="Продажи";
   Док.Записать();
   
   ДокСсылка=Док.Ссылка;
   НЗПродажи=РегистрыНакопления.Продажи.СоздатьНаборЗаписей();
   НЗПродажи.Отбор.Регистратор.Значение=ДокСсылка;
   ЗПродажи=НЗПродажи.Добавить();
   ЗПродажи.Период= СтрокаДанных.Fields(0).Value;
   ЗПродажи.Регистратор=ДокСсылка;
   ЗПродажи.Организация=Справочники.Организации.НайтиПоКоду("000000001");
   ЗПродажи.Контрагент=ОбщегоНазначения.ПолучитьКонтрагентаПоКодуОракл(Формат(СтрокаДанных.Fields(1).Value,"ЧГ=0"));
   ЗПродажи.Номенклатура=ОбщегоНазначения.ПолучитьНоменклатуруПоКодуОракл(Формат(СтрокаДанных.Fields(3).Value,"ЧГ=0"));
   ЗПродажи.Количество=СтрокаДанных.Fields(4).Value;
   ЗПродажи.Стоимость=СтрокаДанных.Fields(5).Value;
   ЗПродажи.СтоимостьБезСкидок=СтрокаДанных.Fields(5).Value;

   ЗПродажи.Активность=Истина;
   
   НЗПродажи.Записать();

    КонецЕсли;


теперь хочу сделать так чтобы при смене даты создавался новый документ,т.е новый документ на каждый день.
1 Mort
 
25.04.12
15:51
Не могу не пожелать успехов!
2 amadeus2010
 
25.04.12
15:55
хотелось бы проконсультироваться как лучше сделать проверку на условие.Оставить как у меня или есть более удобные варианты
3 Mort
 
25.04.12
15:57
Я не чемпион по игре в "Найди 10 отличий", но имхо в обеих ветках происходит одно и тоже.
4 amadeus2010
 
25.04.12
16:04
в первой ветке документ создается если последующая дата больше текущей. Поэтому я хотел спросить как лучше создать условие при котором будет создаваться  новый документ если новая дата больше текущей даты
5 Mort
 
25.04.12
16:10
А во второй ветке... тоже создаётся документ. А надо походу дописывать чего-то.
А посему держать переменную под текущий документ надо.

Пысы:
И это, заполнение из условия убери, нафиг два раза писать одно и тоже. И поиск организации, хрен с ним что по строковой константе ищется - но в цикле то зачем.
6 Eugene_life
 
25.04.12
16:14
(5) "но в цикле то зачем." Простите за очевидную тупость вопроса - но где цикл у автора? Вопрос просто для повышения собственного интеллекта..
7 amadeus2010
 
25.04.12
16:15
не совсем понял что и откуда убрать,рязъясните пожалуйста
8 amadeus2010
 
25.04.12
16:17
по логике я должен проверить что если дата изменилась то надо создать новый документ, иначе запись данных в старый если дата прежняя, но вот как это можно сделать
9 Wobland
 
25.04.12
16:18
(7) пля, следи за руками.

док=СоздатьДокумент();
док.ЗаполнитьЧтоНадо();
Если УсловиеПоДате Тогда
док.ЧтоТамЕщё();
Иначе
док.ЧтоТамЕщёИначе();
Конец
10 Wobland
 
25.04.12
16:20
(8) Если Изменилась Тогда док=Создать(); Иначе док=ВзятьСтарый; Конец;
дальше заполняешь как надо
11 Mort
 
25.04.12
16:23
(6) Ну "перем СледующаяДата" и "СтрокаДанных.Fields(0).Value" наталкивают на мысль что автор читает recordset по строкам и создаёт/дописывает по ним документы.
12 Eugene_life
 
25.04.12
16:27
(11) Спасибо. А то я уж испугался своей серости :)
13 amadeus2010
 
25.04.12
16:28
вы правы я создаю документ из акцеса,но при выносе условия Если СледующаяДата>СтрокаДанных.Fields(0).Value Тогда выдает ошибку что нельзя сравнивать строкаДанных.Fields(0).Value
14 Eugene_life
 
25.04.12
16:30
(13) Их нельзя сравнивать (строку и дату). Хотя бы СледующаяДата>Дата(СтрокаДанных.Fields(0).Value). И то не факт, что взлетит
15 amadeus2010
 
25.04.12
16:38
СледующаяДата>Дата(СтрокаДанных.Fields(0).Value) не взлетело:)
16 Eugene_life
 
25.04.12
16:39
(15) Смотри в отладке, что у тебя в СледующаяДата, и что в СтрокаДанных.Fields(0).Value
17 amadeus2010
 
25.04.12
17:15
я как понял надо изменить запрос по выбору данных из таблицы акцесс, а уже потом делать отбор по датам. Вот сама процедура вызова акцесс  и в ней надо сделать изменения
Файл = "D:\Продажи и возвраты за прошлый период.mdb" ;
   СтрокаПодключения = "Driver={Microsoft Access Driver (*.mdb)};Dbq=" + Файл + ";""";
 

   Connection = Новый COMОбъект("ADODB.Connection");
   
   Попытка
      Connection.Open(СтрокаПодключения);
   Исключение
      Сообщить(ОписаниеОшибки());
      Возврат;
   КонецПопытки;
      Command = Новый COMОбъект("ADODB.Command");

   Command.ActiveConnection = Connection;
   Command.CommandText = "SELECT * FROM SALES_RETURNS";
   Command.CommandType = 1;
   RecordSet = Новый COMОбъект("ADODB.RecordSet");
   RecordSet = Command.Execute();
   стр ="";
     Пока НЕ RecordSet.EOF()  Цикл
   //      для н=0 по  Recordset.Fields.Count -1 цикл
   //          
   //       стр = стр + " " + Recordset.Fields(н).Value;
   //     КонецЦикла;
   //  Сообщить(стр);
   //        стр ="";
         ЗаполнитьДокумент(Recordset);
      RecordSet.MoveNext();
     КонецЦикла;
  RecordSet.Close();
   Connection.Close();
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший